@helia/verified-fetch 2.6.3 → 2.6.4
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 +12 -12
- package/dist/src/utils/dir-index-html.d.ts +3 -0
- package/dist/src/utils/dir-index-html.d.ts.map +1 -1
- package/dist/src/utils/dir-index-html.js +40 -17
- package/dist/src/utils/dir-index-html.js.map +1 -1
- package/package.json +1 -1
- package/src/utils/dir-index-html.ts +49 -17
package/dist/index.min.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
(function (root, factory) {(typeof module === 'object' && module.exports) ? module.exports = factory() : root.HeliaVerifiedFetch = factory()}(typeof self !== 'undefined' ? self : this, function () {
|
|
2
|
-
"use strict";var HeliaVerifiedFetch=(()=>{var mk=Object.create;var Td=Object.defineProperty;var gk=Object.getOwnPropertyDescriptor;var yk=Object.getOwnPropertyNames;var wk=Object.getPrototypeOf,xk=Object.prototype.hasOwnProperty;var ze=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ot=(r,e)=>{for(var t in e)Td(r,t,{get:e[t],enumerable:!0})},yy=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of yk(e))!xk.call(r,i)&&i!==t&&Td(r,i,{get:()=>e[i],enumerable:!(n=gk(e,i))||n.enumerable});return r};var ut=(r,e,t)=>(t=r!=null?mk(wk(r)):{},yy(e||!r||!r.__esModule?Td(t,"default",{value:r,enumerable:!0}):t,r)),bk=r=>yy(Td({},"__esModule",{value:!0}),r);var pw=ze((
|
|
3
|
-
`,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return m;function m(S,T,$){var R=this;if(!(R instanceof m))return new m(S,T,$);R.time=+S||0,R.nano=+T||0,R.year=+$||0,g(R)}function g(S){var T,$,R,H=S.year,F=S.time,N=S.nano,L=((N<0||a<=N)&&(N-=($=Math.floor(N/a))*a,F+=$,$=1),H%e);return(F<-o||o<F||L)&&((T=l(F/i))&&(H+=T*e,F-=T*i),(R=y(F)).setUTCFullYear(L+R.getUTCFullYear()),R=(F=+R)+(T=l((H-=L)/e))*i,T&&-o<=R&&R<=o&&(H-=T*e,F=R),$=1),$&&(S.year=H,S.time=F,S.nano=N),S}function y(S){var T=new Date(0);return T.setTime(S),T}function w(H,R){H=+H||0;var $=l((R=(R|0)*s)/n)+l(H/n),R=R%n+H%n,H=l(R/n);return H&&($+=H,R-=H*n),new m(1e3*R,0,$*e)}function x(S,T,$,R,H,F){return function(L,_){var D=g(this);L=L||new Array(8),A(L,_|=0);var P=Math.floor(D.time/1e3),D=D.year*(t*r/e),I=l(D/s)+l(P/s),D=D%s+P%s,P=Math.floor(D/s);return P&&(I+=P,D-=P*s),N(L,_+H,I),N(L,_+F,D),L};function N(L,_,I){L[_+S]=I>>24&255,L[_+T]=I>>16&255,L[_+$]=I>>8&255,L[_+R]=255&I}}function b(S,T,$,R,H,F){return function(L,_){A(L,_|=0);var I=N(L,_+H);return w(N(L,_+F),I)};function N(L,_){return 16777216*L[_+S]+(L[_+T]<<16|L[_+$]<<8|L[_+R])}}function A(S,T){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<T+8)throw new RangeError("Out of range")}function k(S){return(9<S?"":"0")+(0|S)}function E(S,T){return(c+(0|S)).substr(-T)}}()});var mE=ze((o2e,pE)=>{"use strict";pE.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var vE=ze((xE,bE)=>{"use strict";var B1=mE(),{hasOwnProperty:yE}=Object.prototype,{propertyIsEnumerable:jB}=Object,kc=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),QB=xE,gE={concatArrays:!1,ignoreUndefined:!1},M1=r=>{let e=[];for(let t in r)yE.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)jB.call(r,n)&&e.push(n)}return e};function Cc(r){return Array.isArray(r)?ZB(r):B1(r)?JB(r):r}function ZB(r){let e=r.slice(0,0);return M1(r).forEach(t=>{kc(e,t,Cc(r[t]))}),e}function JB(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return M1(r).forEach(t=>{kc(e,t,Cc(r[t]))}),e}var wE=(r,e,t,n)=>(t.forEach(i=>{typeof e[i]>"u"&&n.ignoreUndefined||(i in r&&r[i]!==Object.getPrototypeOf(r)?kc(r,i,S8(r[i],e[i],n)):kc(r,i,Cc(e[i])))}),r),eM=(r,e,t)=>{let n=r.slice(0,0),i=0;return[r,e].forEach(o=>{let s=[];for(let a=0;a<o.length;a++)yE.call(o,a)&&(s.push(String(a)),o===r?kc(n,i++,o[a]):kc(n,i++,Cc(o[a])));n=wE(n,o,M1(o).filter(a=>!s.includes(a)),t)}),n};function S8(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?eM(r,e,t):!B1(e)||!B1(r)?Cc(e):wE(r,e,M1(e),t)}bE.exports=function(...r){let e=S8(Cc(gE),this!==QB&&this||{},gE),t={_:{}};for(let n of r)if(n!==void 0){if(!B1(n))throw new TypeError("`"+n+"` is not an Option Object");t=S8(t,{_:n},e)}return t._}});var AE=ze((a2e,SE)=>{"use strict";function tM(r){return r>=55296&&r<=56319}function rM(r){return r>=56320&&r<=57343}SE.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var i=t.length,o=0,s,a,c=0;c<i;c+=1){if(s=t.charCodeAt(c),a=t[c],tM(s)&&rM(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),o+=e(a),o===n)return t.slice(0,c+1);if(o>n)return t.slice(0,c-a.length+1)}return t}});var IE=ze((c2e,TE)=>{"use strict";function nM(r){return r>=55296&&r<=56319}function iM(r){return r>=56320&&r<=57343}TE.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,i=null,o=null,s=0;s<t;s++)i=e.charCodeAt(s),iM(i)?o!=null&&nM(o)?n+=1:n+=3:i<=127?n+=1:i>=128&&i<=2047?n+=2:i>=2048&&i<=65535&&(n+=3),o=i;return n}});var kE=ze((l2e,_E)=>{"use strict";var oM=AE(),sM=IE();_E.exports=oM.bind(null,sM)});var RE=ze((u2e,PE)=>{"use strict";var aM=kE(),cM=/[\/\?<>\\:\*\|"]/g,lM=/[\x00-\x1f\x80-\x9f]/g,uM=/^\.+$/,dM=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,fM=/[\. ]+$/;function CE(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(cM,e).replace(lM,e).replace(uM,e).replace(dM,e).replace(fM,e);return aM(t,255)}PE.exports=function(r,e){var t=e&&e.replacement||"",n=CE(r,t);return t===""?n:CE(n,"")}});var DE=ze(Rc=>{"use strict";var pM="[object ArrayBuffer]",Vi=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===pM}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),i=r.toUint8Array(t);if(n.length!==i.byteLength)return!1;for(let o=0;o<n.length;o++)if(n[o]!==i[o])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 i=new Uint8Array(n),o=0;for(let s of t){let a=this.toUint8Array(s);i.set(a,o),o+=a.length}return e[e.length-1]instanceof Function?this.toView(i,e[e.length-1]):i.buffer}},A8="string",mM=/^[0-9a-f\s]+$/i,gM=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,yM=/^[a-zA-Z0-9-_]+$/,U1=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=t.charCodeAt(i);return n.buffer}static toString(e){let t=Vi.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return decodeURIComponent(escape(n))}},yn=class{static toString(e,t=!1){let n=Vi.toArrayBuffer(e),i=new DataView(n),o="";for(let s=0;s<n.byteLength;s+=2){let a=i.getUint16(s,t);o+=String.fromCharCode(a)}return o}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),i=new DataView(n);for(let o=0;o<e.length;o++)i.setUint16(o*2,e.charCodeAt(o),t);return n}},H1=class r{static isHex(e){return typeof e===A8&&mM.test(e)}static isBase64(e){return typeof e===A8&&gM.test(e)}static isBase64Url(e){return typeof e===A8&&yM.test(e)}static ToString(e,t="utf8"){let n=Vi.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 yn.toString(n,!0);case"utf16":case"utf16be":return yn.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 yn.fromString(e,!0);case"utf16":case"utf16be":return yn.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Vi.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 U1.fromString(e);case"utf16":case"utf16be":return yn.fromString(e);case"utf16le":case"usc2":return yn.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 U1.toString(e);case"utf16":case"utf16be":return yn.toString(e);case"utf16le":case"usc2":return yn.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 i=0;i<t;i++)n[i]=e.charCodeAt(i);return n.buffer}static ToBinary(e){let t=Vi.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return n}static ToHex(e){let t=Vi.toUint8Array(e),n="",i=t.length;for(let o=0;o<i;o++){let s=t[o];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 i=0;i<t.length;i=i+2){let o=t.slice(i,i+2);n[i/2]=parseInt(o,16)}return n.buffer}static ToUtf16String(e,t=!1){return yn.toString(e,t)}static FromUtf16String(e,t=!1){return yn.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,"")||""}};H1.DEFAULT_UTF8_ENCODING="utf8";function wM(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let i=arguments[n];for(let o in i)t[o]=i[o]}return t}function xM(...r){let e=r.map(i=>i.byteLength).reduce((i,o)=>i+o),t=new Uint8Array(e),n=0;return r.map(i=>new Uint8Array(i)).forEach(i=>{for(let o of i)t[n++]=o}),t.buffer}function bM(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let i=0;i<r.byteLength;i++)if(t[i]!==n[i])return!1;return!0}Rc.BufferSourceConverter=Vi;Rc.Convert=H1;Rc.assign=wM;Rc.combine=xM;Rc.isEqual=bM});var pA=ze(j0=>{"use strict";Object.defineProperty(j0,"__esModule",{value:!0});var j8=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,i)=>{this.pullQueue.push({resolve:n,reject:i})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},X0=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let i=new j8;i.highWaterMark=t,i.lowWaterMark=n,i.removeCallback=e({push:o=>i.push(o),stop:()=>i.stop(),fail:o=>i.fail(o),on:(o,s)=>{i.eventHandlers[o]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>i[Symbol.asyncIterator](),Object.freeze(this)}};j0.EventIterator=X0;j0.default=X0});var mA=ze(qu=>{"use strict";Object.defineProperty(qu,"__esModule",{value:!0});var Q8=pA();qu.EventIterator=Q8.EventIterator;function dF(r,e,t){return new Q8.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}qu.subscribe=dF;qu.default=Q8.EventIterator});var iT=ze((xye,nT)=>{function xn(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}nT.exports=xn;xn.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};xn.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};xn.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};xn.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};xn.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};xn.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};xn.prototype.start=xn.prototype.try;xn.prototype.errors=function(){return this._errors};xn.prototype.attempts=function(){return this._attempts};xn.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var i=this._errors[n],o=i.message,s=(r[o]||0)+1;r[o]=s,s>=t&&(e=i,t=s)}return e}});var oT=ze(aa=>{var jF=iT();aa.operation=function(r){var e=aa.timeouts(r);return new jF(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};aa.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],i=0;i<e.retries;i++)n.push(this.createTimeout(i,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(i,e)),n.sort(function(o,s){return o-s}),n};aa.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};aa.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var i=0;i<t.length;i++){var o=t[i],s=r[o];r[o]=function(c){var l=aa.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(h){l.retry(h)||(h&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[o].options=e}}});var aT=ze((vye,sT)=>{sT.exports=oT()});var TT=ze((Qwe,AT)=>{AT.exports=I5;var ST=128,yU=127,wU=~yU,xU=Math.pow(2,31);function I5(r,e,t){if(Number.MAX_SAFE_INTEGER&&r>Number.MAX_SAFE_INTEGER)throw I5.bytes=0,new RangeError("Could not encode varint");e=e||[],t=t||0;for(var n=t;r>=xU;)e[t++]=r&255|ST,r/=128;for(;r&wU;)e[t++]=r&255|ST,r>>>=7;return e[t]=r|0,I5.bytes=t-n+1,e}});var kT=ze((Zwe,_T)=>{_T.exports=_5;var bU=128,IT=127;function _5(r,n){var t=0,n=n||0,i=0,o=n,s,a=r.length;do{if(o>=a||i>49)throw _5.bytes=0,new RangeError("Could not decode varint");s=r[o++],t+=i<28?(s&IT)<<i:(s&IT)*Math.pow(2,i),i+=7}while(s>=bU);return _5.bytes=o-n,t}});var PT=ze((Jwe,CT)=>{var vU=Math.pow(2,7),EU=Math.pow(2,14),SU=Math.pow(2,21),AU=Math.pow(2,28),TU=Math.pow(2,35),IU=Math.pow(2,42),_U=Math.pow(2,49),kU=Math.pow(2,56),CU=Math.pow(2,63);CT.exports=function(r){return r<vU?1:r<EU?2:r<SU?3:r<AU?4:r<TU?5:r<IU?6:r<_U?7:r<kU?8:r<CU?9:10}});var qm=ze((e9e,RT)=>{RT.exports={encode:TT(),decode:kT(),encodingLength:PT()}});var ZT=ze((ad,c2)=>{(function(r,e){"use strict";var t={version:"3.0.0",x86:{},x64:{},inputValidation:!0};function n(f){if(!Array.isArray(f)&&!ArrayBuffer.isView(f))return!1;for(var p=0;p<f.length;p++)if(!Number.isInteger(f[p])||f[p]<0||f[p]>255)return!1;return!0}function i(f,p){return(f&65535)*p+(((f>>>16)*p&65535)<<16)}function o(f,p){return f<<p|f>>>32-p}function s(f){return f^=f>>>16,f=i(f,2246822507),f^=f>>>13,f=i(f,3266489909),f^=f>>>16,f}function a(f,p){f=[f[0]>>>16,f[0]&65535,f[1]>>>16,f[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=f[3]+p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=f[2]+p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=f[1]+p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=f[0]+p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function c(f,p){f=[f[0]>>>16,f[0]&65535,f[1]>>>16,f[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=f[3]*p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=f[2]*p[3],m[1]+=m[2]>>>16,m[2]&=65535,m[2]+=f[3]*p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=f[1]*p[3],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=f[2]*p[2],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=f[3]*p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=f[0]*p[3]+f[1]*p[2]+f[2]*p[1]+f[3]*p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function l(f,p){return p%=64,p===32?[f[1],f[0]]:p<32?[f[0]<<p|f[1]>>>32-p,f[1]<<p|f[0]>>>32-p]:(p-=32,[f[1]<<p|f[0]>>>32-p,f[0]<<p|f[1]>>>32-p])}function u(f,p){return p%=64,p===0?f:p<32?[f[0]<<p|f[1]>>>32-p,f[1]<<p]:[f[1]<<p-32,0]}function d(f,p){return[f[0]^p[0],f[1]^p[1]]}function h(f){return f=d(f,[0,f[0]>>>1]),f=c(f,[4283543511,3981806797]),f=d(f,[0,f[0]>>>1]),f=c(f,[3301882366,444984403]),f=d(f,[0,f[0]>>>1]),f}t.x86.hash32=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%4,g=f.length-m,y=p,w=0,x=3432918353,b=461845907,A=0;A<g;A=A+4)w=f[A]|f[A+1]<<8|f[A+2]<<16|f[A+3]<<24,w=i(w,x),w=o(w,15),w=i(w,b),y^=w,y=o(y,13),y=i(y,5)+3864292196;switch(w=0,m){case 3:w^=f[A+2]<<16;case 2:w^=f[A+1]<<8;case 1:w^=f[A],w=i(w,x),w=o(w,15),w=i(w,b),y^=w}return y^=f.length,y=s(y),y>>>0},t.x86.hash128=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%16,g=f.length-m,y=p,w=p,x=p,b=p,A=0,k=0,E=0,S=0,T=597399067,$=2869860233,R=951274213,H=2716044179,F=0;F<g;F=F+16)A=f[F]|f[F+1]<<8|f[F+2]<<16|f[F+3]<<24,k=f[F+4]|f[F+5]<<8|f[F+6]<<16|f[F+7]<<24,E=f[F+8]|f[F+9]<<8|f[F+10]<<16|f[F+11]<<24,S=f[F+12]|f[F+13]<<8|f[F+14]<<16|f[F+15]<<24,A=i(A,T),A=o(A,15),A=i(A,$),y^=A,y=o(y,19),y+=w,y=i(y,5)+1444728091,k=i(k,$),k=o(k,16),k=i(k,R),w^=k,w=o(w,17),w+=x,w=i(w,5)+197830471,E=i(E,R),E=o(E,17),E=i(E,H),x^=E,x=o(x,15),x+=b,x=i(x,5)+2530024501,S=i(S,H),S=o(S,18),S=i(S,T),b^=S,b=o(b,13),b+=y,b=i(b,5)+850148119;switch(A=0,k=0,E=0,S=0,m){case 15:S^=f[F+14]<<16;case 14:S^=f[F+13]<<8;case 13:S^=f[F+12],S=i(S,H),S=o(S,18),S=i(S,T),b^=S;case 12:E^=f[F+11]<<24;case 11:E^=f[F+10]<<16;case 10:E^=f[F+9]<<8;case 9:E^=f[F+8],E=i(E,R),E=o(E,17),E=i(E,H),x^=E;case 8:k^=f[F+7]<<24;case 7:k^=f[F+6]<<16;case 6:k^=f[F+5]<<8;case 5:k^=f[F+4],k=i(k,$),k=o(k,16),k=i(k,R),w^=k;case 4:A^=f[F+3]<<24;case 3:A^=f[F+2]<<16;case 2:A^=f[F+1]<<8;case 1:A^=f[F],A=i(A,T),A=o(A,15),A=i(A,$),y^=A}return y^=f.length,w^=f.length,x^=f.length,b^=f.length,y+=w,y+=x,y+=b,w+=y,x+=y,b+=y,y=s(y),w=s(w),x=s(x),b=s(b),y+=w,y+=x,y+=b,w+=y,x+=y,b+=y,("00000000"+(y>>>0).toString(16)).slice(-8)+("00000000"+(w>>>0).toString(16)).slice(-8)+("00000000"+(x>>>0).toString(16)).slice(-8)+("00000000"+(b>>>0).toString(16)).slice(-8)},t.x64.hash128=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%16,g=f.length-m,y=[0,p],w=[0,p],x=[0,0],b=[0,0],A=[2277735313,289559509],k=[1291169091,658871167],E=0;E<g;E=E+16)x=[f[E+4]|f[E+5]<<8|f[E+6]<<16|f[E+7]<<24,f[E]|f[E+1]<<8|f[E+2]<<16|f[E+3]<<24],b=[f[E+12]|f[E+13]<<8|f[E+14]<<16|f[E+15]<<24,f[E+8]|f[E+9]<<8|f[E+10]<<16|f[E+11]<<24],x=c(x,A),x=l(x,31),x=c(x,k),y=d(y,x),y=l(y,27),y=a(y,w),y=a(c(y,[0,5]),[0,1390208809]),b=c(b,k),b=l(b,33),b=c(b,A),w=d(w,b),w=l(w,31),w=a(w,y),w=a(c(w,[0,5]),[0,944331445]);switch(x=[0,0],b=[0,0],m){case 15:b=d(b,u([0,f[E+14]],48));case 14:b=d(b,u([0,f[E+13]],40));case 13:b=d(b,u([0,f[E+12]],32));case 12:b=d(b,u([0,f[E+11]],24));case 11:b=d(b,u([0,f[E+10]],16));case 10:b=d(b,u([0,f[E+9]],8));case 9:b=d(b,[0,f[E+8]]),b=c(b,k),b=l(b,33),b=c(b,A),w=d(w,b);case 8:x=d(x,u([0,f[E+7]],56));case 7:x=d(x,u([0,f[E+6]],48));case 6:x=d(x,u([0,f[E+5]],40));case 5:x=d(x,u([0,f[E+4]],32));case 4:x=d(x,u([0,f[E+3]],24));case 3:x=d(x,u([0,f[E+2]],16));case 2:x=d(x,u([0,f[E+1]],8));case 1:x=d(x,[0,f[E]]),x=c(x,A),x=l(x,31),x=c(x,k),y=d(y,x)}return y=d(y,[0,f.length]),w=d(w,[0,f.length]),y=a(y,w),w=a(w,y),y=h(y),w=h(w),y=a(y,w),w=a(w,y),("00000000"+(y[0]>>>0).toString(16)).slice(-8)+("00000000"+(y[1]>>>0).toString(16)).slice(-8)+("00000000"+(w[0]>>>0).toString(16)).slice(-8)+("00000000"+(w[1]>>>0).toString(16)).slice(-8)},typeof ad<"u"?(typeof c2<"u"&&c2.exports&&(ad=c2.exports=t),ad.murmurHash3=t):typeof define=="function"&&define.amd?define([],function(){return t}):(t._murmurHash3=r.murmurHash3,t.noConflict=function(){return r.murmurHash3=t._murmurHash3,t._murmurHash3=e,t.noConflict=e,t},r.murmurHash3=t)})(ad)});var eI=ze((Zxe,JT)=>{JT.exports=ZT()});var u2=ze((obe,rI)=>{"use strict";rI.exports=class{constructor(){this._bitArrays=[],this._data=[],this._length=0,this._changedLength=!1,this._changedData=!1}set(e,t){let n=this._internalPositionFor(e,!1);if(t===void 0)n!==-1&&(this._unsetInternalPos(n),this._unsetBit(e),this._changedLength=!0,this._changedData=!0);else{let i=!1;n===-1?(n=this._data.length,this._setBit(e),this._changedData=!0):i=!0,this._setInternalPos(n,e,t,i),this._changedLength=!0}}unset(e){this.set(e,void 0)}get(e){this._sortData();let t=this._internalPositionFor(e,!0);if(t!==-1)return this._data[t][1]}push(e){return this.set(this.length,e),this.length}get length(){if(this._sortData(),this._changedLength){let e=this._data[this._data.length-1];this._length=e?e[0]+1:0,this._changedLength=!1}return this._length}forEach(e){let t=0;for(;t<this.length;)e(this.get(t),t,this),t++}map(e){let t=0,n=new Array(this.length);for(;t<this.length;)n[t]=e(this.get(t),t,this),t++;return n}reduce(e,t){let n=0,i=t;for(;n<this.length;){let o=this.get(n);i=e(i,o,n),n++}return i}find(e){let t=0,n,i;for(;t<this.length&&!n;)i=this.get(t),n=e(i),t++;return n?i:void 0}_internalPositionFor(e,t){let n=this._bytePosFor(e,t);if(n>=this._bitArrays.length)return-1;let i=this._bitArrays[n],o=e-n*7;if(!((i&1<<o)>0))return-1;let a=this._bitArrays.slice(0,n).reduce(JU,0),c=~(4294967295<<o+1),l=tI(i&c);return a+l-1}_bytePosFor(e,t){let n=Math.floor(e/7),i=n+1;for(;!t&&this._bitArrays.length<i;)this._bitArrays.push(0);return n}_setBit(e){let t=this._bytePosFor(e,!1);this._bitArrays[t]|=1<<e-t*7}_unsetBit(e){let t=this._bytePosFor(e,!1);this._bitArrays[t]&=~(1<<e-t*7)}_setInternalPos(e,t,n,i){let o=this._data,s=[t,n];if(i)this._sortData(),o[e]=s;else{if(o.length)if(o[o.length-1][0]>=t)o.push(s);else if(o[0][0]<=t)o.unshift(s);else{let a=Math.round(o.length/2);this._data=o.slice(0,a).concat(s).concat(o.slice(a))}else this._data.push(s);this._changedData=!0,this._changedLength=!0}}_unsetInternalPos(e){this._data.splice(e,1)}_sortData(){this._changedData&&this._data.sort(eH),this._changedData=!1}bitField(){let e=[],t=8,n=0,i=0,o,s=this._bitArrays.slice();for(;s.length||n;){n===0&&(o=s.shift(),n=7);let c=Math.min(n,t),l=~(255<<c),u=o&l;i|=u<<8-t,o=o>>>c,n-=c,t-=c,(!t||!n&&!s.length)&&(e.push(i),i=0,t=8)}for(var a=e.length-1;a>0&&e[a]===0;a--)e.pop();return e}compactArray(){return this._sortData(),this._data.map(tH)}};function JU(r,e){return r+tI(e)}function tI(r){let e=r;return e=e-(e>>1&1431655765),e=(e&858993459)+(e>>2&858993459),(e+(e>>4)&252645135)*16843009>>24}function eH(r,e){return r[0]-e[0]}function tH(r){return r[1]}});var i_=ze(G5=>{G5.read=function(r,e,t,n,i){var o,s,a=i*8-n-1,c=(1<<a)-1,l=c>>1,u=-7,d=t?i-1:0,h=t?-1:1,f=r[e+d];for(d+=h,o=f&(1<<-u)-1,f>>=-u,u+=a;u>0;o=o*256+r[e+d],d+=h,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=n;u>0;s=s*256+r[e+d],d+=h,u-=8);if(o===0)o=1-l;else{if(o===c)return s?NaN:(f?-1:1)*(1/0);s=s+Math.pow(2,n),o=o-l}return(f?-1:1)*s*Math.pow(2,o-n)};G5.write=function(r,e,t,n,i,o){var s,a,c,l=o*8-i-1,u=(1<<l)-1,d=u>>1,h=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:o-1,p=n?1:-1,m=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-s))<1&&(s--,c*=2),s+d>=1?e+=h/c:e+=h*Math.pow(2,1-d),e*c>=2&&(s++,c/=2),s+d>=u?(a=0,s=u):s+d>=1?(a=(e*c-1)*Math.pow(2,i),s=s+d):(a=e*Math.pow(2,d-1)*Math.pow(2,i),s=0));i>=8;r[t+f]=a&255,f+=p,a/=256,i-=8);for(s=s<<i|a,l+=i;l>0;r[t+f]=s&255,f+=p,s/=256,l-=8);r[t+f-p]|=m*128}});var v_=ze((bIe,b_)=>{var rl=1e3,nl=rl*60,il=nl*60,ya=il*24,Vz=ya*7,qz=ya*365.25;b_.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return Kz(r);if(t==="number"&&isFinite(r))return e.long?Wz(r):Gz(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function Kz(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*qz;case"weeks":case"week":case"w":return t*Vz;case"days":case"day":case"d":return t*ya;case"hours":case"hour":case"hrs":case"hr":case"h":return t*il;case"minutes":case"minute":case"mins":case"min":case"m":return t*nl;case"seconds":case"second":case"secs":case"sec":case"s":return t*rl;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Gz(r){var e=Math.abs(r);return e>=ya?Math.round(r/ya)+"d":e>=il?Math.round(r/il)+"h":e>=nl?Math.round(r/nl)+"m":e>=rl?Math.round(r/rl)+"s":r+"ms"}function Wz(r){var e=Math.abs(r);return e>=ya?R2(r,e,ya,"day"):e>=il?R2(r,e,il,"hour"):e>=nl?R2(r,e,nl,"minute"):e>=rl?R2(r,e,rl,"second"):r+" ms"}function R2(r,e,t,n){var i=e>=t*1.5;return Math.round(r/t)+" "+n+(i?"s":"")}});var S_=ze((vIe,E_)=>{function Yz(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=i,t.enabled=a,t.humanize=v_(),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 h=0;h<u.length;h++)d=(d<<5)-d+u.charCodeAt(h),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,h=null,f,p;function m(...g){if(!m.enabled)return;let y=m,w=Number(new Date),x=w-(d||w);y.diff=x,y.prev=d,y.curr=w,d=w,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let b=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(k,E)=>{if(k==="%%")return"%";b++;let S=t.formatters[E];if(typeof S=="function"){let T=g[b];k=S.call(y,T),g.splice(b,1),b--}return k}),t.formatArgs.call(y,g),(y.log||t.log).apply(y,g)}return m.namespace=u,m.useColors=t.useColors(),m.color=t.selectColor(u),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(f!==t.namespaces&&(f=t.namespaces,p=t.enabled(u)),p),set:g=>{h=g}}),typeof t.init=="function"&&t.init(m),m}function n(u,d){let h=t(this.namespace+(typeof d>"u"?":":d)+u);return h.log=this.log,h}function i(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d=(typeof u=="string"?u:"").trim().replace(" ",",").split(",").filter(Boolean);for(let h of d)h[0]==="-"?t.skips.push(h.slice(1)):t.names.push(h)}function o(u,d){let h=0,f=0,p=-1,m=0;for(;h<u.length;)if(f<d.length&&(d[f]===u[h]||d[f]==="*"))d[f]==="*"?(p=f,m=h,f++):(h++,f++);else if(p!==-1)f=p+1,m++,h=m;else return!1;for(;f<d.length&&d[f]==="*";)f++;return f===d.length}function s(){let u=[...t.names,...t.skips.map(d=>"-"+d)].join(",");return t.enable(""),u}function a(u){for(let d of t.skips)if(o(u,d))return!1;for(let d of t.names)if(o(u,d))return!0;return!1}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.enable(t.load()),t}E_.exports=Yz});var A_=ze((rn,D2)=>{rn.formatArgs=jz;rn.save=Qz;rn.load=Zz;rn.useColors=Xz;rn.storage=Jz();rn.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();rn.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Xz(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let r;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(r=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(r[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function jz(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+D2.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(n=t))}),r.splice(n,0,e)}rn.log=console.debug||console.log||(()=>{});function Qz(r){try{r?rn.storage.setItem("debug",r):rn.storage.removeItem("debug")}catch{}}function Zz(){let r;try{r=rn.storage.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Jz(){try{return localStorage}catch{}}D2.exports=S_()(rn);var{formatters:e$}=D2.exports;e$.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var H_=ze((nke,U_)=>{"use strict";U_.exports={RTLD_LAZY:1,RTLD_NOW:2,RTLD_GLOBAL:256,RTLD_LOCAL:0,RTLD_DEEPBIND:8,E2BIG:7,EACCES:13,EADDRINUSE:98,EADDRNOTAVAIL:99,EAFNOSUPPORT:97,EAGAIN:11,EALREADY:114,EBADF:9,EBADMSG:74,EBUSY:16,ECANCELED:125,ECHILD:10,ECONNABORTED:103,ECONNREFUSED:111,ECONNRESET:104,EDEADLK:35,EDESTADDRREQ:89,EDOM:33,EDQUOT:122,EEXIST:17,EFAULT:14,EFBIG:27,EHOSTUNREACH:113,EIDRM:43,EILSEQ:84,EINPROGRESS:115,EINTR:4,EINVAL:22,EIO:5,EISCONN:106,EISDIR:21,ELOOP:40,EMFILE:24,EMLINK:31,EMSGSIZE:90,EMULTIHOP:72,ENAMETOOLONG:36,ENETDOWN:100,ENETRESET:102,ENETUNREACH:101,ENFILE:23,ENOBUFS:105,ENODATA:61,ENODEV:19,ENOENT:2,ENOEXEC:8,ENOLCK:37,ENOLINK:67,ENOMEM:12,ENOMSG:42,ENOPROTOOPT:92,ENOSPC:28,ENOSR:63,ENOSTR:60,ENOSYS:38,ENOTCONN:107,ENOTDIR:20,ENOTEMPTY:39,ENOTSOCK:88,ENOTSUP:95,ENOTTY:25,ENXIO:6,EOPNOTSUPP:95,EOVERFLOW:75,EPERM:1,EPIPE:32,EPROTO:71,EPROTONOSUPPORT:93,EPROTOTYPE:91,ERANGE:34,EROFS:30,ESPIPE:29,ESRCH:3,ESTALE:116,ETIME:62,ETIMEDOUT:110,ETXTBSY:26,EWOULDBLOCK:11,EXDEV:18,PRIORITY_LOW:19,PRIORITY_BELOW_NORMAL:10,PRIORITY_NORMAL:0,PRIORITY_ABOVE_NORMAL:-7,PRIORITY_HIGH:-14,PRIORITY_HIGHEST:-20,SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGILL:4,SIGTRAP:5,SIGABRT:6,SIGIOT:6,SIGBUS:7,SIGFPE:8,SIGKILL:9,SIGUSR1:10,SIGSEGV:11,SIGUSR2:12,SIGPIPE:13,SIGALRM:14,SIGTERM:15,SIGCHLD:17,SIGSTKFLT:16,SIGCONT:18,SIGSTOP:19,SIGTSTP:20,SIGTTIN:21,SIGTTOU:22,SIGURG:23,SIGXCPU:24,SIGXFSZ:25,SIGVTALRM:26,SIGPROF:27,SIGWINCH:28,SIGIO:29,SIGPOLL:29,SIGPWR:30,SIGSYS:31,UV_FS_SYMLINK_DIR:1,UV_FS_SYMLINK_JUNCTION:2,O_RDONLY:0,O_WRONLY:1,O_RDWR:2,UV_DIRENT_UNKNOWN:0,UV_DIRENT_FILE:1,UV_DIRENT_DIR:2,UV_DIRENT_LINK:3,UV_DIRENT_FIFO:4,UV_DIRENT_SOCKET:5,UV_DIRENT_CHAR:6,UV_DIRENT_BLOCK:7,EXTENSIONLESS_FORMAT_JAVASCRIPT:0,EXTENSIONLESS_FORMAT_WASM:1,S_IFMT:61440,S_IFREG:32768,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960,S_IFSOCK:49152,O_CREAT:64,O_EXCL:128,UV_FS_O_FILEMAP:0,O_NOCTTY:256,O_TRUNC:512,O_APPEND:1024,O_DIRECTORY:65536,O_NOATIME:262144,O_NOFOLLOW:131072,O_SYNC:1052672,O_DSYNC:4096,O_DIRECT:16384,O_NONBLOCK:2048,S_IRWXU:448,S_IRUSR:256,S_IWUSR:128,S_IXUSR:64,S_IRWXG:56,S_IRGRP:32,S_IWGRP:16,S_IXGRP:8,S_IRWXO:7,S_IROTH:4,S_IWOTH:2,S_IXOTH:1,F_OK:0,R_OK:4,W_OK:2,X_OK:1,UV_FS_COPYFILE_EXCL:1,COPYFILE_EXCL:1,UV_FS_COPYFILE_FICLONE:2,COPYFILE_FICLONE:2,UV_FS_COPYFILE_FICLONE_FORCE:4,COPYFILE_FICLONE_FORCE:4,OPENSSL_VERSION_NUMBER:805306608,SSL_OP_ALL:2147485776,SSL_OP_ALLOW_NO_DHE_KEX:1024,SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION:262144,SSL_OP_CIPHER_SERVER_PREFERENCE:4194304,SSL_OP_CISCO_ANYCONNECT:32768,SSL_OP_COOKIE_EXCHANGE:8192,SSL_OP_CRYPTOPRO_TLSEXT_BUG:2147483648,SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS:2048,SSL_OP_LEGACY_SERVER_CONNECT:4,SSL_OP_NO_COMPRESSION:131072,SSL_OP_NO_ENCRYPT_THEN_MAC:524288,SSL_OP_NO_QUERY_MTU:4096,SSL_OP_NO_RENEGOTIATION:1073741824,SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION:65536,SSL_OP_NO_SSLv2:0,SSL_OP_NO_SSLv3:33554432,SSL_OP_NO_TICKET:16384,SSL_OP_NO_TLSv1:67108864,SSL_OP_NO_TLSv1_1:268435456,SSL_OP_NO_TLSv1_2:134217728,SSL_OP_NO_TLSv1_3:536870912,SSL_OP_PRIORITIZE_CHACHA:2097152,SSL_OP_TLS_ROLLBACK_BUG:8388608,ENGINE_METHOD_RSA:1,ENGINE_METHOD_DSA:2,ENGINE_METHOD_DH:4,ENGINE_METHOD_RAND:8,ENGINE_METHOD_EC:2048,ENGINE_METHOD_CIPHERS:64,ENGINE_METHOD_DIGESTS:128,ENGINE_METHOD_PKEY_METHS:512,ENGINE_METHOD_PKEY_ASN1_METHS:1024,ENGINE_METHOD_ALL:65535,ENGINE_METHOD_NONE:0,DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,RSA_PKCS1_PADDING:1,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,RSA_PSS_SALTLEN_DIGEST:-1,RSA_PSS_SALTLEN_MAX_SIGN:-2,RSA_PSS_SALTLEN_AUTO:-2,defaultCoreCipherList:"TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA",TLS1_VERSION:769,TLS1_1_VERSION:770,TLS1_2_VERSION:771,TLS1_3_VERSION:772,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}});var dV={};ot(dV,{BasePlugin:()=>gt,DirIndexHtmlPlugin:()=>Ad,PluginError:()=>bd,PluginFatalError:()=>to,createVerifiedFetch:()=>ly,dirIndexHtmlPluginFactory:()=>sk,verifiedFetch:()=>j2});var wy=Symbol.for("@libp2p/connection");var Qn=Symbol.for("@libp2p/content-routing");function xy(r){return r==null?!1:(r.type==="RSA"||r.type==="Ed25519"||r.type==="secp256k1")&&r.raw instanceof Uint8Array&&typeof r.equals=="function"&&typeof r.toMultihash=="function"&&typeof r.toCID=="function"&&typeof r.verify=="function"}var os=Symbol.for("@libp2p/peer-discovery");var Id=Symbol.for("@libp2p/peer-id");function _d(r){return!!r?.[Id]}var Zn=Symbol.for("@libp2p/peer-routing");var ro="keep-alive";var no=Symbol.for("@libp2p/transport");var ss;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ss||(ss={}));var zt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},kd=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Cd=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},O=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},wi=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},sl=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var Pd=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},xa=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},ba=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Jn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Rd=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},as=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ce=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"}},io=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Dd=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},oo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},xi=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},he=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},Nd=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},ei=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},vn=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var bi=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"}},Ea=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Ld=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},so=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},En=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var be=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 i=this.#e.get(e);i==null&&(i=[],this.#e.set(e,i)),i.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let i=this.#e.get(e);i!=null&&(i=i.filter(({callback:o})=>o!==t),this.#e.set(e,i))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:i})=>!i),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function Od(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function $t(...r){let e=[];for(let t of r)Od(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 tr(...r){let e=[];for(let t of r)Od(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 Pe=Symbol.for("@libp2p/service-capabilities"),zr=Symbol.for("@libp2p/service-dependencies");function de(r){let e=new globalThis.AbortController;function t(){e.abort();for(let o of r)o?.removeEventListener!=null&&o.removeEventListener("abort",t)}for(let o of r){if(o?.aborted===!0){t();break}o?.addEventListener!=null&&o.addEventListener("abort",t)}function n(){for(let o of r)o?.removeEventListener!=null&&o.removeEventListener("abort",t)}let i=e.signal;return i.clear=n,i}function Z(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Bd=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}},Sa=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Bd(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 Bd(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 Z2=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function rr(r={}){return vk(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 vk(r,e){e=e??{};let t=e.onEnd,n=new Sa,i,o,s,a=Z(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((g,y)=>{o=w=>{o=null,n.push(w);try{g(r(n))}catch(x){y(x)}return i}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=Z()})}},l=g=>o!=null?o(g):(n.push(g),i),u=g=>(n=new Sa,o!=null?o({error:g}):(n.push({error:g}),i)),d=g=>{if(s)return i;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})},h=g=>s?i:(s=!0,g!=null?u(g):l({done:!0})),f=()=>(n=new Sa,h(),{done:!0}),p=g=>(h(g),{done:!0});if(i={[Symbol.asyncIterator](){return this},next:c,return:f,throw:p,push:d,end:h,get readableLength(){return n.size},onEmpty:async g=>{let y=g?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let w,x;y!=null&&(w=new Promise((b,A)=>{x=()=>{A(new Z2)},y.addEventListener("abort",x)}));try{await Promise.race([a.promise,w])}finally{x!=null&&y!=null&&y?.removeEventListener("abort",x)}}},t==null)return i;let m=i;return i={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(g){return m.throw(g),t!=null&&(t(g),t=void 0),{done:!0}},return(){return m.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(g){return m.end(g),t!=null&&(t(g),t=void 0),i},get readableLength(){return m.readableLength},onEmpty:g=>m.onEmpty(g)},i}var J2=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function Nt(r,e,t,n){let i=new J2(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(i):new Promise((o,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(h){a(),s(h);return}a(),o(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(i)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var Md=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}},Fd=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var Ud=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function st(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new Ud(t?.errorMessage,t?.errorCode,t?.errorName));let n,i=new Ud(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((o,s)=>{n=()=>{s(i)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Hd=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Z(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new zt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function Ek(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var zd=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=Ek(),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 zt),this.cleanup())}async join(e={}){let t=new Hd(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 st(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var fr=class extends be{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new Fd;let n=new zd(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(i=>(this.safeDispatchEvent("completed",{detail:i}),this.safeDispatchEvent("success",{detail:{job:n,result:i}}),i)).catch(i=>{if(n.status==="queued"){for(let o=0;o<this.queue.length;o++)if(this.queue[o]===n){this.queue.splice(o,1);break}}throw this.safeDispatchEvent("error",{detail:i}),this.safeDispatchEvent("failure",{detail:{job:n,error:i}}),i})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new zt)}),this.clear()}async onEmpty(e){this.size!==0&&await Nt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Nt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Nt(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=rr({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},i=c=>{c.detail!=null&&t.push(c.detail)},o=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new zt("Queue aborted"))};this.addEventListener("completed",i),this.addEventListener("error",o),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",i),this.removeEventListener("error",o),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var Vt=class extends fr{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function Sk(r){return r[Symbol.asyncIterator]!=null}function Ak(r){if(Sk(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Lt=Ak;function le(r=0){return new Uint8Array(r)}function at(r=0){return new Uint8Array(r)}var Tk=Math.pow(2,7),Ik=Math.pow(2,14),_k=Math.pow(2,21),eg=Math.pow(2,28),tg=Math.pow(2,35),rg=Math.pow(2,42),ng=Math.pow(2,49),Me=128,nr=127;function ve(r){if(r<Tk)return 1;if(r<Ik)return 2;if(r<_k)return 3;if(r<eg)return 4;if(r<tg)return 5;if(r<rg)return 6;if(r<ng)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function ig(r,e,t=0){switch(ve(r)){case 8:e[t++]=r&255|Me,r/=128;case 7:e[t++]=r&255|Me,r/=128;case 6:e[t++]=r&255|Me,r/=128;case 5:e[t++]=r&255|Me,r/=128;case 4:e[t++]=r&255|Me,r>>>=7;case 3:e[t++]=r&255|Me,r>>>=7;case 2:e[t++]=r&255|Me,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function kk(r,e,t=0){switch(ve(r)){case 8:e.set(t++,r&255|Me),r/=128;case 7:e.set(t++,r&255|Me),r/=128;case 6:e.set(t++,r&255|Me),r/=128;case 5:e.set(t++,r&255|Me),r/=128;case 4:e.set(t++,r&255|Me),r>>>=7;case 3:e.set(t++,r&255|Me),r>>>=7;case 2:e.set(t++,r&255|Me),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function og(r,e){let t=r[e],n=0;if(n+=t&nr,t<Me||(t=r[e+1],n+=(t&nr)<<7,t<Me)||(t=r[e+2],n+=(t&nr)<<14,t<Me)||(t=r[e+3],n+=(t&nr)<<21,t<Me)||(t=r[e+4],n+=(t&nr)*eg,t<Me)||(t=r[e+5],n+=(t&nr)*tg,t<Me)||(t=r[e+6],n+=(t&nr)*rg,t<Me)||(t=r[e+7],n+=(t&nr)*ng,t<Me))return n;throw new RangeError("Could not decode varint")}function Ck(r,e){let t=r.get(e),n=0;if(n+=t&nr,t<Me||(t=r.get(e+1),n+=(t&nr)<<7,t<Me)||(t=r.get(e+2),n+=(t&nr)<<14,t<Me)||(t=r.get(e+3),n+=(t&nr)<<21,t<Me)||(t=r.get(e+4),n+=(t&nr)*eg,t<Me)||(t=r.get(e+5),n+=(t&nr)*tg,t<Me)||(t=r.get(e+6),n+=(t&nr)*rg,t<Me)||(t=r.get(e+7),n+=(t&nr)*ng,t<Me))return n;throw new RangeError("Could not decode varint")}function Ze(r,e,t=0){return e==null&&(e=at(ve(r))),e instanceof Uint8Array?ig(r,e,t):kk(r,e,t)}function hr(r,e=0){return r instanceof Uint8Array?og(r,e):Ck(r,e)}function ge(r,e){e==null&&(e=r.reduce((i,o)=>i+o.length,0));let t=at(e),n=0;for(let i of r)t.set(i,n),n+=i.length;return t}function J(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var vy=Symbol.for("@achingbrain/uint8arraylist");function by(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let i=t+n.byteLength;if(e<i)return{buf:n,index:e-t};t=i}throw new RangeError("index is out of bounds")}function nn(r){return!!r?.[vy]}var ee=class r{bufs;length;[vy]=!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(nn(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(nn(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=by(this.bufs,e);return t.buf[t.index]}set(e,t){let n=by(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(nn(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:i}=this._subList(e,t);return ge(n,i)}subarray(e,t){let{bufs:n,length:i}=this._subList(e,t);return n.length===1?n[0]:ge(n,i)}sublist(e,t){let{bufs:n,length:i}=this._subList(e,t),o=new r;return o.length=i,o.bufs=[...n],o}_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=[],i=0;for(let o=0;o<this.bufs.length;o++){let s=this.bufs[o],a=i,c=a+s.byteLength;if(i=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(!nn(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 i=n.byteLength;if(i===0)throw new TypeError("search must be at least 1 byte long");let o=256,s=new Int32Array(o);for(let d=0;d<o;d++)s[d]=-1;for(let d=0;d<i;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 h=l;h>=0;h--){let f=this.get(d+h);if(n[h]!==f){u=Math.max(1,h-a[f]);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=at(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 i=le(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt16(0,t,n),this.write(i,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 i=le(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt32(0,t,n),this.write(i,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 i=le(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigInt64(0,t,n),this.write(i,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=at(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 i=le(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint16(0,t,n),this.write(i,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 i=le(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,t,n),this.write(i,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 i=le(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigUint64(0,t,n),this.write(i,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 i=le(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat32(0,t,n),this.write(i,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 i=le(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat64(0,t,n),this.write(i,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!J(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((i,o)=>i+o.byteLength,0)),n.length=t,n}};var $d=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Aa=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Vd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},al=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function qd(r){return r[Symbol.asyncIterator]!=null}function Ey(r,e){if(r.byteLength>e)throw new Aa("Message length too long")}var Gd=r=>{let e=ve(r),t=at(e);return Ze(r,t),Gd.bytes=e,t};Gd.bytes=0;function Sn(r,e){e=e??{};let t=e.lengthEncoder??Gd,n=e?.maxDataLength??4194304;function*i(o){Ey(o,n);let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return qd(r)?async function*(){for await(let o of r)yield*i(o)}():function*(){for(let o of r)yield*i(o)}()}Sn.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Gd,n=e?.maxDataLength??4194304;return Ey(r,n),new ee(t(r.byteLength),r)};var ls;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ls||(ls={}));var sg=r=>{let e=hr(r);return sg.bytes=ve(e),e};sg.bytes=0;function An(r,e){let t=new ee,n=ls.LENGTH,i=-1,o=e?.lengthDecoder??sg,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ls.LENGTH)try{if(i=o(t),i<0)throw new $d("Invalid message length");if(i>a)throw new Aa("Message length too long");let l=o.bytes;t.consume(l),e?.onLength!=null&&e.onLength(i),n=ls.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Vd("Message length length too long");break}throw l}if(n===ls.DATA){if(t.byteLength<i)break;let l=t.sublist(0,i);t.consume(i),e?.onData!=null&&e.onData(l),yield l,n=ls.LENGTH}}}return qd(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new al("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new al("Unexpected end of input")}()}An.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:o,value:s}=await r.next(t);if(o===!0)return;s!=null&&(yield s)}catch(o){if(o.code==="ERR_UNDER_READ")return{done:!0,value:null};throw o}finally{t=1}}();return An(n,{...e??{},onLength:o=>{t=o}})};function Dk(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:i=>{n.push(i)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Ta=Dk;function Nk(r){return r[Symbol.asyncIterator]!=null}function Lk(r,e){let t=0;if(Nk(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Ta(r),{value:i,done:o}=n.next();if(o===!0)return function*(){}();let s=e(i,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(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 Je=Lk;var cg=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=Z(),this.haveNext=Z()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=Z(),e}async throw(e){return this.ended=!0,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=Z(),await st(this.readNext.promise,t?.signal,t)}};function Sy(){return new cg}function Ok(r){return r[Symbol.asyncIterator]!=null}async function Bk(r,e){try{await Promise.all(r.map(async t=>{for await(let n of t)await e.push(n)})),await e.end()}catch(t){await e.end(t).catch(()=>{})}}async function*Mk(r){let e=Sy();Bk(r,e).catch(()=>{}),yield*e}function*Fk(r){for(let e of r)yield*e}function Uk(...r){let e=[];for(let t of r)Ok(t)||e.push(t);return e.length===r.length?Fk(e):Mk(r)}var pr=Uk;function Re(r,...e){if(r==null)throw new Error("Empty pipeline");if(lg(r)){let n=r;r=()=>n.source}else if(Ty(r)||Ay(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&lg(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++)lg(t[n])&&(t[n]=zk(t[n]));return Hk(...t)}var Hk=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},Ay=r=>r?.[Symbol.asyncIterator]!=null,Ty=r=>r?.[Symbol.iterator]!=null,lg=r=>r==null?!1:r.sink!=null&&r.source!=null,zk=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=rr({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let i,o=r.source;if(Ay(o))i=async function*(){yield*o,n.end()};else if(Ty(o))i=function*(){yield*o,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return pr(n,i())}return r.source};function $k(r){return r[Symbol.asyncIterator]!=null}function Vk(r,e){return $k(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var ao=Vk;var M=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var cl="/ipfs/bitswap/1.2.0";var ug=new Float32Array([-0]),co=new Uint8Array(ug.buffer);function Iy(r,e,t){ug[0]=r,e[t]=co[0],e[t+1]=co[1],e[t+2]=co[2],e[t+3]=co[3]}function _y(r,e){return co[0]=r[e],co[1]=r[e+1],co[2]=r[e+2],co[3]=r[e+3],ug[0]}var dg=new Float64Array([-0]),ir=new Uint8Array(dg.buffer);function ky(r,e,t){dg[0]=r,e[t]=ir[0],e[t+1]=ir[1],e[t+2]=ir[2],e[t+3]=ir[3],e[t+4]=ir[4],e[t+5]=ir[5],e[t+6]=ir[6],e[t+7]=ir[7]}function Cy(r,e){return ir[0]=r[e],ir[1]=r[e+1],ir[2]=r[e+2],ir[3]=r[e+3],ir[4]=r[e+4],ir[5]=r[e+5],ir[6]=r[e+6],ir[7]=r[e+7],dg[0]}var qk=BigInt(Number.MAX_SAFE_INTEGER),Kk=BigInt(Number.MIN_SAFE_INTEGER),$r=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 us;if(e<qk&&e>Kk)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,i=e-(n<<32n);return t&&(n=~n|0n,i=~i|0n,++i>Py&&(i=0n,++n>Py&&(n=0n))),new r(Number(i),Number(n))}static fromNumber(e){if(e===0)return us;let t=e<0;t&&(e=-e);let n=e>>>0,i=(e-n)/4294967296>>>0;return t&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new r(n,i)}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):us}},us=new $r(0,0);us.toBigInt=function(){return 0n};us.zzEncode=us.zzDecode=function(){return this};us.length=function(){return 1};var Py=4294967296n;function Ry(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 Dy(r,e,t){if(t-e<1)return"";let i,o=[],s=0,a;for(;e<t;)a=r[e++],a<128?o[s++]=a:a>191&&a<224?o[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,o[s++]=55296+(a>>10),o[s++]=56320+(a&1023)):o[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((i??(i=[])).push(String.fromCharCode.apply(String,o)),s=0);return i!=null?(s>0&&i.push(String.fromCharCode.apply(String,o.slice(0,s))),i.join("")):String.fromCharCode.apply(String,o.slice(0,s))}function fg(r,e,t){let n=t,i,o;for(let s=0;s<r.length;++s)i=r.charCodeAt(s),i<128?e[t++]=i:i<2048?(e[t++]=i>>6|192,e[t++]=i&63|128):(i&64512)===55296&&((o=r.charCodeAt(s+1))&64512)===56320?(i=65536+((i&1023)<<10)+(o&1023),++s,e[t++]=i>>18|240,e[t++]=i>>12&63|128,e[t++]=i>>6&63|128,e[t++]=i&63|128):(e[t++]=i>>12|224,e[t++]=i>>6&63|128,e[t++]=i&63|128);return t-n}function Tn(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Wd(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var hg=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,Tn(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 Tn(this,4);return Wd(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Tn(this,4);return Wd(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Tn(this,4);let e=_y(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Tn(this,4);let e=Cy(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 Tn(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return Dy(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Tn(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Tn(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 $r(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 Tn(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 Tn(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 Tn(this,8);let e=Wd(this.buf,this.pos+=4),t=Wd(this.buf,this.pos+=4);return new $r(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=og(this.buf,this.pos);return this.pos+=ve(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 pg(r){return new hg(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=pg(r);return e.decode(n,void 0,t)}var Eg={};ot(Eg,{base10:()=>eC});var ds={};ot(ds,{coerce:()=>on,empty:()=>Ly,equals:()=>mg,fromHex:()=>Wk,fromString:()=>gg,isBinary:()=>Yk,toHex:()=>Gk,toString:()=>yg});var Ly=new Uint8Array(0);function Gk(r){return r.reduce((e,t)=>e+t.toString(16).padStart(2,"0"),"")}function Wk(r){let e=r.match(/../g);return e!=null?new Uint8Array(e.map(t=>parseInt(t,16))):Ly}function mg(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 on(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 Yk(r){return r instanceof ArrayBuffer||ArrayBuffer.isView(r)}function gg(r){return new TextEncoder().encode(r)}function yg(r){return new TextDecoder().decode(r)}function Xk(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 i=0;i<r.length;i++){var o=r.charAt(i),s=o.charCodeAt(0);if(t[s]!==255)throw new TypeError(o+" is ambiguous");t[s]=i}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 m=0,g=0,y=0,w=p.length;y!==w&&p[y]===0;)y++,m++;for(var x=(w-y)*u+1>>>0,b=new Uint8Array(x);y!==w;){for(var A=p[y],k=0,E=x-1;(A!==0||k<g)&&E!==-1;E--,k++)A+=256*b[E]>>>0,b[E]=A%a>>>0,A=A/a>>>0;if(A!==0)throw new Error("Non-zero carry");g=k,y++}for(var S=x-g;S!==x&&b[S]===0;)S++;for(var T=c.repeat(m);S<x;++S)T+=r.charAt(b[S]);return T}function h(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var m=0;if(p[m]!==" "){for(var g=0,y=0;p[m]===c;)g++,m++;for(var w=(p.length-m)*l+1>>>0,x=new Uint8Array(w);p[m];){var b=t[p.charCodeAt(m)];if(b===255)return;for(var A=0,k=w-1;(b!==0||A<y)&&k!==-1;k--,A++)b+=a*x[k]>>>0,x[k]=b%256>>>0,b=b/256>>>0;if(b!==0)throw new Error("Non-zero carry");y=A,m++}if(p[m]!==" "){for(var E=w-y;E!==w&&x[E]===0;)E++;for(var S=new Uint8Array(g+(w-E)),T=g;E!==w;)S[T++]=x[E++];return S}}}function f(p){var m=h(p);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:h,decode:f}}var jk=Xk,Qk=jk,Oy=Qk;var wg=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")}},xg=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let i=t.codePointAt(0);if(i===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=i,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 By(this,e)}},bg=class{decoders;constructor(e){this.decoders=e}or(e){return By(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 By(r,e){return new bg({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var vg=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,i){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=i,this.encoder=new wg(e,t,n),this.decoder=new xg(e,t,i)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Ia({name:r,prefix:e,encode:t,decode:n}){return new vg(r,e,t,n)}function lo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:i}=Oy(t,r);return Ia({prefix:e,name:r,encode:n,decode:o=>on(i(o))})}function Zk(r,e,t,n){let i={};for(let u=0;u<e.length;++u)i[e[u]]=u;let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),a=0,c=0,l=0;for(let u=0;u<o;++u){let d=i[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function Jk(r,e,t){let n=e[e.length-1]==="=",i=(1<<t)-1,o="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,o+=e[i&a>>s];if(s!==0&&(o+=e[i&a<<t-s]),n)for(;(o.length*t&7)!==0;)o+="=";return o}function ft({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Ia({prefix:e,name:r,encode(i){return Jk(i,n,t)},decode(i){return Zk(i,n,t,r)}})}var eC=lo({prefix:"9",name:"base10",alphabet:"0123456789"});var Sg={};ot(Sg,{base16:()=>tC,base16upper:()=>rC});var tC=ft({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),rC=ft({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Ag={};ot(Ag,{base2:()=>nC});var nC=ft({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Tg={};ot(Tg,{base256emoji:()=>cC});var My=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}"),iC=My.reduce((r,e,t)=>(r[t]=e,r),[]),oC=My.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function sC(r){return r.reduce((e,t)=>(e+=iC[t],e),"")}function aC(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let i=oC[n];if(i==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(i)}return new Uint8Array(e)}var cC=Ia({prefix:"\u{1F680}",name:"base256emoji",encode:sC,decode:aC});var Ig={};ot(Ig,{base32:()=>kt,base32hex:()=>fC,base32hexpad:()=>pC,base32hexpadupper:()=>mC,base32hexupper:()=>hC,base32pad:()=>uC,base32padupper:()=>dC,base32upper:()=>lC,base32z:()=>gC});var kt=ft({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),lC=ft({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),uC=ft({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),dC=ft({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),fC=ft({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),hC=ft({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),pC=ft({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),mC=ft({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),gC=ft({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var _g={};ot(_g,{base36:()=>mr,base36upper:()=>yC});var mr=lo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),yC=lo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var kg={};ot(kg,{base58btc:()=>ye,base58flickr:()=>wC});var ye=lo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),wC=lo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Cg={};ot(Cg,{base64:()=>St,base64pad:()=>xC,base64url:()=>ll,base64urlpad:()=>bC});var St=ft({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),xC=ft({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),ll=ft({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),bC=ft({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Pg={};ot(Pg,{base8:()=>vC});var vC=ft({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Rg={};ot(Rg,{identity:()=>EC});var EC=Ia({prefix:"\0",name:"identity",encode:r=>yg(r),decode:r=>gg(r)});var _a={};ot(_a,{code:()=>ri,decode:()=>Dg,encode:()=>IC,name:()=>TC});var SC=new TextEncoder,AC=new TextDecoder,TC="json",ri=512;function IC(r){return SC.encode(JSON.stringify(r))}function Dg(r){return JSON.parse(AC.decode(r))}var Ar={};ot(Ar,{code:()=>We,decode:()=>CC,encode:()=>kC,name:()=>_C});var _C="raw",We=85;function kC(r){return on(r)}function CC(r){return on(r)}var Og={};ot(Og,{identity:()=>At});var $e={};ot($e,{Digest:()=>fs,create:()=>or,decode:()=>pe,equals:()=>Lg,hasCode:()=>YC});var PC=Hy,Fy=128,RC=127,DC=~RC,NC=Math.pow(2,31);function Hy(r,e,t){e=e||[],t=t||0;for(var n=t;r>=NC;)e[t++]=r&255|Fy,r/=128;for(;r&DC;)e[t++]=r&255|Fy,r>>>=7;return e[t]=r|0,Hy.bytes=t-n+1,e}var LC=Ng,OC=128,Uy=127;function Ng(r,n){var t=0,n=n||0,i=0,o=n,s,a=r.length;do{if(o>=a)throw Ng.bytes=0,new RangeError("Could not decode varint");s=r[o++],t+=i<28?(s&Uy)<<i:(s&Uy)*Math.pow(2,i),i+=7}while(s>=OC);return Ng.bytes=o-n,t}var BC=Math.pow(2,7),MC=Math.pow(2,14),FC=Math.pow(2,21),UC=Math.pow(2,28),HC=Math.pow(2,35),zC=Math.pow(2,42),$C=Math.pow(2,49),VC=Math.pow(2,56),qC=Math.pow(2,63),KC=function(r){return r<BC?1:r<MC?2:r<FC?3:r<UC?4:r<HC?5:r<zC?6:r<$C?7:r<VC?8:r<qC?9:10},GC={encode:PC,decode:LC,encodingLength:KC},WC=GC,ul=WC;function dl(r,e=0){return[ul.decode(r,e),ul.decode.bytes]}function ka(r,e,t=0){return ul.encode(r,e,t),e}function Ca(r){return ul.encodingLength(r)}function or(r,e){let t=e.byteLength,n=Ca(r),i=n+Ca(t),o=new Uint8Array(i+t);return ka(r,o,0),ka(t,o,n),o.set(e,i),new fs(r,t,e,o)}function pe(r){let e=on(r),[t,n]=dl(e),[i,o]=dl(e.subarray(n)),s=e.subarray(n+o);if(s.byteLength!==i)throw new Error("Incorrect length");return new fs(t,i,s,e)}function Lg(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&mg(r.bytes,t.bytes)}}var fs=class{code;size;digest;bytes;constructor(e,t,n,i){this.code=e,this.size=t,this.digest=n,this.bytes=i}};function YC(r,e){return r.code===e}var zy=0,XC="identity",$y=on;function jC(r){return or(zy,$y(r))}var At={code:zy,name:XC,encode:$y,digest:jC};var Mg={};ot(Mg,{sha256:()=>Se,sha512:()=>Xd});function hs({name:r,code:e,encode:t}){return new Bg(r,e,t)}var Bg=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?or(this.code,t):t.then(n=>or(this.code,n))}else throw Error("Unknown type, must be binary type")}};function qy(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var Se=hs({name:"sha2-256",code:18,encode:qy("SHA-256")}),Xd=hs({name:"sha2-512",code:19,encode:qy("SHA-512")});function Ky(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return ZC(t,Fg(r),e??ye.encoder);default:return JC(t,Fg(r),e??kt.encoder)}}var Gy=new WeakMap;function Fg(r){let e=Gy.get(r);if(e==null){let t=new Map;return Gy.set(r,t),t}return e}var B=class r{code;version;multihash;bytes;"/";constructor(e,t,n,i){this.code=t,this.version=e,this.multihash=n,this.bytes=i,this["/"]=i}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!==fl)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==eP)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=or(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&Lg(e.multihash,n.multihash)}toString(e){return Ky(this,e)}toJSON(){return{"/":Ky(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:i,multihash:o,bytes:s}=t;return new r(n,i,o,s??Wy(n,i,o.bytes))}else if(t[tP]===!0){let{version:n,multihash:i,code:o}=t,s=pe(i);return r.create(n,o,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!==fl)throw new Error(`Version 0 CID must use dag-pb (code: ${fl}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let i=Wy(e,t,n.bytes);return new r(e,t,n,i)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,fl,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,i=on(e.subarray(n,n+t.multihashSize));if(i.byteLength!==t.multihashSize)throw new Error("Incorrect length");let o=i.subarray(t.multihashSize-t.digestSize),s=new fs(t.multihashCode,t.digestSize,o,i);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,h]=dl(e.subarray(t));return t+=h,d},i=n(),o=fl;if(i===18?(i=0,t=0):o=n(),i!==0&&i!==1)throw new RangeError(`Invalid CID version ${i}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:i,codec:o,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,i]=QC(e,t),o=r.decode(i);if(o.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Fg(o).set(n,e),o}};function QC(r,e){switch(r[0]){case"Q":{let t=e??ye;return[ye.prefix,t.decode(`${ye.prefix}${r}`)]}case ye.prefix:{let t=e??ye;return[ye.prefix,t.decode(r)]}case kt.prefix:{let t=e??kt;return[kt.prefix,t.decode(r)]}case mr.prefix:{let t=e??mr;return[mr.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 ZC(r,e,t){let{prefix:n}=t;if(n!==ye.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let i=e.get(n);if(i==null){let o=t.encode(r).slice(1);return e.set(n,o),o}else return i}function JC(r,e,t){let{prefix:n}=t,i=e.get(n);if(i==null){let o=t.encode(r);return e.set(n,o),o}else return i}var fl=112,eP=18;function Wy(r,e,t){let n=Ca(r),i=n+Ca(e),o=new Uint8Array(i+t.byteLength);return ka(r,o,0),ka(e,o,n),o.set(t,i),o}var tP=Symbol.for("@ipld/js-cid/CID");var ps={...Rg,...Ag,...Pg,...Eg,...Sg,...Ig,..._g,...kg,...Cg,...Tg},YK={...Mg,...Og};function Xy(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Yy=Xy("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Ug=Xy("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=at(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),rP={utf8:Yy,"utf-8":Yy,hex:ps.base16,latin1:Ug,ascii:Ug,binary:Ug,...ps},jd=rP;function C(r,e="utf8"){let t=jd[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function Hg(r){let e=r??8192,t=e>>>1,n,i=e;return function(s){if(s<1||s>t)return at(s);i+s>e&&(n=at(e),i=0);let a=n.subarray(i,i+=s);return(i&7)!==0&&(i=(i|7)+1),a}}var ms=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function zg(){}var Vg=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},nP=Hg();function iP(r){return globalThis.Buffer!=null?at(r):nP(r)}var pl=class{len;head;tail;states;constructor(){this.len=0,this.head=new ms(zg,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ms(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new qg((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(Qd,10,$r.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=$r.fromBigInt(e);return this._push(Qd,t.length(),t)}uint64Number(e){return this._push(ig,ve(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=$r.fromBigInt(e).zzEncode();return this._push(Qd,t.length(),t)}sint64Number(e){let t=$r.fromNumber(e).zzEncode();return this._push(Qd,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push($g,1,e?1:0)}fixed32(e){return this._push(hl,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=$r.fromBigInt(e);return this._push(hl,4,t.lo)._push(hl,4,t.hi)}fixed64Number(e){let t=$r.fromNumber(e);return this._push(hl,4,t.lo)._push(hl,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(Iy,4,e)}double(e){return this._push(ky,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push($g,1,0):this.uint32(t)._push(sP,t,e)}string(e){let t=Ry(e);return t!==0?this.uint32(t)._push(fg,t,e):this._push($g,1,0)}fork(){return this.states=new Vg(this),this.head=this.tail=new ms(zg,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 ms(zg,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=iP(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function $g(r,e,t){e[t]=r&255}function oP(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var qg=class extends ms{next;constructor(e,t){super(oP,e,t),this.next=void 0}};function Qd(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 hl(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&&(pl.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(aP,e,r),this},pl.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?fg(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function Kg(){return new pl}function re(r,e){let t=Kg();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Pa;(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"})(Pa||(Pa={}));function Zd(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function Ye(r){function e(i){if(r[i.toString()]==null)throw new Error("Invalid enum value");return r[i]}let t=function(o,s){let a=e(o);s.int32(a)},n=function(o){let s=o.int32();return e(s)};return Zd("enum",Pa.VARINT,t,n)}function ne(r,e){return Zd("message",Pa.LENGTH_DELIMITED,r,e)}var Ve=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},ml=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var yt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(yt||(yt={}));var Gg;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Gg||(Gg={}));(function(r){r.codec=()=>Ye(Gg)})(yt||(yt={}));var Ra;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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),yt.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={cid:le(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.priority=t.int32();break}case 3:{o.cancel=t.bool();break}case 4:{o.wantType=yt.codec().decode(t);break}case 5:{o.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ra||(Ra={}));var Jd;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let o of t.entries)n.uint32(10),Ra.codec().encode(o,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(i.limits?.entries!=null&&o.entries.length===i.limits.entries)throw new Ve('Decode error - map field "entries" had too many elements');o.entries.push(Ra.codec().decode(t,t.uint32(),{limits:i.limits?.entries$}));break}case 2:{o.full=t.bool();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Jd||(Jd={}));var Da;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={prefix:le(0),data:le(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.prefix=t.bytes();break}case 2:{o.data=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Da||(Da={}));var sn;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(sn||(sn={}));var ef;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(ef||(ef={}));(function(r){r.codec=()=>Ye(ef)})(sn||(sn={}));var Na;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&ef[t.type]!==0&&(n.uint32(16),sn.codec().encode(t.type,n)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={cid:le(0),type:sn.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.type=sn.codec().decode(t);break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Na||(Na={}));var gs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Jd.codec().encode(t.wantlist,n)),t.blocks!=null)for(let o of t.blocks)n.uint32(26),Da.codec().encode(o,n);if(t.blockPresences!=null)for(let o of t.blockPresences)n.uint32(34),Na.codec().encode(o,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.wantlist=Jd.codec().decode(t,t.uint32(),{limits:i.limits?.wantlist});break}case 3:{if(i.limits?.blocks!=null&&o.blocks.length===i.limits.blocks)throw new Ve('Decode error - map field "blocks" had too many elements');o.blocks.push(Da.codec().decode(t,t.uint32(),{limits:i.limits?.blocks$}));break}case 4:{if(i.limits?.blockPresences!=null&&o.blockPresences.length===i.limits.blockPresences)throw new Ve('Decode error - map field "blockPresences" had too many elements');o.blockPresences.push(Na.codec().decode(t,t.uint32(),{limits:i.limits?.blockPresences$}));break}case 5:{o.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(gs||(gs={}));function jy(r,e){for(let[t,n]of e.wantlist.entries()){let i=r.wantlist.get(t);i!=null&&(i.priority>n.priority&&(n.priority=i.priority),n.cancel=n.cancel??i.cancel,n.wantType=n.wantType??i.wantType,n.sendDontHave=n.sendDontHave??i.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 tf=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var lP=4193648,uP=lP+16;function*Qy(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],i=[...r.blocks.values()],o=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=gs.encode(l).byteLength,{added:d,hasMore:h,newSize:f}=Wg(i,l.blocks,a,e,u,dP);a+=d,u=f;let p=h;({added:d,hasMore:h,newSize:f}=Wg(n,l.blockPresences,s,e,u,fP)),s+=d,u=f;let m=h;if({added:d,hasMore:h,newSize:f}=Wg(t,l.wantlist.entries,o,e,u,hP),o+=d,u=f,c=!p&&!m&&!h,c||(l.wantlist.full=!1),yield gs.encode(l),c)break}}function Wg(r,e,t,n,i,o){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=o(l);if(u>uP)throw new tf("Cannot send block as after encoding it is over the max message size");let d=i+u;if(d>n){a=!0;break}e.push(l),s++,i=d}return{hasMore:a,added:s,newSize:i}}function dP(r){return Yg(3,Da.encode(r))}function fP(r){return Yg(4,Na.encode(r))}function hP(r){return Yg(1,Ra.encode(r))}function Yg(r,e){let t=ve(r),n=ve(e.byteLength);return t+n+e.byteLength}var rf=class extends be{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??[cl],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 Vt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let i=()=>{t.status==="open"?t.abort(new ei(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},o=AbortSignal.timeout(this.messageReceiveTimeout);o.addEventListener("abort",i),await t.closeWrite(),await Re(t,s=>An(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=gs.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),o.removeEventListener("abort",i),o=AbortSignal.timeout(this.messageReceiveTimeout),o.addEventListener("abort",i)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(i=>{this.log.error("error handling incoming stream from %p",n.remotePeer,i),t.abort(i)})}async*findProviders(e,t){t?.onProgress?.(new M("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Lt(Je(ao(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let i=this.sendQueue.queue.find(o=>e.equals(o.options.peerId)&&o.status==="queued");if(i!=null){i.options.message=jy(i.options.message,t),await i.join({signal:n?.signal});return}await this.sendQueue.add(async o=>{let s=o?.message;if(s==null)throw new O("No message to send");this.log("sendMessage to %p",e),o?.onProgress?.(new M("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,cl,o);await a.closeRead();try{await Re(Qy(s,this.maxOutgoingMessageSize),c=>Sn(c),a),await a.close(o)}catch(c){o?.onProgress?.(new M("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",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 vn("Network isn't running");t?.onProgress?.(new M("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),Nt(this.libp2p,"peer:identify",t?.signal,{filter:i=>{if(!i.detail.peerId.equals(e))return!1;if(i.detail.protocols.includes(cl))return!0;throw new xi(`${e} did not support ${cl}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function uo(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function EP(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function La(r,...e){if(!EP(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ys(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");uo(r.outputLen),uo(r.blockLen)}function Oa(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 Zy(r,e){La(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var ws=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function xs(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function In(r,e){return r<<32-e|r>>>e}function nf(r,e){return r<<e|r>>>32-e>>>0}var SP=async()=>{};async function Jy(r,e,t){let n=Date.now();for(let i=0;i<r;i++){t(i);let o=Date.now()-n;o>=0&&o<e||(await SP(),n+=o)}}function e7(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function _n(r){return typeof r=="string"&&(r=e7(r)),La(r),r}function Xg(...r){let e=0;for(let n=0;n<r.length;n++){let i=r[n];La(i),e+=i.length}let t=new Uint8Array(e);for(let n=0,i=0;n<r.length;n++){let o=r[n];t.set(o,i),i+=o.length}return t}var Ba=class{clone(){return this._cloneInto()}};function t7(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Ma(r){let e=n=>r().update(_n(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function bs(r=32){if(ws&&typeof ws.getRandomValues=="function")return ws.getRandomValues(new Uint8Array(r));if(ws&&typeof ws.randomBytes=="function")return ws.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function AP(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function of(r,e,t){return r&e^~r&t}function sf(r,e,t){return r&e^r&t^e&t}var fo=class extends Ba{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=xs(this.buffer)}update(e){Oa(this);let{view:t,buffer:n,blockLen:i}=this;e=_n(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=xs(e);for(;i<=o-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Oa(this),Zy(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let d=s;d<i;d++)t[d]=0;AP(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=xs(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should 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],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var af=BigInt(4294967295),jg=BigInt(32);function r7(r,e=!1){return e?{h:Number(r&af),l:Number(r>>jg&af)}:{h:Number(r>>jg&af)|0,l:Number(r&af)|0}}function TP(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let i=0;i<r.length;i++){let{h:o,l:s}=r7(r[i],e);[t[i],n[i]]=[o,s]}return[t,n]}var IP=(r,e)=>BigInt(r>>>0)<<jg|BigInt(e>>>0),_P=(r,e,t)=>r>>>t,kP=(r,e,t)=>r<<32-t|e>>>t,CP=(r,e,t)=>r>>>t|e<<32-t,PP=(r,e,t)=>r<<32-t|e>>>t,RP=(r,e,t)=>r<<64-t|e>>>t-32,DP=(r,e,t)=>r>>>t-32|e<<64-t,NP=(r,e)=>e,LP=(r,e)=>r,OP=(r,e,t)=>r<<t|e>>>32-t,BP=(r,e,t)=>e<<t|r>>>32-t,MP=(r,e,t)=>e<<t-32|r>>>64-t,FP=(r,e,t)=>r<<t-32|e>>>64-t;function UP(r,e,t,n){let i=(e>>>0)+(n>>>0);return{h:r+t+(i/2**32|0)|0,l:i|0}}var HP=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),zP=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,$P=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),VP=(r,e,t,n,i)=>e+t+n+i+(r/2**32|0)|0,qP=(r,e,t,n,i)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(i>>>0),KP=(r,e,t,n,i,o)=>e+t+n+i+o+(r/2**32|0)|0;var GP={fromBig:r7,split:TP,toBig:IP,shrSH:_P,shrSL:kP,rotrSH:CP,rotrSL:PP,rotrBH:RP,rotrBL:DP,rotr32H:NP,rotr32L:LP,rotlSH:OP,rotlSL:BP,rotlBH:MP,rotlBL:FP,add:UP,add3L:HP,add3H:zP,add4L:$P,add4H:VP,add5H:KP,add5L:qP},fe=GP;var[WP,YP]=fe.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),ho=new Uint32Array(80),po=new Uint32Array(80),Qg=class extends fo{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:i,Ch:o,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:h,Gh:f,Gl:p,Hh:m,Hl:g}=this;return[e,t,n,i,o,s,a,c,l,u,d,h,f,p,m,g]}set(e,t,n,i,o,s,a,c,l,u,d,h,f,p,m,g){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=i|0,this.Ch=o|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=h|0,this.Gh=f|0,this.Gl=p|0,this.Hh=m|0,this.Hl=g|0}process(e,t){for(let x=0;x<16;x++,t+=4)ho[x]=e.getUint32(t),po[x]=e.getUint32(t+=4);for(let x=16;x<80;x++){let b=ho[x-15]|0,A=po[x-15]|0,k=fe.rotrSH(b,A,1)^fe.rotrSH(b,A,8)^fe.shrSH(b,A,7),E=fe.rotrSL(b,A,1)^fe.rotrSL(b,A,8)^fe.shrSL(b,A,7),S=ho[x-2]|0,T=po[x-2]|0,$=fe.rotrSH(S,T,19)^fe.rotrBH(S,T,61)^fe.shrSH(S,T,6),R=fe.rotrSL(S,T,19)^fe.rotrBL(S,T,61)^fe.shrSL(S,T,6),H=fe.add4L(E,R,po[x-7],po[x-16]),F=fe.add4H(H,k,$,ho[x-7],ho[x-16]);ho[x]=F|0,po[x]=H|0}let{Ah:n,Al:i,Bh:o,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:h,Fh:f,Fl:p,Gh:m,Gl:g,Hh:y,Hl:w}=this;for(let x=0;x<80;x++){let b=fe.rotrSH(d,h,14)^fe.rotrSH(d,h,18)^fe.rotrBH(d,h,41),A=fe.rotrSL(d,h,14)^fe.rotrSL(d,h,18)^fe.rotrBL(d,h,41),k=d&f^~d&m,E=h&p^~h&g,S=fe.add5L(w,A,E,YP[x],po[x]),T=fe.add5H(S,y,b,k,WP[x],ho[x]),$=S|0,R=fe.rotrSH(n,i,28)^fe.rotrBH(n,i,34)^fe.rotrBH(n,i,39),H=fe.rotrSL(n,i,28)^fe.rotrBL(n,i,34)^fe.rotrBL(n,i,39),F=n&o^n&a^o&a,N=i&s^i&c^s&c;y=m|0,w=g|0,m=f|0,g=p|0,f=d|0,p=h|0,{h:d,l:h}=fe.add(l|0,u|0,T|0,$|0),l=a|0,u=c|0,a=o|0,c=s|0,o=n|0,s=i|0;let L=fe.add3L($,H,N);n=fe.add3H(L,T,R,F),i=L|0}({h:n,l:i}=fe.add(this.Ah|0,this.Al|0,n|0,i|0)),{h:o,l:s}=fe.add(this.Bh|0,this.Bl|0,o|0,s|0),{h:a,l:c}=fe.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=fe.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:h}=fe.add(this.Eh|0,this.El|0,d|0,h|0),{h:f,l:p}=fe.add(this.Fh|0,this.Fl|0,f|0,p|0),{h:m,l:g}=fe.add(this.Gh|0,this.Gl|0,m|0,g|0),{h:y,l:w}=fe.add(this.Hh|0,this.Hl|0,y|0,w|0),this.set(n,i,o,s,a,c,l,u,d,h,f,p,m,g,y,w)}roundClean(){ho.fill(0),po.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var mo=Ma(()=>new Qg);var uf={};ot(uf,{aInRange:()=>qt,abool:()=>kn,abytes:()=>Fa,bitGet:()=>eR,bitLen:()=>t3,bitMask:()=>yl,bitSet:()=>tR,bytesToHex:()=>Ei,bytesToNumberBE:()=>Si,bytesToNumberLE:()=>Cn,concatBytes:()=>Ti,createHmacDrbg:()=>r3,ensureBytes:()=>Xe,equalBytes:()=>ZP,hexToBytes:()=>Es,hexToNumber:()=>e3,inRange:()=>gl,isBytes:()=>go,memoized:()=>Ss,notImplemented:()=>nR,numberToBytesBE:()=>yo,numberToBytesLE:()=>Ai,numberToHexUnpadded:()=>vs,numberToVarBytesBE:()=>QP,utf8ToBytes:()=>JP,validateObject:()=>an});var cf=BigInt(0),lf=BigInt(1),XP=BigInt(2);function go(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Fa(r){if(!go(r))throw new Error("Uint8Array expected")}function kn(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}var jP=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Ei(r){Fa(r);let e="";for(let t=0;t<r.length;t++)e+=jP[r[t]];return e}function vs(r){let e=r.toString(16);return e.length&1?"0"+e:e}function e3(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?cf:BigInt("0x"+r)}var vi={_0:48,_9:57,A:65,F:70,a:97,f:102};function n7(r){if(r>=vi._0&&r<=vi._9)return r-vi._0;if(r>=vi.A&&r<=vi.F)return r-(vi.A-10);if(r>=vi.a&&r<=vi.f)return r-(vi.a-10)}function Es(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let i=0,o=0;i<t;i++,o+=2){let s=n7(r.charCodeAt(o)),a=n7(r.charCodeAt(o+1));if(s===void 0||a===void 0){let c=r[o]+r[o+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+o)}n[i]=s*16+a}return n}function Si(r){return e3(Ei(r))}function Cn(r){return Fa(r),e3(Ei(Uint8Array.from(r).reverse()))}function yo(r,e){return Es(r.toString(16).padStart(e*2,"0"))}function Ai(r,e){return yo(r,e).reverse()}function QP(r){return Es(vs(r))}function Xe(r,e,t){let n;if(typeof e=="string")try{n=Es(e)}catch(o){throw new Error(r+" must be hex string or Uint8Array, cause: "+o)}else if(go(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let i=n.length;if(typeof t=="number"&&i!==t)throw new Error(r+" of length "+t+" expected, got "+i);return n}function Ti(...r){let e=0;for(let n=0;n<r.length;n++){let i=r[n];Fa(i),e+=i.length}let t=new Uint8Array(e);for(let n=0,i=0;n<r.length;n++){let o=r[n];t.set(o,i),i+=o.length}return t}function ZP(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function JP(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}var Zg=r=>typeof r=="bigint"&&cf<=r;function gl(r,e,t){return Zg(r)&&Zg(e)&&Zg(t)&&e<=r&&r<t}function qt(r,e,t,n){if(!gl(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function t3(r){let e;for(e=0;r>cf;r>>=lf,e+=1);return e}function eR(r,e){return r>>BigInt(e)&lf}function tR(r,e,t){return r|(t?lf:cf)<<BigInt(e)}var yl=r=>(XP<<BigInt(r-1))-lf,Jg=r=>new Uint8Array(r),i7=r=>Uint8Array.from(r);function r3(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=Jg(r),i=Jg(r),o=0,s=()=>{n.fill(1),i.fill(0),o=0},a=(...d)=>t(i,n,...d),c=(d=Jg())=>{i=a(i7([0]),d),n=a(),d.length!==0&&(i=a(i7([1]),d),n=a())},l=()=>{if(o++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,h=[];for(;d<e;){n=a();let f=n.slice();h.push(f),d+=n.length}return Ti(...h)};return(d,h)=>{s(),c(d);let f;for(;!(f=h(l()));)c();return s(),f}}var rR={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||go(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function an(r,e,t={}){let n=(i,o,s)=>{let a=rR[o];if(typeof a!="function")throw new Error("invalid validator function");let c=r[i];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(i)+" is invalid. Expected "+o+", got "+c)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(t))n(i,o,!0);return r}var nR=()=>{throw new Error("not implemented")};function Ss(r){let e=new WeakMap;return(t,...n)=>{let i=e.get(t);if(i!==void 0)return i;let o=r(t,...n);return e.set(t,o),o}}var Ct=BigInt(0),et=BigInt(1),As=BigInt(2),iR=BigInt(3),n3=BigInt(4),o7=BigInt(5),s7=BigInt(8),oR=BigInt(9),sR=BigInt(16);function De(r,e){let t=r%e;return t>=Ct?t:e+t}function i3(r,e,t){if(e<Ct)throw new Error("invalid exponent, negatives unsupported");if(t<=Ct)throw new Error("invalid modulus");if(t===et)return Ct;let n=et;for(;e>Ct;)e&et&&(n=n*r%t),r=r*r%t,e>>=et;return n}function je(r,e,t){let n=r;for(;e-- >Ct;)n*=n,n%=t;return n}function df(r,e){if(r===Ct)throw new Error("invert: expected non-zero number");if(e<=Ct)throw new Error("invert: expected positive modulus, got "+e);let t=De(r,e),n=e,i=Ct,o=et,s=et,a=Ct;for(;t!==Ct;){let l=n/t,u=n%t,d=i-s*l,h=o-a*l;n=t,t=u,i=s,o=a,s=d,a=h}if(n!==et)throw new Error("invert: does not exist");return De(i,e)}function aR(r){let e=(r-et)/As,t,n,i;for(t=r-et,n=0;t%As===Ct;t/=As,n++);for(i=As;i<r&&i3(i,e,r)!==r-et;i++)if(i>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+et)/n3;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let o=(t+et)/As;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,i),t),d=a.pow(c,o),h=a.pow(c,t);for(;!a.eql(h,a.ONE);){if(a.eql(h,a.ZERO))return a.ZERO;let f=1;for(let m=a.sqr(h);f<l&&!a.eql(m,a.ONE);f++)m=a.sqr(m);let p=a.pow(u,et<<BigInt(l-f-1));u=a.sqr(p),d=a.mul(d,p),h=a.mul(h,u),l=f}return d}}function cR(r){if(r%n3===iR){let e=(r+et)/n3;return function(n,i){let o=n.pow(i,e);if(!n.eql(n.sqr(o),i))throw new Error("Cannot find square root");return o}}if(r%s7===o7){let e=(r-o7)/s7;return function(n,i){let o=n.mul(i,As),s=n.pow(o,e),a=n.mul(i,s),c=n.mul(n.mul(a,As),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),i))throw new Error("Cannot find square root");return l}}return r%sR,aR(r)}var a7=(r,e)=>(De(r,e)&et)===et,lR=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function o3(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=lR.reduce((n,i)=>(n[i]="function",n),e);return an(r,t)}function uR(r,e,t){if(t<Ct)throw new Error("invalid exponent, negatives unsupported");if(t===Ct)return r.ONE;if(t===et)return e;let n=r.ONE,i=e;for(;t>Ct;)t&et&&(n=r.mul(n,i)),i=r.sqr(i),t>>=et;return n}function dR(r,e){let t=new Array(e.length),n=e.reduce((o,s,a)=>r.is0(s)?o:(t[a]=o,r.mul(o,s)),r.ONE),i=r.inv(n);return e.reduceRight((o,s,a)=>r.is0(s)?o:(t[a]=r.mul(o,t[a]),r.mul(o,s)),i),t}function s3(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function wo(r,e,t=!1,n={}){if(r<=Ct)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:i,nByteLength:o}=s3(r,e);if(o>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:i,BYTES:o,MASK:yl(i),ZERO:Ct,ONE:et,create:c=>De(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return Ct<=c&&c<r},is0:c=>c===Ct,isOdd:c=>(c&et)===et,neg:c=>De(-c,r),eql:(c,l)=>c===l,sqr:c=>De(c*c,r),add:(c,l)=>De(c+l,r),sub:(c,l)=>De(c-l,r),mul:(c,l)=>De(c*l,r),pow:(c,l)=>uR(a,c,l),div:(c,l)=>De(c*df(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>df(c,r),sqrt:n.sqrt||(c=>(s||(s=cR(r)),s(a,c))),invertBatch:c=>dR(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?Ai(c,o):yo(c,o),fromBytes:c=>{if(c.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+c.length);return t?Cn(c):Si(c)}});return Object.freeze(a)}function c7(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 a3(r){let e=c7(r);return e+Math.ceil(e/2)}function l7(r,e,t=!1){let n=r.length,i=c7(e),o=a3(e);if(n<16||n<o||n>1024)throw new Error("expected "+o+"-1024 bytes of input, got "+n);let s=t?Cn(r):Si(r),a=De(s,e-et)+et;return t?Ai(a,i):yo(a,i)}var u7=BigInt(0),ff=BigInt(1);function c3(r,e){let t=e.negate();return r?t:e}function d7(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function l3(r,e){d7(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1);return{windows:t,windowSize:n}}function fR(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function hR(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var u3=new WeakMap,f7=new WeakMap;function d3(r){return f7.get(r)||1}function hf(r,e){return{constTimeNegate:c3,hasPrecomputes(t){return d3(t)!==1},unsafeLadder(t,n,i=r.ZERO){let o=t;for(;n>u7;)n&ff&&(i=i.add(o)),o=o.double(),n>>=ff;return i},precomputeWindow(t,n){let{windows:i,windowSize:o}=l3(n,e),s=[],a=t,c=a;for(let l=0;l<i;l++){c=a,s.push(c);for(let u=1;u<o;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,i){let{windows:o,windowSize:s}=l3(t,e),a=r.ZERO,c=r.BASE,l=BigInt(2**t-1),u=2**t,d=BigInt(t);for(let h=0;h<o;h++){let f=h*s,p=Number(i&l);i>>=d,p>s&&(p-=u,i+=ff);let m=f,g=f+Math.abs(p)-1,y=h%2!==0,w=p<0;p===0?c=c.add(c3(y,n[m])):a=a.add(c3(w,n[g]))}return{p:a,f:c}},wNAFUnsafe(t,n,i,o=r.ZERO){let{windows:s,windowSize:a}=l3(t,e),c=BigInt(2**t-1),l=2**t,u=BigInt(t);for(let d=0;d<s;d++){let h=d*a;if(i===u7)break;let f=Number(i&c);if(i>>=u,f>a&&(f-=l,i+=ff),f===0)continue;let p=n[h+Math.abs(f)-1];f<0&&(p=p.negate()),o=o.add(p)}return o},getPrecomputes(t,n,i){let o=u3.get(n);return o||(o=this.precomputeWindow(n,t),t!==1&&u3.set(n,i(o))),o},wNAFCached(t,n,i){let o=d3(t);return this.wNAF(o,this.getPrecomputes(o,t,i),n)},wNAFCachedUnsafe(t,n,i,o){let s=d3(t);return s===1?this.unsafeLadder(t,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,t,i),n,o)},setWindowSize(t,n){d7(n,e),f7.set(t,n),u3.delete(t)}}}function pf(r,e,t,n){if(fR(t,r),hR(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let i=r.ZERO,o=t3(BigInt(t.length)),s=o>12?o-3:o>4?o-2:o?2:1,a=(1<<s)-1,c=new Array(a+1).fill(i),l=Math.floor((e.BITS-1)/s)*s,u=i;for(let d=l;d>=0;d-=s){c.fill(i);for(let f=0;f<n.length;f++){let p=n[f],m=Number(p>>BigInt(d)&BigInt(a));c[m]=c[m].add(t[f])}let h=i;for(let f=c.length-1,p=i;f>0;f--)p=p.add(c[f]),h=h.add(p);if(u=u.add(h),d!==0)for(let f=0;f<s;f++)u=u.double()}return u}function wl(r){return o3(r.Fp),an(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...s3(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Pn=BigInt(0),Tr=BigInt(1),mf=BigInt(2),pR=BigInt(8),mR={zip215:!0};function gR(r){let e=wl(r);return an(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function h7(r){let e=gR(r),{Fp:t,n,prehash:i,hash:o,randomBytes:s,nByteLength:a,h:c}=e,l=mf<<BigInt(a*8)-Tr,u=t.create,d=wo(e.n,e.nBitLength),h=e.uvRatio||((_,I)=>{try{return{isValid:!0,value:t.sqrt(_*t.inv(I))}}catch{return{isValid:!1,value:Pn}}}),f=e.adjustScalarBytes||(_=>_),p=e.domain||((_,I,D)=>{if(kn("phflag",D),I.length||D)throw new Error("Contexts/pre-hash are not supported");return _});function m(_,I){qt("coordinate "+_,I,Pn,l)}function g(_){if(!(_ instanceof x))throw new Error("ExtendedPoint expected")}let y=Ss((_,I)=>{let{ex:D,ey:P,ez:q}=_,G=_.is0();I==null&&(I=G?pR:t.inv(q));let Y=u(D*I),ie=u(P*I),oe=u(q*I);if(G)return{x:Pn,y:Tr};if(oe!==Tr)throw new Error("invZ was invalid");return{x:Y,y:ie}}),w=Ss(_=>{let{a:I,d:D}=e;if(_.is0())throw new Error("bad point: ZERO");let{ex:P,ey:q,ez:G,et:Y}=_,ie=u(P*P),oe=u(q*q),ue=u(G*G),xe=u(ue*ue),Ue=u(ie*I),He=u(ue*u(Ue+oe)),Ge=u(xe+u(D*u(ie*oe)));if(He!==Ge)throw new Error("bad point: equation left != right (1)");let Rt=u(P*q),Ht=u(G*Y);if(Rt!==Ht)throw new Error("bad point: equation left != right (2)");return!0});class x{constructor(I,D,P,q){this.ex=I,this.ey=D,this.ez=P,this.et=q,m("x",I),m("y",D),m("z",P),m("t",q),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(I){if(I instanceof x)throw new Error("extended point not allowed");let{x:D,y:P}=I||{};return m("x",D),m("y",P),new x(D,P,Tr,u(D*P))}static normalizeZ(I){let D=t.invertBatch(I.map(P=>P.ez));return I.map((P,q)=>P.toAffine(D[q])).map(x.fromAffine)}static msm(I,D){return pf(x,d,I,D)}_setWindowSize(I){k.setWindowSize(this,I)}assertValidity(){w(this)}equals(I){g(I);let{ex:D,ey:P,ez:q}=this,{ex:G,ey:Y,ez:ie}=I,oe=u(D*ie),ue=u(G*q),xe=u(P*ie),Ue=u(Y*q);return oe===ue&&xe===Ue}is0(){return this.equals(x.ZERO)}negate(){return new x(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:I}=e,{ex:D,ey:P,ez:q}=this,G=u(D*D),Y=u(P*P),ie=u(mf*u(q*q)),oe=u(I*G),ue=D+P,xe=u(u(ue*ue)-G-Y),Ue=oe+Y,He=Ue-ie,Ge=oe-Y,Rt=u(xe*He),Ht=u(Ue*Ge),Dt=u(xe*Ge),Hr=u(He*Ue);return new x(Rt,Ht,Hr,Dt)}add(I){g(I);let{a:D,d:P}=e,{ex:q,ey:G,ez:Y,et:ie}=this,{ex:oe,ey:ue,ez:xe,et:Ue}=I;if(D===BigInt(-1)){let uy=u((G-q)*(ue+oe)),dy=u((G+q)*(ue-oe)),Q2=u(dy-uy);if(Q2===Pn)return this.double();let fy=u(Y*mf*Ue),hy=u(ie*mf*xe),py=hy+fy,my=dy+uy,gy=hy-fy,dk=u(py*Q2),fk=u(my*gy),hk=u(py*gy),pk=u(Q2*my);return new x(dk,fk,pk,hk)}let He=u(q*oe),Ge=u(G*ue),Rt=u(ie*P*Ue),Ht=u(Y*xe),Dt=u((q+G)*(oe+ue)-He-Ge),Hr=Ht-Rt,yi=Ht+Rt,ol=u(Ge-D*He),ak=u(Dt*Hr),ck=u(yi*ol),lk=u(Dt*ol),uk=u(Hr*yi);return new x(ak,ck,uk,lk)}subtract(I){return this.add(I.negate())}wNAF(I){return k.wNAFCached(this,I,x.normalizeZ)}multiply(I){let D=I;qt("scalar",D,Tr,n);let{p:P,f:q}=this.wNAF(D);return x.normalizeZ([P,q])[0]}multiplyUnsafe(I,D=x.ZERO){let P=I;return qt("scalar",P,Pn,n),P===Pn?A:this.is0()||P===Tr?this:k.wNAFCachedUnsafe(this,P,x.normalizeZ,D)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return k.unsafeLadder(this,n).is0()}toAffine(I){return y(this,I)}clearCofactor(){let{h:I}=e;return I===Tr?this:this.multiplyUnsafe(I)}static fromHex(I,D=!1){let{d:P,a:q}=e,G=t.BYTES;I=Xe("pointHex",I,G),kn("zip215",D);let Y=I.slice(),ie=I[G-1];Y[G-1]=ie&-129;let oe=Cn(Y),ue=D?l:t.ORDER;qt("pointHex.y",oe,Pn,ue);let xe=u(oe*oe),Ue=u(xe-Tr),He=u(P*xe-q),{isValid:Ge,value:Rt}=h(Ue,He);if(!Ge)throw new Error("Point.fromHex: invalid y coordinate");let Ht=(Rt&Tr)===Tr,Dt=(ie&128)!==0;if(!D&&Rt===Pn&&Dt)throw new Error("Point.fromHex: x=0 and x_0=1");return Dt!==Ht&&(Rt=u(-Rt)),x.fromAffine({x:Rt,y:oe})}static fromPrivateKey(I){return T(I).point}toRawBytes(){let{x:I,y:D}=this.toAffine(),P=Ai(D,t.BYTES);return P[P.length-1]|=I&Tr?128:0,P}toHex(){return Ei(this.toRawBytes())}}x.BASE=new x(e.Gx,e.Gy,Tr,u(e.Gx*e.Gy)),x.ZERO=new x(Pn,Tr,Tr,Pn);let{BASE:b,ZERO:A}=x,k=hf(x,a*8);function E(_){return De(_,n)}function S(_){return E(Cn(_))}function T(_){let I=t.BYTES;_=Xe("private key",_,I);let D=Xe("hashed private key",o(_),2*I),P=f(D.slice(0,I)),q=D.slice(I,2*I),G=S(P),Y=b.multiply(G),ie=Y.toRawBytes();return{head:P,prefix:q,scalar:G,point:Y,pointBytes:ie}}function $(_){return T(_).pointBytes}function R(_=new Uint8Array,...I){let D=Ti(...I);return S(o(p(D,Xe("context",_),!!i)))}function H(_,I,D={}){_=Xe("message",_),i&&(_=i(_));let{prefix:P,scalar:q,pointBytes:G}=T(I),Y=R(D.context,P,_),ie=b.multiply(Y).toRawBytes(),oe=R(D.context,ie,G,_),ue=E(Y+oe*q);qt("signature.s",ue,Pn,n);let xe=Ti(ie,Ai(ue,t.BYTES));return Xe("result",xe,t.BYTES*2)}let F=mR;function N(_,I,D,P=F){let{context:q,zip215:G}=P,Y=t.BYTES;_=Xe("signature",_,2*Y),I=Xe("message",I),D=Xe("publicKey",D,Y),G!==void 0&&kn("zip215",G),i&&(I=i(I));let ie=Cn(_.slice(Y,2*Y)),oe,ue,xe;try{oe=x.fromHex(D,G),ue=x.fromHex(_.slice(0,Y),G),xe=b.multiplyUnsafe(ie)}catch{return!1}if(!G&&oe.isSmallOrder())return!1;let Ue=R(q,ue.toRawBytes(),oe.toRawBytes(),I);return ue.add(oe.multiplyUnsafe(Ue)).subtract(xe).clearCofactor().equals(x.ZERO)}return b._setWindowSize(8),{CURVE:e,getPublicKey:$,sign:H,verify:N,ExtendedPoint:x,utils:{getExtendedPublicKey:T,randomPrivateKey:()=>s(t.BYTES),precompute(_=8,I=x.BASE){return I._setWindowSize(_),I.multiply(BigInt(3)),I}}}}var Ua=BigInt(0),f3=BigInt(1);function yR(r){return an(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function p7(r){let e=yR(r),{P:t}=e,n=w=>De(w,t),i=e.montgomeryBits,o=Math.ceil(i/8),s=e.nByteLength,a=e.adjustScalarBytes||(w=>w),c=e.powPminus2||(w=>i3(w,t-BigInt(2),t));function l(w,x,b){let A=n(w*(x-b));return x=n(x-A),b=n(b+A),[x,b]}let u=(e.a-BigInt(2))/BigInt(4);function d(w,x){qt("u",w,Ua,t),qt("scalar",x,Ua,t);let b=x,A=w,k=f3,E=Ua,S=w,T=f3,$=Ua,R;for(let F=BigInt(i-1);F>=Ua;F--){let N=b>>F&f3;$^=N,R=l($,k,S),k=R[0],S=R[1],R=l($,E,T),E=R[0],T=R[1],$=N;let L=k+E,_=n(L*L),I=k-E,D=n(I*I),P=_-D,q=S+T,G=S-T,Y=n(G*L),ie=n(q*I),oe=Y+ie,ue=Y-ie;S=n(oe*oe),T=n(A*n(ue*ue)),k=n(_*D),E=n(P*(_+n(u*P)))}R=l($,k,S),k=R[0],S=R[1],R=l($,E,T),E=R[0],T=R[1];let H=c(E);return n(k*H)}function h(w){return Ai(n(w),o)}function f(w){let x=Xe("u coordinate",w,o);return s===32&&(x[31]&=127),Cn(x)}function p(w){let x=Xe("scalar",w),b=x.length;if(b!==o&&b!==s){let A=""+o+" or "+s;throw new Error("invalid scalar, expected "+A+" bytes, got "+b)}return Cn(a(x))}function m(w,x){let b=f(x),A=p(w),k=d(b,A);if(k===Ua)throw new Error("invalid private or public key received");return h(k)}let g=h(e.Gu);function y(w){return m(w,g)}return{scalarMult:m,scalarMultBase:y,getSharedSecret:(w,x)=>m(w,x),getPublicKey:w=>y(w),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:g}}var xl=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),m7=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),SW=BigInt(0),wR=BigInt(1),g7=BigInt(2),xR=BigInt(3),bR=BigInt(5),vR=BigInt(8);function y7(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),i=BigInt(80),o=xl,a=r*r%o*r%o,c=je(a,g7,o)*a%o,l=je(c,wR,o)*r%o,u=je(l,bR,o)*l%o,d=je(u,e,o)*u%o,h=je(d,t,o)*d%o,f=je(h,n,o)*h%o,p=je(f,i,o)*f%o,m=je(p,i,o)*f%o,g=je(m,e,o)*u%o;return{pow_p_5_8:je(g,g7,o)*r%o,b2:a}}function w7(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function ER(r,e){let t=xl,n=De(e*e*e,t),i=De(n*n*e,t),o=y7(r*i).pow_p_5_8,s=De(r*n*o,t),a=De(e*s*s,t),c=s,l=De(s*m7,t),u=a===r,d=a===De(-r,t),h=a===De(-r*m7,t);return u&&(s=c),(d||h)&&(s=l),a7(s,t)&&(s=De(-s,t)),{isValid:u||d,value:s}}var SR=wo(xl,void 0,!0),AR={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:SR,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:vR,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:mo,randomBytes:bs,adjustScalarBytes:w7,uvRatio:ER},bl=h7(AR);var vl=p7({P:xl,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=xl,{pow_p_5_8:t,b2:n}=y7(r);return De(je(t,xR,e)*n,e)},adjustScalarBytes:w7,randomBytes:bs});var Ha=32,ni=64,h3=32;function x7(){let r=bl.utils.randomPrivateKey(),e=bl.getPublicKey(r);return{privateKey:TR(r,e),publicKey:e}}function b7(r,e){let t=r.subarray(0,h3);return bl.sign(e instanceof Uint8Array?e:e.subarray(),t)}function v7(r,e,t){return bl.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function TR(r,e){let t=new Uint8Array(ni);for(let n=0;n<h3;n++)t[n]=r[n],t[h3+n]=e[n];return t}var El=class{type="Ed25519";raw;constructor(e){this.raw=$a(e,Ha)}toMultihash(){return At.digest(Ot(this))}toCID(){return B.createV1(114,this.toMultihash())}toString(){return ye.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return v7(this.raw,t,e)}},za=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=$a(e,ni),this.publicKey=new El(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return b7(this.raw,e)}};function p3(r){if(r.length>ni){r=$a(r,ni+Ha);let n=r.subarray(0,ni),i=r.subarray(ni,r.length);return new za(n,i)}r=$a(r,ni);let e=r.subarray(0,ni),t=r.subarray(Ha);return new za(e,t)}function m3(r){return r=$a(r,Ha),new El(r)}async function S7(){let{privateKey:r,publicKey:e}=x7();return new za(r,e)}function $a(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new O(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var ct;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(ct||(ct={}));var g3;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(g3||(g3={}));(function(r){r.codec=()=>Ye(g3)})(ct||(ct={}));var ii;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),ct.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.Type=ct.codec().decode(t);break}case 2:{o.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ii||(ii={}));var Sl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),ct.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.Type=ct.codec().decode(t);break}case 2:{o.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Sl||(Sl={}));var _l={};ot(_l,{MAX_RSA_KEY_SIZE:()=>v3,generateRSAKeyPair:()=>T3,jwkToJWKKeyPair:()=>O7,jwkToPkcs1:()=>MR,jwkToPkix:()=>S3,jwkToRSAPrivateKey:()=>L7,pkcs1ToJwk:()=>D7,pkcs1ToRSAPrivateKey:()=>xf,pkixToJwk:()=>N7,pkixToRSAPublicKey:()=>A3});var IR=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),xo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),bo=new Uint32Array(64),y3=class extends fo{constructor(){super(64,32,8,!1),this.A=xo[0]|0,this.B=xo[1]|0,this.C=xo[2]|0,this.D=xo[3]|0,this.E=xo[4]|0,this.F=xo[5]|0,this.G=xo[6]|0,this.H=xo[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:c}=this;return[e,t,n,i,o,s,a,c]}set(e,t,n,i,o,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|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)bo[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let h=bo[d-15],f=bo[d-2],p=In(h,7)^In(h,18)^h>>>3,m=In(f,17)^In(f,19)^f>>>10;bo[d]=m+bo[d-7]+p+bo[d-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let h=In(a,6)^In(a,11)^In(a,25),f=u+h+of(a,c,l)+IR[d]+bo[d]|0,m=(In(n,2)^In(n,13)^In(n,22))+sf(n,i,o)|0;u=l,l=c,c=a,a=s+f|0,s=o,o=i,i=n,n=f+m|0}n=n+this.A|0,i=i+this.B|0,o=o+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,i,o,s,a,c,l,u)}roundClean(){bo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var cn=Ma(()=>new y3);function U(r,e="utf8"){let t=jd[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var _R=parseInt("11111",2),x3=parseInt("10000000",2),kR=parseInt("01111111",2),T7={2:CR,3:DR,5:RR,6:PR,16:w3,22:w3,48:w3};function Al(r,e={offset:0}){let t=r[e.offset]&_R;if(e.offset++,T7[t]!=null)return T7[t](r,e);throw new Error("No decoder for tag "+t)}function gf(r,e){let t=0;if((r[e.offset]&x3)===x3){let n=r[e.offset]&kR,i="0x";e.offset++;for(let o=0;o<n;o++,e.offset++)i+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(i,16)}else t=r[e.offset],e.offset++;return t}function w3(r,e){gf(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Al(r,e);if(n===null)break;t.push(n)}return t}function CR(r,e){let t=gf(r,e),n=e.offset,i=e.offset+t,o=[];for(let s=n;s<i;s++)s===n&&r[s]===0||o.push(r[s]);return e.offset+=t,Uint8Array.from(o)}function PR(r,e){let t=gf(r,e);return e.offset+=t,["oid-unimplemented"]}function RR(r,e){return e.offset++,null}function DR(r,e){let t=gf(r,e),n=r[e.offset];e.offset++;let i=r.subarray(e.offset,e.offset+t);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return Al(i,{offset:0})}function NR(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new ee;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function b3(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=NR(r.byteLength);return new ee(Uint8Array.from([e.byteLength|x3]),e)}function ln(r){let e=new ee,t=parseInt("10000000",2);return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new ee(Uint8Array.from([2]),b3(e),e)}function I7(r){let e=Uint8Array.from([0]),t=new ee(e,r);return new ee(Uint8Array.from([3]),b3(t),t)}function yf(r){let e=new ee;for(let t of r)e.append(t);return new ee(Uint8Array.from([48]),b3(e),e)}function gr(r){if(isNaN(r)||r<=0)throw new O("random bytes length must be a Number bigger than 0");return bs(r)}var Tl=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Il=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},wf=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var _7={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new wf("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 Ir=_7;async function k7(r){let e=await Ir.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await LR(e);return{privateKey:t[0],publicKey:t[1]}}async function C7(r,e){let t=await Ir.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Ir.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function P7(r,e,t){let n=await Ir.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Ir.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function LR(r){if(r.privateKey==null||r.publicKey==null)throw new O("Private and public key are required");return Promise.all([Ir.get().subtle.exportKey("jwk",r.privateKey),Ir.get().subtle.exportKey("jwk",r.publicKey)])}function R7(r){if(r.kty!=="RSA")throw new O("invalid key type");if(r.n==null)throw new O("invalid key modulus");return C(r.n,"base64url").length*8}var Va=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=_l.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return B.createV1(114,this._multihash)}toString(){return ye.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return P7(this._key,t,e)}},kl=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=_l.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return C7(this._key,e)}};var v3=8192,E3=18,OR=1062,BR=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function D7(r){let e=Al(r);return{n:U(e[1],"base64url"),e:U(e[2],"base64url"),d:U(e[3],"base64url"),p:U(e[4],"base64url"),q:U(e[5],"base64url"),dp:U(e[6],"base64url"),dq:U(e[7],"base64url"),qi:U(e[8],"base64url"),kty:"RSA"}}function MR(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 O("JWK was missing components");return yf([ln(Uint8Array.from([0])),ln(C(r.n,"base64url")),ln(C(r.e,"base64url")),ln(C(r.d,"base64url")),ln(C(r.p,"base64url")),ln(C(r.q,"base64url")),ln(C(r.dp,"base64url")),ln(C(r.dq,"base64url")),ln(C(r.qi,"base64url"))]).subarray()}function N7(r){let e=Al(r,{offset:0});return{kty:"RSA",n:U(e[1][0],"base64url"),e:U(e[1][1],"base64url")}}function S3(r){if(r.n==null||r.e==null)throw new O("JWK was missing components");return yf([BR,I7(yf([ln(C(r.n,"base64url")),ln(C(r.e,"base64url"))]))]).subarray()}function xf(r){let e=D7(r);return L7(e)}function A3(r,e){if(r.byteLength>=OR)throw new wi("Key size is too large");let t=N7(r);if(e==null){let n=cn(ii.encode({Type:ct.RSA,Data:r}));e=or(E3,n)}return new Va(t,e)}function L7(r){if(R7(r)>v3)throw new O("Key size is too large");let e=O7(r),t=cn(ii.encode({Type:ct.RSA,Data:S3(e.publicKey)})),n=or(E3,t);return new kl(e.privateKey,new Va(e.publicKey,n))}async function T3(r){if(r>v3)throw new O("Key size is too large");let e=await k7(r),t=cn(ii.encode({Type:ct.RSA,Data:S3(e.publicKey)})),n=or(E3,t);return new kl(e.privateKey,new Va(e.publicKey,n))}function O7(r){if(r==null)throw new O("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var bf=class extends Ba{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ys(e);let n=_n(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);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),o.fill(0)}update(e){return Oa(this),this.iHash.update(e),this}digestInto(e){Oa(this),La(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:i,destroyed:o,blockLen:s,outputLen:a}=this;return e=e,e.finished=i,e.destroyed=o,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},vo=(r,e,t)=>new bf(r,e).update(t).digest();vo.create=(r,e)=>new bf(r,e);function B7(r){r.lowS!==void 0&&kn("lowS",r.lowS),r.prehash!==void 0&&kn("prehash",r.prehash)}function FR(r){let e=wl(r);an(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:i}=e;if(t){if(!n.eql(i,n.ZERO))throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:UR,hexToBytes:HR}=uf,I3=class extends Error{constructor(e=""){super(e)}},Ii={Err:I3,_tlv:{encode:(r,e)=>{let{Err:t}=Ii;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,i=vs(n);if(i.length/2&128)throw new t("tlv.encode: long form length too big");let o=n>127?vs(i.length/2|128):"";return vs(r)+o+i+e},decode(r,e){let{Err:t}=Ii,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 i=e[n++],o=!!(i&128),s=0;if(!o)s=i;else{let c=i&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}=Ii;if(r<_i)throw new e("integer: negative integers are not allowed");let t=vs(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}=Ii;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 UR(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Ii,i=typeof r=="string"?HR(r):r;Fa(i);let{v:o,l:s}=n.decode(48,i);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,o),{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}=Ii,n=e.encode(2,t.encode(r.r)),i=e.encode(2,t.encode(r.s)),o=n+i;return e.encode(48,o)}},_i=BigInt(0),Bt=BigInt(1),AY=BigInt(2),M7=BigInt(3),TY=BigInt(4);function zR(r){let e=FR(r),{Fp:t}=e,n=wo(e.n,e.nBitLength),i=e.toBytes||((m,g,y)=>{let w=g.toAffine();return Ti(Uint8Array.from([4]),t.toBytes(w.x),t.toBytes(w.y))}),o=e.fromBytes||(m=>{let g=m.subarray(1),y=t.fromBytes(g.subarray(0,t.BYTES)),w=t.fromBytes(g.subarray(t.BYTES,2*t.BYTES));return{x:y,y:w}});function s(m){let{a:g,b:y}=e,w=t.sqr(m),x=t.mul(w,m);return t.add(t.add(x,t.mul(m,g)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(m){return gl(m,Bt,e.n)}function c(m){let{allowedPrivateKeyLengths:g,nByteLength:y,wrapPrivateKey:w,n:x}=e;if(g&&typeof m!="bigint"){if(go(m)&&(m=Ei(m)),typeof m!="string"||!g.includes(m.length))throw new Error("invalid private key");m=m.padStart(y*2,"0")}let b;try{b=typeof m=="bigint"?m:Si(Xe("private key",m,y))}catch{throw new Error("invalid private key, expected hex or "+y+" bytes, got "+typeof m)}return w&&(b=De(b,x)),qt("private key",b,Bt,x),b}function l(m){if(!(m instanceof h))throw new Error("ProjectivePoint expected")}let u=Ss((m,g)=>{let{px:y,py:w,pz:x}=m;if(t.eql(x,t.ONE))return{x:y,y:w};let b=m.is0();g==null&&(g=b?t.ONE:t.inv(x));let A=t.mul(y,g),k=t.mul(w,g),E=t.mul(x,g);if(b)return{x:t.ZERO,y:t.ZERO};if(!t.eql(E,t.ONE))throw new Error("invZ was invalid");return{x:A,y:k}}),d=Ss(m=>{if(m.is0()){if(e.allowInfinityPoint&&!t.is0(m.py))return;throw new Error("bad point: ZERO")}let{x:g,y}=m.toAffine();if(!t.isValid(g)||!t.isValid(y))throw new Error("bad point: x or y not FE");let w=t.sqr(y),x=s(g);if(!t.eql(w,x))throw new Error("bad point: equation left != right");if(!m.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class h{constructor(g,y,w){if(this.px=g,this.py=y,this.pz=w,g==null||!t.isValid(g))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(w==null||!t.isValid(w))throw new Error("z required");Object.freeze(this)}static fromAffine(g){let{x:y,y:w}=g||{};if(!g||!t.isValid(y)||!t.isValid(w))throw new Error("invalid affine point");if(g instanceof h)throw new Error("projective point not allowed");let x=b=>t.eql(b,t.ZERO);return x(y)&&x(w)?h.ZERO:new h(y,w,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(g){let y=t.invertBatch(g.map(w=>w.pz));return g.map((w,x)=>w.toAffine(y[x])).map(h.fromAffine)}static fromHex(g){let y=h.fromAffine(o(Xe("pointHex",g)));return y.assertValidity(),y}static fromPrivateKey(g){return h.BASE.multiply(c(g))}static msm(g,y){return pf(h,n,g,y)}_setWindowSize(g){p.setWindowSize(this,g)}assertValidity(){d(this)}hasEvenY(){let{y:g}=this.toAffine();if(t.isOdd)return!t.isOdd(g);throw new Error("Field doesn't support isOdd")}equals(g){l(g);let{px:y,py:w,pz:x}=this,{px:b,py:A,pz:k}=g,E=t.eql(t.mul(y,k),t.mul(b,x)),S=t.eql(t.mul(w,k),t.mul(A,x));return E&&S}negate(){return new h(this.px,t.neg(this.py),this.pz)}double(){let{a:g,b:y}=e,w=t.mul(y,M7),{px:x,py:b,pz:A}=this,k=t.ZERO,E=t.ZERO,S=t.ZERO,T=t.mul(x,x),$=t.mul(b,b),R=t.mul(A,A),H=t.mul(x,b);return H=t.add(H,H),S=t.mul(x,A),S=t.add(S,S),k=t.mul(g,S),E=t.mul(w,R),E=t.add(k,E),k=t.sub($,E),E=t.add($,E),E=t.mul(k,E),k=t.mul(H,k),S=t.mul(w,S),R=t.mul(g,R),H=t.sub(T,R),H=t.mul(g,H),H=t.add(H,S),S=t.add(T,T),T=t.add(S,T),T=t.add(T,R),T=t.mul(T,H),E=t.add(E,T),R=t.mul(b,A),R=t.add(R,R),T=t.mul(R,H),k=t.sub(k,T),S=t.mul(R,$),S=t.add(S,S),S=t.add(S,S),new h(k,E,S)}add(g){l(g);let{px:y,py:w,pz:x}=this,{px:b,py:A,pz:k}=g,E=t.ZERO,S=t.ZERO,T=t.ZERO,$=e.a,R=t.mul(e.b,M7),H=t.mul(y,b),F=t.mul(w,A),N=t.mul(x,k),L=t.add(y,w),_=t.add(b,A);L=t.mul(L,_),_=t.add(H,F),L=t.sub(L,_),_=t.add(y,x);let I=t.add(b,k);return _=t.mul(_,I),I=t.add(H,N),_=t.sub(_,I),I=t.add(w,x),E=t.add(A,k),I=t.mul(I,E),E=t.add(F,N),I=t.sub(I,E),T=t.mul($,_),E=t.mul(R,N),T=t.add(E,T),E=t.sub(F,T),T=t.add(F,T),S=t.mul(E,T),F=t.add(H,H),F=t.add(F,H),N=t.mul($,N),_=t.mul(R,_),F=t.add(F,N),N=t.sub(H,N),N=t.mul($,N),_=t.add(_,N),H=t.mul(F,_),S=t.add(S,H),H=t.mul(I,_),E=t.mul(L,E),E=t.sub(E,H),H=t.mul(L,F),T=t.mul(I,T),T=t.add(T,H),new h(E,S,T)}subtract(g){return this.add(g.negate())}is0(){return this.equals(h.ZERO)}wNAF(g){return p.wNAFCached(this,g,h.normalizeZ)}multiplyUnsafe(g){let{endo:y,n:w}=e;qt("scalar",g,_i,w);let x=h.ZERO;if(g===_i)return x;if(this.is0()||g===Bt)return this;if(!y||p.hasPrecomputes(this))return p.wNAFCachedUnsafe(this,g,h.normalizeZ);let{k1neg:b,k1:A,k2neg:k,k2:E}=y.splitScalar(g),S=x,T=x,$=this;for(;A>_i||E>_i;)A&Bt&&(S=S.add($)),E&Bt&&(T=T.add($)),$=$.double(),A>>=Bt,E>>=Bt;return b&&(S=S.negate()),k&&(T=T.negate()),T=new h(t.mul(T.px,y.beta),T.py,T.pz),S.add(T)}multiply(g){let{endo:y,n:w}=e;qt("scalar",g,Bt,w);let x,b;if(y){let{k1neg:A,k1:k,k2neg:E,k2:S}=y.splitScalar(g),{p:T,f:$}=this.wNAF(k),{p:R,f:H}=this.wNAF(S);T=p.constTimeNegate(A,T),R=p.constTimeNegate(E,R),R=new h(t.mul(R.px,y.beta),R.py,R.pz),x=T.add(R),b=$.add(H)}else{let{p:A,f:k}=this.wNAF(g);x=A,b=k}return h.normalizeZ([x,b])[0]}multiplyAndAddUnsafe(g,y,w){let x=h.BASE,b=(k,E)=>E===_i||E===Bt||!k.equals(x)?k.multiplyUnsafe(E):k.multiply(E),A=b(this,y).add(b(g,w));return A.is0()?void 0:A}toAffine(g){return u(this,g)}isTorsionFree(){let{h:g,isTorsionFree:y}=e;if(g===Bt)return!0;if(y)return y(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:g,clearCofactor:y}=e;return g===Bt?this:y?y(h,this):this.multiplyUnsafe(e.h)}toRawBytes(g=!0){return kn("isCompressed",g),this.assertValidity(),i(h,this,g)}toHex(g=!0){return kn("isCompressed",g),Ei(this.toRawBytes(g))}}h.BASE=new h(e.Gx,e.Gy,t.ONE),h.ZERO=new h(t.ZERO,t.ONE,t.ZERO);let f=e.nBitLength,p=hf(h,e.endo?Math.ceil(f/2):f);return{CURVE:e,ProjectivePoint:h,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function $R(r){let e=wl(r);return an(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function F7(r){let e=$R(r),{Fp:t,n}=e,i=t.BYTES+1,o=2*t.BYTES+1;function s(N){return De(N,n)}function a(N){return df(N,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=zR({...e,toBytes(N,L,_){let I=L.toAffine(),D=t.toBytes(I.x),P=Ti;return kn("isCompressed",_),_?P(Uint8Array.from([L.hasEvenY()?2:3]),D):P(Uint8Array.from([4]),D,t.toBytes(I.y))},fromBytes(N){let L=N.length,_=N[0],I=N.subarray(1);if(L===i&&(_===2||_===3)){let D=Si(I);if(!gl(D,Bt,t.ORDER))throw new Error("Point is not on curve");let P=u(D),q;try{q=t.sqrt(P)}catch(ie){let oe=ie instanceof Error?": "+ie.message:"";throw new Error("Point is not on curve"+oe)}let G=(q&Bt)===Bt;return(_&1)===1!==G&&(q=t.neg(q)),{x:D,y:q}}else if(L===o&&_===4){let D=t.fromBytes(I.subarray(0,t.BYTES)),P=t.fromBytes(I.subarray(t.BYTES,2*t.BYTES));return{x:D,y:P}}else{let D=i,P=o;throw new Error("invalid Point, expected length of "+D+", or uncompressed "+P+", got "+L)}}}),h=N=>Ei(yo(N,e.nByteLength));function f(N){let L=n>>Bt;return N>L}function p(N){return f(N)?s(-N):N}let m=(N,L,_)=>Si(N.slice(L,_));class g{constructor(L,_,I){this.r=L,this.s=_,this.recovery=I,this.assertValidity()}static fromCompact(L){let _=e.nByteLength;return L=Xe("compactSignature",L,_*2),new g(m(L,0,_),m(L,_,2*_))}static fromDER(L){let{r:_,s:I}=Ii.toSig(Xe("DER",L));return new g(_,I)}assertValidity(){qt("r",this.r,Bt,n),qt("s",this.s,Bt,n)}addRecoveryBit(L){return new g(this.r,this.s,L)}recoverPublicKey(L){let{r:_,s:I,recovery:D}=this,P=k(Xe("msgHash",L));if(D==null||![0,1,2,3].includes(D))throw new Error("recovery id invalid");let q=D===2||D===3?_+e.n:_;if(q>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let G=(D&1)===0?"02":"03",Y=c.fromHex(G+h(q)),ie=a(q),oe=s(-P*ie),ue=s(I*ie),xe=c.BASE.multiplyAndAddUnsafe(Y,oe,ue);if(!xe)throw new Error("point at infinify");return xe.assertValidity(),xe}hasHighS(){return f(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return Es(this.toDERHex())}toDERHex(){return Ii.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Es(this.toCompactHex())}toCompactHex(){return h(this.r)+h(this.s)}}let y={isValidPrivateKey(N){try{return l(N),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let N=a3(e.n);return l7(e.randomBytes(N),e.n)},precompute(N=8,L=c.BASE){return L._setWindowSize(N),L.multiply(BigInt(3)),L}};function w(N,L=!0){return c.fromPrivateKey(N).toRawBytes(L)}function x(N){let L=go(N),_=typeof N=="string",I=(L||_)&&N.length;return L?I===i||I===o:_?I===2*i||I===2*o:N instanceof c}function b(N,L,_=!0){if(x(N))throw new Error("first arg must be private key");if(!x(L))throw new Error("second arg must be public key");return c.fromHex(L).multiply(l(N)).toRawBytes(_)}let A=e.bits2int||function(N){if(N.length>8192)throw new Error("input is too large");let L=Si(N),_=N.length*8-e.nBitLength;return _>0?L>>BigInt(_):L},k=e.bits2int_modN||function(N){return s(A(N))},E=yl(e.nBitLength);function S(N){return qt("num < 2^"+e.nBitLength,N,_i,E),yo(N,e.nByteLength)}function T(N,L,_=$){if(["recovered","canonical"].some(He=>He in _))throw new Error("sign() legacy options not supported");let{hash:I,randomBytes:D}=e,{lowS:P,prehash:q,extraEntropy:G}=_;P==null&&(P=!0),N=Xe("msgHash",N),B7(_),q&&(N=Xe("prehashed msgHash",I(N)));let Y=k(N),ie=l(L),oe=[S(ie),S(Y)];if(G!=null&&G!==!1){let He=G===!0?D(t.BYTES):G;oe.push(Xe("extraEntropy",He))}let ue=Ti(...oe),xe=Y;function Ue(He){let Ge=A(He);if(!d(Ge))return;let Rt=a(Ge),Ht=c.BASE.multiply(Ge).toAffine(),Dt=s(Ht.x);if(Dt===_i)return;let Hr=s(Rt*s(xe+Dt*ie));if(Hr===_i)return;let yi=(Ht.x===Dt?0:2)|Number(Ht.y&Bt),ol=Hr;return P&&f(Hr)&&(ol=p(Hr),yi^=1),new g(Dt,ol,yi)}return{seed:ue,k2sig:Ue}}let $={lowS:e.lowS,prehash:!1},R={lowS:e.lowS,prehash:!1};function H(N,L,_=$){let{seed:I,k2sig:D}=T(N,L,_),P=e;return r3(P.hash.outputLen,P.nByteLength,P.hmac)(I,D)}c.BASE._setWindowSize(8);function F(N,L,_,I=R){let D=N;L=Xe("msgHash",L),_=Xe("publicKey",_);let{lowS:P,prehash:q,format:G}=I;if(B7(I),"strict"in I)throw new Error("options.strict was renamed to lowS");if(G!==void 0&&G!=="compact"&&G!=="der")throw new Error("format must be compact or der");let Y=typeof D=="string"||go(D),ie=!Y&&!G&&typeof D=="object"&&D!==null&&typeof D.r=="bigint"&&typeof D.s=="bigint";if(!Y&&!ie)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let oe,ue;try{if(ie&&(oe=new g(D.r,D.s)),Y){try{G!=="compact"&&(oe=g.fromDER(D))}catch(yi){if(!(yi instanceof Ii.Err))throw yi}!oe&&G!=="der"&&(oe=g.fromCompact(D))}ue=c.fromHex(_)}catch{return!1}if(!oe||P&&oe.hasHighS())return!1;q&&(L=e.hash(L));let{r:xe,s:Ue}=oe,He=k(L),Ge=a(Ue),Rt=s(He*Ge),Ht=s(xe*Ge),Dt=c.BASE.multiplyAndAddUnsafe(ue,Rt,Ht)?.toAffine();return Dt?s(Dt.x)===xe:!1}return{CURVE:e,getPublicKey:w,getSharedSecret:b,sign:H,verify:F,ProjectivePoint:c,Signature:g,utils:y}}function VR(r){return{hash:r,hmac:(e,...t)=>vo(r,e,Xg(...t)),randomBytes:bs}}function U7(r,e){let t=n=>F7({...r,...VR(n)});return{...t(e),create:t}}var $7=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),H7=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),qR=BigInt(1),_3=BigInt(2),z7=(r,e)=>(r+e/_3)/e;function KR(r){let e=$7,t=BigInt(3),n=BigInt(6),i=BigInt(11),o=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,h=je(d,t,e)*u%e,f=je(h,_3,e)*l%e,p=je(f,i,e)*f%e,m=je(p,o,e)*p%e,g=je(m,a,e)*m%e,y=je(g,c,e)*g%e,w=je(y,a,e)*m%e,x=je(w,t,e)*u%e,b=je(x,s,e)*p%e,A=je(b,n,e)*l%e,k=je(A,_3,e);if(!k3.eql(k3.sqr(k),r))throw new Error("Cannot find square root");return k}var k3=wo($7,void 0,void 0,{sqrt:KR}),un=U7({a:BigInt(0),b:BigInt(7),Fp:k3,n:H7,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=H7,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-qR*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),o=t,s=BigInt("0x100000000000000000000000000000000"),a=z7(o*r,e),c=z7(-n*r,e),l=De(r-a*t-c*i,e),u=De(-a*n-c*o,e),d=l>s,h=u>s;if(d&&(l=e-l),h&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:h,k2:u}}}},cn),LY=BigInt(0);var OY=un.ProjectivePoint;function C3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function V7(r,e){let t=Se.digest(e instanceof Uint8Array?e:e.subarray());if(C3(t))return t.then(({digest:n})=>un.sign(n,r).toDERRawBytes()).catch(n=>{throw new Tl(String(n))});try{return un.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Tl(String(n))}}function q7(r,e,t){let n=Se.digest(t instanceof Uint8Array?t:t.subarray());if(C3(n))return n.then(({digest:i})=>un.verify(e,i,r)).catch(i=>{throw new Il(String(i))});try{return un.verify(e,n.digest,r)}catch(i){throw new Il(String(i))}}var Cl=class{type="secp256k1";raw;_key;constructor(e){this._key=W7(e),this.raw=K7(this._key)}toMultihash(){return At.digest(Ot(this))}toCID(){return B.createV1(114,this.toMultihash())}toString(){return ye.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return q7(this._key,t,e)}},Pl=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=G7(e),this.publicKey=new Cl(t??Y7(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return V7(this.raw,e)}};function P3(r){return new Pl(r)}function R3(r){return new Cl(r)}async function X7(){let r=GR();return new Pl(r)}function K7(r){return un.ProjectivePoint.fromHex(r).toRawBytes(!0)}function G7(r){try{return un.getPublicKey(r,!0),r}catch(e){throw new sl(String(e))}}function W7(r){try{return un.ProjectivePoint.fromHex(r),r}catch(e){throw new wi(String(e))}}function Y7(r){try{return un.getPublicKey(r,!0)}catch(e){throw new sl(String(e))}}function GR(){return un.utils.randomPrivateKey()}async function vf(r,e){if(r==="Ed25519")return S7();if(r==="secp256k1")return X7();if(r==="RSA")return T3(e??2048);throw new En}function wt(r,e){let{Type:t,Data:n}=ii.decode(r),i=n??new Uint8Array;switch(t){case ct.RSA:return A3(i,e);case ct.Ed25519:return m3(i);case ct.secp256k1:return R3(i);default:throw new En}}function Ef(r){let{Type:e,Data:t}=ii.decode(r.digest),n=t??new Uint8Array;switch(e){case ct.Ed25519:return m3(n);case ct.secp256k1:return R3(n);default:throw new En}}function Ot(r){return ii.encode({Type:ct[r.type],Data:r.raw})}function j7(r){let e=Sl.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case ct.RSA:return xf(t);case ct.Ed25519:return p3(t);case ct.secp256k1:return P3(t);default:throw new En}}function Q7(r){return r.byteLength===64?p3(r):r.byteLength===32?P3(r):xf(r)}function qa(r){return Sl.encode({Type:ct[r.type],Data:r.raw})}var Z7=Symbol.for("nodejs.util.inspect.custom"),WR=114,Rl=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()})`}[Id]=!0;toString(){return this.string==null&&(this.string=ye.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return B.createV1(WR,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return J(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return J(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[Z7](){return`PeerId(${this.toString()})`}},Dl=class extends Rl{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Nl=class extends Rl{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Ll=class extends Rl{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},YR=2336,Ol=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=At.digest(C(this.url))}[Z7](){return`PeerId(${this.url})`}[Id]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return B.createV1(YR,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=U(e)),e.toString()===this.toString())}};var XR=114,J7=2336;function Ne(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=pe(ye.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Kt(B.parse(r));if(e==null)throw new O('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=pe(e.decode(r))}return Tt(t)}function oi(r){if(r.type==="Ed25519")return new Nl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Ll({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Dl({multihash:r.toCID().multihash,publicKey:r});throw new En}function ew(r){return oi(r.publicKey)}function Tt(r){if(QR(r))return new Dl({multihash:r});if(jR(r))try{let e=Ef(r);if(e.type==="Ed25519")return new Nl({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Ll({multihash:r,publicKey:e})}catch{let t=U(r.digest);return new Ol(new URL(t))}throw new oo("Supplied PeerID Multihash is invalid")}function Kt(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==XR&&r.code!==J7)throw new Dd("Supplied PeerID CID is invalid");if(r.code===J7){let e=U(r.multihash.digest);return new Ol(new URL(e))}return Tt(r.multihash)}function jR(r){return r.code===At.code}function QR(r){return r.code===Se.code}function Ts(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),i=n.value;return n.done===!0||i==null?{done:!0,value:void 0}:{done:!1,value:e(i)}}};return t}function Sf(r){let e=pe(ye.decode(`z${r}`));return Tt(e)}var Mt=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return Ts(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 Ts(this.map.values(),e=>e.key)}values(){return Ts(this.map.values(),e=>e.value)}get size(){return this.map.size}};var yr=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 Ts(this.set.entries(),e=>{let t=Sf(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Sf(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Ts(this.set.values(),e=>Sf(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 D3(){return new yr}function tw(r,e,t,n){ys(r);let i=t7({dkLen:32,asyncTick:10},n),{c:o,dkLen:s,asyncTick:a}=i;if(uo(o),uo(s),uo(a),o<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=_n(e),l=_n(t),u=new Uint8Array(s),d=vo.create(r,c),h=d._cloneInto().update(l);return{c:o,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:h}}function rw(r,e,t,n,i){return r.destroy(),e.destroy(),n&&n.destroy(),i.fill(0),t}function nw(r,e,t,n){let{c:i,dkLen:o,DK:s,PRF:a,PRFSalt:c}=tw(r,e,t,n),l,u=new Uint8Array(4),d=xs(u),h=new Uint8Array(a.outputLen);for(let f=1,p=0;p<o;f++,p+=a.outputLen){let m=s.subarray(p,p+a.outputLen);d.setInt32(0,f,!1),(l=c._cloneInto(l)).update(u).digestInto(h),m.set(h.subarray(0,m.length));for(let g=1;g<i;g++){a._cloneInto(l).update(h).digestInto(h);for(let y=0;y<m.length;y++)m[y]^=h[y]}}return rw(a,c,s,l,h)}async function Af(r,e,t,n){let{c:i,dkLen:o,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=tw(r,e,t,n),u,d=new Uint8Array(4),h=xs(d),f=new Uint8Array(c.outputLen);for(let p=1,m=0;m<o;p++,m+=c.outputLen){let g=a.subarray(m,m+c.outputLen);h.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(f),g.set(f.subarray(0,g.length)),await Jy(i-1,s,()=>{c._cloneInto(u).update(f).digestInto(f);for(let y=0;y<g.length;y++)g[y]^=f[y]})}return rw(c,l,a,u,f)}var Bl=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Eo=new Uint32Array(80),N3=class extends fo{constructor(){super(64,20,8,!1),this.A=Bl[0]|0,this.B=Bl[1]|0,this.C=Bl[2]|0,this.D=Bl[3]|0,this.E=Bl[4]|0}get(){let{A:e,B:t,C:n,D:i,E:o}=this;return[e,t,n,i,o]}set(e,t,n,i,o){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0}process(e,t){for(let c=0;c<16;c++,t+=4)Eo[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Eo[c]=nf(Eo[c-3]^Eo[c-8]^Eo[c-14]^Eo[c-16],1);let{A:n,B:i,C:o,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=of(i,o,s),u=1518500249):c<40?(l=i^o^s,u=1859775393):c<60?(l=sf(i,o,s),u=2400959708):(l=i^o^s,u=3395469782);let d=nf(n,5)+l+a+u+Eo[c]|0;a=s,s=o,o=nf(i,30),i=n,n=d}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,i,o,s,a)}roundClean(){Eo.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},iw=Ma(()=>new N3);var ow={sha1:iw,"sha2-256":cn,"sha2-512":mo};function Ml(r,e,t,n,i){if(i!=="sha1"&&i!=="sha2-256"&&i!=="sha2-512"){let a=Object.keys(ow).join(" / ");throw new O(`Hash '${i}' is unknown or not supported. Must be ${a}`)}let o=ow[i],s=nw(o,r,e,{c:t,dkLen:n});return St.encode(s).substring(1)}var L3={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},sw={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},aw=new globalThis.TextEncoder;function ZR(r,e){let t=L3[e],n=sw[e];for(let i=0;i<r.length;i++)n^=BigInt(r[i]),n=BigInt.asUintN(e,n*t);return n}function JR(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=L3[e],i=sw[e],o=r;for(;o.length>0;){let s=aw.encodeInto(o,t);o=o.slice(s.read);for(let a=0;a<s.written;a++)i^=BigInt(t[a]),i=BigInt.asUintN(e,i*n)}return i}function O3(r,{size:e=32,utf8Buffer:t}={}){if(!L3[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 JR(r,e,t);r=aw.encode(r)}return ZR(r,e)}var Fl={hash:r=>Number(O3(r,{size:32})),hashV:(r,e)=>eD(Fl.hash(r,e))};function eD(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),C(e,"base16")}var B3=64,Rn=class{fp;h;seed;constructor(e,t,n,i=2){if(i>B3)throw new TypeError("Invalid Fingerprint Size");let o=t.hashV(e,n),s=le(i);for(let a=0;a<s.length;a++)s[a]=o[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?J(this.fp,e.fp):!1}};function Is(r,e){return Math.floor(Math.random()*(e-r))+r}var _s=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Rn))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Rn))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 Rn))throw new TypeError("Invalid Fingerprint");let t=Is(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Rn))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var tD=500,Ul=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??Fl,this.seed=e.seed??Is(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=C(e));let t=new Rn(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,i=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new _s(this.bucketSize)),this.buckets[i]==null&&(this.buckets[i]=new _s(this.bucketSize)),this.buckets[n].add(t)||this.buckets[i].add(t))return this.count++,!0;let o=[n,i],s=o[Is(0,o.length-1)];this.buckets[s]==null&&(this.buckets[s]=new _s(this.bucketSize));for(let a=0;a<tD;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 _s(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=C(e));let t=new Rn(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,i=this.buckets[n]?.has(t)??!1;if(i)return i;let o=(n^t.hash())%this.filterSize;return this.buckets[o]?.has(t)??!1}remove(e){typeof e=="string"&&(e=C(e));let t=new Rn(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,i=this.buckets[n]?.remove(t)??!1;if(i)return this.count--,i;let o=(n^t.hash())%this.filterSize,s=this.buckets[o]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},rD={1:.5,2:.84,4:.95,8:.98};function nD(r=.001){return r>.002?2:r>1e-5?4:8}function cw(r,e=.001){let t=nD(e),n=rD[t],i=Math.round(r/n),o=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),B3);return{filterSize:i,bucketSize:t,fingerprintSize:o}}var Tf=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??Fl,this.seed=e.seed??Is(0,Math.pow(2,10)),this.filterSeries=[new Ul({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 Ul({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 _r(r,e=.001,t){return new Tf({...cw(r,e),...t??{}})}var If=class{filter;constructor(e,t){this.filter=_r(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 M3(r,e=.001){return new If(r,e)}var F3=class extends Mt{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Hl(r){let{name:e,metrics:t}=r,n;return t!=null?n=new F3({name:e,metrics:t}):n=new Mt,n}var ki=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=St.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=St.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=St.encode(e.multihash.bytes);this.blocks.set(n,t)}};function iD(r){let e=new Uint8Array(r.reduce((n,i)=>n+ve(i),0)),t=0;for(let n of r)e=Ze(n,e,t),t+=ve(n);return e}var lw=iD;function U3(r){return lw([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var _f=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new ki,n=new Set;for(let[i,o]of this.wants.entries())try{let s=await this.blockstore.get(o.cid,e);o.wantType===yt.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",o.cid),n.add(i),t.addBlock(o.cid,{data:s,prefix:U3(o.cid)})):(this.log("sending have for %c",o.cid),t.addBlockPresence(o.cid,{cid:o.cid.bytes,type:sn.HaveBlock})):(this.log("sending block for %c",o.cid),n.add(i),t.addBlock(o.cid,{data:s,prefix:U3(o.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",o.cid),!o.sendDontHave||o.sentDoNotHave===!0)continue;o.sentDoNotHave=!0,t.addBlockPresence(o.cid,{cid:o.cid.bytes,type:sn.DoNotHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((i,o)=>i+o.data.byteLength,0));for(let i of n)this.wants.delete(i)}}};var kf=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Hl({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(i=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,i)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new _f({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((i,o)=>i+o.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let i of t.wantlist.entries){let o=B.decode(i.cid),s=U(o.multihash.bytes,"base64");i.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,o),n.wants.delete(s)):(i.wantType===yt.WantHave?this.log("peer %p wanted block presence for %c",e,o):this.log("peer %p wanted block for %c",e,o),n.wants.set(s,{cid:o,priority:i.priority,wantType:i.wantType??yt.WantBlock,sendDontHave:i.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),i=[];for(let o of this.ledgerMap.values())o.wants.has(n)&&i.push(o);await Promise.all(i.map(async o=>o.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function oD(r,e){try{if(typeof r=="string"&&r.length>0)return sD(r);if(typeof r=="number"&&isFinite(r))return e?.long?cD(r):aD(r);throw new Error("Value is not a string or number.")}catch(t){let n=lD(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function sD(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var Pf=oD;function aD(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function cD(r){let e=Math.abs(r);return e>=864e5?Cf(r,e,864e5,"day"):e>=36e5?Cf(r,e,36e5,"hour"):e>=6e4?Cf(r,e,6e4,"minute"):e>=1e3?Cf(r,e,1e3,"second"):`${r} ms`}function Cf(r,e,t,n){let i=e>=t*1.5;return`${Math.round(r/t)} ${n}${i?"s":""}`}function lD(r){return typeof r=="object"&&r!==null&&"message"in r}function H3(r){t.debug=t,t.default=t,t.coerce=c,t.disable=o,t.enable=i,t.enabled=s,t.humanize=Pf,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 h=0;h<u.length;h++)d=(d<<5)-d+u.charCodeAt(h),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,h=null,f,p;function m(...g){if(!m.enabled)return;let y=m,w=Number(new Date),x=w-(d||w);y.diff=x,y.prev=d,y.curr=w,d=w,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let b=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(k,E)=>{if(k==="%%")return"%";b++;let S=t.formatters[E];if(typeof S=="function"){let T=g[b];k=S.call(y,T),g.splice(b,1),b--}return k}),t.formatArgs.call(y,g),(y.log||t.log).apply(y,g)}return m.namespace=u,m.useColors=t.useColors(),m.color=t.selectColor(u),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(f!==t.namespaces&&(f=t.namespaces,p=t.enabled(u)),p),set:g=>{h=g}}),typeof t.init=="function"&&t.init(m),m}function n(u,d){let h=t(this.namespace+(typeof d>"u"?":":d)+u);return h.log=this.log,h}function i(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,h=(typeof u=="string"?u:"").split(/[\s,]+/),f=h.length;for(d=0;d<f;d++)h[d]&&(u=h[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function o(){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,h;for(d=0,h=t.skips.length;d<h;d++)if(t.skips[d].test(u))return!1;for(d=0,h=t.names.length;d<h;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 Rf=gD(),uD=["#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 dD(){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 fD(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Pf(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,i=>{i!=="%%"&&(t++,i==="%c"&&(n=t))}),r.splice(n,0,e)}var hD=console.debug??console.log??(()=>{});function pD(r){try{r?Rf?.setItem("debug",r):Rf?.removeItem("debug")}catch{}}function mD(){let r;try{r=Rf?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function gD(){try{return localStorage}catch{}}function yD(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var uw=H3({formatArgs:fD,save:pD,load:mD,useColors:dD,setupFormatters:yD,colors:uD,storage:Rf,log:hD});var kr=uw;kr.formatters.b=r=>r==null?"undefined":ye.baseEncode(r);kr.formatters.t=r=>r==null?"undefined":kt.baseEncode(r);kr.formatters.m=r=>r==null?"undefined":St.baseEncode(r);kr.formatters.p=r=>r==null?"undefined":r.toString();kr.formatters.c=r=>r==null?"undefined":r.toString();kr.formatters.k=r=>r==null?"undefined":r.toString();kr.formatters.a=r=>r==null?"undefined":r.toString();kr.formatters.e=r=>r==null?"undefined":dw(r.stack)??dw(r.message)??r.toString();function wD(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 fw(r){return{forComponent(e){return we(`${r}:${e}`)}}}function So(){return{forComponent(r){return we(r)}}}function we(r){let e=wD(`${r}:trace`);return kr.enabled(`${r}:trace`)&&kr.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=kr(`${r}:trace`)),Object.assign(kr(r),{error:kr(`${r}:error`),trace:e})}function dw(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var $3=ut(pw(),1);var $l=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},V3=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},mw=r=>globalThis.DOMException===void 0?new V3(r):new DOMException(r),gw=r=>{let e=r.reason===void 0?mw("This operation was aborted."):r.reason;return e instanceof Error?e:mw(e)};function Dn(r,e){let{milliseconds:t,fallback:n,message:i,customTimers:o={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(gw(f)),a=()=>{d(gw(f))},f.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let h=new $l;s=o.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),i===!1?u():i instanceof Error?d(i):(h.message=i??`Promise timed out after ${t} milliseconds`,d(h))},t),(async()=>{try{u(await r)}catch(f){d(f)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},l}function q3(r,e,t){let n=0,i=r.length;for(;i>0;){let o=Math.trunc(i/2),s=n+o;t(r[s],e)<=0?(n=++s,i-=o+1):i=o}return n}var Vl=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let i=q3(this.#e,n,(o,s)=>s.priority-o.priority);this.#e.splice(i,0,n)}setPriority(e,t){let n=this.#e.findIndex(o=>o.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[i]=this.#e.splice(n,1);this.enqueue(i.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 Cr=class extends $3.default{#e;#r;#n=0;#m;#u;#A=0;#y;#a;#s;#c;#i=0;#t;#l;#w;#p=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Vl,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#r=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#m=e.intervalCap,this.#u=e.interval,this.#s=new e.queueClass,this.#c=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#w=e.throwOnTimeout===!0,this.#l=e.autoStart===!1}get#d(){return this.#r||this.#n<this.#m}get#b(){return this.#i<this.#t}#f(){this.#i--,this.#g(),this.emit("next")}#v(){this.#T(),this.#x(),this.#a=void 0}get#E(){let e=Date.now();if(this.#y===void 0){let t=this.#A-e;if(t<0)this.#n=this.#e?this.#i:0;else return this.#a===void 0&&(this.#a=setTimeout(()=>{this.#v()},t)),!0}return!1}#g(){if(this.#s.size===0)return this.#y&&clearInterval(this.#y),this.#y=void 0,this.emit("empty"),this.#i===0&&this.emit("idle"),!1;if(!this.#l){let e=!this.#E;if(this.#d&&this.#b){let t=this.#s.dequeue();return t?(this.emit("active"),t(),e&&this.#x(),!0):!1}}return!1}#x(){this.#r||this.#y!==void 0||(this.#y=setInterval(()=>{this.#T()},this.#u),this.#A=Date.now()+this.#u)}#T(){this.#n===0&&this.#i===0&&this.#y&&(clearInterval(this.#y),this.#y=void 0),this.#n=this.#e?this.#i:0,this.#h()}#h(){for(;this.#g(););}get concurrency(){return this.#t}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.#t=e,this.#h()}async#R(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#s.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#p++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#w,...t},new Promise((n,i)=>{this.#s.enqueue(async()=>{this.#i++,this.#n++;try{t.signal?.throwIfAborted();let o=e({signal:t.signal});t.timeout&&(o=Dn(Promise.resolve(o),{milliseconds:t.timeout})),t.signal&&(o=Promise.race([o,this.#R(t.signal)]));let s=await o;n(s),this.emit("completed",s)}catch(o){if(o instanceof $l&&!t.throwOnTimeout){n();return}i(o),this.emit("error",o)}finally{this.#f()}},t),this.emit("add"),this.#g()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#l?(this.#l=!1,this.#h(),this):this}pause(){this.#l=!0}clear(){this.#s=new this.#c}async onEmpty(){this.#s.size!==0&&await this.#C("empty")}async onSizeLessThan(e){this.#s.size<e||await this.#C("next",()=>this.#s.size<e)}async onIdle(){this.#i===0&&this.#s.size===0||await this.#C("idle")}async#C(e,t){return new Promise(n=>{let i=()=>{t&&!t()||(this.off(e,i),n())};this.on(e,i)})}get size(){return this.#s.size}sizeBy(e){return this.#s.filter(e).length}get pending(){return this.#i}get isPaused(){return this.#l}};function Nf(r){let e=[ar.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var K3=60;function Lf(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:ar[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:ar[e.type],TTL:e.TTL??e.ttl??K3,data:e.data instanceof Uint8Array?U(e.data):e.data}))}}var vD=4;function G3(r,e={}){let t=new Cr({concurrency:e.queryConcurrency??vD});return async(n,i={})=>{let o=new URLSearchParams;o.set("name",n),Nf(i.types).forEach(a=>{o.append("type",ar[a])}),i.onProgress?.(new M("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${o}`,{headers:{accept:"application/dns-json"},signal:i?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=Lf(await a.json());return i.onProgress?.(new M("dns:response",{detail:c})),c},{signal:i.signal});if(s==null)throw new Error("No DNS response received");return s}}function yw(){return[G3("https://cloudflare-dns.com/dns-query"),G3("https://dns.google/resolve")]}var xw=ut(W3(),1);var Y3=class{lru;constructor(e){this.lru=(0,xw.default)(e)}get(e,t){let n=!0,i=[];for(let o of t){let s=this.getAnswers(e,o);if(s.length===0){n=!1;break}i.push(...s)}if(n)return Lf({answers:i})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,i=this.lru.get(n);if(i!=null){let o=i.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:ar[a.type]}));return o.length===0&&this.lru.remove(n),o}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,i=this.lru.get(n)??[];i.push({expires:Date.now()+(t.TTL??K3)*1e3,value:t}),this.lru.set(n,i)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function bw(r){return new Y3(r)}var ED=1e3,Of=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=bw(e.cacheSize??ED),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["."]=yw())}async query(e,t={}){let n=Nf(t.types),i=t.cached!==!1?this.cache.get(e,n):void 0;if(i!=null)return t.onProgress?.(new M("dns:cache",{detail:i})),i;let o=`${e.split(".").pop()}.`,s=(this.resolvers[o]??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,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new M("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var ar;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(ar||(ar={}));function ks(r={}){return new Of(r)}var SD=["string","number","bigint","symbol"],AD=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function vw(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(SD.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(TD(r))return"Buffer";let t=ID(r);return t||"Object"}function TD(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function ID(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(AD.includes(e))return e}var v=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};v.uint=new v(0,"uint",!0);v.negint=new v(1,"negint",!0);v.bytes=new v(2,"bytes",!0);v.string=new v(3,"string",!0);v.array=new v(4,"array",!1);v.map=new v(5,"map",!1);v.tag=new v(6,"tag",!1);v.float=new v(7,"float",!0);v.false=new v(7,"false",!0);v.true=new v(7,"true",!0);v.null=new v(7,"null",!0);v.undefined=new v(7,"undefined",!0);v.break=new v(7,"break",!0);var z=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 Ka=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",_D=new TextDecoder,kD=new TextEncoder;function Bf(r){return Ka&&globalThis.Buffer.isBuffer(r)}function ql(r){return r instanceof Uint8Array?Bf(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var Tw=Ka?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):Sw(r,e,t):(r,e,t)=>t-e>64?_D.decode(r.subarray(e,t)):Sw(r,e,t),Mf=Ka?r=>r.length>64?globalThis.Buffer.from(r):Ew(r):r=>r.length>64?kD.encode(r):Ew(r),si=r=>Uint8Array.from(r),Ga=Ka?(r,e,t)=>Bf(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),Iw=Ka?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),ql(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let i of r)n+i.length>t.length&&(i=i.subarray(0,t.length-n)),t.set(i,n),n+=i.length;return t},_w=Ka?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function kw(r,e){if(Bf(r)&&Bf(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 Ew(r){let e=[],t=0;for(let n=0;n<r.length;n++){let i=r.charCodeAt(n);i<128?e[t++]=i:i<2048?(e[t++]=i>>6|192,e[t++]=i&63|128):(i&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(i=65536+((i&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=i>>18|240,e[t++]=i>>12&63|128,e[t++]=i>>6&63|128,e[t++]=i&63|128):(e[t++]=i>>12|224,e[t++]=i>>6&63|128,e[t++]=i&63|128)}return e}function Sw(r,e,t){let n=[];for(;e<t;){let i=r[e],o=null,s=i>239?4:i>223?3:i>191?2:1;if(e+s<=t){let a,c,l,u;switch(s){case 1:i<128&&(o=i);break;case 2:a=r[e+1],(a&192)===128&&(u=(i&31)<<6|a&63,u>127&&(o=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(i&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(o=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(i&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(o=u))}}o===null?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|o&1023),n.push(o),e+=s}return X3(n)}var Aw=4096;function X3(r){let e=r.length;if(e<=Aw)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=Aw));return t}var CD=256,Kl=class{constructor(e=CD){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 i=t.length-(this.maxCursor-this.cursor)-1;t.set(e,i)}else{if(t){let i=t.length-(this.maxCursor-this.cursor)-1;i<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,i),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=_w(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=Ga(n,0,this.cursor)}else t=Iw(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",Ci="CBOR encode error:",Gl=[];Gl[23]=1;Gl[24]=2;Gl[25]=3;Gl[26]=5;Gl[27]=9;function Pi(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var Ft=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Vr(r,e,t){Pi(r,e,1);let n=r[e];if(t.strict===!0&&n<Ft[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function qr(r,e,t){Pi(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<Ft[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function Kr(r,e,t){Pi(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<Ft[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function Gr(r,e,t){Pi(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],i=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],o=(BigInt(n)<<BigInt(32))+BigInt(i);if(t.strict===!0&&o<Ft[3])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);if(o<=Number.MAX_SAFE_INTEGER)return Number(o);if(t.allowBigInt===!0)return o;throw new Error(`${Q} integers outside of the safe integer range are not supported`)}function Cw(r,e,t,n){return new z(v.uint,Vr(r,e+1,n),2)}function Pw(r,e,t,n){return new z(v.uint,qr(r,e+1,n),3)}function Rw(r,e,t,n){return new z(v.uint,Kr(r,e+1,n),5)}function Dw(r,e,t,n){return new z(v.uint,Gr(r,e+1,n),9)}function dn(r,e){return Gt(r,0,e.value)}function Gt(r,e,t){if(t<Ft[0]){let n=Number(t);r.push([e|n])}else if(t<Ft[1]){let n=Number(t);r.push([e|24,n])}else if(t<Ft[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<Ft[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<Ft[4]){let i=[e|27,0,0,0,0,0,0,0],o=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));i[8]=o&255,o=o>>8,i[7]=o&255,o=o>>8,i[6]=o&255,o=o>>8,i[5]=o&255,i[4]=s&255,s=s>>8,i[3]=s&255,s=s>>8,i[2]=s&255,s=s>>8,i[1]=s&255,r.push(i)}else throw new Error(`${Q} encountered BigInt larger than allowable range`)}}dn.encodedSize=function(e){return Gt.encodedSize(e.value)};Gt.encodedSize=function(e){return e<Ft[0]?1:e<Ft[1]?2:e<Ft[2]?3:e<Ft[3]?5:9};dn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Nw(r,e,t,n){return new z(v.negint,-1-Vr(r,e+1,n),2)}function Lw(r,e,t,n){return new z(v.negint,-1-qr(r,e+1,n),3)}function Ow(r,e,t,n){return new z(v.negint,-1-Kr(r,e+1,n),5)}var j3=BigInt(-1),Bw=BigInt(1);function Mw(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i!="bigint"){let o=-1-i;if(o>=Number.MIN_SAFE_INTEGER)return new z(v.negint,o,9)}if(n.allowBigInt!==!0)throw new Error(`${Q} integers outside of the safe integer range are not supported`);return new z(v.negint,j3-BigInt(i),9)}function Ff(r,e){let t=e.value,n=typeof t=="bigint"?t*j3-Bw:t*-1-1;Gt(r,e.type.majorEncoded,n)}Ff.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*j3-Bw:t*-1-1;return n<Ft[0]?1:n<Ft[1]?2:n<Ft[2]?3:n<Ft[3]?5:9};Ff.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Wl(r,e,t,n){Pi(r,e,t+n);let i=Ga(r,e+t,e+t+n);return new z(v.bytes,i,t+n)}function Fw(r,e,t,n){return Wl(r,e,1,t)}function Uw(r,e,t,n){return Wl(r,e,2,Vr(r,e+1,n))}function Hw(r,e,t,n){return Wl(r,e,3,qr(r,e+1,n))}function zw(r,e,t,n){return Wl(r,e,5,Kr(r,e+1,n))}function $w(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return Wl(r,e,9,i)}function Uf(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===v.string?Mf(r.value):r.value),r.encodedBytes}function Wa(r,e){let t=Uf(e);Gt(r,e.type.majorEncoded,t.length),r.push(t)}Wa.encodedSize=function(e){let t=Uf(e);return Gt.encodedSize(t.length)+t.length};Wa.compareTokens=function(e,t){return RD(Uf(e),Uf(t))};function RD(r,e){return r.length<e.length?-1:r.length>e.length?1:kw(r,e)}function Yl(r,e,t,n,i){let o=t+n;Pi(r,e,o);let s=new z(v.string,Tw(r,e+t,e+o),o);return i.retainStringBytes===!0&&(s.byteValue=Ga(r,e+t,e+o)),s}function Vw(r,e,t,n){return Yl(r,e,1,t,n)}function qw(r,e,t,n){return Yl(r,e,2,Vr(r,e+1,n),n)}function Kw(r,e,t,n){return Yl(r,e,3,qr(r,e+1,n),n)}function Gw(r,e,t,n){return Yl(r,e,5,Kr(r,e+1,n),n)}function Ww(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return Yl(r,e,9,i,n)}var Yw=Wa;function Ya(r,e,t,n){return new z(v.array,n,t)}function Xw(r,e,t,n){return Ya(r,e,1,t)}function jw(r,e,t,n){return Ya(r,e,2,Vr(r,e+1,n))}function Qw(r,e,t,n){return Ya(r,e,3,qr(r,e+1,n))}function Zw(r,e,t,n){return Ya(r,e,5,Kr(r,e+1,n))}function Jw(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return Ya(r,e,9,i)}function e9(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return Ya(r,e,1,1/0)}function Hf(r,e){Gt(r,v.array.majorEncoded,e.value)}Hf.compareTokens=dn.compareTokens;Hf.encodedSize=function(e){return Gt.encodedSize(e.value)};function Xa(r,e,t,n){return new z(v.map,n,t)}function t9(r,e,t,n){return Xa(r,e,1,t)}function r9(r,e,t,n){return Xa(r,e,2,Vr(r,e+1,n))}function n9(r,e,t,n){return Xa(r,e,3,qr(r,e+1,n))}function i9(r,e,t,n){return Xa(r,e,5,Kr(r,e+1,n))}function o9(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return Xa(r,e,9,i)}function s9(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return Xa(r,e,1,1/0)}function zf(r,e){Gt(r,v.map.majorEncoded,e.value)}zf.compareTokens=dn.compareTokens;zf.encodedSize=function(e){return Gt.encodedSize(e.value)};function a9(r,e,t,n){return new z(v.tag,t,1)}function c9(r,e,t,n){return new z(v.tag,Vr(r,e+1,n),2)}function l9(r,e,t,n){return new z(v.tag,qr(r,e+1,n),3)}function u9(r,e,t,n){return new z(v.tag,Kr(r,e+1,n),5)}function d9(r,e,t,n){return new z(v.tag,Gr(r,e+1,n),9)}function $f(r,e){Gt(r,v.tag.majorEncoded,e.value)}$f.compareTokens=dn.compareTokens;$f.encodedSize=function(e){return Gt.encodedSize(e.value)};var MD=20,FD=21,UD=22,HD=23;function f9(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Q} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new z(v.null,null,1):new z(v.undefined,void 0,1)}function h9(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return new z(v.break,void 0,1)}function Q3(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Q} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Q} Infinity values are not supported`)}return new z(v.float,r,e)}function p9(r,e,t,n){return Q3(Z3(r,e+1),3,n)}function m9(r,e,t,n){return Q3(J3(r,e+1),5,n)}function g9(r,e,t,n){return Q3(b9(r,e+1),9,n)}function Vf(r,e,t){let n=e.value;if(n===!1)r.push([v.float.majorEncoded|MD]);else if(n===!0)r.push([v.float.majorEncoded|FD]);else if(n===null)r.push([v.float.majorEncoded|UD]);else if(n===void 0)r.push([v.float.majorEncoded|HD]);else{let i,o=!1;(!t||t.float64!==!0)&&(w9(n),i=Z3(Nn,1),n===i||Number.isNaN(n)?(Nn[0]=249,r.push(Nn.slice(0,3)),o=!0):(x9(n),i=J3(Nn,1),n===i&&(Nn[0]=250,r.push(Nn.slice(0,5)),o=!0))),o||(zD(n),i=b9(Nn,1),Nn[0]=251,r.push(Nn.slice(0,9)))}}Vf.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){w9(n);let i=Z3(Nn,1);if(n===i||Number.isNaN(n))return 3;if(x9(n),i=J3(Nn,1),n===i)return 5}return 9};var y9=new ArrayBuffer(9),fn=new DataView(y9,1),Nn=new Uint8Array(y9,0);function w9(r){if(r===1/0)fn.setUint16(0,31744,!1);else if(r===-1/0)fn.setUint16(0,64512,!1);else if(Number.isNaN(r))fn.setUint16(0,32256,!1);else{fn.setFloat32(0,r);let e=fn.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)fn.setUint16(0,31744,!1);else if(t===0)fn.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let i=t-127;i<-24?fn.setUint16(0,0):i<-14?fn.setUint16(0,(e&2147483648)>>16|1<<24+i,!1):fn.setUint16(0,(e&2147483648)>>16|i+15<<10|n>>13,!1)}}}function Z3(r,e){if(r.length-e<2)throw new Error(`${Q} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,i=t&1023,o;return n===0?o=i*2**-24:n!==31?o=(i+1024)*2**(n-25):o=i===0?1/0:NaN,t&32768?-o:o}function x9(r){fn.setFloat32(0,r,!1)}function J3(r,e){if(r.length-e<4)throw new Error(`${Q} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function zD(r){fn.setFloat64(0,r,!1)}function b9(r,e){if(r.length-e<8)throw new Error(`${Q} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Vf.compareTokens=dn.compareTokens;function ke(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function qf(r){return()=>{throw new Error(`${Q} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=ke;V[24]=Cw;V[25]=Pw;V[26]=Rw;V[27]=Dw;V[28]=ke;V[29]=ke;V[30]=ke;V[31]=ke;for(let r=32;r<=55;r++)V[r]=ke;V[56]=Nw;V[57]=Lw;V[58]=Ow;V[59]=Mw;V[60]=ke;V[61]=ke;V[62]=ke;V[63]=ke;for(let r=64;r<=87;r++)V[r]=Fw;V[88]=Uw;V[89]=Hw;V[90]=zw;V[91]=$w;V[92]=ke;V[93]=ke;V[94]=ke;V[95]=qf("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=Vw;V[120]=qw;V[121]=Kw;V[122]=Gw;V[123]=Ww;V[124]=ke;V[125]=ke;V[126]=ke;V[127]=qf("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=Xw;V[152]=jw;V[153]=Qw;V[154]=Zw;V[155]=Jw;V[156]=ke;V[157]=ke;V[158]=ke;V[159]=e9;for(let r=160;r<=183;r++)V[r]=t9;V[184]=r9;V[185]=n9;V[186]=i9;V[187]=o9;V[188]=ke;V[189]=ke;V[190]=ke;V[191]=s9;for(let r=192;r<=215;r++)V[r]=a9;V[216]=c9;V[217]=l9;V[218]=u9;V[219]=d9;V[220]=ke;V[221]=ke;V[222]=ke;V[223]=ke;for(let r=224;r<=243;r++)V[r]=qf("simple values are not supported");V[244]=ke;V[245]=ke;V[246]=ke;V[247]=f9;V[248]=qf("simple values are not supported");V[249]=p9;V[250]=m9;V[251]=g9;V[252]=ke;V[253]=ke;V[254]=ke;V[255]=h9;var Ln=[];for(let r=0;r<24;r++)Ln[r]=new z(v.uint,r,1);for(let r=-1;r>=-24;r--)Ln[31-r]=new z(v.negint,r,1);Ln[64]=new z(v.bytes,new Uint8Array(0),1);Ln[96]=new z(v.string,"",1);Ln[128]=new z(v.array,0,1);Ln[160]=new z(v.map,0,1);Ln[244]=new z(v.false,!1,1);Ln[245]=new z(v.true,!0,1);Ln[246]=new z(v.null,null,1);function e4(r){switch(r.type){case v.false:return si([244]);case v.true:return si([245]);case v.null:return si([246]);case v.bytes:return r.value.length?void 0:si([64]);case v.string:return r.value===""?si([96]):void 0;case v.array:return r.value===0?si([128]):void 0;case v.map:return r.value===0?si([160]):void 0;case v.uint:return r.value<24?si([Number(r.value)]):void 0;case v.negint:if(r.value>=-24)return si([31-Number(r.value)])}}var VD={float64:!1,mapSorter:KD,quickEncodeToken:e4};function r4(){let r=[];return r[v.uint.major]=dn,r[v.negint.major]=Ff,r[v.bytes.major]=Wa,r[v.string.major]=Yw,r[v.array.major]=Hf,r[v.map.major]=zf,r[v.tag.major]=$f,r[v.float.major]=Vf,r}var v9=r4(),t4=new Kl,Kf=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(`${Ci} object contains circular references`);return new r(t,e)}},Ao={null:new z(v.null,null),undefined:new z(v.undefined,void 0),true:new z(v.true,!0),false:new z(v.false,!1),emptyArray:new z(v.array,0),emptyMap:new z(v.map,0)},To={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new z(v.float,r):r>=0?new z(v.uint,r):new z(v.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new z(v.uint,r):new z(v.negint,r)},Uint8Array(r,e,t,n){return new z(v.bytes,r)},string(r,e,t,n){return new z(v.string,r)},boolean(r,e,t,n){return r?Ao.true:Ao.false},null(r,e,t,n){return Ao.null},undefined(r,e,t,n){return Ao.undefined},ArrayBuffer(r,e,t,n){return new z(v.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new z(v.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ao.emptyArray,new z(v.break)]:Ao.emptyArray;n=Kf.createCheck(n,r);let i=[],o=0;for(let s of r)i[o++]=Xl(s,t,n);return t.addBreakTokens?[new z(v.array,r.length),i,new z(v.break)]:[new z(v.array,r.length),i]},Object(r,e,t,n){let i=e!=="Object",o=i?r.keys():Object.keys(r),s=i?r.size:o.length;if(!s)return t.addBreakTokens===!0?[Ao.emptyMap,new z(v.break)]:Ao.emptyMap;n=Kf.createCheck(n,r);let a=[],c=0;for(let l of o)a[c++]=[Xl(l,t,n),Xl(i?r.get(l):r[l],t,n)];return qD(a,t),t.addBreakTokens?[new z(v.map,s),a,new z(v.break)]:[new z(v.map,s),a]}};To.Map=To.Object;To.Buffer=To.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))To[`${r}Array`]=To.DataView;function Xl(r,e={},t){let n=vw(r),i=e&&e.typeEncoders&&e.typeEncoders[n]||To[n];if(typeof i=="function"){let s=i(r,n,e,t);if(s!=null)return s}let o=To[n];if(!o)throw new Error(`${Ci} unsupported type: ${n}`);return o(r,n,e,t)}function qD(r,e){e.mapSorter&&r.sort(e.mapSorter)}function KD(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 i=t.type.major,o=v9[i].compareTokens(t,n);return o===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),o}function E9(r,e,t,n){if(Array.isArray(e))for(let i of e)E9(r,i,t,n);else t[e.type.major](r,e,n)}function n4(r,e,t){let n=Xl(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let i=t.quickEncodeToken(n);if(i)return i;let o=e[n.type.major];if(o.encodedSize){let s=o.encodedSize(n,t),a=new Kl(s);if(o(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return ql(a.chunks[0])}}return t4.reset(),E9(t4,n,e,t),t4.toBytes(!0)}function Ri(r,e){return e=Object.assign({},VD,e),n4(r,v9,e)}var GD={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Gf=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=Ln[e];if(t===void 0){let n=V[e];if(!n)throw new Error(`${Q} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let i=e&31;t=n(this.data,this._pos,i,this.options)}return this._pos+=t.encodedLength,t}},jl=Symbol.for("DONE"),Wf=Symbol.for("BREAK");function WD(r,e,t){let n=[];for(let i=0;i<r.value;i++){let o=ja(e,t);if(o===Wf){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(o===jl)throw new Error(`${Q} found array but not enough entries (got ${i}, expected ${r.value})`);n[i]=o}return n}function YD(r,e,t){let n=t.useMaps===!0,i=n?void 0:{},o=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=ja(e,t);if(a===Wf){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===jl)throw new Error(`${Q} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Q} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&o.has(a)||!n&&a in i))throw new Error(`${Q} found repeat map key "${a}"`);let c=ja(e,t);if(c===jl)throw new Error(`${Q} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?o.set(a,c):i[a]=c}return n?o:i}function ja(r,e){if(r.done())return jl;let t=r.next();if(t.type===v.break)return Wf;if(t.type.terminal)return t.value;if(t.type===v.array)return WD(t,r,e);if(t.type===v.map)return YD(t,r,e);if(t.type===v.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ja(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function i4(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},GD,e);let t=e.tokenizer||new Gf(r,e),n=ja(t,e);if(n===jl)throw new Error(`${Q} did not find any content to decode`);if(n===Wf)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function xr(r,e){let[t,n]=i4(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var Di="/",S9=new TextEncoder().encode(Di),Yf=S9[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]!==Yf)throw new Error("Invalid key")}toString(e="utf8"){return U(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Di))}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=S9),this._buf[0]!==Yf){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Yf,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Yf;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let i=0;i<t.length;i++){if(n.length<i+1)return!1;let o=t[i],s=n[i];if(o<s)return!0;if(o>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(Di).slice(1)}type(){return XD(this.baseNamespace())}name(){return jD(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Di)||(e+=Di),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Di):new r(e.slice(0,-1).join(Di))}child(e){return this.toString()===Di?e:e.toString()===Di?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(),...QD(e.map(t=>t.namespaces()))])}};function XD(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function jD(r){let e=r.split(":");return e[e.length-1]}function QD(r){return[].concat(...r)}function Xf({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*ZD(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let i=[...r,t],o=B.asCID(n);o!=null?yield[i.join("/"),o]:typeof n=="object"&&(yield*s4(n,i))}else{let t=B.asCID(e);t!=null?yield[r.join("/"),t]:yield*s4(e,r)}}function*s4(r,e){if(r==null||r instanceof Uint8Array)return;let t=B.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,i]of Object.entries(r)){let o=[...e,n];yield*ZD(o,i)}}function*JD(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let i=[...r,t];yield i.join("/"),typeof n=="object"&&B.asCID(n)==null&&(yield*a4(n,i))}else yield*a4(e,r)}function*a4(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let i=[...e,t];yield i.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&B.asCID(n)==null&&(yield*JD(i,n))}}function eN(r,e){let t=r;for(let[n,i]of e.entries()){if(t=t[i],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let o=B.asCID(t);if(o!=null)return{value:o,remaining:e.slice(n+1).join("/")}}return{value:t}}var c4=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:Xf(),bytes:Xf(),value:Xf(),asBlock:Xf()})}links(){return s4(this.value,[])}tree(){return a4(this.value,[])}get(e="/"){return eN(this.value,e.split("/").filter(Boolean))}};function jf({bytes:r,cid:e,value:t,codec:n}){let i=t!==void 0?t:n?.decode(r);if(i===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new c4({cid:e,bytes:r,value:i})}var I9="/pin/",A9="/pinned-block/",l4=mr,T9=1;function Qf(r){return r.version===0&&(r=r.toV1()),new Fe(`${I9}${r.toString(l4)}`)}var Zf=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Qf(e);if(await this.datastore.has(n))throw new Error("Already pinned");let i=Math.round(t.depth??1/0);if(i<0)throw new Error("Depth must be greater than or equal to 0");let o=new fr({concurrency:T9});for await(let a of this.#e(e,o,{...t,depth:i}))await this.#r(a,c=>c.pinnedBy.find(l=>J(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:i,metadata:t.metadata??{}};await this.datastore.put(n,Ri(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let i=await this.getCodec(e.code),o=await this.blockstore.get(e,n),s=jf({bytes:o,cid:e,codec:i});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#r(e,t,n){let i=new Fe(`${A9}${l4.encode(e.multihash.bytes)}`),o={pinCount:0,pinnedBy:[]};try{o=xr(await this.datastore.get(i,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(o)){if(o.pinCount===0&&await this.datastore.has(i)){await this.datastore.delete(i);return}await this.datastore.put(i,Ri(o),n),n.onProgress?.(new M("helia:pin:add",e))}}async*rm(e,t={}){let n=Qf(e),i=await this.datastore.get(n,t),o=xr(i);await this.datastore.delete(n,t);let s=new fr({concurrency:T9});for await(let a of this.#e(e,s,{...t,depth:o.depth}))await this.#r(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>J(l,e.bytes)),!0),{...t,depth:o.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:I9+(e.cid!=null?`${e.cid.toString(mr)}`:"")},e)){let i=B.parse(t.toString().substring(5),mr),o=xr(n);yield{cid:i,...o}}}async isPinned(e,t={}){let n=new Fe(`${A9}${l4.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Qf(e),i=await this.datastore.get(n,t);return xr(i)}async setMetadata(e,t,n){let i=Qf(e),o=await this.datastore.get(i,n),s=xr(o);s.metadata=t??{},await this.datastore.put(i,Ri(s),n)}};var Jf=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Ps=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},eh=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},th=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var tN=5,rh=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??tN,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 $t(...this.routers)}async stop(){await tr(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Ps("No content routers available");let n=new Vt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let i of pr(n.toGenerator(),...Rs(this.routers,"findProviders").map(o=>o.findProviders(e,t))))if(i!=null){if(i.multiaddrs.length===0){if(n.find(i.id)!=null)continue;n.add(async()=>{try{let o=await this.findPeer(i.id,t);return o.multiaddrs.length===0?null:o}catch(o){return this.log.error("could not load multiaddrs for peer %p",i.id,o),null}},{peerId:i.id,signal:t.signal}).catch(o=>{this.log.error("could not load multiaddrs for peer %p",i.id,o)})}yield i}}async provide(e,t={}){if(this.routers.length===0)throw new Ps("No content routers available");await Promise.all(Rs(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(Rs(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(Rs(this.routers,"put").map(async i=>{await i.put(e,t,n)}))}async get(e,t){return Promise.any(Rs(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Ps("No peer routers available");let n=this,i=pr(...Rs(this.routers,"findPeer").map(o=>async function*(){try{yield await o.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let o of i)if(o!=null)return o;throw new Ce("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Ps("No peer routers available");for await(let n of pr(...Rs(this.routers,"getClosestPeers").map(i=>i.getClosestPeers(e,t))))n!=null&&(yield n)}};function Rs(r,e){return r.filter(t=>t[e]!=null)}var Io={},Qa=r=>{r.addEventListener("message",e=>{Qa.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Qa.dispatchEvent("message",r,e)})};Qa.addEventListener=(r,e)=>{Io[r]==null&&(Io[r]=[]),Io[r].push(e)};Qa.removeEventListener=(r,e)=>{Io[r]!=null&&(Io[r]=Io[r].filter(t=>t===e))};Qa.dispatchEvent=function(r,e,t){Io[r]!=null&&Io[r].forEach(n=>n(e,t))};var u4=Qa;var d4="lock:worker:request-read",f4="lock:worker:release-read",h4="lock:master:grant-read",p4="lock:worker:request-write",m4="lock:worker:release-write",g4="lock:master:grant-write";var _9=(r=21)=>Math.random().toString().substring(2);var k9=(r,e,t,n,i)=>(o,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{o.postMessage({type:i,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(o.removeEventListener("message",l),c())};o.addEventListener("message",l)})}}}))},C9=(r,e,t,n)=>async()=>{let i=_9();return globalThis.postMessage({type:e,identifier:i,name:r}),new Promise(o=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===i&&(globalThis.removeEventListener("message",s),o(()=>{globalThis.postMessage({type:n,identifier:i,name:r})}))};globalThis.addEventListener("message",s)})},rN={singleProcess:!1},P9=r=>{if(r=Object.assign({},rN,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return u4.addEventListener("message",k9(t,"requestReadLock",d4,f4,h4)),u4.addEventListener("message",k9(t,"requestWriteLock",p4,m4,g4)),t}return{isWorker:!0,readLock:t=>C9(t,d4,h4,f4),writeLock:t=>C9(t,p4,g4,m4)}};var Ds={},_o;async function y4(r,e){let t,n=new Promise(i=>{t=i});return r.add(async()=>Dn((async()=>{await new Promise(i=>{t(()=>{i()})})})(),{milliseconds:e.timeout})),n}var nN=(r,e)=>{if(_o.isWorker===!0)return{readLock:_o.readLock(r,e),writeLock:_o.writeLock(r,e)};let t=new Cr({concurrency:1}),n;return{async readLock(){if(n!=null)return y4(n,e);n=new Cr({concurrency:e.concurrency,autoStart:!1});let i=n,o=y4(n,e);return t.add(async()=>{i.start(),await i.onIdle().then(()=>{n===i&&(n=null)})}),o},async writeLock(){return n=null,y4(t,e)}}},iN={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ns(r){let e=Object.assign({},iN,r);return _o==null&&(_o=P9(e),_o.isWorker!==!0&&(_o.addEventListener("requestReadLock",t=>{Ds[t.data.name]!=null&&Ds[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),_o.addEventListener("requestWriteLock",async t=>{Ds[t.data.name]!=null&&Ds[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),Ds[e.name]==null&&(Ds[e.name]=nN(e.name,e)),Ds[e.name]}var nh=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ns({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await $t(this.child),this.started=!0}async stop(){await tr(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let i=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{i()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let i=this;yield*this.child.deleteMany(async function*(){for await(let o of e){if(await i.pins.isPinned(o))throw new Error("CID was pinned");yield o}}(),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 w4=new Fe("/version"),R9=1;async function D9(r){if(!await r.has(w4)){await r.put(w4,C(`${R9}`));return}let e=await r.get(w4),t=U(e);if(parseInt(t,10)!==R9)throw new Error("Unknown datastore version, a datastore migration may be required")}var Co={};ot(Co,{code:()=>Pr,decode:()=>ko,decodeOptions:()=>uN,encode:()=>Za,encodeOptions:()=>cN,name:()=>dN,toByteView:()=>L9});var N9=42;function L9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function oN(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=B.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new z(v.tag,N9),new z(v.bytes,t)]}function sN(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function aN(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 x4={float64:!0,typeEncoders:{Object:oN,undefined:sN,number:aN}},cN={...x4,typeEncoders:{...x4.typeEncoders}};function lN(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return B.decode(r.subarray(1))}var ih={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};ih.tags[N9]=lN;var uN={...ih,tags:ih.tags.slice()},dN="dag-cbor",Pr=113,Za=r=>Ri(r,x4),ko=r=>xr(L9(r),ih);var Ls={};ot(Ls,{code:()=>ai,decode:()=>ec,encode:()=>sh,format:()=>EN,name:()=>vN,parse:()=>AN,stringify:()=>EN});var b4=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===v.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===v.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[v.uint.major](e,t){this.prefix(e);let n=String(t.value),i=[];for(let o=0;o<n.length;o++)i[o]=n.charCodeAt(o);e.push(i)}[v.negint.major](e,t){this[v.uint.major](e,t)}[v.bytes.major](e,t){throw new Error(`${Ci} unsupported type: Uint8Array`)}[v.string.major](e,t){this.prefix(e);let n=Mf(JSON.stringify(t.value));e.push(n.length>32?ql(n):n)}[v.array.major](e,t){this.prefix(e),this.inRecursive.push({type:v.array,elements:0}),e.push([91])}[v.map.major](e,t){this.prefix(e),this.inRecursive.push({type:v.map,elements:0}),e.push([123])}[v.tag.major](e,t){}[v.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===v.array)e.push([93]);else if(s.type===v.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${Ci} 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),i=[],o=!1;for(let s=0;s<n.length;s++)i[s]=n.charCodeAt(s),!o&&(i[s]===46||i[s]===101||i[s]===69)&&(o=!0);o||(i.push(46),i.push(48)),e.push(i)}};function fN(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Ci} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==v.string||n.type!==v.string)throw new Error(`${Ci} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Ci} unexpected duplicate map keys, this is not supported`)}var hN={addBreakTokens:!0,mapSorter:fN};function Ql(r,e){return e=Object.assign({},hN,e),n4(r,new b4,e)}var Ja=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Q} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Q} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,i=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 z(v.uint,0,this._pos-e);if(i([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Q} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Q} unexpected token at position ${this._pos}`);n=!0,this._pos++,i([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++,i([48,49,50,51,52,53,54,55,56,57]));let o=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(o);return n?new z(v.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new z(s>=0?v.uint:v.negint,s,this._pos-e):new z(s>=0?v.uint:v.negint,BigInt(o),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Q} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let o=this._pos,s=0;o<this.data.length&&s<65536;o++,s++){let a=this.data[o];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,o));return this._pos=o+1,new z(v.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Q} unexpected end of unicode escape sequence at position ${this._pos}`);let o=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(`${Q} unexpected unicode escape character at position ${this._pos}`);o=o*16+a,this._pos++}return o},i=()=>{let o=this.ch(),s=null,a=o>239?4:o>223?3:o>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Q} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:o<128&&(s=o);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(o&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=(o&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=(o&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 o=this.ch(),s;switch(o){case 92:if(this._pos++,this.done())throw new Error(`${Q} 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(`${Q} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new z(v.string,X3(t),this._pos-e);default:if(o<32)throw new Error(`${Q} invalid control character at position ${this._pos}`);o<128?(t.push(o),this._pos++):i()}}throw new Error(`${Q} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new z(v.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new z(v.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new z(v.null,null,4);case 102:return this.expect([102,97,108,115,101]),new z(v.false,!1,5);case 116:return this.expect([116,114,117,101]),new z(v.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Q} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new z(v.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new z(v.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new z(v.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new z(v.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Q} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function v4(r,e){return e=Object.assign({tokenizer:new Ja(r,e)},e),xr(r,e)}function mN(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function gN(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=B.asCID(r);if(!e)return null;let t=e.toString();return[new z(v.map,1/0,1),new z(v.string,"/",1),new z(v.string,t,t.length),new z(v.break,void 0,1)]}function oh(r){let e=St.encode(r).slice(1);return[new z(v.map,1/0,1),new z(v.string,"/",1),new z(v.map,1/0,1),new z(v.string,"bytes",5),new z(v.string,e,e.length),new z(v.break,void 0,1),new z(v.break,void 0,1)]}function On(r){return oh(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function yN(r){return oh(new Uint8Array(r))}function wN(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function xN(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 bN={typeEncoders:{Object:gN,Buffer:oh,Uint8Array:oh,Int8Array:On,Uint16Array:On,Int16Array:On,Uint32Array:On,Int32Array:On,Float32Array:On,Float64Array:On,Uint8ClampedArray:On,BigInt64Array:On,BigUint64Array:On,DataView:On,ArrayBuffer:yN,undefined:wN,number:xN}},E4=class extends Ja{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===v.map){let t=this._next();if(t.type===v.string&&t.value==="/"){let n=this._next();if(n.type===v.string){if(this._next().type!==v.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new z(v.tag,42,0)}if(n.type===v.map){let i=this._next();if(i.type===v.string&&i.value==="bytes"){let o=this._next();if(o.type===v.string){for(let a=0;a<2;a++)if(this._next().type!==v.break)throw new Error("Invalid encoded Bytes form");let s=St.decode(`m${o.value}`);return new z(v.bytes,s,o.value.length)}this.tokenBuffer.push(o)}this.tokenBuffer.push(i)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},S4={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};S4.tags[42]=B.parse;var vN="dag-json",ai=297,sh=r=>Ql(r,bN),ec=r=>{let e=mN(r),t=Object.assign(S4,{tokenizer:new E4(e,S4)});return v4(e,t)},EN=r=>SN.decode(sh(r));var SN=new TextDecoder,AN=r=>ec(TN.encode(r)),TN=new TextEncoder;var bt={};ot(bt,{code:()=>Le,createLink:()=>q9,createNode:()=>V9,decode:()=>xt,encode:()=>Ie,name:()=>BN,prepare:()=>ht,validate:()=>I4});var IN=new TextDecoder;function A4(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 i=r[e++];if(t+=n<28?(i&127)<<n:(i&127)*2**n,i<128)break}return[t,e]}function ah(r,e){let t;[t,e]=A4(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 O9(r,e){let t;return[t,e]=A4(r,e),[t&7,t>>3,e]}function _N(r){let e={},t=r.length,n=0;for(;n<t;){let i,o;if([i,o,n]=O9(r,n),o===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(i!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) 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]=ah(r,n)}else if(o===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(i!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=ah(r,n),e.Name=IN.decode(s)}else if(o===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(i!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Tsize`);[e.Tsize,n]=A4(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${o}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function B9(r){let e=r.length,t=0,n,i=!1,o;for(;t<e;){let a,c;if([a,c,t]=O9(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(o)throw new Error("protobuf: (PBNode) duplicate Data section");[o,t]=ah(r,t),n&&(i=!0)}else if(c===2){if(i)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=ah(r,t),n.push(_N(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 o&&(s.Data=o),s.Links=n||[],s}var F9=new TextEncoder,M9=2**32,kN=2**31;function CN(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=Zl(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=F9.encode(r.Name);t-=n.length,e.set(n,t),t=Zl(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=Zl(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function U9(r){let e=RN(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=Zl(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let i=r.Links.length-1;i>=0;i--){let o=CN(r.Links[i],t.subarray(0,n));n-=o,n=Zl(t,n,o)-1,t[n]=18}return t}function PN(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+tc(t)}if(typeof r.Name=="string"){let t=F9.encode(r.Name).length;e+=1+t+tc(t)}return typeof r.Tsize=="number"&&(e+=1+tc(r.Tsize)),e}function RN(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+tc(t)}if(r.Links)for(let t of r.Links){let n=PN(t);e+=1+n+tc(n)}return e}function Zl(r,e,t){e-=tc(t);let n=e;for(;t>=kN;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function tc(r){return r%2===0&&r++,Math.floor((DN(r)+6)/7)}function DN(r){let e=0;return r>=M9&&(r=Math.floor(r/M9),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+NN[r]}var NN=[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 LN=["Data","Links"],ON=["Hash","Name","Tsize"],T4=new TextEncoder;function z9(r,e){if(r===e)return 0;let t=r.Name?T4.encode(r.Name):[],n=e.Name?T4.encode(e.Name):[],i=t.length,o=n.length;for(let s=0,a=Math.min(i,o);s<a;++s)if(t[s]!==n[s]){i=t[s],o=n[s];break}return i<o?-1:o<i?1:0}function H9(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function $9(r){if(typeof r.asCID=="object"){let t=B.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=B.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=B.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=B.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 ht(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=T4.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($9),e.Links.sort(z9);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function I4(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!H9(r,LN))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(!H9(t,ON))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&&z9(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function V9(r,e=[]){return ht({Data:r,Links:e})}function q9(r,e,t){return $9({Hash:t,Name:r,Tsize:e})}function K9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var BN="dag-pb",Le=112;function Ie(r){I4(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),U9(e)}function xt(r){let e=K9(r),t=B9(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(i=>{let o={};try{o.Hash=B.decode(i.Hash)}catch{}if(!o.Hash)throw new Error("Invalid Hash field found in link, expected CID");return i.Name!==void 0&&(o.Name=i.Name),i.Tsize!==void 0&&(o.Tsize=i.Tsize),o})),n}function rc(r){return r?.then!=null}function G9(r=[],e){let t={[Le]:bt,[We]:Ar,[Pr]:Co,[ai]:Ls,[ri]:_a};return r.forEach(n=>{t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let o=e(n);rc(o)?i=await o:i=o,t[i.code]=i}if(i!=null)return i;throw new th(`Could not load codec for ${n}`)}}function W9(r=[],e){let t={[Se.code]:Se,[Xd.code]:Xd,[At.code]:At};return r.forEach(n=>{t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let o=e(n);rc(o)?i=await o:i=o,t[i.code]=i}if(i!=null)return i;throw new eh(`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 hn=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 Ni=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:i}of e)await this.put(n,i,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var ch=0,lh=class extends Ni{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===ch||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===ch)return e.multihash.digest;if(this.child==null)throw new hn;return this.child.get(e)}has(e){return e.multihash.code===ch?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==ch&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function MN(r){return r[Symbol.asyncIterator]!=null}function FN(r,e){let t=0;if(MN(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Ta(r),{value:i,done:o}=n.next();if(o===!0)return function*(){}();let s=e(i,t++);if(typeof s.then=="function")return async function*(){await s&&(yield i);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield i);for(let c of n)a(c,t++)&&(yield c)}()}var Wr=FN;function UN(r){return r[Symbol.asyncIterator]!=null}function Y9(r){return r?.then!=null}function HN(r,e){let t=0;if(UN(r))return async function*(){for await(let c of r){let l=e(c,t++);Y9(l)&&await l,yield c}}();let n=Ta(r),{value:i,done:o}=n.next();if(o===!0)return function*(){}();if(typeof e(i,t++)?.then=="function")return async function*(){yield i;for await(let c of n){let l=e(c,t++);Y9(l)&&await l,yield c}}();let a=e;return function*(){yield i;for(let c of n)a(c,t++),yield c}()}var Os=HN;var uh=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new lh(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new M("blocks:put:duplicate",e)),e):(n.onProgress?.(new M("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,t,n))),n.onProgress?.(new M("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Wr(e,async({cid:o})=>{let s=await this.child.has(o,t);return s&&t.onProgress?.(new M("blocks:put-many:duplicate",o)),!s}),i=Os(n,async({cid:o,block:s})=>{t.onProgress?.(new M("blocks:put-many:providers:notify",o)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(o,s,t)))});t.onProgress?.(new M("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(i,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new M("blocks:get:providers:get",e));let i=await X9(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new M("blocks:get:blockstore:put",e)),await this.child.put(e,i,t),t.onProgress?.(new M("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,i,t))),i}return t.onProgress?.(new M("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new M("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Os(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let i=await this.getHasher(n.multihash.code);t.onProgress?.(new M("blocks:get-many:providers:get",n));let o=await X9(n,this.components.blockBrokers,i,{...t,log:this.log});t.onProgress?.(new M("blocks:get-many:blockstore:put",n)),await this.child.put(n,o,t),t.onProgress?.(new M("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,o,t)))}}))}async delete(e,t={}){t.onProgress?.(new M("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new M("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 M("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},dh=class extends uh{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await $t(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await tr(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(i=>i.createSession==null?i:i.createSession(t));return new _4({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},_4=class extends uh{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 put(e,t,n={}){let i=de([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:i})}finally{i.clear()}}async*putMany(e,t={}){let n=de([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=de([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=de([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=de([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=de([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=de([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=de([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function zN(r){return typeof r.retrieve=="function"}var $N=(r,e)=>{if(e==null)throw new O(`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,i=e.digest(t);if(rc(i)?n=await i:n=i,!J(n.digest,r.multihash.digest))throw new oo("Hash of downloaded block did not match multihash from passed CID")}};async function X9(r,e,t,n){let i=$N(r,t),o=new AbortController,s=de([o.signal,n.signal]);o.signal;let a=[];for(let c of e)zN(c)&&a.push(c);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 i(d),l=!0}});return l||await i(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{o.abort(),s.clear()}}var Bs=class extends be{initialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=_r(this.maxProviders)}async retrieve(e,t={}){let n=St.encode(e.multihash.bytes),i=this.requests.get(n);if(i!=null)return this.log("join existing request for %c",e),i;let o=Z();if(this.requests.set(n,o.promise),this.providers.length===0){let l=!1;this.initialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.initialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new fr({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{s=!0,o.resolve(l.detail.result)}),a.addEventListener("idle",()=>{s||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let u=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(u)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),o.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),o.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await o.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let i=Z(),o=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(o===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",o,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),o++,o===t&&(this.log("session is ready"),i.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",o);break}}if(this.log("found %d/%d new session peers",o,this.maxProviders),o<t)throw new Jf(`Found ${o} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),i.reject(s)}),i.promise}};var fh=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??So(),this.log=this.logger.forComponent("helia"),this.getHasher=W9(e.hashers,e.loadHasher),this.getCodec=G9(e.codecs,e.loadCodec),this.dns=e.dns??ks(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new rh(t,{routers:(e.routers??[]).flatMap(i=>{let o=[i];return i[Qn]!=null&&o.push(i[Qn]),i[Zn]!=null&&o.push(i[Zn]),o}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new dh(t);this.pins=new Zf(e.datastore,n,this.getCodec),this.blockstore=new nh(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(i=>i(t))}async start(){await D9(this.datastore),await $t(this.blockstore,this.datastore,this.routing)}async stop(){await tr(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,i=this.blockstore.unwrap();this.log("gc start"),await Lt(i.deleteMany(async function*(){for await(let{cid:o}of i.getAll())try{if(await n.pins.isPinned(o,e))continue;yield o,e.onProgress?.(new M("helia:gc:deleted",o))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new M("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var k4=class extends Bs{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let i=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,i.has?"has":"does not have",e),i.has&&i.block!=null)return i.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function j9(r,e){return new k4(r,e)}var hh=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var C4=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 ph(r){let{name:e,metrics:t}=r,n;return t!=null?n=new C4({name:e,metrics:t}):n=new Map,n}function KN(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(ve(t))}return e}var Q9=KN;var mh=class extends be{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=Hl({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=ph({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(i=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,i)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(i=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,i)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=U(e.multihash.bytes,"base64"),i=this.wants.get(n);i==null&&(i={cid:e,priority:t.priority??1,wantType:t.wantType??yt.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,i)),i.wantType===yt.WantHave&&t.wantType===yt.WantBlock&&(i.wantType=yt.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===yt.WantBlock?(await Nt(this,"block",t?.signal,{filter:a=>J(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await Nt(this,"presence",t?.signal,{filter:s=>J(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),i.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=Z(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,i=new ki;for(let[o,s]of this.wants.entries())t.has(o)||s.cancel||(n.add(o),i.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(i.wantlist.size!==0)try{await this.network.sendMessage(e,i);for(let o of n)t.add(o)}catch(o){this.log.error("error sending full wantlist to new peer",o)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=U(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let i=new ki;return i.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:yt.WantHave,priority:1}),await this.network.sendMessage(t,i),(await Nt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&J(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:yt.WantBlock})}async wantSessionBlock(e,t,n={}){let i=new ki;return i.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:yt.WantBlock,priority:1}),await this.network.sendMessage(t,i),(await Nt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&J(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),i=this.wants.get(n);i!=null&&(i.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 i of t.blocks){if(i.prefix==null||i.data==null)continue;let o=Q9(i.prefix),s=o[0],a=o[1],c=o[2],l=c===Se.code?Se:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(i.data);u.then!=null&&(u=await u);let d=B.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:i.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:i.data}});let h=U(d.multihash.bytes,"base64"),f=this.wants.get(h);f!=null&&(f.cancel=!0,n=!0)}for(let{cid:i,type:o}of t.blockPresences){let s=B.decode(i);this.log("received %s from %p for %c",o,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:o===sn.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new ki(!0);for(let[i,o]of this.wants.entries())o.cancel||(t.add(i),n.addWantlistEntry(o.cid,{cid:o.cid.bytes,priority:1,wantType:yt.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(i){this.log.error("error sending full wantlist to new peer %p",e,i)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var gh=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new hh(e),this.network=new rf(e,t),this.peerWantLists=new kf({...e,network:this.network},t),this.wantList=new mh({...e,network:this.network},t)}createSession(e={}){return j9({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,i=de([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:i}).catch(o=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,o)});try{return(await this.wantList.wantBlock(e,{...t,signal:i})).block}finally{n.abort(),i.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var Z9=(r,e={})=>new gh(r,e);var P4=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=Z9(e,{hashLoader:{getHasher:async i=>n(i)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,i,o)=>{await this.bitswap.notify(n,i,o)},retrieve:async(n,i)=>t.retrieve(n,i)}}};function Jl(r={}){return e=>new P4(e,r)}var yh=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,i){return this.readAtomically(()=>{let o=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*i)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let h=Number.parseInt(d,e);if(!Number.isNaN(h))return h});if(u===void 0)break;if(o*=e,o+=u,o>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:o})}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 i=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[i]=s[0],t[i+1]=s[1],t[i+2]=s[2],t[i+3]=s[3],[i+4,!0]}let o=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(o===void 0)return[i,!1];t[i]=o>>8,t[i+1]=o&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,i]=e(t);if(n===16)return t;if(i||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let o=new Uint8Array(14),s=16-(n+2),[a]=e(o.subarray(0,s));return t.set(o.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var J9=45,GN=15,nc=new yh;function wh(r){if(!(r.length>GN))return nc.new(r).parseWith(()=>nc.readIPv4Addr())}function xh(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>J9))return nc.new(r).parseWith(()=>nc.readIPv6Addr())}function Ms(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>J9)return;let t=nc.new(r).parseWith(()=>nc.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 Bn(r){return!!wh(r)}function ic(r){return!!xh(r)}function bh(r){return!!Ms(r)}var tx=ut(ex(),1),WN=["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"],YN=WN.map(r=>new tx.Netmask(r));function R4(r){for(let e of YN)if(e.contains(r))return!0;return!1}function XN(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function jN(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"),i=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return R4(i)}function QN(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function ZN(r){let e=r.split(":"),t=e[e.length-1];return R4(t)}function JN(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 br(r){return Bn(r)?R4(r):XN(r)?jN(r):QN(r)?ZN(r):ic(r)?JN(r):void 0}var eL=r=>r.toString().split("/").slice(1),oc=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),me=r=>({match:e=>oc(t=>t===r).match(e),pattern:r}),Fs=()=>({match:r=>oc(e=>typeof e=="string").match(r),pattern:"{string}"}),tu=()=>({match:r=>oc(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),qe=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{ye.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),ru=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{ll.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Oe=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),cr=(...r)=>({match:e=>{let t;for(let n of r){let i=n.match(e);i!==!1&&(t==null||i.length<t.length)&&(t=i)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),Ee=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function Ke(...r){function e(i){let o=eL(i);for(let s of r){let a=s.match(o);if(a===!1)return!1;o=a}return o}function t(i){return e(i)!==!1}function n(i){let o=e(i);return o===!1?!1:o.length===0}return{matchers:r,matches:t,exactMatch:n}}var Eh=Ee(me("dns4"),Fs()),Sh=Ee(me("dns6"),Fs()),Ah=Ee(me("dnsaddr"),Fs()),N4=Ee(me("dns"),Fs()),Lte=Ke(Eh,Oe(qe())),Ote=Ke(Sh,Oe(qe())),Bte=Ke(Ah,Oe(qe())),nu=Ke(cr(N4,Ah,Eh,Sh),Oe(qe())),rx=Ee(me("ip4"),oc(Bn)),nx=Ee(me("ip6"),oc(ic)),L4=cr(rx,nx),Li=cr(L4,N4,Eh,Sh,Ah),ix=Ke(cr(L4,Ee(cr(N4,Ah,Eh,Sh),Oe(qe())))),O4=Ke(rx),B4=Ke(nx),ox=Ke(L4),M4=Ee(Li,me("tcp"),tu()),iu=Ee(Li,me("udp"),tu()),Us=Ke(Ee(M4,Oe(qe()))),Mte=Ke(iu),F4=Ee(iu,me("quic"),Oe(qe())),Th=Ee(iu,me("quic-v1"),Oe(qe())),tL=cr(F4,Th),Fte=Ke(F4),sx=Ke(Th),D4=cr(Li,M4,iu,F4,Th),ax=cr(Ee(D4,me("ws"),Oe(qe()))),Oi=Ke(ax),cx=cr(Ee(D4,me("wss"),Oe(qe())),Ee(D4,me("tls"),Oe(Ee(me("sni"),Fs())),me("ws"),Oe(qe()))),Hs=Ke(cx),lx=Ee(iu,me("webrtc-direct"),Oe(ru()),Oe(ru()),Oe(qe())),ou=Ke(lx),ux=Ee(Th,me("webtransport"),Oe(ru()),Oe(ru()),Oe(qe())),U4=Ke(ux),vh=cr(ax,cx,Ee(M4,Oe(qe())),Ee(tL,Oe(qe())),Ee(Li,Oe(qe())),lx,ux,qe()),Ih=Ke(vh),rL=Ee(vh,me("p2p-circuit"),qe()),Rr=Ke(rL),nL=cr(Ee(vh,me("p2p-circuit"),me("webrtc"),Oe(qe())),Ee(vh,me("webrtc"),Oe(qe())),Ee(me("webrtc"),Oe(qe()))),su=Ke(nL),iL=cr(Ee(Li,me("tcp"),tu(),me("http"),Oe(qe())),Ee(Li,me("http"),Oe(qe()))),dx=Ke(iL),oL=cr(Ee(Li,me("tcp"),cr(Ee(me("443"),me("http")),Ee(tu(),me("https"))),Oe(qe())),Ee(Li,me("tls"),me("http"),Oe(qe())),Ee(Li,me("https"),Oe(qe()))),fx=Ke(oL),sL=cr(Ee(me("memory"),Fs(),Oe(qe()))),Ute=Ke(sL);function hx(r,e,t){let n=0;for(let i of r)if(!(n<e)){if(n>t)break;if(i!==255)return!1;n++}return!0}function px(r,e,t,n){let i=0;for(let o of r)if(!(i<t)){if(i>n)break;if(o!==e[i])return!1;i++}return!0}function H4(r){switch(r.length){case zs:return r.join(".");case $s:{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 mx(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 i=t+1;i<r.length;i++)if(r[i]!=0)return-1;break}return e}function gx(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var zs=4,$s=16,Kte=parseInt("0xFFFF",16),aL=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function au(r,e){e.length===$s&&r.length===zs&&hx(e,0,11)&&(e=e.slice(12)),e.length===zs&&r.length===$s&&px(r,aL,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 i=0;i<t;i++)n[i]=r[i]&e[i];return n}function yx(r,e){if(typeof e=="string"&&(e=Ms(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 z4(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=zs,i=wh(e);if(i==null&&(n=$s,i=xh(e),i==null))throw new Error("Failed to parse given CIDR: "+r);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=$4(o,8*n);return{network:au(i,s),mask:s}}function $4(r,e){if(e!==8*zs&&e!==8*$s)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 i=0;i<t;i++){if(r>=8){n[i]=255,r-=8;continue}n[i]=255-(255>>r),r=0}return n}var Vs=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=z4(e));else{let n=Ms(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n.length*8){let o=Ms(t);if(o==null)throw new Error("Failed to parse mask");this.mask=o}else this.mask=$4(i,8*n.length);this.network=au(n,this.mask)}}contains(e){return yx({network:this.network,mask:this.mask},e)}toString(){let e=mx(this.mask),t=e!==-1?String(e):gx(this.mask);return H4(this.network)+"/"+t}};function wx(r,e){return new Vs(r).contains(e)}var xx=Bn,cL=ic,V4=function(r){let e=0;if(r=r.toString().trim(),xx(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(cL(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let o=xx(t[n]),s;o&&(s=V4(t[n]),t[n]=U(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,U(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let o=[n,1];for(n=9-t.length;n>0;n--)o.push("0");t.splice.apply(t,o)}let i=new Uint8Array(e+16);for(n=0;n<t.length;n++){let o=parseInt(t[n],16);i[e++]=o>>8&255,i[e++]=o&255}return i}throw new Error("invalid ip address")},bx=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let i=[];for(let o=0;o<t;o++)i.push(r[e+o]);return i.join(".")}if(t===16){let i=[];for(let o=0;o<t;o+=2)i.push(n.getUint16(e+o).toString(16));return i.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var sc={},q4={},uL=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];uL.forEach(r=>{let e=dL(...r);q4[e.code]=e,sc[e.name]=e});function dL(r,e,t,n,i){return{code:r,size:e,name:t,resolvable:!!n,path:!!i}}function se(r){if(typeof r=="number"){if(q4[r]!=null)return q4[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(sc[r]!=null)return sc[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var fL=se("ip4"),hL=se("ip6"),pL=se("ipcidr");function Y4(r,e){switch(se(r).code){case 4:case 41:return gL(e);case 42:return W4(e);case 43:return U(e,"base10");case 6:case 273:case 33:case 132:return Sx(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return W4(e);case 421:return bL(e);case 444:return Ex(e);case 445:return Ex(e);case 466:return xL(e);case 481:return globalThis.encodeURIComponent(W4(e));default:return U(e,"base16")}}function X4(r,e){switch(se(r).code){case 4:return vx(e);case 41:return vx(e);case 42:return G4(e);case 43:return C(e,"base10");case 6:case 273:case 33:case 132:return Q4(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return G4(e);case 421:return yL(e);case 444:return vL(e);case 445:return EL(e);case 466:return wL(e);case 481:return G4(globalThis.decodeURIComponent(e));default:return C(e,"base16")}}function j4(r){let e,t;if(r.stringTuples().forEach(([n,i])=>{(n===fL.code||n===hL.code)&&(t=i),n===pL.code&&(e=i)}),e==null||t==null)throw new Error("Invalid multiaddr");return new Vs(t,e)}var K4=Object.values(ps).map(r=>r.decoder),mL=function(){let r=K4[0].or(K4[1]);return K4.slice(2).forEach(e=>r=r.or(e)),r}();function vx(r){if(!bh(r))throw new Error("invalid ip address");return V4(r)}function gL(r){let e=bx(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!bh(e))throw new Error("invalid ip address");return e}function Q4(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function Sx(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function G4(r){let e=C(r),t=Uint8Array.from(Ze(e.length));return ge([t,e],t.length+e.length)}function W4(r){let e=hr(r);if(r=r.slice(ve(e)),r.length!==e)throw new Error("inconsistent lengths");return U(r)}function yL(r){let e;r[0]==="Q"||r[0]==="1"?e=pe(ye.decode(`z${r}`)).bytes:e=B.parse(r).multihash.bytes;let t=Uint8Array.from(Ze(e.length));return ge([t,e],t.length+e.length)}function wL(r){let e=mL.decode(r),t=Uint8Array.from(Ze(e.length));return ge([t,e],t.length+e.length)}function xL(r){let e=hr(r),t=r.slice(ve(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+U(t,"base64url")}function bL(r){let e=hr(r),t=r.slice(ve(e));if(t.length!==e)throw new Error("inconsistent lengths");return U(t,"base58btc")}function vL(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=kt.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 i=Q4(n);return ge([t,i],t.length+i.length)}function EL(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=kt.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 i=Q4(n);return ge([t,i],t.length+i.length)}function Ex(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=U(e,"base32"),i=Sx(t);return`${n}:${i}`}function Ax(r){r=Z4(r);let e=[],t=[],n=null,i=r.split("/").slice(1);if(i.length===1&&i[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let o=0;o<i.length;o++){let s=i[o],a=se(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(o++,o>=i.length)throw new _h("invalid address: "+r);if(a.path===!0){n=Z4(i.slice(o).join("/")),e.push([a.code,X4(a.code,n)]),t.push([a.code,n]);break}let c=X4(a.code,i[o]);e.push([a.code,c]),t.push([a.code,Y4(a.code,c)])}return{string:Tx(t),bytes:kh(e),tuples:e,stringTuples:t,path:n}}function J4(r){let e=[],t=[],n=null,i=0;for(;i<r.length;){let o=hr(r,i),s=ve(o),a=se(o),c=SL(a,r.slice(i+s));if(c===0){e.push([o]),t.push([o]),i+=s;continue}let l=r.slice(i+s,i+s+c);if(i+=c+s,i>r.length)throw new _h("Invalid address Uint8Array: "+U(r,"base16"));e.push([o,l]);let u=Y4(o,l);if(t.push([o,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:Tx(t),tuples:e,stringTuples:t,path:n}}function Tx(r){let e=[];return r.map(t=>{let n=se(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Z4(e.join("/"))}function kh(r){return ge(r.map(e=>{let t=se(e[0]),n=Uint8Array.from(Ze(t.code));return e.length>1&&e[1]!=null&&(n=ge([n,e[1]])),n}))}function SL(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=hr(e instanceof Uint8Array?e:Uint8Array.from(e));return t+ve(t)}}function Z4(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var _h=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var AL=Symbol.for("nodejs.util.inspect.custom"),t6=Symbol.for("@multiformats/js-multiaddr/multiaddr"),TL=[se("dns").code,se("dns4").code,se("dns6").code,se("dnsaddr").code],e6=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Ch=class r{bytes;#e;#r;#n;#m;[t6]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=J4(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=Ax(e)}else if(Po(e))t=J4(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#r=t.tuples,this.#n=t.stringTuples,this.#m=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,i,o="",s=se("tcp"),a=se("udp"),c=se("ip4"),l=se("ip6"),u=se("dns6"),d=se("ip6zone");for(let[f,p]of this.stringTuples())f===d.code&&(o=`%${p??""}`),TL.includes(f)&&(t=s.name==="tcp"?"tcp":"udp",i=443,n=`${p??""}${o}`,e=f===u.code?6:4),(f===s.code||f===a.code)&&(t=se(f).name==="tcp"?"tcp":"udp",i=parseInt(p??"")),(f===c.code||f===l.code)&&(t=se(f).name==="tcp"?"tcp":"udp",n=`${p??""}${o}`,e=f===l.code?6:4);if(e==null||t==null||n==null||i==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:i}}protos(){return this.#r.map(([e])=>Object.assign({},se(e)))}protoCodes(){return this.#r.map(([e])=>e)}protoNames(){return this.#r.map(([e])=>se(e).name)}tuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#n.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),i=n.lastIndexOf(t);if(i<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,i))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(kh(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,i])=>{n===sc.p2p.code&&e.push([n,i]),n===sc["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?U(ye.decode(`z${n}`),"base58btc"):U(B.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#m}equals(e){return J(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(o=>o.resolvable);if(t==null)return[this];let n=ac.get(t.name);if(n==null)throw new e6(`no available resolver for ${t.name}`);return(await n(this,e)).map(o=>K(o))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[AL](){return`Multiaddr(${this.#e})`}};var ac=new Map;function Po(r){return!!r?.[t6]}function K(r){return new Ch(r)}var IL=[se("tcp").code,se("dns").code,se("dnsaddr").code,se("dns4").code,se("dns6").code];function Ix(r){return Cx("sni",r)?.[1]}function _x(r){let e=Cx("tcp",r)?.[1];return e==null?"":`:${e}`}function Cx(r,e){let t;try{t=se(r).code}catch{return}for(let[n,i]of e)if(n===t&&i!=null)return[n,i]}function kx(r){return r.some(([e,t])=>e===se("tls").code)}function Mn(r,e,t){let n=Px[se(r).name];if(n==null)throw new Error(`Can't interpret protocol ${se(r).name}`);let i=n(e,t);return r===se("ip6").code?`[${i}]`:i}var Px={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${Mn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${Mn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Mn(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Mn(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=kx(e),n=Ix(e),i=_x(e);if(t&&n!=null)return`https://${n}${i}`;let o=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Mn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${o}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Mn(t[0],t[1]??"",e),i=decodeURIComponent(r);return`${n}/${i}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Mn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Mn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Mn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=kx(e),n=Ix(e),i=_x(e);if(t&&n!=null)return`wss://${n}${i}`;let o=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Mn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${o}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Mn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function Ph(r,e){let n=K(r).stringTuples(),i=n.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let o=se(i[0]),s=Px[o.name];if(s==null)throw new Error(`No interpreter found for ${o.name}`);let a=s(i[1]??"",n);return e?.assumeHttp!==!1&&IL.includes(i[0])&&(a=a.replace(/^.*:\/\//,""),i[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var Rh=class{url;#e=0;#r=0;#n=0;#m=0;#u=new Map;log;transformRequestInit;constructor(e,{logger:t,transformRequestInit:n}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#A(e){let t=e.multihash.bytes;return St.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let i=this.#A(e),o=new AbortController,s=()=>{o.abort()};t?.addEventListener("abort",s);try{let a=this.#u.get(i);if(a==null){this.#e++;let c={signal:o.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},l=this.transformRequestInit!=null?await this.transformRequestInit(c):c;a=fetch(n.toString(),l).then(async u=>{if(this.log("GET %s %d",n,u.status),!u.ok)throw this.#r++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#m++,new Uint8Array(await u.arrayBuffer())}),this.#u.set(i,a)}return await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#r++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",s),this.#u.delete(i)}}reliability(){return this.#e===0?1:this.#n>0?-1/0:this.#m/(this.#e+this.#r*3)}incrementInvalidBlocks(){this.#n++}getStats(){return{attempts:this.#e,errors:this.#r,invalidBlocks:this.#n,successes:this.#m,pendingResponses:this.#u.size}}};function _L(r,e,t){return r.filter(n=>{if(fx.matches(n)||e&&dx.matches(n))return t||nu.matches(n)?!0:br(n.toOptions().host)===!1;if(!e&&t){let{host:i}=n.toOptions();if(i==="127.0.0.1"||i==="localhost"||i.endsWith(".localhost"))return!0}return!1})}async function*Dh(r,e,t,n,i,o={}){for await(let s of e.findProviders(r,o)){let a=_L(s.multiaddrs,n,i);if(a.length===0)continue;let c=Ph(a[0]);yield new Rh(c,{logger:t,transformRequestInit:o.transformRequestInit})}}var r6=class extends Bs{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Nh,this.allowLocal=t.allowLocal??Lh,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let i=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(i),i}async*findNewProviders(e,t={}){yield*Dh(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function Rx(r,e){return new r6(r,e)}var Oh=class{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??Nh,this.allowLocal=t.allowLocal??Lh,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let i of Dh(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,i.url);try{let o=await i.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,i.url);try{await t.validateFn?.(o)}catch(s){this.log.error("failed to validate block for %c from %s",e,i.url,s);continue}return o}catch(o){if(this.log.error("failed to get block for %c from %s",e,i.url,o),o instanceof Error?n.push(o):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${i.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,i.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 Rx({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Nh=!1,Lh=!1;function cu(r={}){return e=>new Oh(e,r)}async function*Bh(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 Mx=ut(Mh(),1);var Fh=class extends Error{static name="SignatureCreationError";constructor(e="Record signature creation failed"){super(e),this.name="SignatureCreationError"}},Fn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},Uh=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},qs=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},Hh=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},lu=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},zh=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},uu=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var Wt;(function(r){let e;(function(i){i.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(i){i[i.EOL=0]="EOL"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{s.lengthDelimited!==!1&&o.fork(),i.value!=null&&(o.uint32(10),o.bytes(i.value)),i.signatureV1!=null&&(o.uint32(18),o.bytes(i.signatureV1)),i.validityType!=null&&(o.uint32(24),r.ValidityType.codec().encode(i.validityType,o)),i.validity!=null&&(o.uint32(34),o.bytes(i.validity)),i.sequence!=null&&(o.uint32(40),o.uint64(i.sequence)),i.ttl!=null&&(o.uint32(48),o.uint64(i.ttl)),i.pubKey!=null&&(o.uint32(58),o.bytes(i.pubKey)),i.signatureV2!=null&&(o.uint32(66),o.bytes(i.signatureV2)),i.data!=null&&(o.uint32(74),o.bytes(i.data)),s.lengthDelimited!==!1&&o.ldelim()},(i,o,s={})=>{let a={},c=o==null?i.len:i.pos+o;for(;i.pos<c;){let l=i.uint32();switch(l>>>3){case 1:{a.value=i.bytes();break}case 2:{a.signatureV1=i.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(i);break}case 4:{a.validity=i.bytes();break}case 5:{a.sequence=i.uint64();break}case 6:{a.ttl=i.uint64();break}case 7:{a.pubKey=i.bytes();break}case 8:{a.signatureV2=i.bytes();break}case 9:{a.data=i.bytes();break}default:{i.skipType(l&7);break}}}return a})),n),r.encode=i=>re(i,r.codec()),r.decode=(i,o)=>te(i,r.codec(),o)})(Wt||(Wt={}));var kL=we("ipns:utils"),Dx=C("/ipns/"),CL=114,PL=0,RL=18;function du(r){let e;if(r.pubKey!=null)try{e=wt(r.pubKey)}catch(t){throw kL.error(t),t}if(e!=null)return e}function Nx(r,e,t){let n=C(e);return ge([r,t,n])}function Vh(r){let e=C("ipns-signature:");return ge([e,r])}function Ro(r){return"signatureV1"in r?Wt.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}):Wt.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function Dr(r){let e=Wt.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 Fn("Missing data or signatureV2");let t=Ox(e.data),n=DL(t.Value),i=U(t.Validity);if(e.value!=null&&e.signatureV1!=null)return NL(e),{value:n,validityType:Wt.ValidityType.EOL,validity:i,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:Wt.ValidityType.EOL,validity:i,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 Bi(r){return ge([Dx,r.bytes])}function cc(r){let e=pe(r.slice(Dx.length));if(!$h(e,PL)&&!$h(e,RL))throw new oo("Multihash in IPNS key was not identity or sha2-256");return e}function Lx(r,e,t,n,i){let o;if(e===Wt.ValidityType.EOL)o=0;else throw new qs("The validity type is unsupported");return Ri({Value:r,Validity:t,ValidityType:o,Sequence:n,TTL:i})}function Ox(r){let e=xr(r);if(e.ValidityType===0)e.ValidityType=Wt.ValidityType.EOL;else throw new qs("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 DL(r){let e=U(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${B.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${B.parse(e).toV1().toString()}`}catch{}throw new lu("Value must be a valid content path starting with /")}function Bx(r){if(r!=null){let e=BL(r);if(e!=null)return e.code===CL?`/ipns/${e.toString(mr)}`:`/ipfs/${e.toV1().toString()}`;if(LL(r))return`/ipns/${mr.encode(r.bytes)}`;let t=r.toString().trim();if(t.startsWith("/")&&t.length>1)return t}throw new lu("Value must be a valid content path starting with /")}function NL(r){if(r.data==null)throw new zh("Record data is missing");let e=Ox(r.data);if(!J(e.Value,r.value??new Uint8Array(0)))throw new Fn('Field "value" did not match between protobuf and CBOR');if(!J(e.Validity,r.validity??new Uint8Array(0)))throw new Fn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new Fn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new Fn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new Fn('Field "ttl" did not match between protobuf and CBOR')}function LL(r){return r.bytes instanceof Uint8Array}function OL(r){return typeof r?.toCID=="function"}function BL(r){if(OL(r))return r.toCID();try{return B.parse(r)}catch{}return B.asCID(r)}function $h(r,e){return r.code===e}var ML=we("ipns"),Fx=5*60*1e9,FL="/ipns/",Une=FL.length,Ux={v1Compatible:!0,ttlNs:Fx};async function Hx(r,e,t,n,i=Ux){let o=new Mx.default(Date.now()+Number(n)),s=Wt.ValidityType.EOL,a=BigInt(i.ttlNs??Fx);return UL(r,e,t,s,o.toString(),a,i)}var UL=async(r,e,t,n,i,o,s=Ux)=>{t=BigInt(t);let a=C(i),c=Bx(e),l=C(c),u=Lx(l,n,a,t,o),d=Vh(u),h=await r.sign(d),f;if(r.type==="RSA"&&(f=Ot(r.publicKey)),s.v1Compatible===!0){let p=await HL(r,l,n,a),m={value:c,signatureV1:p,validity:i,validityType:n,sequence:t,ttl:o,signatureV2:h,data:u};return f!=null&&(m.pubKey=f),m}else{let p={value:c,validity:i,validityType:n,sequence:t,ttl:o,signatureV2:h,data:u};return f!=null&&(p.pubKey=f),p}},HL=async(r,e,t,n)=>{try{let i=Nx(e,t,n);return await r.sign(i)}catch(i){throw ML.error("record signature creation failed",i),new Fh("Record signature creation failed")}};var zx=ut(Mh(),1);var qh=we("ipns:validator"),zL=1024*10,$L=async(r,e)=>{let t=Dr(e),n;try{let i=Vh(t.data);n=await r.verify(i,t.signatureV2)}catch{n=!1}if(!n)throw qh.error("record signature verification failed"),new Fn("Record signature verification failed");if(t.validityType===Wt.ValidityType.EOL){if(zx.default.fromString(t.validity).toDate().getTime()<Date.now())throw qh.error("record has expired"),new Uh("record has expired")}else if(t.validityType!=null)throw qh.error("the validity type is unsupported"),new qs("The validity type is unsupported");qh("ipns record for %s is valid",t.value)};async function Do(r,e){if(e.byteLength>zL)throw new Hh("The record is too large");let t=cc(r),n;$h(t,0)&&(n=Ef(t));let i=Dr(e),o=du(i)??n;if(o==null)throw new uu("Could not extract public key from IPNS record or routing key");let s=Bi(o.toMultihash());if(!J(s,r))throw new uu("Embedded public key did not match routing key");await $L(o,e)}var Kh=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*fu(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),i="";for await(let o of r){if(typeof o=="string"&&(o=new TextEncoder().encode(o)),nn(o)&&(o=o.subarray()),i+=n.decode(o,{stream:!0}),i.length>(e?.maxMessageLength??i.length))throw new Kh("Incoming message too long");let s=i.split(t);i=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}i+=n.decode(),i!==""&&(yield JSON.parse(i))}var lc=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 VL(r){return r[Symbol.asyncIterator]!=null}function qL(r){if(VL(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var hu=qL;var $x=C("/ipns/");function Vx(r){return J(r.subarray(0,$x.byteLength),$x)}var Gh=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Je(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!Vx(e))return;let i=cc(e),o=B.createV1(114,i),s=Dr(t);await this.client.putIPNS(o,s,n)}async get(e,t){if(!Vx(e))throw new Ce("Not found");let n=cc(e),i=B.createV1(114,n);try{let o=await this.client.getIPNS(i,t);return Ro(o)}catch(o){throw o.name==="BadResponseError"?new Ce("Not found"):o}}},Wh=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await hu(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Ce("Not found")}async*getClosestPeers(e,t={}){}};var Ut=we("delegated-routing-v1-http-api-client"),Yh={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},Xh=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new Cr({concurrency:t.concurrentRequests??Yh.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Yh.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Gh(this),this.peerRouting=new Wh(this),this.cacheName=t.cacheName??Yh.cacheName,this.cacheTTL=t.cacheTTL??Yh.cacheTTL}get[Qn](){return this.contentRouting}get[Zn](){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&&Ut("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={}){Ut("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),i=de([this.shutDownController.signal,n,t.signal]);let o=Z(),s=Z();this.httpQueue.add(async()=>(o.resolve(),s.promise));try{await o.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.toString()}`);this.#r(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:i},l=await this.#n(a.toString(),c);if(l==null)throw new Un("No response received");if(!l.ok)throw l.status===404?new Ce("No matching records found"):l.status===422?new lc("Request does not conform to schema or semantic constraints"):new Un(`Unexpected status code: ${l.status}`);if(l.body==null)throw new Un("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new Un("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let h of d.Providers){let f=this.#e(h);f!=null&&(yield f)}}else if(u.includes("application/x-ndjson"))for await(let d of fu(Bh(l.body))){let h=this.#e(d);h!=null&&(yield h)}else throw new Un(`Unsupported Content-Type: ${u}`)}catch(a){Ut.error("getProviders errored:",a)}finally{i.clear(),s.resolve(),Ut("getProviders finished: %c",e)}}async*getPeers(e,t={}){Ut("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),i=de([this.shutDownController.signal,n,t.signal]);let o=Z(),s=Z();this.httpQueue.add(async()=>(o.resolve(),s.promise));try{await o.promise;let a=new URL(`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`);this.#r(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:i},l=await this.#n(a.toString(),c);if(l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new lc("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")==="application/json"){let d=await l.json();for(let h of d.Peers){let f=this.#e(h);f!=null&&(yield f)}}else for await(let d of fu(Bh(l.body))){let h=this.#e(d);h!=null&&(yield h)}}catch(a){Ut.error("getPeers errored:",a)}finally{i.clear(),s.resolve(),Ut("getPeers finished: %c",e)}}async getIPNS(e,t={}){Ut("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),i=de([this.shutDownController.signal,n,t.signal]);let o=Z(),s=Z();this.httpQueue.add(async()=>(o.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await o.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:i},l=await this.#n(a,c);if(Ut("getIPNS GET %s %d",a,l.status),l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new lc("Request does not conform to schema or semantic constraints");if(l.body==null)throw new Un("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await Do(Bi(e.multihash),d),Dr(d)}catch(c){throw Ut.error("getIPNS GET %s error:",a,c),c}finally{i.clear(),s.resolve(),Ut("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){Ut("putIPNS starts: %c",e);let i=AbortSignal.timeout(this.timeout),o=de([this.shutDownController.signal,i,n.signal]);let s=Z(),a=Z();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=Ro(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:o},d=await this.#n(c,u);if(Ut("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new Un("PUT ipns response had status other than 200")}catch(l){throw Ut.error("putIPNS PUT %s error:",c,l.stack),l}finally{o.clear(),a.resolve(),Ut("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(K)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Ne(e.ID),Addrs:n,Protocols:t}}catch(t){Ut.error("could not conform record to peer schema",t)}}#r(e,t,n){if(t!=null||this.filterAddrs!=null){let i=t?.join(",")??this.filterAddrs?.join(",")??"";i!==""&&e.searchParams.set("filter-addrs",i)}if(n!=null||this.filterProtocols!=null){let i=n?.join(",")??this.filterProtocols?.join(",")??"";i!==""&&e.searchParams.set("filter-protocols",i)}}async#n(e,t){let n=t.method??"GET",i=`${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 Ut("returning cached response for %s",i),c;await this.cache?.delete(e)}}let o=this.inFlightRequests.get(i);if(o!=null){let c=await o;return Ut("deduplicating outgoing request for %s",i),c.clone()}let s=fetch(e,t).then(async c=>{if(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(i)});return this.inFlightRequests.set(i,s),await s}};function jh(r,e={}){return new Xh(new URL(r),e)}var i6=ut(Mh(),1);function Qh(r,e){let t=e.map((n,i)=>({record:Dr(n),index:i}));return t.sort((n,i)=>{let o=n.record.sequence,s=i.record.sequence;if(o>s)return-1;if(o<s)return 1;if(n.record.validityType===Wt.ValidityType.EOL&&i.record.validityType===Wt.ValidityType.EOL){let a=i6.default.fromString(n.record.validity).toDate(),c=i6.default.fromString(i.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var Zh=class extends Error{static name="DNSLinkNotFoundError";constructor(e="DNSLink not found"){super(e),this.name="DNSLinkNotFoundError"}},Jh=class extends Error{static name="RecordsFailedValidationError";constructor(e="Records failed validation"){super(e),this.name="RecordsFailedValidationError"}},ep=class extends Error{static name="UnsupportedMultibasePrefixError";constructor(e="Unsupported multibase prefix"){super(e),this.name="UnsupportedMultibasePrefixError"}},tp=class extends Error{static name="UnsupportedMultihashCodecError";constructor(e="Unsupported multihash codec"){super(e),this.name="UnsupportedMultihashCodecError"}},rp=class extends Error{static name="InvalidValueError";constructor(e="Invalid value"){super(e),this.name="InvalidValueError"}};var KL=32;async function qx(r,e,t,n,i={}){if(e===0)throw new Error("recursion limit exceeded");n("query %s for TXT and CNAME records",r);let s=((await t.query(r,{...i,types:[ar.TXT]}))?.Answer??[]).sort((l,u)=>l.data.localeCompare(u.data));n("found %d TXT records for %s",s.length,r);for(let l of s)try{let u=l.data;if(u.startsWith('"')&&u.endsWith('"')&&(u=u.substring(1,u.length-1)),!u.startsWith("dnslink="))continue;n("%s TXT %s",l.name,u),u=u.replace("dnslink=","");let[,d,h,...f]=u.split("/");if(d==="ipfs")try{return{value:`/ipfs/${B.parse(h)}${f.length>0?`/${f.join("/")}`:""}`,answer:l}}catch{}else if(d==="ipns"){try{let p;return h.charAt(0)==="1"||h.charAt(0)==="Q"?p=Ne(h):p=Kt(B.parse(h)),{value:`/ipns/${p}${f.length>0?`/${f.join("/")}`:""}`,answer:l}}catch{}return await np(h,e-1,t,n,i)}else{if(d==="dnslink")return await np(h,e-1,t,n,i);n('unknown protocol "%s" in DNSLink record for domain: %s',d,r);continue}}catch(u){n.error("could not parse DNS link record for domain %s, %s",r,l.data,u)}n("no DNSLink records found for %s, falling back to CNAME",r);let c=((await t.query(r,{...i,types:[ar.CNAME]}))?.Answer??[]).sort((l,u)=>l.data.localeCompare(u.data));n("found %d CNAME records for %s",c.length,r);for(let l of c)try{return await np(l.data,e-1,t,n,i)}catch(u){n.error("domain %s cname %s had no DNSLink records",r,l.data,u)}throw new Zh(`No DNSLink records found for domain: ${r}`)}async function np(r,e,t,n,i={}){if(e===0)throw new Error("recursion limit exceeded");r.startsWith("_dnslink.")||(r=`_dnslink.${r}`);try{return await qx(r,e,t,n,i)}catch(o){if(o.code!=="ENOTFOUND"&&o.code!=="ENODATA"&&o.name!=="DNSLinkNotFoundError"&&o.name!=="NotFoundError")throw o;return r.startsWith("_dnslink.")?r=r.replace("_dnslink.",""):r=`_dnslink.${r}`,qx(r,e,t,n,i)}}async function Kx(r,e,t,n={}){return np(r,n.maxRecursiveDepth??KL,e,t,n)}var o6=class{routing;constructor(e){this.routing=e}async put(e,t,n={}){try{await this.routing.put(e,t,n)}catch(i){n.onProgress?.(new M("ipns:routing:helia:error",i))}}async get(e,t={}){try{return await this.routing.get(e,t)}catch(n){t.onProgress?.(new M("ipns:routing:helia:error",n))}throw new Error("Not found")}};function Gx(r){return new o6(r)}var uc=1e3,s6=60*uc,ip=60*s6,Wx=36*ip,Yx="/ipfs/kad/1.0.0",Xx=48*ip;var jx=24*ip,Qx=10,Zx=16384,Jx=ip,Gie=10*uc;var op=20,dc=3,eb=5*s6,tb=uc,rb=5*uc,nb=5*s6,ib=30*uc,ob=180*uc,a6=`${ro}-kad-dht`;var pu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={key:le(0),value:le(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(pu||(pu={}));function sb(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),i=String(r.getUTCHours()).padStart(2,"0"),o=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${i}:${o}:${s}.${c}Z`}function ab(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),i=parseInt(t[2],10)-1,o=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,i,o,s,a,c,l))}var tt=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 pu.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:sb(this.timeReceived)}}static deserialize(e){let t=pu.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=ab(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 sp=globalThis.CustomEvent??Event;async function*Yt(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,i=new EventTarget,o=[],s=Z(),a=Z(),c=!1,l,u=!1;i.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(o.length===t&&(s=Z(),await s.promise),u)break;let m={done:!1};o.push(m),p().then(g=>{m.done=!0,m.ok=!0,m.value=g,i.dispatchEvent(new sp("task-complete"))},g=>{m.done=!0,m.err=g,i.dispatchEvent(new sp("task-complete"))})}c=!0,i.dispatchEvent(new sp("task-complete"))}catch(p){l=p,i.dispatchEvent(new sp("task-complete"))}});function d(){return n?o[0]?.done:!!o.find(p=>p.done)}function*h(){for(;o.length>0&&o[0].done;){let p=o[0];if(o.shift(),p.ok)yield p.value;else throw u=!0,s.resolve(),p.err;s.resolve()}}function*f(){for(;d();)for(let p=0;p<o.length;p++)if(o[p].done){let m=o[p];if(o.splice(p,1),p--,m.ok)yield m.value;else throw u=!0,s.resolve(),m.err;s.resolve()}}for(;;){if(d()||(a=Z(),await a.promise),l!=null)throw l;if(n?yield*h():yield*f(),c&&o.length===0)break}}var No=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},ap=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},cp=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},lp=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var cb;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 3:{o.author=t.bytes();break}case 4:{o.signature=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(cb||(cb={}));var _e;(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"})(_e||(_e={}));var up;(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"})(up||(up={}));(function(r){r.codec=()=>Ye(up)})(_e||(_e={}));var hc;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(hc||(hc={}));var c6;(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"})(c6||(c6={}));(function(r){r.codec=()=>Ye(c6)})(hc||(hc={}));var fc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let o of t.multiaddrs)n.uint32(18),n.bytes(o);t.connection!=null&&(n.uint32(24),hc.codec().encode(t.connection,n)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={id:le(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.id=t.bytes();break}case 2:{if(i.limits?.multiaddrs!=null&&o.multiaddrs.length===i.limits.multiaddrs)throw new Ve('Decode error - map field "multiaddrs" had too many elements');o.multiaddrs.push(t.bytes());break}case 3:{o.connection=hc.codec().decode(t);break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(fc||(fc={}));var Mi;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.type!=null&&up[t.type]!==0&&(n.uint32(8),_e.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 o of t.closer)n.uint32(66),fc.codec().encode(o,n);if(t.providers!=null)for(let o of t.providers)n.uint32(74),fc.codec().encode(o,n);i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={type:_e.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.type=_e.codec().decode(t);break}case 10:{o.clusterLevel=t.int32();break}case 2:{o.key=t.bytes();break}case 3:{o.record=t.bytes();break}case 8:{if(i.limits?.closer!=null&&o.closer.length===i.limits.closer)throw new Ve('Decode error - map field "closer" had too many elements');o.closer.push(fc.codec().decode(t,t.uint32(),{limits:i.limits?.closer$}));break}case 9:{if(i.limits?.providers!=null&&o.providers.length===i.limits.providers)throw new Ve('Decode error - map field "providers" had too many elements');o.providers.push(fc.codec().decode(t,t.uint32(),{limits:i.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Mi||(Mi={}));function l6(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 mu(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 dp(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Yr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function u6(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function gu(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function d6(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function lb(r,e,t){if(t.length===0)throw new O("No records given");let i=U(e).split("/");if(i.length<3)throw new O("Record key does not have a selector function");let o=r[i[1].toString()];if(o==null)throw new lp(`No selector function configured for key type "${i[1]}"`);return t.length===1?0:o(e,t)}function WL(r,e){return 0}var ub={pk:WL};async function pc(r,e){let t=e.key,i=U(t).split("/");if(i.length<3)return;let o=r[i[1].toString()];if(o==null)throw new O(`No validator available for key type "${i[1]}"`);await o(t,e.value)}var YL=async(r,e)=>{if(!(r instanceof Uint8Array))throw new O('"key" must be a Uint8Array');if(r.byteLength<5)throw new O("Invalid public key record");if(U(r.subarray(0,4))!=="/pk/")throw new O("key was not prefixed with /pk/");let n=wt(e),i=r.slice(4);if(!J(i,n.toMultihash().bytes))throw new O("public key does not match passed in key")},db={pk:YL};var XL=C("/pk/");function fb(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let i=br(n);return i==null?!0:!i})}}async function Lo(r){return(await Se.digest(r)).digest}async function Xt(r){return Lo(r.toMultihash().bytes)}function Oo(r,e){return new Fe(`${r}/${U(e,"base32")}`,!1)}function hb(r){return ge([XL,r.toMultihash().bytes])}function pb(r){return U(r.subarray(0,4))==="/pk/"}function mb(r){let e=pe(r.subarray(4));return Tt(e)}function f6(r,e){let t=new Date;return new tt(r,e,t).serialize()}var jL=290,QL=54,ZL=55,JL=56,eO=4,tO=41;function gb(r){let e=r.stringTuples();for(let t of e)if(t[0]===jL)return!1;if(e[0][0]===QL||e[0][0]===ZL||e[0][0]===JL)return!0;if(e[0][0]===eO||e[0][0]===tO){let t=br(`${e[0][1]}`);return t==null||!t}return!1}function fp(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:B.createV1(We,pe(C(n,"base32"))),peerId:Ne(t)}}function hp(r,e,t){let n=typeof e=="string"?e:U(e.multihash.bytes,"base32"),i=[r,n];return t!=null&&i.push(t.toString()),new Fe(i.join("/"))}function pp(r){return new Date(hr(r))}function Ks(r,e,t){return async function*(...n){let i=e.queryTime?.timer(t),o=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,o?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||i?.()}}}function mp(r,e,t){return async function(...n){let i=e?.queryTime?.timer(t),o=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,o?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||i?.()}}}var gp=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:i,peerRouting:o,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=i,this.peerRouting=o,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){this.log("getLocal %b",e);let t=Oo(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let i=tt.deserialize(n);return await pc(this.validators,i),i}async*sendCorrectionRecord(e,t,n,i={}){this.log("sendCorrection for %b",e);let o=f6(e,n);for(let{value:s,from:a}of t){if(J(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Oo(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,o.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:_e.PUT_VALUE,key:e,record:o};for await(let u of this.network.sendRequest(a,l,i))u.name==="PEER_RESPONSE"&&u.record!=null&&J(u.record.value,tt.deserialize(o).value)&&(c=!0),yield u;c||(yield Yr({from:a,error:new No("Value not put correctly")},i)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let i=f6(e,t),o=Oo(this.datastorePrefix,e);this.log(`storing record for key ${o.toString()}`),await this.components.datastore.put(o,i.subarray()),yield*Re(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>Je(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:_e.PUT_VALUE,key:e,record:i};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&J(u.record.value,tt.deserialize(i).value)||c.push(Yr({from:a.peer.id,error:new No("Value not put correctly")},n)));return c}),s=>Yt(s,{ordered:!1,concurrency:dc}),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))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let i=n.map(a=>a.value),o=0;try{o=lb(this.selectors,e,i)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=i[o];if(this.log("GetValue %b %b",e,s),s==null)throw new Ce("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[o]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let o=await this.getLocal(e);yield gu({value:o.value,from:this.components.peerId},t)}catch(o){this.log("error getting local value for %b",e,o)}let n=this,i=async function*({peer:o,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(o,e,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield gu({from:o,value:a.record.value},t))};yield*this.queryManager.run(e,i,t)}};function yb(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function yu(r){if(r.id==null)throw new Error("Invalid peer in message");let e=pe(r.id);return{id:Tt(e),multiaddrs:(r.multiaddrs??[]).map(t=>K(t))}}var yp=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:i,queryManager:o,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=i,this.queryManager=o,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 i=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let o={type:_e.ADD_PROVIDER,key:i,providers:[yb({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let u of this.network.sendMessage(c.peer.id,o,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(Yr({from:c.peer.id,error:u},n))}return l};yield*Re(this.peerRouting.getClosestPeers(i,n),c=>Je(c,l=>a(l)),c=>Yt(c,{ordered:!1,concurrency:dc}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,i=0,o=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let h=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:h.addresses.map(({multiaddr:f})=>f)})}catch(h){if(h.name!=="NotFoundError")throw h;this.log("no peer store entry for %p",d)}if(yield mu({from:this.components.peerId,messageType:_e.GET_PROVIDERS,providers:u},t),yield u6({from:this.components.peerId,providers:u},t),i+=u.length,i>=n)return}let c=async function*({peer:u,signal:d}){let h={type:_e.GET_PROVIDERS,key:o};yield*s.network.sendRequest(u,h,{...t,signal:d})},l=new yr(a);for await(let u of this.queryManager.run(o,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 h of u.providers)l.has(h.id)||(l.add(h.id),d.push(h));if(d.length>0&&(yield u6({from:u.from,providers:d},t),i+=d.length,i>=n))return}}};var mc=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),i=e-this.movingAverage,o=n*i;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+i*o),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*i}else this.movingAverage=e;this.previousTime=t}};var nO=1.2,iO=2,oO=2e3,Hn=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new mc(e.interval??5e3),this.failure=new mc(e.interval??5e3),this.next=new mc(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??iO,this.timeoutMultiplier=e.timeoutMultiplier??nO,this.minTimeout=e.minTimeout??oO,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),i=de([e.signal,n]);return i.start=Date.now(),i.timeout=t,i}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var h6=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=Z(),this.haveNext=Z()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=Z(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return 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 new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=Z(),await st(this.readNext.promise,t?.signal,t)}};function wb(){return new h6}var wp=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var p6=class extends Error{code;constructor(e,t){super(e),this.code=t}},m6=class extends p6{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Gs(r,e){let t=wb();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let i=new ee;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new m6("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:h}=await Promise.race([n.next(),l]);return d===!0?new ee:h}for(;i.byteLength<s;){let{value:d,done:h}=await Promise.race([n.next(),l]);if(h===!0)throw new wp("unexpected end of input");i.append(d)}let u=i.sublist(0,s);return i.consume(s),u}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(i.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield i:yield*i,yield*s}()}return r}}}var xp=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},bp=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},vp=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function ci(r,e={}){let t=Gs(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ve(e.maxDataLength));let n=e?.lengthDecoder??hr,i=e?.lengthEncoder??Ze;return{read:async s=>{let a=-1,c=new ee;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new xp("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new vp("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new bp("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new ee(i(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new ee(...s.flatMap(l=>[i(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function rt(r,e){let t=ci(r,e),n={read:async(i,o)=>{let s=await t.read(o);return i.decode(s)},write:async(i,o,s)=>{await t.write(o.encode(i),s)},writeV:async(i,o,s)=>{await t.writeV(i.map(a=>o.encode(a)),s)},pb:i=>({read:async o=>n.read(i,o),write:async(o,s)=>n.write(o,i,s),writeV:async(o,s)=>n.writeV(o,i,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Ep=class extends be{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 Hn({...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,i],o){return{...o,to:n.toString(),"message type":`${i.type}`}},getAttributesFromYieldedValue:(n,i)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((o,s)=>{i[`providers-${s}`]=o.id.toString()}),n.closer.length>0&&n.closer.forEach((o,s)=>{i[`closer-${s}`]=o.id.toString()})),i)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,i],o){return{...o,to:n.toString(),"message type":`${i.type}`}},getAttributesFromYieldedValue:(n,i)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((o,s)=>{i[`providers-${s}`]=o.id.toString()}),n.closer.length>0&&n.closer.forEach((o,s)=>{i[`closer-${s}`]=o.id.toString()})),i)})??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 i=t.type;if(i==null)throw new O("Message type was missing");this.log("sending %s to %p",t.type,e),yield d6({peer:e},n),yield l6({to:e,type:i},n);let o,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[i]:!0}),o=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(o,t,n);o.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),o?.abort(l)}),yield mu({from:e,messageType:c.type,closer:c.closer.map(yu),providers:c.providers.map(yu),record:c.record==null?void 0:tt.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[i]:!0}),o?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Yr({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let i=t.type;if(i==null)throw new O("Message type was missing");this.log("sending %s to %p",t.type,e),yield d6({peer:e},n),yield l6({to:e,type:i},n);let o,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[i]:!0}),o=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(o,t,n),o.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),o?.abort(c)}),yield mu({from:e,messageType:i},n)}catch(a){this.metrics.errors?.increment({[i]:!0}),o?.abort(a),yield Yr({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await rt(e).write(t,Mi,n)}async _writeReadMessage(e,t,n){let i=rt(e);await i.write(t,Mi,n);let o=await i.read(Mi,n);return o.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:yu(s)})}),o.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:yu(s)})}),o}};function Nr(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=at(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function Bo(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 Mo=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await Xt(e.id);this.addWithKadId(e,t)}addWithKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:Nr(this.originDhtKey,t)},i=!1;for(let o=0;o<this.peerDistances.length;o++){let s=Bo(this.peerDistances[o].distance,n.distance);if(s===0||s===1){i=!0,this.peerDistances.splice(o,0,n);break}}i||this.peerDistances.push(n),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Xt(e),n=Nr(t,this.originDhtKey),i=this.peerDistances[this.peerDistances.length-1].distance;return Bo(n,i)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var Sp=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,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){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(i){if(i.name!=="NotFoundError")throw i}}if(t==null)try{t=await this.peerStore.get(e)}catch(i){if(i.name!=="NotFoundError")throw i}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(i=>i.multiaddr)}}async*_getValueSingle(e,t,n={}){let i={type:_e.GET_VALUE,key:t};yield*this.network.sendRequest(e,i,n)}async*getPublicKeyFromNode(e,t={}){let n=hb(e);for await(let i of this._getValueSingle(e,n,t))if(yield i,i.name==="PEER_RESPONSE"&&i.record!=null){let o=wt(i.record.value),s=oi(o);if(!s.equals(e))throw new wi("public key does not match id");if(s.publicKey==null)throw new wi("public key missing");yield gu({from:e,value:i.record.value},t)}throw new No(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let i=await this.findPeerLocal(e);if(i!=null){this.log("found local"),yield dp({from:this.peerId,peer:i},t);return}}let n=!1;if(t.useNetwork!==!1){let i=this,o=async function*({peer:s,signal:a}){let c={type:_e.FIND_NODE,key:e.toMultihash().bytes};for await(let l of i.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield dp({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,o,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Yr({from:this.peerId,error:new Ce("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Lo(e),i=this.routingTable.closestPeers(n),o=this,s=new Mo(n,this.routingTable.kBucketSize);await Promise.all(i.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){o.log("closerPeersSingle %s from %p",U(e,"base32"),c);let u={type:_e.FIND_NODE,key:e};yield*o.network.sendRequest(c,u,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield dp({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let i of this._getValueSingle(e,t,n)){if(i.name==="PEER_RESPONSE"&&i.record!=null)try{await this._verifyRecordOnline(i.record)}catch{let s="invalid record received, discarded";this.log(s),yield Yr({from:i.from,error:new No(s)},n);continue}yield i}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new cp("invalid record received");await pc(this.validators,new tt(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=pe(e),l=Tt(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let i=await Lo(e),o=this.routingTable.closestPeers(i),s=await Xt(t),a=Nr(s,i);for(let c of o){let l=await Xt(c),u=Nr(l,i);if(Bo(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:h})=>h)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var Ap=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let i=hp(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(i)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let i=hp(this.datastorePrefix,e,t),o=Ze(n.getTime());await this.datastore.put(i,o)}async loadProviders(e){let t=new Mt,n=hp(this.datastorePrefix,e);for await(let i of this.datastore.query({prefix:n.toString()})){let{peerId:o}=fp(i.key);t.set(o,pp(i.value))}return t}};async function*xb(r){let{key:e,startingPeer:t,ourPeerId:n,signal:i,query:o,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:h}=r,f=new fr({concurrency:s,sort:(g,y)=>Bo(g.options.distance,y.options.distance)}),p=await Lo(e);function m(g,y){if(g==null)return;d.add(g);let w=Nr(y,p);f.add(async()=>{let x=[i];l!=null&&x.push(AbortSignal.timeout(l));let b=de(x);try{for await(let A of o({...r,key:e,peer:g,signal:b,pathIndex:a,numPaths:c})){if(b.aborted)return;if(A.name==="PEER_RESPONSE")for(let k of A.closer){if(d.has(k.id)){u.trace("already seen %p in query",k.id);continue}if(n.equals(k.id)){u("not querying ourselves");continue}if(!await h.isDialable(k.multiaddrs)){u("not querying undialable peer");continue}let E=await Xt(k.id),S=Nr(E,p);if(Bo(S,w)!==-1){u.trace("skipping %p as they are not closer to %b than %p",k.id,e,g);continue}u.trace("querying closer peer %p",k.id),m(k.id,E)}f.safeDispatchEvent("completed",{detail:A})}}catch(A){if(!i.aborted)return Yr({from:g,error:A},r)}finally{b.clear()}},{distance:w}).catch(x=>{u.error(x)})}m(t,await Xt(t));try{for await(let g of f.toGenerator({signal:i}))g!=null&&(yield g)}catch(g){throw i.aborted?new ap("Query aborted"):g}}var Tp=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??op,this.alpha=t.alpha??dc,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,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(ob);n={...n,signal:c}}let i=new AbortController,o=de([this.shutDownController.signal,i.signal,n.signal]);i.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+U(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await st(this.initialQuerySelfHasRun.promise,o),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await Lo(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new yr,h=u.map((f,p)=>xb({...n,key:e,startingPeer:f,ourPeerId:this.peerId,signal:o,query:t,pathIndex:p,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let f of pr(...h)){if(f.name==="QUERY_ERROR"&&s.error("query error",f.error),f.name==="PEER_RESPONSE")for(let p of[...f.closer,...f.providers])await this.connectionManager.isDialable(p.multiaddrs)&&await this.routingTable.add(p.id);yield f}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),i.abort()),o.clear(),s("query:done")}}};function sO(r){return r[Symbol.asyncIterator]!=null}function aO(r){if(sO(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 Ip=aO;var cO=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 lO(r,e,t){let n,i=new Promise((o,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:u}=cO(r),d=(...f)=>{let p=t.multiArgs?f:f[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),o(c)))},h=f=>{n(),s(f)};n=()=>{for(let f of a)u(f,d);for(let f of t.rejectionEvents)u(f,h)};for(let f of a)l(f,d);for(let f of t.rejectionEvents)l(f,h);t.signal&&t.signal.addEventListener("abort",()=>{h(t.signal.reason)},{once:!0}),t.resolveImmediately&&o(c)});if(i.cancel=n,typeof t.timeout=="number"){let o=Dn(i,{milliseconds:t.timeout});return o.cancel=n,o}return i}function bb(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=lO(r,e,t),i=n.then(o=>o[0]);return i.cancel=n.cancel,i}var _p=class{log;peerId;peerRouting;routingTable;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.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??op,this.interval=t.interval??eb,this.initialInterval=t.initialInterval??tb,this.queryTimeout=t.queryTimeout??rb,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=mp(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)})},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=Z(),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=de(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await bb(this.routingTable,"peer:add",{signal:t,filter:o=>!this.peerId.equals(o.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),i=await Re(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),o=>ao(o,this.count),async o=>Ip(o));this.log("self-query found %d peers in %dms",i,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var kp=class extends be{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new fr({concurrency:t.concurrency??Qx,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Hn({...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??jx,this.maxQueueSize=t.maxQueueSize??Zx,this.validity=t.validity??Xx,this.interval=t.interval??Jx,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=mp(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:i}=fp(t.key),o=pp(t.value).getTime(),s=o+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",o,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(i)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){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);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let i=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(i)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await Lt(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var uO=20,dO=5e3,fO="kad-close",hO=50,Cp=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??dO,this.peerSetSize=t.peerSetSize??uO,this.closeTagName=t.closeTagName??fO,this.closeTagValue=t.closeTagValue??hO,this.closestPeers=new yr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await Xt(this.components.peerId);this.newPeers=new Mo(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 yr(this.newPeers?.peers.map(i=>i.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async i=>{await this.components.peerStore.merge(i,{tags:{[this.closeTagName]:{value:this.closeTagValue},[a6]:{value:1}}})}),...[...n].map(async i=>{await this.components.peerStore.merge(i,{tags:{[this.closeTagName]:void 0,[a6]:void 0}})})])}};function wu(r){return Array.isArray(r?.peers)}var Pp=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??vb,this.kBucketSize=e.kBucketSize??g6,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??Eb,this.lastPingThreshold=e.lastPingThreshold??Sb,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new Mt,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await Xt(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await Xt(e),lastPing:0},i=this.addingPeerMap.get(e);if(i!=null)return i;try{let o=this._add(n,t);this.addingPeerMap.set(e,o),await o}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!mO(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let i=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),o=!1;for await(let s of this.ping(i,t))o=!0,await this.remove(s.kadId);o&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new Mo(e,t);for(let i of this.toIterable())n.addWithKadId({id:i.peerId,multiaddrs:[]},i.kadId);yield*Je(n.peers,i=>i.id)}count(){function e(t){if(wu(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let i=t.peers.splice(n,1)[0];await this.onRemove?.(i,t)}}*toIterable(){function*e(t){if(wu(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+U(Nr(e,t),"base16"))}_determineBucket(e){let t=U(e,"base2");function n(i,o=0){return wu(i)?i:t[o]==="0"?n(i.left,o+1):n(i.right,o+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>J(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let i of e.peers)U(i.kadId,"base2")[e.depth]==="0"?(t.peers.push(i),await this.onMove?.(i,e,t)):(n.peers.push(i),await this.onMove?.(i,e,n));pO(e,t,n)}};function pO(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function mO(r,e){return r.lastPing<Date.now()-e}var g6=20,vb=6;var gO=20,yO=100,Eb=3;var wO=20,xO=100,Ab="kad-peer",bO=1,Sb=6e5,vO=!0,EO=1e3,Rp=class extends be{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??g6,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Ab,this.peerTagValue=t.peerTagValue??bO,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??vO,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??EO,this.pingOldContactQueue=new Vt({concurrency:t.pingOldContactConcurrency??wO,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??xO}),this.pingOldContactTimeout=new Hn({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new Vt({concurrency:t.pingNewContactConcurrency??gO,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??yO}),this.pingNewContactTimeout=new Hn({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new Pp({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new Cp(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,await $t(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(Ab)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await tr(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let i of e){if(this.kb.get(i.kadId)==null){this.log("asked to ping contact %p that was not in routing table",i.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let o=this.pingOldContactQueue.find(i.peerId);if(o!=null)return this.log("asked to ping contact %p was already being pinged",i.peerId),await o.join(t)?void 0:i;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=de([c,a?.signal]);try{return await this.pingContact(i,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:i.peerId,signal:t?.signal}))return i})}for await(let i of Yt(n))i!=null&&(yield i)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),i=de([n,t?.signal]);try{let o=this.pingNewContactQueue.find(e.peerId);return o!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await o.join({signal:i})):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:i})}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),i.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let i of this.network.sendRequest(e.peerId,{type:_e.PING},t))if(i.type===Dp.PEER_RESPONSE)return i.messageType===_e.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(i){return this.log("error pinging old contact %p - %e",e.peerId,i),n?.abort(i),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await Xt(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Xt(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,i=20,o=0;function s(a){if(wu(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<i&&(i=a.peers.length),a.peers.length>o&&(o=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(i),this.metrics.routingTableKadBucketMaxOccupancy.update(o),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var Tb=[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 Np=15,Lp=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:i,refreshInterval:o,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=i,this.refreshInterval=o??nb,this.refreshQueryTimeout=s??ib,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(i=>i.toISOString()).join(", ")} ]`),Promise.all(n.map(async(i,o)=>{try{if(await this._refreshCommonPrefixLength(o,i,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(o+1),n.length-1);for(let a=o+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,i,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(i=>{this.log.error(i)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(i=>{this.log.error(i)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let i=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,i,this.routingTable.size);let o=AbortSignal.timeout(this.refreshQueryTimeout);let s=await Ip(this.peerRouting.getClosestPeers(i.toMultihash().bytes,{signal:o}));this.log(`found ${s} 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)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Np&&(e=Np);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=gr(2),n=(t[1]<<8)+t[0],i=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),o=pe(i);return Tt(o)}async _makePeerId(e,t,n){if(n>Np)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Np}`);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=Tb[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,Se.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=Nr(this.routingTable.kb.localPeer.kadId,e),n=0;for(let i of t)if(i===0)n++;else break;yield n}}};var Op=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 he("Missing key");let n;try{n=B.decode(t.key)}catch{throw new he("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 i=>{let o=pe(i.id),s=Tt(o),a=i.multiaddrs.map(c=>K(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",i.id,e);return}if(i.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 Bp=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new he("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);J(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(o=>o.decapsulateCode(se("p2p").code))});let i={type:_e.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:o})=>o.length).map(o=>({id:o.id.toMultihash().bytes,multiaddrs:o.multiaddrs.map(s=>s.bytes)})),providers:[]};return i.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),i}};function AO(r){return r[Symbol.asyncIterator]!=null}function TO(r){if(AO(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 Fi=TO;var Mp=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:i,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=i,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new he("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=B.decode(t.key)}catch{throw new he("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[i,o]=await Promise.all([Fi(Je(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.getCloserPeersOffline(t.key,this.peerId)]),s={type:_e.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer: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)})),providers: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)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var Fp=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 he("Invalid key");let i={type:_e.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(pb(n)){this.log("is public key");let a=mb(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Ce("No public key found in key book");c=Ot(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),i.record=new tt(n,c,new Date).serialize(),i}let[o,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return o!=null&&(this.log("had record for %b in local datastore",n),i.record=o.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),i.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),i}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Oo(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(o){if(o.name==="NotFoundError")return;throw o}let i=tt.deserialize(n);if(i.timeReceived==null||Date.now()-i.timeReceived.getTime()>Wx){await this.datastore.delete(t);return}return i}};var Up=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 Hp=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){let i=`Empty record from: ${e.toString()}`;throw this.log.error(i),new he(i)}try{let i=tt.deserialize(t.record);await pc(this.validators,i),i.timeReceived=new Date;let o=Oo(this.datastorePrefix,i.key);await this.components.datastore.put(o,i.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,o)}catch(i){this.log("did not put record for key %b into datastore %o",n,i)}return t}};var zp=class{handlers;routingTable;log;metrics;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`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[_e.GET_VALUE.toString()]:new Fp(e,t),[_e.PUT_VALUE.toString()]:new Hp(e,t),[_e.FIND_NODE.toString()]:new Bp(e,t),[_e.ADD_PROVIDER.toString()]:new Op(e,t),[_e.GET_PROVIDERS.toString()]:new Mp(e,t),[_e.PING.toString()]:new Up(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})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:i}=e,o=i.remotePeer,s=this;await Re(n,a=>An(a),async function*(a){for await(let c of a){let l=Mi.decode(c);t=l.type,s.log("incoming %s from %p",l.type,o);let u=await s.handleMessage(o,l);u!=null&&(yield Mi.encode(u))}},a=>Sn(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var $p=class extends be{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:i}=t;this.components=e,this.log=e.logger.forComponent(`${i}: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 y6=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Lt(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)}async put(e,t,n){await Lt(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 Ce("Could not find value for key")}},w6=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 Ce("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},IO=32,_O=64,Vp=class extends be{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",i=t.datastorePrefix??"/dht",o=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${o}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${o}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${o}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${o}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.protocol=t.protocol??Yx,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??IO,this.maxOutboundStreams=t.maxOutboundStreams??_O,this.peerInfoMapper=t.peerInfoMapper??fb;let a=Ns();this.providers=new Ap(e,{...t.providers,logPrefix:n,datastorePrefix:i,lock:a}),this.validators={...db,...t.validators},this.selectors={...ub,...t.selectors},this.network=new Ep(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:o}),this.routingTable=new Rp(e,{kBucketSize:t.kBucketSize,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:o,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let c=Z();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new Tp(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:o,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new Sp(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new gp(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:i}),this.contentRouting=new yp(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new Lp(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new zp(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:o,datastorePrefix:i,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new $p(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new _p(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new kp(e,{...t.reprovide,logPrefix:n,metricsPrefix:o,datastorePrefix:i,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),h={id:u,multiaddrs:d.addresses.map(({multiaddr:f})=>f),protocols:d.protocols};await this.onPeerConnect(h)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new w6(this),this.dhtContentRouting=new y6(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:h})=>gb(h)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=Ks(this.get.bind(this),s,"GET_VALUE"),this.findProviders=Ks(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=Ks(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=Ks(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=Ks(this.provide.bind(this),s,"PROVIDE"),this.put=Ks(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Pe]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[zr]=["@libp2p/identify"];get[Qn](){return this.dhtContentRouting}get[Zn](){return this.dhtPeerRouting}get[os](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await $t(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await $t(this.querySelf))}async stop(){this.running=!1,await tr(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){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var Dp;(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"})(Dp||(Dp={}));function Ib(r={}){return e=>new Vp(e,r)}function qp(r){return new Fe("/dht/record/"+U(r,"base32"),!1)}function _b(r){return{async put(e,t,n={}){try{let i=qp(e);try{let s=await r.get(i),a=tt.deserialize(s);if(J(a.value,t))return}catch(s){if(s.name!=="NotFoundError")throw s}let o=new tt(e,t,new Date);n.onProgress?.(new M("ipns:routing:datastore:put")),await r.put(i,o.serialize(),n)}catch(i){throw n.onProgress?.(new M("ipns:routing:datastore:error",i)),i}},async get(e,t={}){try{let n=qp(e);t.onProgress?.(new M("ipns:routing:datastore:get"));let i=await r.get(n,t),o=tt.deserialize(i);return{record:o.value,created:o.timeReceived}}catch(n){throw t.onProgress?.(new M("ipns:routing:datastore:error",n)),n}},async has(e,t={}){let n=qp(e);return r.has(n,t)},async delete(e,t){let n=qp(e);return r.delete(n,t)}}}var x6="/ipns/";function b6(r,e){return r.code===e}var Ui=we("helia:ipns"),Pb=60*1e3,Rb=60*Pb,PO=48*Rb,v6=23*Rb,kb=BigInt(Pb)*5000000n,Cb={[mr.prefix]:mr,[ye.prefix]:ye},E6=class{routers;localStore;timeout;dns;log;constructor(e,t=[]){this.routers=[Gx(e.routing),...t],this.localStore=_b(e.datastore),this.dns=e.dns,this.log=e.logger.forComponent("helia:ipns")}async publish(e,t,n={}){try{let i=1n,o=Bi(e.publicKey.toMultihash());if(await this.localStore.has(o,n)){let{record:l}=await this.localStore.get(o,n);i=Dr(l).sequence+1n}let s=n.ttl!=null?BigInt(n.ttl)*1000000n:kb,a=await Hx(e,t,i,n.lifetime??PO,{...n,ttlNs:s}),c=Ro(a);return await this.localStore.put(o,c,n),n.offline!==!0&&await Promise.all(this.routers.map(async l=>{await l.put(o,c,n)})),a}catch(i){throw n.onProgress?.(new M("ipns:publish:error",i)),i}}async resolve(e,t={}){let n=xy(e)?e.toMultihash():e,i=Bi(n),o=await this.#r(i,t);return{...await this.#e(o.value,t),record:o}}async resolveDNSLink(e,t={}){let n=await Kx(e,this.dns,this.log,t);return{...await this.#e(n.value,t),answer:n.answer}}republish(e={}){if(this.timeout!=null)throw new Error("Republish is already running");e.signal?.addEventListener("abort",()=>{clearTimeout(this.timeout)});async function t(){let n=Date.now();e.onProgress?.(new M("ipns:republish:start"));let o=Date.now()-n,s=v6-o;s<0&&(s=e.interval??v6),setTimeout(()=>{t().catch(a=>{Ui.error("error republishing",a)})},s)}this.timeout=setTimeout(()=>{t().catch(n=>{Ui.error("error republishing",n)})},e.interval??v6)}async#e(e,t={}){let n=e.split("/");try{let i=n[1];if(i==="ipns"){let o=n[2],s=o.substring(0,1),a;if(s==="1"||s==="Q")a=ye.decode(`z${o}`);else if(Cb[s]!=null)a=Cb[s].decode(o);else throw new ep(`Unsupported multibase prefix "${s}"`);let c;try{c=pe(a)}catch{c=B.decode(a).multihash}if(!b6(c,0)&&!b6(c,18))throw new tp(`Unsupported multihash codec "${c.code}"`);let{cid:l}=await this.resolve(c,t),u=n.slice(3).join("/");return{cid:l,path:u}}else if(i==="ipfs"){let o=B.parse(n[2]),s=n.slice(3).join("/");return{cid:o,path:s}}}catch(i){Ui.error("error parsing ipfs path",i)}throw Ui.error("invalid ipfs path %s",e),new rp("Invalid value")}async#r(e,t={}){let n=[];if(await this.localStore.has(e,t))if(Ui("record is present in the cache"),t.nocache!==!0)try{let{record:a,created:c}=await this.localStore.get(e,t);this.log("record retrieved from cache"),await Do(e,a),this.log("record was valid");let l=Dr(a),u=Number((l.ttl??kb)/1000000n);if(c.getTime()+u>Date.now())return this.log("record TTL was valid"),l;if(t.offline===!0)return this.log("record TTL has been reached but we are resolving offline-only, returning record"),l;this.log("record TTL has been reached, searching routing for updates"),n.push(a)}catch(a){this.log("cached record was invalid",a),await this.localStore.delete(e,t)}else Ui("ignoring local cache due to nocache=true option");if(t.offline===!0)throw new Ce("Record was not present in the cache or has expired");Ui("did not have record locally");let o=0;if(await Promise.all(this.routers.map(async a=>{let c;try{c=await a.get(e,{...t,validate:!1})}catch(l){Ui.error("error finding IPNS record",l);return}try{await Do(e,c),n.push(c)}catch(l){o++,Ui.error("error finding IPNS record",l)}})),n.length===0)throw o>0?new Jh(`${o>1?`${o} records`:"Record"} found for routing key ${o>1?"were":"was"} invalid`):new Ce("Could not find record for routing key");let s=n[Qh(e,n)];return await this.localStore.put(e,s,t),Dr(s)}async republishRecord(e,t,n={}){let i;try{if(i=du(t)?.toMultihash(),i==null)if(typeof e=="string"){e.startsWith(x6)&&(e=e.slice(x6.length));try{i=Ne(e).toMultihash()}catch(a){throw new Error(`Invalid string key: ${a.message}`)}}else i=e;if(i==null)throw new Error("No public key multihash found to determine the routing key");let o=Bi(i),s=Ro(t);await Do(o,s),await this.localStore.put(o,s,n),n.offline!==!0&&await Promise.all(this.routers.map(async a=>{await a.put(o,s,n)}))}catch(o){throw n.onProgress?.(new M("ipns:republish:error",{key:i,record:t,err:o})),o}}};function Db(r,{routers:e=[]}={}){return new E6(r,e)}var Nb="[a-fA-F\\d:]",Fo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${Nb})|(?<=${Nb})(?=\\s|$))`:"",zn="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",It="[a-fA-F\\d]{1,4}",Kp=`
|
|
2
|
+
"use strict";var HeliaVerifiedFetch=(()=>{var mk=Object.create;var Td=Object.defineProperty;var gk=Object.getOwnPropertyDescriptor;var yk=Object.getOwnPropertyNames;var wk=Object.getPrototypeOf,xk=Object.prototype.hasOwnProperty;var ze=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ot=(r,e)=>{for(var t in e)Td(r,t,{get:e[t],enumerable:!0})},yy=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of yk(e))!xk.call(r,i)&&i!==t&&Td(r,i,{get:()=>e[i],enumerable:!(n=gk(e,i))||n.enumerable});return r};var ut=(r,e,t)=>(t=r!=null?mk(wk(r)):{},yy(e||!r||!r.__esModule?Td(t,"default",{value:r,enumerable:!0}):t,r)),bk=r=>yy(Td({},"__esModule",{value:!0}),r);var pw=ze((lQ,z3)=>{"use strict";var xD=Object.prototype.hasOwnProperty,wr="~";function zl(){}Object.create&&(zl.prototype=Object.create(null),new zl().__proto__||(wr=!1));function bD(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function hw(r,e,t,n,i){if(typeof t!="function")throw new TypeError("The listener must be a function");var o=new bD(t,n||r,i),s=wr?wr+e:e;return r._events[s]?r._events[s].fn?r._events[s]=[r._events[s],o]:r._events[s].push(o):(r._events[s]=o,r._eventsCount++),r}function Df(r,e){--r._eventsCount===0?r._events=new zl:delete r._events[e]}function sr(){this._events=new zl,this._eventsCount=0}sr.prototype.eventNames=function(){var e=[],t,n;if(this._eventsCount===0)return e;for(n in t=this._events)xD.call(t,n)&&e.push(wr?n.slice(1):n);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};sr.prototype.listeners=function(e){var t=wr?wr+e:e,n=this._events[t];if(!n)return[];if(n.fn)return[n.fn];for(var i=0,o=n.length,s=new Array(o);i<o;i++)s[i]=n[i].fn;return s};sr.prototype.listenerCount=function(e){var t=wr?wr+e:e,n=this._events[t];return n?n.fn?1:n.length:0};sr.prototype.emit=function(e,t,n,i,o,s){var a=wr?wr+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,i),!0;case 5:return c.fn.call(c.context,t,n,i,o),!0;case 6:return c.fn.call(c.context,t,n,i,o,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 h=c.length,f;for(d=0;d<h;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,i);break;default:if(!u)for(f=1,u=new Array(l-1);f<l;f++)u[f-1]=arguments[f];c[d].fn.apply(c[d].context,u)}}return!0};sr.prototype.on=function(e,t,n){return hw(this,e,t,n,!1)};sr.prototype.once=function(e,t,n){return hw(this,e,t,n,!0)};sr.prototype.removeListener=function(e,t,n,i){var o=wr?wr+e:e;if(!this._events[o])return this;if(!t)return Df(this,o),this;var s=this._events[o];if(s.fn)s.fn===t&&(!i||s.once)&&(!n||s.context===n)&&Df(this,o);else{for(var a=0,c=[],l=s.length;a<l;a++)(s[a].fn!==t||i&&!s[a].once||n&&s[a].context!==n)&&c.push(s[a]);c.length?this._events[o]=c.length===1?c[0]:c:Df(this,o)}return this};sr.prototype.removeAllListeners=function(e){var t;return e?(t=wr?wr+e:e,this._events[t]&&Df(this,t)):(this._events=new zl,this._eventsCount=0),this};sr.prototype.off=sr.prototype.removeListener;sr.prototype.addListener=sr.prototype.on;sr.prefixed=wr;sr.EventEmitter=sr;typeof z3<"u"&&(z3.exports=sr)});var W3=ze((DQ,ww)=>{ww.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 i(o,s){t[o]=s,e++,e>=r&&(e=0,n=t,t=Object.create(null))}return{has:function(o){return t[o]!==void 0||n[o]!==void 0},remove:function(o){t[o]!==void 0&&(t[o]=void 0),n[o]!==void 0&&(n[o]=void 0)},get:function(o){var s=t[o];if(s!==void 0)return s;if((s=n[o])!==void 0)return i(o,s),s},set:function(o,s){t[o]!==void 0?t[o]=s:i(o,s)},clear:function(){t=Object.create(null),n=Object.create(null)}}}});var ex=ze(eu=>{(function(){var r,e,t,n,i,o,s,a;a=function(c){var l,u,d,h;return l=(c&255<<24)>>>24,u=(c&255<<16)>>>16,d=(c&65280)>>>8,h=c&255,[l,u,d,h].join(".")},s=function(c){var l,u,d,h,f,p;for(l=[],d=h=0;h<=3&&c.length!==0;d=++h){if(d>0){if(c[0]!==".")throw new Error("Invalid IP");c=c.substring(1)}p=e(c),f=p[0],u=p[1],c=c.substring(u),l.push(f)}if(c.length!==0)throw new Error("Invalid IP");switch(l.length){case 1:if(l[0]>4294967295)throw new Error("Invalid IP");return l[0]>>>0;case 2:if(l[0]>255||l[1]>16777215)throw new Error("Invalid IP");return(l[0]<<24|l[1])>>>0;case 3:if(l[0]>255||l[1]>255||l[2]>65535)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2])>>>0;case 4:if(l[0]>255||l[1]>255||l[2]>255||l[3]>255)throw new Error("Invalid IP");return(l[0]<<24|l[1]<<16|l[2]<<8|l[3])>>>0;default:throw new Error("Invalid IP")}},t=function(c){return c.charCodeAt(0)},n=t("0"),o=t("a"),i=t("A"),e=function(c){var l,u,d,h,f;for(h=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")),f=d;d<c.length;){if("0"<=c[d]&&c[d]<=u)h=h*l+(t(c[d])-n)>>>0;else if(l===16)if("a"<=c[d]&&c[d]<="f")h=h*l+(10+t(c[d])-o)>>>0;else if("A"<=c[d]&&c[d]<="F")h=h*l+(10+t(c[d])-i)>>>0;else break;else break;if(h>4294967295)throw new Error("too large");d++}if(d===f)throw new Error("empty octet");return[h,d]},r=function(){function c(l,u){var d,h,f,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(m){throw d=m,new Error("Invalid mask: "+u)}for(h=f=32;f>=0;h=--f)if(this.maskLong===4294967295<<32-h>>>0){this.bitmask=h;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(m){throw d=m,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,h;for(h=s(this.first),d=s(this.last),u=0;h<=d;)l(a(h),h,u),u++,h++},c.prototype.toString=function(){return this.base+"/"+this.bitmask},c}(),eu.ip2long=s,eu.long2ip=a,eu.Netmask=r}).call(eu)});var Mh=ze((wne,n6)=>{var yne=function(){typeof n6<"u"&&(n6.exports=m);var r=86400,e=3200,t=146097*e/400,n=r*t,i=1e3*n,o=864e13,s=4294967296,a=1e6,c="000000000",l=Math.trunc||function(S){var T=S-S%1;return T==0&&(S<0||S===0&&1/S!=1/0)?-0:T},u=m.prototype,d=(m.fromDate=function(S){return new m(+S)},m.fromInt64BE=b(0,1,2,3,0,4),m.fromInt64LE=b(3,2,1,0,4,0),m.fromString=function(R){var T,$=new m,R=(R+="").replace(/^\s*[+\-]?\d+/,function(F){var F=+F,N=1970+(F-1970)%400;return $.year=F-N,N}).replace(/(?:Z|([+\-]\d{2}):?(\d{2}))$/,function(H,F,N){return F<0&&(N*=-1),T=6e4*(60*+F+ +N),""}).replace(/\.\d+$/,function(H){return $.nano=+(H+c).substr(1,9),""}).split(/\D+/);if(1<R.length?R[1]--:R[1]=0,$.time=T=Date.UTC.apply(Date,R)-(T||0),isNaN(T))throw new TypeError("Invalid Date");return g($)},m.fromTimeT=function(S){return w(S,0)},u.year=0,u.time=0,u.nano=0,u.addNano=function(S){return this.nano+=+S||0,this},u.getNano=function(){var S=g(this);return(S.time%1e3*a+ +S.nano+1e9)%1e9},u.getTimeT=function(){var T=g(this),S=Math.floor(T.time/1e3),T=T.year;return T&&(S+=T*t*r/e),S},u.getYear=function(){return this.toDate().getUTCFullYear()+this.year},u.toDate=function(){return y(g(this).time)},u.toJSON=function(){return this.toString().replace(/0{1,6}Z$/,"Z")},u.toString=function(S){var T=this,$=T.toDate(),R={H:function(){return k($.getUTCHours())},L:function(){return E($.getUTCMilliseconds(),3)},M:function(){return k($.getUTCMinutes())},N:function(){return E(T.getNano(),9)},S:function(){return k($.getUTCSeconds())},Y:function(){var H=T.getYear();return 999999<H?"+"+H:9999<H?"+"+E(H,6):0<=H?E(H,4):-999999<=H?"-"+E(-H,6):H},a:function(){return f[$.getUTCDay()]},b:function(){return h[$.getUTCMonth()]},d:function(){return k($.getUTCDate())},e:function(){return function(H){return(9<H?"":" ")+(0|H)}($.getUTCDate())},m:function(){return k($.getUTCMonth()+1)}};return function H(F){return F.replace(/%./g,function(N){var _=N[1],L=p[_],_=R[_];return L?H(L):_?_():N})}(S||d)},u.writeInt64BE=x(0,1,2,3,0,4),u.writeInt64LE=x(3,2,1,0,4,0),"%Y-%m-%dT%H:%M:%S.%NZ"),h=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],f=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],p={"%":"%",F:"%Y-%m-%d",n:`
|
|
3
|
+
`,R:"%H:%M",T:"%H:%M:%S",t:" ",X:"%T",Z:"GMT",z:"+0000"};return m;function m(S,T,$){var R=this;if(!(R instanceof m))return new m(S,T,$);R.time=+S||0,R.nano=+T||0,R.year=+$||0,g(R)}function g(S){var T,$,R,H=S.year,F=S.time,N=S.nano,L=((N<0||a<=N)&&(N-=($=Math.floor(N/a))*a,F+=$,$=1),H%e);return(F<-o||o<F||L)&&((T=l(F/i))&&(H+=T*e,F-=T*i),(R=y(F)).setUTCFullYear(L+R.getUTCFullYear()),R=(F=+R)+(T=l((H-=L)/e))*i,T&&-o<=R&&R<=o&&(H-=T*e,F=R),$=1),$&&(S.year=H,S.time=F,S.nano=N),S}function y(S){var T=new Date(0);return T.setTime(S),T}function w(H,R){H=+H||0;var $=l((R=(R|0)*s)/n)+l(H/n),R=R%n+H%n,H=l(R/n);return H&&($+=H,R-=H*n),new m(1e3*R,0,$*e)}function x(S,T,$,R,H,F){return function(L,_){var D=g(this);L=L||new Array(8),A(L,_|=0);var P=Math.floor(D.time/1e3),D=D.year*(t*r/e),I=l(D/s)+l(P/s),D=D%s+P%s,P=Math.floor(D/s);return P&&(I+=P,D-=P*s),N(L,_+H,I),N(L,_+F,D),L};function N(L,_,I){L[_+S]=I>>24&255,L[_+T]=I>>16&255,L[_+$]=I>>8&255,L[_+R]=255&I}}function b(S,T,$,R,H,F){return function(L,_){A(L,_|=0);var I=N(L,_+H);return w(N(L,_+F),I)};function N(L,_){return 16777216*L[_+S]+(L[_+T]<<16|L[_+$]<<8|L[_+R])}}function A(S,T){if(S=S&&S.length,S==null)throw new TypeError("Invalid Buffer");if(S<T+8)throw new RangeError("Out of range")}function k(S){return(9<S?"":"0")+(0|S)}function E(S,T){return(c+(0|S)).substr(-T)}}()});var mE=ze((a2e,pE)=>{"use strict";pE.exports=r=>{if(Object.prototype.toString.call(r)!=="[object Object]")return!1;let e=Object.getPrototypeOf(r);return e===null||e===Object.prototype}});var vE=ze((xE,bE)=>{"use strict";var B1=mE(),{hasOwnProperty:yE}=Object.prototype,{propertyIsEnumerable:jB}=Object,kc=(r,e,t)=>Object.defineProperty(r,e,{value:t,writable:!0,enumerable:!0,configurable:!0}),QB=xE,gE={concatArrays:!1,ignoreUndefined:!1},M1=r=>{let e=[];for(let t in r)yE.call(r,t)&&e.push(t);if(Object.getOwnPropertySymbols){let t=Object.getOwnPropertySymbols(r);for(let n of t)jB.call(r,n)&&e.push(n)}return e};function Cc(r){return Array.isArray(r)?ZB(r):B1(r)?JB(r):r}function ZB(r){let e=r.slice(0,0);return M1(r).forEach(t=>{kc(e,t,Cc(r[t]))}),e}function JB(r){let e=Object.getPrototypeOf(r)===null?Object.create(null):{};return M1(r).forEach(t=>{kc(e,t,Cc(r[t]))}),e}var wE=(r,e,t,n)=>(t.forEach(i=>{typeof e[i]>"u"&&n.ignoreUndefined||(i in r&&r[i]!==Object.getPrototypeOf(r)?kc(r,i,S8(r[i],e[i],n)):kc(r,i,Cc(e[i])))}),r),eM=(r,e,t)=>{let n=r.slice(0,0),i=0;return[r,e].forEach(o=>{let s=[];for(let a=0;a<o.length;a++)yE.call(o,a)&&(s.push(String(a)),o===r?kc(n,i++,o[a]):kc(n,i++,Cc(o[a])));n=wE(n,o,M1(o).filter(a=>!s.includes(a)),t)}),n};function S8(r,e,t){return t.concatArrays&&Array.isArray(r)&&Array.isArray(e)?eM(r,e,t):!B1(e)||!B1(r)?Cc(e):wE(r,e,M1(e),t)}bE.exports=function(...r){let e=S8(Cc(gE),this!==QB&&this||{},gE),t={_:{}};for(let n of r)if(n!==void 0){if(!B1(n))throw new TypeError("`"+n+"` is not an Option Object");t=S8(t,{_:n},e)}return t._}});var AE=ze((l2e,SE)=>{"use strict";function tM(r){return r>=55296&&r<=56319}function rM(r){return r>=56320&&r<=57343}SE.exports=function(e,t,n){if(typeof t!="string")throw new Error("Input must be string");for(var i=t.length,o=0,s,a,c=0;c<i;c+=1){if(s=t.charCodeAt(c),a=t[c],tM(s)&&rM(t.charCodeAt(c+1))&&(c+=1,a+=t[c]),o+=e(a),o===n)return t.slice(0,c+1);if(o>n)return t.slice(0,c-a.length+1)}return t}});var IE=ze((u2e,TE)=>{"use strict";function nM(r){return r>=55296&&r<=56319}function iM(r){return r>=56320&&r<=57343}TE.exports=function(e){if(typeof e!="string")throw new Error("Input must be string");for(var t=e.length,n=0,i=null,o=null,s=0;s<t;s++)i=e.charCodeAt(s),iM(i)?o!=null&&nM(o)?n+=1:n+=3:i<=127?n+=1:i>=128&&i<=2047?n+=2:i>=2048&&i<=65535&&(n+=3),o=i;return n}});var kE=ze((d2e,_E)=>{"use strict";var oM=AE(),sM=IE();_E.exports=oM.bind(null,sM)});var RE=ze((f2e,PE)=>{"use strict";var aM=kE(),cM=/[\/\?<>\\:\*\|"]/g,lM=/[\x00-\x1f\x80-\x9f]/g,uM=/^\.+$/,dM=/^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i,fM=/[\. ]+$/;function CE(r,e){if(typeof r!="string")throw new Error("Input must be string");var t=r.replace(cM,e).replace(lM,e).replace(uM,e).replace(dM,e).replace(fM,e);return aM(t,255)}PE.exports=function(r,e){var t=e&&e.replacement||"",n=CE(r,t);return t===""?n:CE(n,"")}});var DE=ze(Rc=>{"use strict";var pM="[object ArrayBuffer]",Vi=class r{static isArrayBuffer(e){return Object.prototype.toString.call(e)===pM}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),i=r.toUint8Array(t);if(n.length!==i.byteLength)return!1;for(let o=0;o<n.length;o++)if(n[o]!==i[o])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 i=new Uint8Array(n),o=0;for(let s of t){let a=this.toUint8Array(s);i.set(a,o),o+=a.length}return e[e.length-1]instanceof Function?this.toView(i,e[e.length-1]):i.buffer}},A8="string",mM=/^[0-9a-f\s]+$/i,gM=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,yM=/^[a-zA-Z0-9-_]+$/,U1=class{static fromString(e){let t=unescape(encodeURIComponent(e)),n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=t.charCodeAt(i);return n.buffer}static toString(e){let t=Vi.toUint8Array(e),n="";for(let o=0;o<t.length;o++)n+=String.fromCharCode(t[o]);return decodeURIComponent(escape(n))}},yn=class{static toString(e,t=!1){let n=Vi.toArrayBuffer(e),i=new DataView(n),o="";for(let s=0;s<n.byteLength;s+=2){let a=i.getUint16(s,t);o+=String.fromCharCode(a)}return o}static fromString(e,t=!1){let n=new ArrayBuffer(e.length*2),i=new DataView(n);for(let o=0;o<e.length;o++)i.setUint16(o*2,e.charCodeAt(o),t);return n}},H1=class r{static isHex(e){return typeof e===A8&&mM.test(e)}static isBase64(e){return typeof e===A8&&gM.test(e)}static isBase64Url(e){return typeof e===A8&&yM.test(e)}static ToString(e,t="utf8"){let n=Vi.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 yn.toString(n,!0);case"utf16":case"utf16be":return yn.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 yn.fromString(e,!0);case"utf16":case"utf16be":return yn.fromString(e);default:throw new Error(`Unknown type of encoding '${t}'`)}}static ToBase64(e){let t=Vi.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 U1.fromString(e);case"utf16":case"utf16be":return yn.fromString(e);case"utf16le":case"usc2":return yn.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 U1.toString(e);case"utf16":case"utf16be":return yn.toString(e);case"utf16le":case"usc2":return yn.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 i=0;i<t;i++)n[i]=e.charCodeAt(i);return n.buffer}static ToBinary(e){let t=Vi.toUint8Array(e),n="";for(let i=0;i<t.length;i++)n+=String.fromCharCode(t[i]);return n}static ToHex(e){let t=Vi.toUint8Array(e),n="",i=t.length;for(let o=0;o<i;o++){let s=t[o];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 i=0;i<t.length;i=i+2){let o=t.slice(i,i+2);n[i/2]=parseInt(o,16)}return n.buffer}static ToUtf16String(e,t=!1){return yn.toString(e,t)}static FromUtf16String(e,t=!1){return yn.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,"")||""}};H1.DEFAULT_UTF8_ENCODING="utf8";function wM(r,...e){let t=arguments[0];for(let n=1;n<arguments.length;n++){let i=arguments[n];for(let o in i)t[o]=i[o]}return t}function xM(...r){let e=r.map(i=>i.byteLength).reduce((i,o)=>i+o),t=new Uint8Array(e),n=0;return r.map(i=>new Uint8Array(i)).forEach(i=>{for(let o of i)t[n++]=o}),t.buffer}function bM(r,e){if(!(r&&e)||r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let i=0;i<r.byteLength;i++)if(t[i]!==n[i])return!1;return!0}Rc.BufferSourceConverter=Vi;Rc.Convert=H1;Rc.assign=wM;Rc.combine=xM;Rc.isEqual=bM});var pA=ze(j0=>{"use strict";Object.defineProperty(j0,"__esModule",{value:!0});var j8=class{constructor(){this.pullQueue=[],this.pushQueue=[],this.eventHandlers={},this.isPaused=!1,this.isStopped=!1}push(e){if(this.isStopped)return;let t={value:e,done:!1};if(this.pullQueue.length){let n=this.pullQueue.shift();n&&n.resolve(t)}else this.pushQueue.push(Promise.resolve(t)),this.highWaterMark!==void 0&&this.pushQueue.length>=this.highWaterMark&&!this.isPaused&&(this.isPaused=!0,this.eventHandlers.highWater?this.eventHandlers.highWater():console&&console.warn(`EventIterator queue reached ${this.pushQueue.length} items`))}stop(){if(!this.isStopped){this.isStopped=!0,this.remove();for(let e of this.pullQueue)e.resolve({value:void 0,done:!0});this.pullQueue.length=0}}fail(e){if(!this.isStopped)if(this.isStopped=!0,this.remove(),this.pullQueue.length){for(let t of this.pullQueue)t.reject(e);this.pullQueue.length=0}else{let t=Promise.reject(e);t.catch(()=>{}),this.pushQueue.push(t)}}remove(){Promise.resolve().then(()=>{this.removeCallback&&this.removeCallback()})}[Symbol.asyncIterator](){return{next:e=>{let t=this.pushQueue.shift();return t?(this.lowWaterMark!==void 0&&this.pushQueue.length<=this.lowWaterMark&&this.isPaused&&(this.isPaused=!1,this.eventHandlers.lowWater&&this.eventHandlers.lowWater()),t):this.isStopped?Promise.resolve({value:void 0,done:!0}):new Promise((n,i)=>{this.pullQueue.push({resolve:n,reject:i})})},return:()=>(this.isStopped=!0,this.pushQueue.length=0,this.remove(),Promise.resolve({value:void 0,done:!0}))}}},X0=class{constructor(e,{highWaterMark:t=100,lowWaterMark:n=1}={}){let i=new j8;i.highWaterMark=t,i.lowWaterMark=n,i.removeCallback=e({push:o=>i.push(o),stop:()=>i.stop(),fail:o=>i.fail(o),on:(o,s)=>{i.eventHandlers[o]=s}})||(()=>{}),this[Symbol.asyncIterator]=()=>i[Symbol.asyncIterator](),Object.freeze(this)}};j0.EventIterator=X0;j0.default=X0});var mA=ze(qu=>{"use strict";Object.defineProperty(qu,"__esModule",{value:!0});var Q8=pA();qu.EventIterator=Q8.EventIterator;function dF(r,e,t){return new Q8.EventIterator(({push:n})=>(this.addEventListener(r,n,e),()=>this.removeEventListener(r,n,e)),t)}qu.subscribe=dF;qu.default=Q8.EventIterator});var iT=ze((vye,nT)=>{function xn(r,e){typeof e=="boolean"&&(e={forever:e}),this._originalTimeouts=JSON.parse(JSON.stringify(r)),this._timeouts=r,this._options=e||{},this._maxRetryTime=e&&e.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._timer=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}nT.exports=xn;xn.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts.slice(0)};xn.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timer&&clearTimeout(this._timer),this._timeouts=[],this._cachedTimeouts=null};xn.prototype.retry=function(r){if(this._timeout&&clearTimeout(this._timeout),!r)return!1;var e=new Date().getTime();if(r&&e-this._operationStart>=this._maxRetryTime)return this._errors.push(r),this._errors.unshift(new Error("RetryOperation timeout occurred")),!1;this._errors.push(r);var t=this._timeouts.shift();if(t===void 0)if(this._cachedTimeouts)this._errors.splice(0,this._errors.length-1),t=this._cachedTimeouts.slice(-1);else return!1;var n=this;return this._timer=setTimeout(function(){n._attempts++,n._operationTimeoutCb&&(n._timeout=setTimeout(function(){n._operationTimeoutCb(n._attempts)},n._operationTimeout),n._options.unref&&n._timeout.unref()),n._fn(n._attempts)},t),this._options.unref&&this._timer.unref(),!0};xn.prototype.attempt=function(r,e){this._fn=r,e&&(e.timeout&&(this._operationTimeout=e.timeout),e.cb&&(this._operationTimeoutCb=e.cb));var t=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){t._operationTimeoutCb()},t._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)};xn.prototype.try=function(r){console.log("Using RetryOperation.try() is deprecated"),this.attempt(r)};xn.prototype.start=function(r){console.log("Using RetryOperation.start() is deprecated"),this.attempt(r)};xn.prototype.start=xn.prototype.try;xn.prototype.errors=function(){return this._errors};xn.prototype.attempts=function(){return this._attempts};xn.prototype.mainError=function(){if(this._errors.length===0)return null;for(var r={},e=null,t=0,n=0;n<this._errors.length;n++){var i=this._errors[n],o=i.message,s=(r[o]||0)+1;r[o]=s,s>=t&&(e=i,t=s)}return e}});var oT=ze(aa=>{var jF=iT();aa.operation=function(r){var e=aa.timeouts(r);return new jF(e,{forever:r&&(r.forever||r.retries===1/0),unref:r&&r.unref,maxRetryTime:r&&r.maxRetryTime})};aa.timeouts=function(r){if(r instanceof Array)return[].concat(r);var e={retries:10,factor:2,minTimeout:1*1e3,maxTimeout:1/0,randomize:!1};for(var t in r)e[t]=r[t];if(e.minTimeout>e.maxTimeout)throw new Error("minTimeout is greater than maxTimeout");for(var n=[],i=0;i<e.retries;i++)n.push(this.createTimeout(i,e));return r&&r.forever&&!n.length&&n.push(this.createTimeout(i,e)),n.sort(function(o,s){return o-s}),n};aa.createTimeout=function(r,e){var t=e.randomize?Math.random()+1:1,n=Math.round(t*Math.max(e.minTimeout,1)*Math.pow(e.factor,r));return n=Math.min(n,e.maxTimeout),n};aa.wrap=function(r,e,t){if(e instanceof Array&&(t=e,e=null),!t){t=[];for(var n in r)typeof r[n]=="function"&&t.push(n)}for(var i=0;i<t.length;i++){var o=t[i],s=r[o];r[o]=function(c){var l=aa.operation(e),u=Array.prototype.slice.call(arguments,1),d=u.pop();u.push(function(h){l.retry(h)||(h&&(arguments[0]=l.mainError()),d.apply(this,arguments))}),l.attempt(function(){c.apply(r,u)})}.bind(r,s),r[o].options=e}}});var aT=ze((Sye,sT)=>{sT.exports=oT()});var TT=ze((Jwe,AT)=>{AT.exports=I5;var ST=128,yU=127,wU=~yU,xU=Math.pow(2,31);function I5(r,e,t){if(Number.MAX_SAFE_INTEGER&&r>Number.MAX_SAFE_INTEGER)throw I5.bytes=0,new RangeError("Could not encode varint");e=e||[],t=t||0;for(var n=t;r>=xU;)e[t++]=r&255|ST,r/=128;for(;r&wU;)e[t++]=r&255|ST,r>>>=7;return e[t]=r|0,I5.bytes=t-n+1,e}});var kT=ze((e9e,_T)=>{_T.exports=_5;var bU=128,IT=127;function _5(r,n){var t=0,n=n||0,i=0,o=n,s,a=r.length;do{if(o>=a||i>49)throw _5.bytes=0,new RangeError("Could not decode varint");s=r[o++],t+=i<28?(s&IT)<<i:(s&IT)*Math.pow(2,i),i+=7}while(s>=bU);return _5.bytes=o-n,t}});var PT=ze((t9e,CT)=>{var vU=Math.pow(2,7),EU=Math.pow(2,14),SU=Math.pow(2,21),AU=Math.pow(2,28),TU=Math.pow(2,35),IU=Math.pow(2,42),_U=Math.pow(2,49),kU=Math.pow(2,56),CU=Math.pow(2,63);CT.exports=function(r){return r<vU?1:r<EU?2:r<SU?3:r<AU?4:r<TU?5:r<IU?6:r<_U?7:r<kU?8:r<CU?9:10}});var qm=ze((r9e,RT)=>{RT.exports={encode:TT(),decode:kT(),encodingLength:PT()}});var ZT=ze((ad,c2)=>{(function(r,e){"use strict";var t={version:"3.0.0",x86:{},x64:{},inputValidation:!0};function n(f){if(!Array.isArray(f)&&!ArrayBuffer.isView(f))return!1;for(var p=0;p<f.length;p++)if(!Number.isInteger(f[p])||f[p]<0||f[p]>255)return!1;return!0}function i(f,p){return(f&65535)*p+(((f>>>16)*p&65535)<<16)}function o(f,p){return f<<p|f>>>32-p}function s(f){return f^=f>>>16,f=i(f,2246822507),f^=f>>>13,f=i(f,3266489909),f^=f>>>16,f}function a(f,p){f=[f[0]>>>16,f[0]&65535,f[1]>>>16,f[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=f[3]+p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=f[2]+p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=f[1]+p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=f[0]+p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function c(f,p){f=[f[0]>>>16,f[0]&65535,f[1]>>>16,f[1]&65535],p=[p[0]>>>16,p[0]&65535,p[1]>>>16,p[1]&65535];var m=[0,0,0,0];return m[3]+=f[3]*p[3],m[2]+=m[3]>>>16,m[3]&=65535,m[2]+=f[2]*p[3],m[1]+=m[2]>>>16,m[2]&=65535,m[2]+=f[3]*p[2],m[1]+=m[2]>>>16,m[2]&=65535,m[1]+=f[1]*p[3],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=f[2]*p[2],m[0]+=m[1]>>>16,m[1]&=65535,m[1]+=f[3]*p[1],m[0]+=m[1]>>>16,m[1]&=65535,m[0]+=f[0]*p[3]+f[1]*p[2]+f[2]*p[1]+f[3]*p[0],m[0]&=65535,[m[0]<<16|m[1],m[2]<<16|m[3]]}function l(f,p){return p%=64,p===32?[f[1],f[0]]:p<32?[f[0]<<p|f[1]>>>32-p,f[1]<<p|f[0]>>>32-p]:(p-=32,[f[1]<<p|f[0]>>>32-p,f[0]<<p|f[1]>>>32-p])}function u(f,p){return p%=64,p===0?f:p<32?[f[0]<<p|f[1]>>>32-p,f[1]<<p]:[f[1]<<p-32,0]}function d(f,p){return[f[0]^p[0],f[1]^p[1]]}function h(f){return f=d(f,[0,f[0]>>>1]),f=c(f,[4283543511,3981806797]),f=d(f,[0,f[0]>>>1]),f=c(f,[3301882366,444984403]),f=d(f,[0,f[0]>>>1]),f}t.x86.hash32=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%4,g=f.length-m,y=p,w=0,x=3432918353,b=461845907,A=0;A<g;A=A+4)w=f[A]|f[A+1]<<8|f[A+2]<<16|f[A+3]<<24,w=i(w,x),w=o(w,15),w=i(w,b),y^=w,y=o(y,13),y=i(y,5)+3864292196;switch(w=0,m){case 3:w^=f[A+2]<<16;case 2:w^=f[A+1]<<8;case 1:w^=f[A],w=i(w,x),w=o(w,15),w=i(w,b),y^=w}return y^=f.length,y=s(y),y>>>0},t.x86.hash128=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%16,g=f.length-m,y=p,w=p,x=p,b=p,A=0,k=0,E=0,S=0,T=597399067,$=2869860233,R=951274213,H=2716044179,F=0;F<g;F=F+16)A=f[F]|f[F+1]<<8|f[F+2]<<16|f[F+3]<<24,k=f[F+4]|f[F+5]<<8|f[F+6]<<16|f[F+7]<<24,E=f[F+8]|f[F+9]<<8|f[F+10]<<16|f[F+11]<<24,S=f[F+12]|f[F+13]<<8|f[F+14]<<16|f[F+15]<<24,A=i(A,T),A=o(A,15),A=i(A,$),y^=A,y=o(y,19),y+=w,y=i(y,5)+1444728091,k=i(k,$),k=o(k,16),k=i(k,R),w^=k,w=o(w,17),w+=x,w=i(w,5)+197830471,E=i(E,R),E=o(E,17),E=i(E,H),x^=E,x=o(x,15),x+=b,x=i(x,5)+2530024501,S=i(S,H),S=o(S,18),S=i(S,T),b^=S,b=o(b,13),b+=y,b=i(b,5)+850148119;switch(A=0,k=0,E=0,S=0,m){case 15:S^=f[F+14]<<16;case 14:S^=f[F+13]<<8;case 13:S^=f[F+12],S=i(S,H),S=o(S,18),S=i(S,T),b^=S;case 12:E^=f[F+11]<<24;case 11:E^=f[F+10]<<16;case 10:E^=f[F+9]<<8;case 9:E^=f[F+8],E=i(E,R),E=o(E,17),E=i(E,H),x^=E;case 8:k^=f[F+7]<<24;case 7:k^=f[F+6]<<16;case 6:k^=f[F+5]<<8;case 5:k^=f[F+4],k=i(k,$),k=o(k,16),k=i(k,R),w^=k;case 4:A^=f[F+3]<<24;case 3:A^=f[F+2]<<16;case 2:A^=f[F+1]<<8;case 1:A^=f[F],A=i(A,T),A=o(A,15),A=i(A,$),y^=A}return y^=f.length,w^=f.length,x^=f.length,b^=f.length,y+=w,y+=x,y+=b,w+=y,x+=y,b+=y,y=s(y),w=s(w),x=s(x),b=s(b),y+=w,y+=x,y+=b,w+=y,x+=y,b+=y,("00000000"+(y>>>0).toString(16)).slice(-8)+("00000000"+(w>>>0).toString(16)).slice(-8)+("00000000"+(x>>>0).toString(16)).slice(-8)+("00000000"+(b>>>0).toString(16)).slice(-8)},t.x64.hash128=function(f,p){if(t.inputValidation&&!n(f))return e;p=p||0;for(var m=f.length%16,g=f.length-m,y=[0,p],w=[0,p],x=[0,0],b=[0,0],A=[2277735313,289559509],k=[1291169091,658871167],E=0;E<g;E=E+16)x=[f[E+4]|f[E+5]<<8|f[E+6]<<16|f[E+7]<<24,f[E]|f[E+1]<<8|f[E+2]<<16|f[E+3]<<24],b=[f[E+12]|f[E+13]<<8|f[E+14]<<16|f[E+15]<<24,f[E+8]|f[E+9]<<8|f[E+10]<<16|f[E+11]<<24],x=c(x,A),x=l(x,31),x=c(x,k),y=d(y,x),y=l(y,27),y=a(y,w),y=a(c(y,[0,5]),[0,1390208809]),b=c(b,k),b=l(b,33),b=c(b,A),w=d(w,b),w=l(w,31),w=a(w,y),w=a(c(w,[0,5]),[0,944331445]);switch(x=[0,0],b=[0,0],m){case 15:b=d(b,u([0,f[E+14]],48));case 14:b=d(b,u([0,f[E+13]],40));case 13:b=d(b,u([0,f[E+12]],32));case 12:b=d(b,u([0,f[E+11]],24));case 11:b=d(b,u([0,f[E+10]],16));case 10:b=d(b,u([0,f[E+9]],8));case 9:b=d(b,[0,f[E+8]]),b=c(b,k),b=l(b,33),b=c(b,A),w=d(w,b);case 8:x=d(x,u([0,f[E+7]],56));case 7:x=d(x,u([0,f[E+6]],48));case 6:x=d(x,u([0,f[E+5]],40));case 5:x=d(x,u([0,f[E+4]],32));case 4:x=d(x,u([0,f[E+3]],24));case 3:x=d(x,u([0,f[E+2]],16));case 2:x=d(x,u([0,f[E+1]],8));case 1:x=d(x,[0,f[E]]),x=c(x,A),x=l(x,31),x=c(x,k),y=d(y,x)}return y=d(y,[0,f.length]),w=d(w,[0,f.length]),y=a(y,w),w=a(w,y),y=h(y),w=h(w),y=a(y,w),w=a(w,y),("00000000"+(y[0]>>>0).toString(16)).slice(-8)+("00000000"+(y[1]>>>0).toString(16)).slice(-8)+("00000000"+(w[0]>>>0).toString(16)).slice(-8)+("00000000"+(w[1]>>>0).toString(16)).slice(-8)},typeof ad<"u"?(typeof c2<"u"&&c2.exports&&(ad=c2.exports=t),ad.murmurHash3=t):typeof define=="function"&&define.amd?define([],function(){return t}):(t._murmurHash3=r.murmurHash3,t.noConflict=function(){return r.murmurHash3=t._murmurHash3,t._murmurHash3=e,t.noConflict=e,t},r.murmurHash3=t)})(ad)});var eI=ze((ebe,JT)=>{JT.exports=ZT()});var u2=ze((abe,rI)=>{"use strict";rI.exports=class{constructor(){this._bitArrays=[],this._data=[],this._length=0,this._changedLength=!1,this._changedData=!1}set(e,t){let n=this._internalPositionFor(e,!1);if(t===void 0)n!==-1&&(this._unsetInternalPos(n),this._unsetBit(e),this._changedLength=!0,this._changedData=!0);else{let i=!1;n===-1?(n=this._data.length,this._setBit(e),this._changedData=!0):i=!0,this._setInternalPos(n,e,t,i),this._changedLength=!0}}unset(e){this.set(e,void 0)}get(e){this._sortData();let t=this._internalPositionFor(e,!0);if(t!==-1)return this._data[t][1]}push(e){return this.set(this.length,e),this.length}get length(){if(this._sortData(),this._changedLength){let e=this._data[this._data.length-1];this._length=e?e[0]+1:0,this._changedLength=!1}return this._length}forEach(e){let t=0;for(;t<this.length;)e(this.get(t),t,this),t++}map(e){let t=0,n=new Array(this.length);for(;t<this.length;)n[t]=e(this.get(t),t,this),t++;return n}reduce(e,t){let n=0,i=t;for(;n<this.length;){let o=this.get(n);i=e(i,o,n),n++}return i}find(e){let t=0,n,i;for(;t<this.length&&!n;)i=this.get(t),n=e(i),t++;return n?i:void 0}_internalPositionFor(e,t){let n=this._bytePosFor(e,t);if(n>=this._bitArrays.length)return-1;let i=this._bitArrays[n],o=e-n*7;if(!((i&1<<o)>0))return-1;let a=this._bitArrays.slice(0,n).reduce(JU,0),c=~(4294967295<<o+1),l=tI(i&c);return a+l-1}_bytePosFor(e,t){let n=Math.floor(e/7),i=n+1;for(;!t&&this._bitArrays.length<i;)this._bitArrays.push(0);return n}_setBit(e){let t=this._bytePosFor(e,!1);this._bitArrays[t]|=1<<e-t*7}_unsetBit(e){let t=this._bytePosFor(e,!1);this._bitArrays[t]&=~(1<<e-t*7)}_setInternalPos(e,t,n,i){let o=this._data,s=[t,n];if(i)this._sortData(),o[e]=s;else{if(o.length)if(o[o.length-1][0]>=t)o.push(s);else if(o[0][0]<=t)o.unshift(s);else{let a=Math.round(o.length/2);this._data=o.slice(0,a).concat(s).concat(o.slice(a))}else this._data.push(s);this._changedData=!0,this._changedLength=!0}}_unsetInternalPos(e){this._data.splice(e,1)}_sortData(){this._changedData&&this._data.sort(eH),this._changedData=!1}bitField(){let e=[],t=8,n=0,i=0,o,s=this._bitArrays.slice();for(;s.length||n;){n===0&&(o=s.shift(),n=7);let c=Math.min(n,t),l=~(255<<c),u=o&l;i|=u<<8-t,o=o>>>c,n-=c,t-=c,(!t||!n&&!s.length)&&(e.push(i),i=0,t=8)}for(var a=e.length-1;a>0&&e[a]===0;a--)e.pop();return e}compactArray(){return this._sortData(),this._data.map(tH)}};function JU(r,e){return r+tI(e)}function tI(r){let e=r;return e=e-(e>>1&1431655765),e=(e&858993459)+(e>>2&858993459),(e+(e>>4)&252645135)*16843009>>24}function eH(r,e){return r[0]-e[0]}function tH(r){return r[1]}});var i_=ze(G5=>{G5.read=function(r,e,t,n,i){var o,s,a=i*8-n-1,c=(1<<a)-1,l=c>>1,u=-7,d=t?i-1:0,h=t?-1:1,f=r[e+d];for(d+=h,o=f&(1<<-u)-1,f>>=-u,u+=a;u>0;o=o*256+r[e+d],d+=h,u-=8);for(s=o&(1<<-u)-1,o>>=-u,u+=n;u>0;s=s*256+r[e+d],d+=h,u-=8);if(o===0)o=1-l;else{if(o===c)return s?NaN:(f?-1:1)*(1/0);s=s+Math.pow(2,n),o=o-l}return(f?-1:1)*s*Math.pow(2,o-n)};G5.write=function(r,e,t,n,i,o){var s,a,c,l=o*8-i-1,u=(1<<l)-1,d=u>>1,h=i===23?Math.pow(2,-24)-Math.pow(2,-77):0,f=n?0:o-1,p=n?1:-1,m=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=u):(s=Math.floor(Math.log(e)/Math.LN2),e*(c=Math.pow(2,-s))<1&&(s--,c*=2),s+d>=1?e+=h/c:e+=h*Math.pow(2,1-d),e*c>=2&&(s++,c/=2),s+d>=u?(a=0,s=u):s+d>=1?(a=(e*c-1)*Math.pow(2,i),s=s+d):(a=e*Math.pow(2,d-1)*Math.pow(2,i),s=0));i>=8;r[t+f]=a&255,f+=p,a/=256,i-=8);for(s=s<<i|a,l+=i;l>0;r[t+f]=s&255,f+=p,s/=256,l-=8);r[t+f-p]|=m*128}});var v_=ze((EIe,b_)=>{var rl=1e3,nl=rl*60,il=nl*60,ya=il*24,Vz=ya*7,qz=ya*365.25;b_.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return Kz(r);if(t==="number"&&isFinite(r))return e.long?Wz(r):Gz(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function Kz(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*qz;case"weeks":case"week":case"w":return t*Vz;case"days":case"day":case"d":return t*ya;case"hours":case"hour":case"hrs":case"hr":case"h":return t*il;case"minutes":case"minute":case"mins":case"min":case"m":return t*nl;case"seconds":case"second":case"secs":case"sec":case"s":return t*rl;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Gz(r){var e=Math.abs(r);return e>=ya?Math.round(r/ya)+"d":e>=il?Math.round(r/il)+"h":e>=nl?Math.round(r/nl)+"m":e>=rl?Math.round(r/rl)+"s":r+"ms"}function Wz(r){var e=Math.abs(r);return e>=ya?R2(r,e,ya,"day"):e>=il?R2(r,e,il,"hour"):e>=nl?R2(r,e,nl,"minute"):e>=rl?R2(r,e,rl,"second"):r+" ms"}function R2(r,e,t,n){var i=e>=t*1.5;return Math.round(r/t)+" "+n+(i?"s":"")}});var S_=ze((SIe,E_)=>{function Yz(r){t.debug=t,t.default=t,t.coerce=c,t.disable=s,t.enable=i,t.enabled=a,t.humanize=v_(),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 h=0;h<u.length;h++)d=(d<<5)-d+u.charCodeAt(h),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,h=null,f,p;function m(...g){if(!m.enabled)return;let y=m,w=Number(new Date),x=w-(d||w);y.diff=x,y.prev=d,y.curr=w,d=w,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let b=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(k,E)=>{if(k==="%%")return"%";b++;let S=t.formatters[E];if(typeof S=="function"){let T=g[b];k=S.call(y,T),g.splice(b,1),b--}return k}),t.formatArgs.call(y,g),(y.log||t.log).apply(y,g)}return m.namespace=u,m.useColors=t.useColors(),m.color=t.selectColor(u),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(f!==t.namespaces&&(f=t.namespaces,p=t.enabled(u)),p),set:g=>{h=g}}),typeof t.init=="function"&&t.init(m),m}function n(u,d){let h=t(this.namespace+(typeof d>"u"?":":d)+u);return h.log=this.log,h}function i(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d=(typeof u=="string"?u:"").trim().replace(" ",",").split(",").filter(Boolean);for(let h of d)h[0]==="-"?t.skips.push(h.slice(1)):t.names.push(h)}function o(u,d){let h=0,f=0,p=-1,m=0;for(;h<u.length;)if(f<d.length&&(d[f]===u[h]||d[f]==="*"))d[f]==="*"?(p=f,m=h,f++):(h++,f++);else if(p!==-1)f=p+1,m++,h=m;else return!1;for(;f<d.length&&d[f]==="*";)f++;return f===d.length}function s(){let u=[...t.names,...t.skips.map(d=>"-"+d)].join(",");return t.enable(""),u}function a(u){for(let d of t.skips)if(o(u,d))return!1;for(let d of t.names)if(o(u,d))return!0;return!1}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.enable(t.load()),t}E_.exports=Yz});var A_=ze((rn,D2)=>{rn.formatArgs=jz;rn.save=Qz;rn.load=Zz;rn.useColors=Xz;rn.storage=Jz();rn.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();rn.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Xz(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let r;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(r=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(r[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function jz(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+D2.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,n=0;r[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(n=t))}),r.splice(n,0,e)}rn.log=console.debug||console.log||(()=>{});function Qz(r){try{r?rn.storage.setItem("debug",r):rn.storage.removeItem("debug")}catch{}}function Zz(){let r;try{r=rn.storage.getItem("debug")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Jz(){try{return localStorage}catch{}}D2.exports=S_()(rn);var{formatters:e$}=D2.exports;e$.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var H_=ze((oke,U_)=>{"use strict";U_.exports={RTLD_LAZY:1,RTLD_NOW:2,RTLD_GLOBAL:256,RTLD_LOCAL:0,RTLD_DEEPBIND:8,E2BIG:7,EACCES:13,EADDRINUSE:98,EADDRNOTAVAIL:99,EAFNOSUPPORT:97,EAGAIN:11,EALREADY:114,EBADF:9,EBADMSG:74,EBUSY:16,ECANCELED:125,ECHILD:10,ECONNABORTED:103,ECONNREFUSED:111,ECONNRESET:104,EDEADLK:35,EDESTADDRREQ:89,EDOM:33,EDQUOT:122,EEXIST:17,EFAULT:14,EFBIG:27,EHOSTUNREACH:113,EIDRM:43,EILSEQ:84,EINPROGRESS:115,EINTR:4,EINVAL:22,EIO:5,EISCONN:106,EISDIR:21,ELOOP:40,EMFILE:24,EMLINK:31,EMSGSIZE:90,EMULTIHOP:72,ENAMETOOLONG:36,ENETDOWN:100,ENETRESET:102,ENETUNREACH:101,ENFILE:23,ENOBUFS:105,ENODATA:61,ENODEV:19,ENOENT:2,ENOEXEC:8,ENOLCK:37,ENOLINK:67,ENOMEM:12,ENOMSG:42,ENOPROTOOPT:92,ENOSPC:28,ENOSR:63,ENOSTR:60,ENOSYS:38,ENOTCONN:107,ENOTDIR:20,ENOTEMPTY:39,ENOTSOCK:88,ENOTSUP:95,ENOTTY:25,ENXIO:6,EOPNOTSUPP:95,EOVERFLOW:75,EPERM:1,EPIPE:32,EPROTO:71,EPROTONOSUPPORT:93,EPROTOTYPE:91,ERANGE:34,EROFS:30,ESPIPE:29,ESRCH:3,ESTALE:116,ETIME:62,ETIMEDOUT:110,ETXTBSY:26,EWOULDBLOCK:11,EXDEV:18,PRIORITY_LOW:19,PRIORITY_BELOW_NORMAL:10,PRIORITY_NORMAL:0,PRIORITY_ABOVE_NORMAL:-7,PRIORITY_HIGH:-14,PRIORITY_HIGHEST:-20,SIGHUP:1,SIGINT:2,SIGQUIT:3,SIGILL:4,SIGTRAP:5,SIGABRT:6,SIGIOT:6,SIGBUS:7,SIGFPE:8,SIGKILL:9,SIGUSR1:10,SIGSEGV:11,SIGUSR2:12,SIGPIPE:13,SIGALRM:14,SIGTERM:15,SIGCHLD:17,SIGSTKFLT:16,SIGCONT:18,SIGSTOP:19,SIGTSTP:20,SIGTTIN:21,SIGTTOU:22,SIGURG:23,SIGXCPU:24,SIGXFSZ:25,SIGVTALRM:26,SIGPROF:27,SIGWINCH:28,SIGIO:29,SIGPOLL:29,SIGPWR:30,SIGSYS:31,UV_FS_SYMLINK_DIR:1,UV_FS_SYMLINK_JUNCTION:2,O_RDONLY:0,O_WRONLY:1,O_RDWR:2,UV_DIRENT_UNKNOWN:0,UV_DIRENT_FILE:1,UV_DIRENT_DIR:2,UV_DIRENT_LINK:3,UV_DIRENT_FIFO:4,UV_DIRENT_SOCKET:5,UV_DIRENT_CHAR:6,UV_DIRENT_BLOCK:7,EXTENSIONLESS_FORMAT_JAVASCRIPT:0,EXTENSIONLESS_FORMAT_WASM:1,S_IFMT:61440,S_IFREG:32768,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960,S_IFSOCK:49152,O_CREAT:64,O_EXCL:128,UV_FS_O_FILEMAP:0,O_NOCTTY:256,O_TRUNC:512,O_APPEND:1024,O_DIRECTORY:65536,O_NOATIME:262144,O_NOFOLLOW:131072,O_SYNC:1052672,O_DSYNC:4096,O_DIRECT:16384,O_NONBLOCK:2048,S_IRWXU:448,S_IRUSR:256,S_IWUSR:128,S_IXUSR:64,S_IRWXG:56,S_IRGRP:32,S_IWGRP:16,S_IXGRP:8,S_IRWXO:7,S_IROTH:4,S_IWOTH:2,S_IXOTH:1,F_OK:0,R_OK:4,W_OK:2,X_OK:1,UV_FS_COPYFILE_EXCL:1,COPYFILE_EXCL:1,UV_FS_COPYFILE_FICLONE:2,COPYFILE_FICLONE:2,UV_FS_COPYFILE_FICLONE_FORCE:4,COPYFILE_FICLONE_FORCE:4,OPENSSL_VERSION_NUMBER:805306608,SSL_OP_ALL:2147485776,SSL_OP_ALLOW_NO_DHE_KEX:1024,SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION:262144,SSL_OP_CIPHER_SERVER_PREFERENCE:4194304,SSL_OP_CISCO_ANYCONNECT:32768,SSL_OP_COOKIE_EXCHANGE:8192,SSL_OP_CRYPTOPRO_TLSEXT_BUG:2147483648,SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS:2048,SSL_OP_LEGACY_SERVER_CONNECT:4,SSL_OP_NO_COMPRESSION:131072,SSL_OP_NO_ENCRYPT_THEN_MAC:524288,SSL_OP_NO_QUERY_MTU:4096,SSL_OP_NO_RENEGOTIATION:1073741824,SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION:65536,SSL_OP_NO_SSLv2:0,SSL_OP_NO_SSLv3:33554432,SSL_OP_NO_TICKET:16384,SSL_OP_NO_TLSv1:67108864,SSL_OP_NO_TLSv1_1:268435456,SSL_OP_NO_TLSv1_2:134217728,SSL_OP_NO_TLSv1_3:536870912,SSL_OP_PRIORITIZE_CHACHA:2097152,SSL_OP_TLS_ROLLBACK_BUG:8388608,ENGINE_METHOD_RSA:1,ENGINE_METHOD_DSA:2,ENGINE_METHOD_DH:4,ENGINE_METHOD_RAND:8,ENGINE_METHOD_EC:2048,ENGINE_METHOD_CIPHERS:64,ENGINE_METHOD_DIGESTS:128,ENGINE_METHOD_PKEY_METHS:512,ENGINE_METHOD_PKEY_ASN1_METHS:1024,ENGINE_METHOD_ALL:65535,ENGINE_METHOD_NONE:0,DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,RSA_PKCS1_PADDING:1,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,RSA_PSS_SALTLEN_DIGEST:-1,RSA_PSS_SALTLEN_MAX_SIGN:-2,RSA_PSS_SALTLEN_AUTO:-2,defaultCoreCipherList:"TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA",TLS1_VERSION:769,TLS1_1_VERSION:770,TLS1_2_VERSION:771,TLS1_3_VERSION:772,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}});var hV={};ot(hV,{BasePlugin:()=>gt,DirIndexHtmlPlugin:()=>Ad,PluginError:()=>bd,PluginFatalError:()=>to,createVerifiedFetch:()=>ly,dirIndexHtmlPluginFactory:()=>sk,verifiedFetch:()=>j2});var wy=Symbol.for("@libp2p/connection");var Qn=Symbol.for("@libp2p/content-routing");function xy(r){return r==null?!1:(r.type==="RSA"||r.type==="Ed25519"||r.type==="secp256k1")&&r.raw instanceof Uint8Array&&typeof r.equals=="function"&&typeof r.toMultihash=="function"&&typeof r.toCID=="function"&&typeof r.verify=="function"}var os=Symbol.for("@libp2p/peer-discovery");var Id=Symbol.for("@libp2p/peer-id");function _d(r){return!!r?.[Id]}var Zn=Symbol.for("@libp2p/peer-routing");var ro="keep-alive";var no=Symbol.for("@libp2p/transport");var ss;(function(r){r[r.FATAL_ALL=0]="FATAL_ALL",r[r.NO_FATAL=1]="NO_FATAL"})(ss||(ss={}));var zt=class extends Error{static name="AbortError";constructor(e="The operation was aborted"){super(e),this.name="AbortError"}},kd=class extends Error{static name="UnexpectedPeerError";constructor(e="Unexpected Peer"){super(e),this.name="UnexpectedPeerError"}},Cd=class extends Error{static name="InvalidCryptoExchangeError";constructor(e="Invalid crypto exchange"){super(e),this.name="InvalidCryptoExchangeError"}},O=class extends Error{static name="InvalidParametersError";constructor(e="Invalid parameters"){super(e),this.name="InvalidParametersError"}},wi=class extends Error{static name="InvalidPublicKeyError";constructor(e="Invalid public key"){super(e),this.name="InvalidPublicKeyError"}},sl=class extends Error{static name="InvalidPrivateKeyError";constructor(e="Invalid private key"){super(e),this.name="InvalidPrivateKeyError"}};var Pd=class extends Error{static name="ConnectionClosingError";constructor(e="The connection is closing"){super(e),this.name="ConnectionClosingError"}},xa=class extends Error{static name="ConnectionClosedError";constructor(e="The connection is closed"){super(e),this.name="ConnectionClosedError"}},ba=class extends Error{static name="ConnectionFailedError";constructor(e="Connection failed"){super(e),this.name="ConnectionFailedError"}},Jn=class extends Error{static name="MuxerClosedError";constructor(e="The muxer is closed"){super(e),this.name="MuxerClosedError"}},Rd=class extends Error{static name="StreamResetError";constructor(e="The stream has been reset"){super(e),this.name="StreamResetError"}},as=class extends Error{static name="StreamStateError";constructor(e="The stream is in an invalid state"){super(e),this.name="StreamStateError"}},Ce=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"}},io=class extends Error{static name="InvalidMultiaddrError";constructor(e="Invalid multiaddr"){super(e),this.name="InvalidMultiaddrError"}},Dd=class extends Error{static name="InvalidCIDError";constructor(e="Invalid CID"){super(e),this.name="InvalidCIDError"}},oo=class extends Error{static name="InvalidMultihashError";constructor(e="Invalid Multihash"){super(e),this.name="InvalidMultihashError"}},xi=class extends Error{static name="UnsupportedProtocolError";constructor(e="Unsupported protocol error"){super(e),this.name="UnsupportedProtocolError"}},he=class extends Error{static name="InvalidMessageError";constructor(e="Invalid message"){super(e),this.name="InvalidMessageError"}},Nd=class extends Error{static name="ProtocolError";constructor(e="Protocol error"){super(e),this.name="ProtocolError"}},ei=class extends Error{static name="TimeoutError";constructor(e="Timed out"){super(e),this.name="TimeoutError"}},vn=class extends Error{static name="NotStartedError";constructor(e="Not started"){super(e),this.name="NotStartedError"}};var bi=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"}},Ea=class extends Error{static name="LimitedConnectionError";constructor(e="Limited connection"){super(e),this.name="LimitedConnectionError"}},Ld=class extends Error{static name="TooManyInboundProtocolStreamsError";constructor(e="Too many inbound protocol streams"){super(e),this.name="TooManyInboundProtocolStreamsError"}},so=class extends Error{static name="TooManyOutboundProtocolStreamsError";constructor(e="Too many outbound protocol streams"){super(e),this.name="TooManyOutboundProtocolStreamsError"}},En=class extends Error{static name="UnsupportedKeyTypeError";constructor(e="Unsupported key type"){super(e),this.name="UnsupportedKeyTypeError"}};var be=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 i=this.#e.get(e);i==null&&(i=[],this.#e.set(e,i)),i.push({callback:t,once:(n!==!0&&n!==!1&&n?.once)??!1})}removeEventListener(e,t,n){super.removeEventListener(e.toString(),t??null,n);let i=this.#e.get(e);i!=null&&(i=i.filter(({callback:o})=>o!==t),this.#e.set(e,i))}dispatchEvent(e){let t=super.dispatchEvent(e),n=this.#e.get(e.type);return n==null||(n=n.filter(({once:i})=>!i),this.#e.set(e.type,n)),t}safeDispatchEvent(e,t={}){return this.dispatchEvent(new CustomEvent(e,t))}};function Od(r){return r!=null&&typeof r.start=="function"&&typeof r.stop=="function"}async function $t(...r){let e=[];for(let t of r)Od(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 tr(...r){let e=[];for(let t of r)Od(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 Pe=Symbol.for("@libp2p/service-capabilities"),zr=Symbol.for("@libp2p/service-dependencies");function de(r){let e=new globalThis.AbortController;function t(){e.abort();for(let o of r)o?.removeEventListener!=null&&o.removeEventListener("abort",t)}for(let o of r){if(o?.aborted===!0){t();break}o?.addEventListener!=null&&o.addEventListener("abort",t)}function n(){for(let o of r)o?.removeEventListener!=null&&o.removeEventListener("abort",t)}let i=e.signal;return i.clear=n,i}function Z(){let r={};return r.promise=new Promise((e,t)=>{r.resolve=e,r.reject=t}),r}var Bd=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}},Sa=class{size;hwm;head;tail;constructor(e={}){this.hwm=e.splitLimit??16,this.head=new Bd(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 Bd(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 Z2=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.code=t??"ABORT_ERR"}};function rr(r={}){return vk(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 vk(r,e){e=e??{};let t=e.onEnd,n=new Sa,i,o,s,a=Z(),c=async()=>{try{return n.isEmpty()?s?{done:!0}:await new Promise((g,y)=>{o=w=>{o=null,n.push(w);try{g(r(n))}catch(x){y(x)}return i}}):r(n)}finally{n.isEmpty()&&queueMicrotask(()=>{a.resolve(),a=Z()})}},l=g=>o!=null?o(g):(n.push(g),i),u=g=>(n=new Sa,o!=null?o({error:g}):(n.push({error:g}),i)),d=g=>{if(s)return i;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})},h=g=>s?i:(s=!0,g!=null?u(g):l({done:!0})),f=()=>(n=new Sa,h(),{done:!0}),p=g=>(h(g),{done:!0});if(i={[Symbol.asyncIterator](){return this},next:c,return:f,throw:p,push:d,end:h,get readableLength(){return n.size},onEmpty:async g=>{let y=g?.signal;if(y?.throwIfAborted(),n.isEmpty())return;let w,x;y!=null&&(w=new Promise((b,A)=>{x=()=>{A(new Z2)},y.addEventListener("abort",x)}));try{await Promise.race([a.promise,w])}finally{x!=null&&y!=null&&y?.removeEventListener("abort",x)}}},t==null)return i;let m=i;return i={[Symbol.asyncIterator](){return this},next(){return m.next()},throw(g){return m.throw(g),t!=null&&(t(g),t=void 0),{done:!0}},return(){return m.return(),t!=null&&(t(),t=void 0),{done:!0}},push:d,end(g){return m.end(g),t!=null&&(t(g),t=void 0),i},get readableLength(){return m.readableLength},onEmpty:g=>m.onEmpty(g)},i}var J2=class extends Error{type;code;constructor(e,t){super(e??"The operation was aborted"),this.type="aborted",this.name="AbortError",this.code=t??"ABORT_ERR"}};async function Nt(r,e,t,n){let i=new J2(n?.errorMessage,n?.errorCode);return t?.aborted===!0?Promise.reject(i):new Promise((o,s)=>{function a(){t?.removeEventListener("abort",u),r.removeEventListener(e,c),n?.errorEvent!=null&&r.removeEventListener(n.errorEvent,l)}let c=d=>{try{if(n?.filter?.(d)===!1)return}catch(h){a(),s(h);return}a(),o(d)},l=d=>{a(),s(d.detail)},u=()=>{a(),s(i)};t?.addEventListener("abort",u),r.addEventListener(e,c),n?.errorEvent!=null&&r.addEventListener(n.errorEvent,l)})}var Md=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}},Fd=class extends Error{static name="QueueFullError";constructor(e="The queue was full"){super(e),this.name="QueueFullError"}};var Ud=class extends Error{type;code;constructor(e,t,n){super(e??"The operation was aborted"),this.type="aborted",this.name=n??"AbortError",this.code=t??"ABORT_ERR"}};async function st(r,e,t){if(e==null)return r;if(e.aborted)return r.catch(()=>{}),Promise.reject(new Ud(t?.errorMessage,t?.errorCode,t?.errorName));let n,i=new Ud(t?.errorMessage,t?.errorCode,t?.errorName);try{return await Promise.race([r,new Promise((o,s)=>{n=()=>{s(i)},e.addEventListener("abort",n)})])}finally{n!=null&&e.removeEventListener("abort",n)}}var Hd=class{deferred;signal;constructor(e){this.signal=e,this.deferred=Z(),this.onAbort=this.onAbort.bind(this),this.signal?.addEventListener("abort",this.onAbort)}onAbort(){this.deferred.reject(this.signal?.reason??new zt)}cleanup(){this.signal?.removeEventListener("abort",this.onAbort)}};function Ek(){return`${parseInt(String(Math.random()*1e9),10).toString()}${Date.now()}`}var zd=class{id;fn;options;recipients;status;timeline;controller;constructor(e,t){this.id=Ek(),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 zt),this.cleanup())}async join(e={}){let t=new Hd(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 st(this.fn({...this.options??{},signal:this.controller.signal}),this.controller.signal);this.recipients.forEach(t=>{t.deferred.resolve(e)}),this.status="complete"}catch(e){this.recipients.forEach(t=>{t.deferred.reject(e)}),this.status="errored"}finally{this.timeline.finished=Date.now(),this.cleanup()}}cleanup(){this.recipients.forEach(e=>{e.cleanup(),e.signal?.removeEventListener("abort",this.onAbort)})}};var fr=class extends be{concurrency;maxSize;queue;pending;sort;constructor(e={}){super(),this.concurrency=e.concurrency??Number.POSITIVE_INFINITY,this.maxSize=e.maxSize??Number.POSITIVE_INFINITY,this.pending=0,e.metricName!=null&&e.metrics?.registerMetricGroup(e.metricName,{calculate:()=>({size:this.queue.length,running:this.pending,queued:this.queue.length-this.pending})}),this.sort=e.sort,this.queue=[]}tryToStartAnother(){if(this.size===0)return queueMicrotask(()=>{this.safeDispatchEvent("empty")}),this.running===0&&queueMicrotask(()=>{this.safeDispatchEvent("idle")}),!1;if(this.pending<this.concurrency){let e;for(let t of this.queue)if(t.status==="queued"){e=t;break}return e==null?!1:(this.safeDispatchEvent("active"),this.pending++,e.run().finally(()=>{for(let t=0;t<this.queue.length;t++)if(this.queue[t]===e){this.queue.splice(t,1);break}this.pending--,this.tryToStartAnother(),this.safeDispatchEvent("next")}),!0)}return!1}enqueue(e){this.queue.push(e),this.sort!=null&&this.queue.sort(this.sort)}async add(e,t){if(t?.signal?.throwIfAborted(),this.size===this.maxSize)throw new Fd;let n=new zd(e,t);return this.enqueue(n),this.safeDispatchEvent("add"),this.tryToStartAnother(),n.join(t).then(i=>(this.safeDispatchEvent("completed",{detail:i}),this.safeDispatchEvent("success",{detail:{job:n,result:i}}),i)).catch(i=>{if(n.status==="queued"){for(let o=0;o<this.queue.length;o++)if(this.queue[o]===n){this.queue.splice(o,1);break}}throw this.safeDispatchEvent("error",{detail:i}),this.safeDispatchEvent("failure",{detail:{job:n,error:i}}),i})}clear(){this.queue.splice(0,this.queue.length)}abort(){this.queue.forEach(e=>{e.abort(new zt)}),this.clear()}async onEmpty(e){this.size!==0&&await Nt(this,"empty",e?.signal)}async onSizeLessThan(e,t){this.size<e||await Nt(this,"next",t?.signal,{filter:()=>this.size<e})}async onIdle(e){this.pending===0&&this.size===0||await Nt(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=rr({objectMode:!0}),n=c=>{c!=null?this.abort():this.clear(),t.end(c)},i=c=>{c.detail!=null&&t.push(c.detail)},o=c=>{n(c.detail)},s=()=>{n()},a=()=>{n(new zt("Queue aborted"))};this.addEventListener("completed",i),this.addEventListener("error",o),this.addEventListener("idle",s),e?.signal?.addEventListener("abort",a);try{yield*t}finally{this.removeEventListener("completed",i),this.removeEventListener("error",o),this.removeEventListener("idle",s),e?.signal?.removeEventListener("abort",a),n()}}};var Vt=class extends fr{has(e){return this.find(e)!=null}find(e){return this.queue.find(t=>e.equals(t.options.peerId))}};function Sk(r){return r[Symbol.asyncIterator]!=null}function Ak(r){if(Sk(r))return(async()=>{for await(let e of r);})();for(let e of r);}var Lt=Ak;function le(r=0){return new Uint8Array(r)}function at(r=0){return new Uint8Array(r)}var Tk=Math.pow(2,7),Ik=Math.pow(2,14),_k=Math.pow(2,21),eg=Math.pow(2,28),tg=Math.pow(2,35),rg=Math.pow(2,42),ng=Math.pow(2,49),Me=128,nr=127;function ve(r){if(r<Tk)return 1;if(r<Ik)return 2;if(r<_k)return 3;if(r<eg)return 4;if(r<tg)return 5;if(r<rg)return 6;if(r<ng)return 7;if(Number.MAX_SAFE_INTEGER!=null&&r>Number.MAX_SAFE_INTEGER)throw new RangeError("Could not encode varint");return 8}function ig(r,e,t=0){switch(ve(r)){case 8:e[t++]=r&255|Me,r/=128;case 7:e[t++]=r&255|Me,r/=128;case 6:e[t++]=r&255|Me,r/=128;case 5:e[t++]=r&255|Me,r/=128;case 4:e[t++]=r&255|Me,r>>>=7;case 3:e[t++]=r&255|Me,r>>>=7;case 2:e[t++]=r&255|Me,r>>>=7;case 1:{e[t++]=r&255,r>>>=7;break}default:throw new Error("unreachable")}return e}function kk(r,e,t=0){switch(ve(r)){case 8:e.set(t++,r&255|Me),r/=128;case 7:e.set(t++,r&255|Me),r/=128;case 6:e.set(t++,r&255|Me),r/=128;case 5:e.set(t++,r&255|Me),r/=128;case 4:e.set(t++,r&255|Me),r>>>=7;case 3:e.set(t++,r&255|Me),r>>>=7;case 2:e.set(t++,r&255|Me),r>>>=7;case 1:{e.set(t++,r&255),r>>>=7;break}default:throw new Error("unreachable")}return e}function og(r,e){let t=r[e],n=0;if(n+=t&nr,t<Me||(t=r[e+1],n+=(t&nr)<<7,t<Me)||(t=r[e+2],n+=(t&nr)<<14,t<Me)||(t=r[e+3],n+=(t&nr)<<21,t<Me)||(t=r[e+4],n+=(t&nr)*eg,t<Me)||(t=r[e+5],n+=(t&nr)*tg,t<Me)||(t=r[e+6],n+=(t&nr)*rg,t<Me)||(t=r[e+7],n+=(t&nr)*ng,t<Me))return n;throw new RangeError("Could not decode varint")}function Ck(r,e){let t=r.get(e),n=0;if(n+=t&nr,t<Me||(t=r.get(e+1),n+=(t&nr)<<7,t<Me)||(t=r.get(e+2),n+=(t&nr)<<14,t<Me)||(t=r.get(e+3),n+=(t&nr)<<21,t<Me)||(t=r.get(e+4),n+=(t&nr)*eg,t<Me)||(t=r.get(e+5),n+=(t&nr)*tg,t<Me)||(t=r.get(e+6),n+=(t&nr)*rg,t<Me)||(t=r.get(e+7),n+=(t&nr)*ng,t<Me))return n;throw new RangeError("Could not decode varint")}function Ze(r,e,t=0){return e==null&&(e=at(ve(r))),e instanceof Uint8Array?ig(r,e,t):kk(r,e,t)}function hr(r,e=0){return r instanceof Uint8Array?og(r,e):Ck(r,e)}function ge(r,e){e==null&&(e=r.reduce((i,o)=>i+o.length,0));let t=at(e),n=0;for(let i of r)t.set(i,n),n+=i.length;return t}function J(r,e){if(r===e)return!0;if(r.byteLength!==e.byteLength)return!1;for(let t=0;t<r.byteLength;t++)if(r[t]!==e[t])return!1;return!0}var vy=Symbol.for("@achingbrain/uint8arraylist");function by(r,e){if(e==null||e<0)throw new RangeError("index is out of bounds");let t=0;for(let n of r){let i=t+n.byteLength;if(e<i)return{buf:n,index:e-t};t=i}throw new RangeError("index is out of bounds")}function nn(r){return!!r?.[vy]}var ee=class r{bufs;length;[vy]=!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(nn(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(nn(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=by(this.bufs,e);return t.buf[t.index]}set(e,t){let n=by(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(nn(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:i}=this._subList(e,t);return ge(n,i)}subarray(e,t){let{bufs:n,length:i}=this._subList(e,t);return n.length===1?n[0]:ge(n,i)}sublist(e,t){let{bufs:n,length:i}=this._subList(e,t),o=new r;return o.length=i,o.bufs=[...n],o}_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=[],i=0;for(let o=0;o<this.bufs.length;o++){let s=this.bufs[o],a=i,c=a+s.byteLength;if(i=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(!nn(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 i=n.byteLength;if(i===0)throw new TypeError("search must be at least 1 byte long");let o=256,s=new Int32Array(o);for(let d=0;d<o;d++)s[d]=-1;for(let d=0;d<i;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 h=l;h>=0;h--){let f=this.get(d+h);if(n[h]!==f){u=Math.max(1,h-a[f]);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=at(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 i=le(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt16(0,t,n),this.write(i,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 i=le(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setInt32(0,t,n),this.write(i,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 i=le(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigInt64(0,t,n),this.write(i,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=at(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 i=le(2);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint16(0,t,n),this.write(i,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 i=le(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setUint32(0,t,n),this.write(i,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 i=le(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setBigUint64(0,t,n),this.write(i,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 i=le(4);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat32(0,t,n),this.write(i,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 i=le(8);new DataView(i.buffer,i.byteOffset,i.byteLength).setFloat64(0,t,n),this.write(i,e)}equals(e){if(e==null||!(e instanceof r)||e.bufs.length!==this.bufs.length)return!1;for(let t=0;t<this.bufs.length;t++)if(!J(this.bufs[t],e.bufs[t]))return!1;return!0}static fromUint8Arrays(e,t){let n=new r;return n.bufs=e,t==null&&(t=e.reduce((i,o)=>i+o.byteLength,0)),n.length=t,n}};var $d=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},Aa=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},Vd=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"},al=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};function qd(r){return r[Symbol.asyncIterator]!=null}function Ey(r,e){if(r.byteLength>e)throw new Aa("Message length too long")}var Gd=r=>{let e=ve(r),t=at(e);return Ze(r,t),Gd.bytes=e,t};Gd.bytes=0;function Sn(r,e){e=e??{};let t=e.lengthEncoder??Gd,n=e?.maxDataLength??4194304;function*i(o){Ey(o,n);let s=t(o.byteLength);s instanceof Uint8Array?yield s:yield*s,o instanceof Uint8Array?yield o:yield*o}return qd(r)?async function*(){for await(let o of r)yield*i(o)}():function*(){for(let o of r)yield*i(o)}()}Sn.single=(r,e)=>{e=e??{};let t=e.lengthEncoder??Gd,n=e?.maxDataLength??4194304;return Ey(r,n),new ee(t(r.byteLength),r)};var ls;(function(r){r[r.LENGTH=0]="LENGTH",r[r.DATA=1]="DATA"})(ls||(ls={}));var sg=r=>{let e=hr(r);return sg.bytes=ve(e),e};sg.bytes=0;function An(r,e){let t=new ee,n=ls.LENGTH,i=-1,o=e?.lengthDecoder??sg,s=e?.maxLengthLength??8,a=e?.maxDataLength??4194304;function*c(){for(;t.byteLength>0;){if(n===ls.LENGTH)try{if(i=o(t),i<0)throw new $d("Invalid message length");if(i>a)throw new Aa("Message length too long");let l=o.bytes;t.consume(l),e?.onLength!=null&&e.onLength(i),n=ls.DATA}catch(l){if(l instanceof RangeError){if(t.byteLength>s)throw new Vd("Message length length too long");break}throw l}if(n===ls.DATA){if(t.byteLength<i)break;let l=t.sublist(0,i);t.consume(i),e?.onData!=null&&e.onData(l),yield l,n=ls.LENGTH}}}return qd(r)?async function*(){for await(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new al("Unexpected end of input")}():function*(){for(let l of r)t.append(l),yield*c();if(t.byteLength>0)throw new al("Unexpected end of input")}()}An.fromReader=(r,e)=>{let t=1,n=async function*(){for(;;)try{let{done:o,value:s}=await r.next(t);if(o===!0)return;s!=null&&(yield s)}catch(o){if(o.code==="ERR_UNDER_READ")return{done:!0,value:null};throw o}finally{t=1}}();return An(n,{...e??{},onLength:o=>{t=o}})};function Dk(r){let[e,t]=r[Symbol.asyncIterator]!=null?[r[Symbol.asyncIterator](),Symbol.asyncIterator]:[r[Symbol.iterator](),Symbol.iterator],n=[];return{peek:()=>e.next(),push:i=>{n.push(i)},next:()=>n.length>0?{done:!1,value:n.shift()}:e.next(),[t](){return this}}}var Ta=Dk;function Nk(r){return r[Symbol.asyncIterator]!=null}function Lk(r,e){let t=0;if(Nk(r))return async function*(){for await(let c of r)yield e(c,t++)}();let n=Ta(r),{value:i,done:o}=n.next();if(o===!0)return function*(){}();let s=e(i,t++);if(typeof s.then=="function")return async function*(){yield await s;for await(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 Je=Lk;var cg=class{readNext;haveNext;ended;nextResult;error;constructor(){this.ended=!1,this.readNext=Z(),this.haveNext=Z()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=Z(),e}async throw(e){return this.ended=!0,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=Z(),await st(this.readNext.promise,t?.signal,t)}};function Sy(){return new cg}function Ok(r){return r[Symbol.asyncIterator]!=null}async function Bk(r,e){try{await Promise.all(r.map(async t=>{for await(let n of t)await e.push(n)})),await e.end()}catch(t){await e.end(t).catch(()=>{})}}async function*Mk(r){let e=Sy();Bk(r,e).catch(()=>{}),yield*e}function*Fk(r){for(let e of r)yield*e}function Uk(...r){let e=[];for(let t of r)Ok(t)||e.push(t);return e.length===r.length?Fk(e):Mk(r)}var pr=Uk;function Re(r,...e){if(r==null)throw new Error("Empty pipeline");if(lg(r)){let n=r;r=()=>n.source}else if(Ty(r)||Ay(r)){let n=r;r=()=>n}let t=[r,...e];if(t.length>1&&lg(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++)lg(t[n])&&(t[n]=zk(t[n]));return Hk(...t)}var Hk=(...r)=>{let e;for(;r.length>0;)e=r.shift()(e);return e},Ay=r=>r?.[Symbol.asyncIterator]!=null,Ty=r=>r?.[Symbol.iterator]!=null,lg=r=>r==null?!1:r.sink!=null&&r.source!=null,zk=r=>e=>{let t=r.sink(e);if(t?.then!=null){let n=rr({objectMode:!0});t.then(()=>{n.end()},s=>{n.end(s)});let i,o=r.source;if(Ay(o))i=async function*(){yield*o,n.end()};else if(Ty(o))i=function*(){yield*o,n.end()};else throw new Error("Unknown duplex source type - must be Iterable or AsyncIterable");return pr(n,i())}return r.source};function $k(r){return r[Symbol.asyncIterator]!=null}function Vk(r,e){return $k(r)?async function*(){let t=0;if(!(e<1)){for await(let n of r)if(yield n,t++,t===e)return}}():function*(){let t=0;if(!(e<1)){for(let n of r)if(yield n,t++,t===e)return}}()}var ao=Vk;var M=class extends Event{type;detail;constructor(e,t){super(e),this.type=e,this.detail=t}};var cl="/ipfs/bitswap/1.2.0";var ug=new Float32Array([-0]),co=new Uint8Array(ug.buffer);function Iy(r,e,t){ug[0]=r,e[t]=co[0],e[t+1]=co[1],e[t+2]=co[2],e[t+3]=co[3]}function _y(r,e){return co[0]=r[e],co[1]=r[e+1],co[2]=r[e+2],co[3]=r[e+3],ug[0]}var dg=new Float64Array([-0]),ir=new Uint8Array(dg.buffer);function ky(r,e,t){dg[0]=r,e[t]=ir[0],e[t+1]=ir[1],e[t+2]=ir[2],e[t+3]=ir[3],e[t+4]=ir[4],e[t+5]=ir[5],e[t+6]=ir[6],e[t+7]=ir[7]}function Cy(r,e){return ir[0]=r[e],ir[1]=r[e+1],ir[2]=r[e+2],ir[3]=r[e+3],ir[4]=r[e+4],ir[5]=r[e+5],ir[6]=r[e+6],ir[7]=r[e+7],dg[0]}var qk=BigInt(Number.MAX_SAFE_INTEGER),Kk=BigInt(Number.MIN_SAFE_INTEGER),$r=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 us;if(e<qk&&e>Kk)return this.fromNumber(Number(e));let t=e<0n;t&&(e=-e);let n=e>>32n,i=e-(n<<32n);return t&&(n=~n|0n,i=~i|0n,++i>Py&&(i=0n,++n>Py&&(n=0n))),new r(Number(i),Number(n))}static fromNumber(e){if(e===0)return us;let t=e<0;t&&(e=-e);let n=e>>>0,i=(e-n)/4294967296>>>0;return t&&(i=~i>>>0,n=~n>>>0,++n>4294967295&&(n=0,++i>4294967295&&(i=0))),new r(n,i)}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):us}},us=new $r(0,0);us.toBigInt=function(){return 0n};us.zzEncode=us.zzDecode=function(){return this};us.length=function(){return 1};var Py=4294967296n;function Ry(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 Dy(r,e,t){if(t-e<1)return"";let i,o=[],s=0,a;for(;e<t;)a=r[e++],a<128?o[s++]=a:a>191&&a<224?o[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,o[s++]=55296+(a>>10),o[s++]=56320+(a&1023)):o[s++]=(a&15)<<12|(r[e++]&63)<<6|r[e++]&63,s>8191&&((i??(i=[])).push(String.fromCharCode.apply(String,o)),s=0);return i!=null?(s>0&&i.push(String.fromCharCode.apply(String,o.slice(0,s))),i.join("")):String.fromCharCode.apply(String,o.slice(0,s))}function fg(r,e,t){let n=t,i,o;for(let s=0;s<r.length;++s)i=r.charCodeAt(s),i<128?e[t++]=i:i<2048?(e[t++]=i>>6|192,e[t++]=i&63|128):(i&64512)===55296&&((o=r.charCodeAt(s+1))&64512)===56320?(i=65536+((i&1023)<<10)+(o&1023),++s,e[t++]=i>>18|240,e[t++]=i>>12&63|128,e[t++]=i>>6&63|128,e[t++]=i&63|128):(e[t++]=i>>12|224,e[t++]=i>>6&63|128,e[t++]=i&63|128);return t-n}function Tn(r,e){return RangeError(`index out of range: ${r.pos} + ${e??1} > ${r.len}`)}function Wd(r,e){return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0}var hg=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,Tn(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 Tn(this,4);return Wd(this.buf,this.pos+=4)}sfixed32(){if(this.pos+4>this.len)throw Tn(this,4);return Wd(this.buf,this.pos+=4)|0}float(){if(this.pos+4>this.len)throw Tn(this,4);let e=_y(this.buf,this.pos);return this.pos+=4,e}double(){if(this.pos+8>this.len)throw Tn(this,4);let e=Cy(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 Tn(this,e);return this.pos+=e,t===n?new Uint8Array(0):this.buf.subarray(t,n)}string(){let e=this.bytes();return Dy(e,0,e.length)}skip(e){if(typeof e=="number"){if(this.pos+e>this.len)throw Tn(this,e);this.pos+=e}else do if(this.pos>=this.len)throw Tn(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 $r(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 Tn(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 Tn(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 Tn(this,8);let e=Wd(this.buf,this.pos+=4),t=Wd(this.buf,this.pos+=4);return new $r(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=og(this.buf,this.pos);return this.pos+=ve(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 pg(r){return new hg(r instanceof Uint8Array?r:r.subarray())}function te(r,e,t){let n=pg(r);return e.decode(n,void 0,t)}var Eg={};ot(Eg,{base10:()=>eC});var ds={};ot(ds,{coerce:()=>on,empty:()=>Ly,equals:()=>mg,fromHex:()=>Wk,fromString:()=>gg,isBinary:()=>Yk,toHex:()=>Gk,toString:()=>yg});var Ly=new Uint8Array(0);function Gk(r){return r.reduce((e,t)=>e+t.toString(16).padStart(2,"0"),"")}function Wk(r){let e=r.match(/../g);return e!=null?new Uint8Array(e.map(t=>parseInt(t,16))):Ly}function mg(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 on(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 Yk(r){return r instanceof ArrayBuffer||ArrayBuffer.isView(r)}function gg(r){return new TextEncoder().encode(r)}function yg(r){return new TextDecoder().decode(r)}function Xk(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 i=0;i<r.length;i++){var o=r.charAt(i),s=o.charCodeAt(0);if(t[s]!==255)throw new TypeError(o+" is ambiguous");t[s]=i}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 m=0,g=0,y=0,w=p.length;y!==w&&p[y]===0;)y++,m++;for(var x=(w-y)*u+1>>>0,b=new Uint8Array(x);y!==w;){for(var A=p[y],k=0,E=x-1;(A!==0||k<g)&&E!==-1;E--,k++)A+=256*b[E]>>>0,b[E]=A%a>>>0,A=A/a>>>0;if(A!==0)throw new Error("Non-zero carry");g=k,y++}for(var S=x-g;S!==x&&b[S]===0;)S++;for(var T=c.repeat(m);S<x;++S)T+=r.charAt(b[S]);return T}function h(p){if(typeof p!="string")throw new TypeError("Expected String");if(p.length===0)return new Uint8Array;var m=0;if(p[m]!==" "){for(var g=0,y=0;p[m]===c;)g++,m++;for(var w=(p.length-m)*l+1>>>0,x=new Uint8Array(w);p[m];){var b=t[p.charCodeAt(m)];if(b===255)return;for(var A=0,k=w-1;(b!==0||A<y)&&k!==-1;k--,A++)b+=a*x[k]>>>0,x[k]=b%256>>>0,b=b/256>>>0;if(b!==0)throw new Error("Non-zero carry");y=A,m++}if(p[m]!==" "){for(var E=w-y;E!==w&&x[E]===0;)E++;for(var S=new Uint8Array(g+(w-E)),T=g;E!==w;)S[T++]=x[E++];return S}}}function f(p){var m=h(p);if(m)return m;throw new Error(`Non-${e} character`)}return{encode:d,decodeUnsafe:h,decode:f}}var jk=Xk,Qk=jk,Oy=Qk;var wg=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")}},xg=class{name;prefix;baseDecode;prefixCodePoint;constructor(e,t,n){this.name=e,this.prefix=t;let i=t.codePointAt(0);if(i===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=i,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 By(this,e)}},bg=class{decoders;constructor(e){this.decoders=e}or(e){return By(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 By(r,e){return new bg({...r.decoders??{[r.prefix]:r},...e.decoders??{[e.prefix]:e}})}var vg=class{name;prefix;baseEncode;baseDecode;encoder;decoder;constructor(e,t,n,i){this.name=e,this.prefix=t,this.baseEncode=n,this.baseDecode=i,this.encoder=new wg(e,t,n),this.decoder=new xg(e,t,i)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}};function Ia({name:r,prefix:e,encode:t,decode:n}){return new vg(r,e,t,n)}function lo({name:r,prefix:e,alphabet:t}){let{encode:n,decode:i}=Oy(t,r);return Ia({prefix:e,name:r,encode:n,decode:o=>on(i(o))})}function Zk(r,e,t,n){let i={};for(let u=0;u<e.length;++u)i[e[u]]=u;let o=r.length;for(;r[o-1]==="=";)--o;let s=new Uint8Array(o*t/8|0),a=0,c=0,l=0;for(let u=0;u<o;++u){let d=i[r[u]];if(d===void 0)throw new SyntaxError(`Non-${n} character`);c=c<<t|d,a+=t,a>=8&&(a-=8,s[l++]=255&c>>a)}if(a>=t||(255&c<<8-a)!==0)throw new SyntaxError("Unexpected end of data");return s}function Jk(r,e,t){let n=e[e.length-1]==="=",i=(1<<t)-1,o="",s=0,a=0;for(let c=0;c<r.length;++c)for(a=a<<8|r[c],s+=8;s>t;)s-=t,o+=e[i&a>>s];if(s!==0&&(o+=e[i&a<<t-s]),n)for(;(o.length*t&7)!==0;)o+="=";return o}function ft({name:r,prefix:e,bitsPerChar:t,alphabet:n}){return Ia({prefix:e,name:r,encode(i){return Jk(i,n,t)},decode(i){return Zk(i,n,t,r)}})}var eC=lo({prefix:"9",name:"base10",alphabet:"0123456789"});var Sg={};ot(Sg,{base16:()=>tC,base16upper:()=>rC});var tC=ft({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),rC=ft({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var Ag={};ot(Ag,{base2:()=>nC});var nC=ft({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var Tg={};ot(Tg,{base256emoji:()=>cC});var My=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}"),iC=My.reduce((r,e,t)=>(r[t]=e,r),[]),oC=My.reduce((r,e,t)=>{let n=e.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${e}`);return r[n]=t,r},[]);function sC(r){return r.reduce((e,t)=>(e+=iC[t],e),"")}function aC(r){let e=[];for(let t of r){let n=t.codePointAt(0);if(n==null)throw new Error(`Invalid character: ${t}`);let i=oC[n];if(i==null)throw new Error(`Non-base256emoji character: ${t}`);e.push(i)}return new Uint8Array(e)}var cC=Ia({prefix:"\u{1F680}",name:"base256emoji",encode:sC,decode:aC});var Ig={};ot(Ig,{base32:()=>kt,base32hex:()=>fC,base32hexpad:()=>pC,base32hexpadupper:()=>mC,base32hexupper:()=>hC,base32pad:()=>uC,base32padupper:()=>dC,base32upper:()=>lC,base32z:()=>gC});var kt=ft({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),lC=ft({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),uC=ft({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),dC=ft({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),fC=ft({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),hC=ft({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),pC=ft({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),mC=ft({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),gC=ft({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var _g={};ot(_g,{base36:()=>mr,base36upper:()=>yC});var mr=lo({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),yC=lo({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var kg={};ot(kg,{base58btc:()=>ye,base58flickr:()=>wC});var ye=lo({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),wC=lo({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var Cg={};ot(Cg,{base64:()=>St,base64pad:()=>xC,base64url:()=>ll,base64urlpad:()=>bC});var St=ft({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),xC=ft({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),ll=ft({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),bC=ft({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var Pg={};ot(Pg,{base8:()=>vC});var vC=ft({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var Rg={};ot(Rg,{identity:()=>EC});var EC=Ia({prefix:"\0",name:"identity",encode:r=>yg(r),decode:r=>gg(r)});var _a={};ot(_a,{code:()=>ri,decode:()=>Dg,encode:()=>IC,name:()=>TC});var SC=new TextEncoder,AC=new TextDecoder,TC="json",ri=512;function IC(r){return SC.encode(JSON.stringify(r))}function Dg(r){return JSON.parse(AC.decode(r))}var Ar={};ot(Ar,{code:()=>We,decode:()=>CC,encode:()=>kC,name:()=>_C});var _C="raw",We=85;function kC(r){return on(r)}function CC(r){return on(r)}var Og={};ot(Og,{identity:()=>At});var $e={};ot($e,{Digest:()=>fs,create:()=>or,decode:()=>pe,equals:()=>Lg,hasCode:()=>YC});var PC=Hy,Fy=128,RC=127,DC=~RC,NC=Math.pow(2,31);function Hy(r,e,t){e=e||[],t=t||0;for(var n=t;r>=NC;)e[t++]=r&255|Fy,r/=128;for(;r&DC;)e[t++]=r&255|Fy,r>>>=7;return e[t]=r|0,Hy.bytes=t-n+1,e}var LC=Ng,OC=128,Uy=127;function Ng(r,n){var t=0,n=n||0,i=0,o=n,s,a=r.length;do{if(o>=a)throw Ng.bytes=0,new RangeError("Could not decode varint");s=r[o++],t+=i<28?(s&Uy)<<i:(s&Uy)*Math.pow(2,i),i+=7}while(s>=OC);return Ng.bytes=o-n,t}var BC=Math.pow(2,7),MC=Math.pow(2,14),FC=Math.pow(2,21),UC=Math.pow(2,28),HC=Math.pow(2,35),zC=Math.pow(2,42),$C=Math.pow(2,49),VC=Math.pow(2,56),qC=Math.pow(2,63),KC=function(r){return r<BC?1:r<MC?2:r<FC?3:r<UC?4:r<HC?5:r<zC?6:r<$C?7:r<VC?8:r<qC?9:10},GC={encode:PC,decode:LC,encodingLength:KC},WC=GC,ul=WC;function dl(r,e=0){return[ul.decode(r,e),ul.decode.bytes]}function ka(r,e,t=0){return ul.encode(r,e,t),e}function Ca(r){return ul.encodingLength(r)}function or(r,e){let t=e.byteLength,n=Ca(r),i=n+Ca(t),o=new Uint8Array(i+t);return ka(r,o,0),ka(t,o,n),o.set(e,i),new fs(r,t,e,o)}function pe(r){let e=on(r),[t,n]=dl(e),[i,o]=dl(e.subarray(n)),s=e.subarray(n+o);if(s.byteLength!==i)throw new Error("Incorrect length");return new fs(t,i,s,e)}function Lg(r,e){if(r===e)return!0;{let t=e;return r.code===t.code&&r.size===t.size&&t.bytes instanceof Uint8Array&&mg(r.bytes,t.bytes)}}var fs=class{code;size;digest;bytes;constructor(e,t,n,i){this.code=e,this.size=t,this.digest=n,this.bytes=i}};function YC(r,e){return r.code===e}var zy=0,XC="identity",$y=on;function jC(r){return or(zy,$y(r))}var At={code:zy,name:XC,encode:$y,digest:jC};var Mg={};ot(Mg,{sha256:()=>Se,sha512:()=>Xd});function hs({name:r,code:e,encode:t}){return new Bg(r,e,t)}var Bg=class{name;code;encode;constructor(e,t,n){this.name=e,this.code=t,this.encode=n}digest(e){if(e instanceof Uint8Array){let t=this.encode(e);return t instanceof Uint8Array?or(this.code,t):t.then(n=>or(this.code,n))}else throw Error("Unknown type, must be binary type")}};function qy(r){return async e=>new Uint8Array(await crypto.subtle.digest(r,e))}var Se=hs({name:"sha2-256",code:18,encode:qy("SHA-256")}),Xd=hs({name:"sha2-512",code:19,encode:qy("SHA-512")});function Ky(r,e){let{bytes:t,version:n}=r;switch(n){case 0:return ZC(t,Fg(r),e??ye.encoder);default:return JC(t,Fg(r),e??kt.encoder)}}var Gy=new WeakMap;function Fg(r){let e=Gy.get(r);if(e==null){let t=new Map;return Gy.set(r,t),t}return e}var B=class r{code;version;multihash;bytes;"/";constructor(e,t,n,i){this.code=t,this.version=e,this.multihash=n,this.bytes=i,this["/"]=i}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!==fl)throw new Error("Cannot convert a non dag-pb CID to CIDv0");if(t.code!==eP)throw new Error("Cannot convert non sha2-256 multihash CID to CIDv0");return r.createV0(t)}default:throw Error(`Can not convert CID version ${this.version} to version 0. This is a bug please report`)}}toV1(){switch(this.version){case 0:{let{code:e,digest:t}=this.multihash,n=or(e,t);return r.createV1(this.code,n)}case 1:return this;default:throw Error(`Can not convert CID version ${this.version} to version 1. This is a bug please report`)}}equals(e){return r.equals(this,e)}static equals(e,t){let n=t;return n!=null&&e.code===n.code&&e.version===n.version&&Lg(e.multihash,n.multihash)}toString(e){return Ky(this,e)}toJSON(){return{"/":Ky(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:i,multihash:o,bytes:s}=t;return new r(n,i,o,s??Wy(n,i,o.bytes))}else if(t[tP]===!0){let{version:n,multihash:i,code:o}=t,s=pe(i);return r.create(n,o,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!==fl)throw new Error(`Version 0 CID must use dag-pb (code: ${fl}) block encoding`);return new r(e,t,n,n.bytes)}case 1:{let i=Wy(e,t,n.bytes);return new r(e,t,n,i)}default:throw new Error("Invalid version")}}static createV0(e){return r.create(0,fl,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,i=on(e.subarray(n,n+t.multihashSize));if(i.byteLength!==t.multihashSize)throw new Error("Incorrect length");let o=i.subarray(t.multihashSize-t.digestSize),s=new fs(t.multihashCode,t.digestSize,o,i);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,h]=dl(e.subarray(t));return t+=h,d},i=n(),o=fl;if(i===18?(i=0,t=0):o=n(),i!==0&&i!==1)throw new RangeError(`Invalid CID version ${i}`);let s=t,a=n(),c=n(),l=t+c,u=l-s;return{version:i,codec:o,multihashCode:a,digestSize:c,multihashSize:u,size:l}}static parse(e,t){let[n,i]=QC(e,t),o=r.decode(i);if(o.version===0&&e[0]!=="Q")throw Error("Version 0 CID string must not include multibase prefix");return Fg(o).set(n,e),o}};function QC(r,e){switch(r[0]){case"Q":{let t=e??ye;return[ye.prefix,t.decode(`${ye.prefix}${r}`)]}case ye.prefix:{let t=e??ye;return[ye.prefix,t.decode(r)]}case kt.prefix:{let t=e??kt;return[kt.prefix,t.decode(r)]}case mr.prefix:{let t=e??mr;return[mr.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 ZC(r,e,t){let{prefix:n}=t;if(n!==ye.prefix)throw Error(`Cannot string encode V0 in ${t.name} encoding`);let i=e.get(n);if(i==null){let o=t.encode(r).slice(1);return e.set(n,o),o}else return i}function JC(r,e,t){let{prefix:n}=t,i=e.get(n);if(i==null){let o=t.encode(r);return e.set(n,o),o}else return i}var fl=112,eP=18;function Wy(r,e,t){let n=Ca(r),i=n+Ca(e),o=new Uint8Array(i+t.byteLength);return ka(r,o,0),ka(e,o,n),o.set(t,i),o}var tP=Symbol.for("@ipld/js-cid/CID");var ps={...Rg,...Ag,...Pg,...Eg,...Sg,...Ig,..._g,...kg,...Cg,...Tg},jK={...Mg,...Og};function Xy(r,e,t,n){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:n}}}var Yy=Xy("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),Ug=Xy("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=at(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),rP={utf8:Yy,"utf-8":Yy,hex:ps.base16,latin1:Ug,ascii:Ug,binary:Ug,...ps},jd=rP;function C(r,e="utf8"){let t=jd[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.decoder.decode(`${t.prefix}${r}`)}function Hg(r){let e=r??8192,t=e>>>1,n,i=e;return function(s){if(s<1||s>t)return at(s);i+s>e&&(n=at(e),i=0);let a=n.subarray(i,i+=s);return(i&7)!==0&&(i=(i|7)+1),a}}var ms=class{fn;len;next;val;constructor(e,t,n){this.fn=e,this.len=t,this.next=void 0,this.val=n}};function zg(){}var Vg=class{head;tail;len;next;constructor(e){this.head=e.head,this.tail=e.tail,this.len=e.len,this.next=e.states}},nP=Hg();function iP(r){return globalThis.Buffer!=null?at(r):nP(r)}var pl=class{len;head;tail;states;constructor(){this.len=0,this.head=new ms(zg,0,0),this.tail=this.head,this.states=null}_push(e,t,n){return this.tail=this.tail.next=new ms(e,t,n),this.len+=t,this}uint32(e){return this.len+=(this.tail=this.tail.next=new qg((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(Qd,10,$r.fromNumber(e)):this.uint32(e)}sint32(e){return this.uint32((e<<1^e>>31)>>>0)}uint64(e){let t=$r.fromBigInt(e);return this._push(Qd,t.length(),t)}uint64Number(e){return this._push(ig,ve(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=$r.fromBigInt(e).zzEncode();return this._push(Qd,t.length(),t)}sint64Number(e){let t=$r.fromNumber(e).zzEncode();return this._push(Qd,t.length(),t)}sint64String(e){return this.sint64(BigInt(e))}bool(e){return this._push($g,1,e?1:0)}fixed32(e){return this._push(hl,4,e>>>0)}sfixed32(e){return this.fixed32(e)}fixed64(e){let t=$r.fromBigInt(e);return this._push(hl,4,t.lo)._push(hl,4,t.hi)}fixed64Number(e){let t=$r.fromNumber(e);return this._push(hl,4,t.lo)._push(hl,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(Iy,4,e)}double(e){return this._push(ky,8,e)}bytes(e){let t=e.length>>>0;return t===0?this._push($g,1,0):this.uint32(t)._push(sP,t,e)}string(e){let t=Ry(e);return t!==0?this.uint32(t)._push(fg,t,e):this._push($g,1,0)}fork(){return this.states=new Vg(this),this.head=this.tail=new ms(zg,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 ms(zg,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=iP(this.len),n=0;for(;e!=null;)e.fn(e.val,t,n),n+=e.len,e=e.next;return t}};function $g(r,e,t){e[t]=r&255}function oP(r,e,t){for(;r>127;)e[t++]=r&127|128,r>>>=7;e[t]=r}var qg=class extends ms{next;constructor(e,t){super(oP,e,t),this.next=void 0}};function Qd(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 hl(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&&(pl.prototype.bytes=function(r){let e=r.length>>>0;return this.uint32(e),e>0&&this._push(aP,e,r),this},pl.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?fg(r,e,t):e.utf8Write!=null?e.utf8Write(r,t):e.set(C(r),t)}function Kg(){return new pl}function re(r,e){let t=Kg();return e.encode(r,t,{lengthDelimited:!1}),t.finish()}var Pa;(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"})(Pa||(Pa={}));function Zd(r,e,t,n){return{name:r,type:e,encode:t,decode:n}}function Ye(r){function e(i){if(r[i.toString()]==null)throw new Error("Invalid enum value");return r[i]}let t=function(o,s){let a=e(o);s.int32(a)},n=function(o){let s=o.int32();return e(s)};return Zd("enum",Pa.VARINT,t,n)}function ne(r,e){return Zd("message",Pa.LENGTH_DELIMITED,r,e)}var Ve=class extends Error{code="ERR_MAX_LENGTH";name="MaxLengthError"},ml=class extends Error{code="ERR_MAX_SIZE";name="MaxSizeError"};var yt;(function(r){r.WantBlock="WantBlock",r.WantHave="WantHave"})(yt||(yt={}));var Gg;(function(r){r[r.WantBlock=0]="WantBlock",r[r.WantHave=1]="WantHave"})(Gg||(Gg={}));(function(r){r.codec=()=>Ye(Gg)})(yt||(yt={}));var Ra;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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),yt.codec().encode(t.wantType,n)),t.sendDontHave!=null&&(n.uint32(40),n.bool(t.sendDontHave)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={cid:le(0),priority:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.priority=t.int32();break}case 3:{o.cancel=t.bool();break}case 4:{o.wantType=yt.codec().decode(t);break}case 5:{o.sendDontHave=t.bool();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ra||(Ra={}));var Jd;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.entries!=null)for(let o of t.entries)n.uint32(10),Ra.codec().encode(o,n);t.full!=null&&(n.uint32(16),n.bool(t.full)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={entries:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(i.limits?.entries!=null&&o.entries.length===i.limits.entries)throw new Ve('Decode error - map field "entries" had too many elements');o.entries.push(Ra.codec().decode(t,t.uint32(),{limits:i.limits?.entries$}));break}case 2:{o.full=t.bool();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Jd||(Jd={}));var Da;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={prefix:le(0),data:le(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.prefix=t.bytes();break}case 2:{o.data=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Da||(Da={}));var sn;(function(r){r.HaveBlock="HaveBlock",r.DoNotHaveBlock="DoNotHaveBlock"})(sn||(sn={}));var ef;(function(r){r[r.HaveBlock=0]="HaveBlock",r[r.DoNotHaveBlock=1]="DoNotHaveBlock"})(ef||(ef={}));(function(r){r.codec=()=>Ye(ef)})(sn||(sn={}));var Na;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.cid!=null&&t.cid.byteLength>0&&(n.uint32(10),n.bytes(t.cid)),t.type!=null&&ef[t.type]!==0&&(n.uint32(16),sn.codec().encode(t.type,n)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={cid:le(0),type:sn.HaveBlock},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.cid=t.bytes();break}case 2:{o.type=sn.codec().decode(t);break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Na||(Na={}));var gs;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.wantlist!=null&&(n.uint32(10),Jd.codec().encode(t.wantlist,n)),t.blocks!=null)for(let o of t.blocks)n.uint32(26),Da.codec().encode(o,n);if(t.blockPresences!=null)for(let o of t.blockPresences)n.uint32(34),Na.codec().encode(o,n);t.pendingBytes!=null&&t.pendingBytes!==0&&(n.uint32(40),n.int32(t.pendingBytes)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={blocks:[],blockPresences:[],pendingBytes:0},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.wantlist=Jd.codec().decode(t,t.uint32(),{limits:i.limits?.wantlist});break}case 3:{if(i.limits?.blocks!=null&&o.blocks.length===i.limits.blocks)throw new Ve('Decode error - map field "blocks" had too many elements');o.blocks.push(Da.codec().decode(t,t.uint32(),{limits:i.limits?.blocks$}));break}case 4:{if(i.limits?.blockPresences!=null&&o.blockPresences.length===i.limits.blockPresences)throw new Ve('Decode error - map field "blockPresences" had too many elements');o.blockPresences.push(Na.codec().decode(t,t.uint32(),{limits:i.limits?.blockPresences$}));break}case 5:{o.pendingBytes=t.int32();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(gs||(gs={}));function jy(r,e){for(let[t,n]of e.wantlist.entries()){let i=r.wantlist.get(t);i!=null&&(i.priority>n.priority&&(n.priority=i.priority),n.cancel=n.cancel??i.cancel,n.wantType=n.wantType??i.wantType,n.sendDontHave=n.sendDontHave??i.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 tf=class extends Error{static name="BlockTooLargeError";constructor(e="Block too large"){super(e),this.name="BlockTooLargeError"}};var lP=4193648,uP=lP+16;function*Qy(r,e){let t=[...r.wantlist.values()],n=[...r.blockPresences.values()],i=[...r.blocks.values()],o=0,s=0,a=0,c=!1;for(;;){let l={wantlist:{full:r.full??!1,entries:[]},blockPresences:[],blocks:[],pendingBytes:0},u=gs.encode(l).byteLength,{added:d,hasMore:h,newSize:f}=Wg(i,l.blocks,a,e,u,dP);a+=d,u=f;let p=h;({added:d,hasMore:h,newSize:f}=Wg(n,l.blockPresences,s,e,u,fP)),s+=d,u=f;let m=h;if({added:d,hasMore:h,newSize:f}=Wg(t,l.wantlist.entries,o,e,u,hP),o+=d,u=f,c=!p&&!m&&!h,c||(l.wantlist.full=!1),yield gs.encode(l),c)break}}function Wg(r,e,t,n,i,o){let s=0,a=!1;for(let c=t;c<r.length;c++){let l=r[c],u=o(l);if(u>uP)throw new tf("Cannot send block as after encoding it is over the max message size");let d=i+u;if(d>n){a=!0;break}e.push(l),s++,i=d}return{hasMore:a,added:s,newSize:i}}function dP(r){return Yg(3,Da.encode(r))}function fP(r){return Yg(4,Na.encode(r))}function hP(r){return Yg(1,Ra.encode(r))}function Yg(r,e){let t=ve(r),n=ve(e.byteLength);return t+n+e.byteLength}var rf=class extends be{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??[cl],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 Vt({concurrency:t.messageSendConcurrency??50,metrics:e.metrics,metricName:"helia_bitswap_message_send_queue"}),this.sendQueue.addEventListener("error",n=>{this.log.error("error sending wantlist to peer",n.detail)})}async start(){if(this.running)return;this.running=!0,await this.libp2p.handle(this.protocols,this._onStream,{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnections});let e={onConnect:t=>{this.safeDispatchEvent("peer:connected",{detail:t})},onDisconnect:t=>{this.safeDispatchEvent("peer:disconnected",{detail:t})}};this.registrarIds=[];for(let t of this.protocols)this.registrarIds.push(await this.libp2p.register(t,e));this.libp2p.getConnections().forEach(t=>{this.safeDispatchEvent("peer:connected",{detail:t.remotePeer})})}async stop(){if(this.running=!1,await this.libp2p.unhandle(this.protocols),this.registrarIds!=null){for(let e of this.registrarIds)this.libp2p.unregister(e);this.registrarIds=[]}}_onStream(e){if(!this.running)return;let{stream:t,connection:n}=e;Promise.resolve().then(async()=>{this.log("incoming new bitswap %s stream from %p",t.protocol,n.remotePeer);let i=()=>{t.status==="open"?t.abort(new ei(`Incoming Bitswap stream timed out after ${this.messageReceiveTimeout}ms`)):this.log("stream aborted with status %s",t.status)},o=AbortSignal.timeout(this.messageReceiveTimeout);o.addEventListener("abort",i),await t.closeWrite(),await Re(t,s=>An(s,{maxDataLength:this.maxIncomingMessageSize}),async s=>{for await(let a of s)try{let c=gs.decode(a);this.log("incoming new bitswap %s message from %p on stream",t.protocol,n.remotePeer,t.id),this.safeDispatchEvent("bitswap:message",{detail:{peer:n.remotePeer,message:c}}),o.removeEventListener("abort",i),o=AbortSignal.timeout(this.messageReceiveTimeout),o.addEventListener("abort",i)}catch(c){this.log.error("error reading incoming bitswap message from %p on stream",n.remotePeer,t.id,c),t.abort(c);break}})}).catch(i=>{this.log.error("error handling incoming stream from %p",n.remotePeer,i),t.abort(i)})}async*findProviders(e,t){t?.onProgress?.(new M("bitswap:network:find-providers",e));for await(let n of this.routing.findProviders(e,t))await this.libp2p.isDialable(n.multiaddrs,{runOnLimitedConnection:this.runOnLimitedConnections})&&(yield n)}async findAndConnect(e,t){await Lt(Je(ao(this.findProviders(e,t),t?.maxProviders??3),async n=>this.connectTo(n.id,t))).catch(n=>{this.log.error(n)})}async sendMessage(e,t,n){if(!this.running)throw new Error("network isn't running");let i=this.sendQueue.queue.find(o=>e.equals(o.options.peerId)&&o.status==="queued");if(i!=null){i.options.message=jy(i.options.message,t),await i.join({signal:n?.signal});return}await this.sendQueue.add(async o=>{let s=o?.message;if(s==null)throw new O("No message to send");this.log("sendMessage to %p",e),o?.onProgress?.(new M("bitswap:network:send-wantlist",e));let a=await this.libp2p.dialProtocol(e,cl,o);await a.closeRead();try{await Re(Qy(s,this.maxOutgoingMessageSize),c=>Sn(c),a),await a.close(o)}catch(c){o?.onProgress?.(new M("bitswap:network:send-wantlist:error",{peer:e,error:c})),this.log.error("error sending message to %p",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 vn("Network isn't running");t?.onProgress?.(new M("bitswap:network:dial",e));let[n]=await Promise.all([this.libp2p.dial(e,t),Nt(this.libp2p,"peer:identify",t?.signal,{filter:i=>{if(!i.detail.peerId.equals(e))return!1;if(i.detail.protocols.includes(cl))return!0;throw new xi(`${e} did not support ${cl}`)}})]);return n}_updateSentStats(e){let t=0;for(let n of e.values())t+=n.data.byteLength;this.metrics.dataSent?.increment(t),this.metrics.blocksSent?.increment(e.size)}};function uo(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function EP(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function La(r,...e){if(!EP(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function ys(r){if(typeof r!="function"||typeof r.create!="function")throw new Error("Hash should be wrapped by utils.wrapConstructor");uo(r.outputLen),uo(r.blockLen)}function Oa(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 Zy(r,e){La(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}var ws=typeof globalThis=="object"&&"crypto"in globalThis?globalThis.crypto:void 0;function xs(r){return new DataView(r.buffer,r.byteOffset,r.byteLength)}function In(r,e){return r<<32-e|r>>>e}function nf(r,e){return r<<e|r>>>32-e>>>0}var SP=async()=>{};async function Jy(r,e,t){let n=Date.now();for(let i=0;i<r;i++){t(i);let o=Date.now()-n;o>=0&&o<e||(await SP(),n+=o)}}function e7(r){if(typeof r!="string")throw new Error("utf8ToBytes expected string, got "+typeof r);return new Uint8Array(new TextEncoder().encode(r))}function _n(r){return typeof r=="string"&&(r=e7(r)),La(r),r}function Xg(...r){let e=0;for(let n=0;n<r.length;n++){let i=r[n];La(i),e+=i.length}let t=new Uint8Array(e);for(let n=0,i=0;n<r.length;n++){let o=r[n];t.set(o,i),i+=o.length}return t}var Ba=class{clone(){return this._cloneInto()}};function t7(r,e){if(e!==void 0&&{}.toString.call(e)!=="[object Object]")throw new Error("Options should be object or undefined");return Object.assign(r,e)}function Ma(r){let e=n=>r().update(_n(n)).digest(),t=r();return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=()=>r(),e}function bs(r=32){if(ws&&typeof ws.getRandomValues=="function")return ws.getRandomValues(new Uint8Array(r));if(ws&&typeof ws.randomBytes=="function")return ws.randomBytes(r);throw new Error("crypto.getRandomValues must be defined")}function AP(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function of(r,e,t){return r&e^~r&t}function sf(r,e,t){return r&e^r&t^e&t}var fo=class extends Ba{constructor(e,t,n,i){super(),this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=i,this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.buffer=new Uint8Array(e),this.view=xs(this.buffer)}update(e){Oa(this);let{view:t,buffer:n,blockLen:i}=this;e=_n(e);let o=e.length;for(let s=0;s<o;){let a=Math.min(i-this.pos,o-s);if(a===i){let c=xs(e);for(;i<=o-s;s+=i)this.process(c,s);continue}n.set(e.subarray(s,s+a),this.pos),this.pos+=a,s+=a,this.pos===i&&(this.process(t,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){Oa(this),Zy(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:i,isLE:o}=this,{pos:s}=this;t[s++]=128,this.buffer.subarray(s).fill(0),this.padOffset>i-s&&(this.process(n,0),s=0);for(let d=s;d<i;d++)t[d]=0;AP(n,i-8,BigInt(this.length*8),o),this.process(n,0);let a=xs(e),c=this.outputLen;if(c%4)throw new Error("_sha2: outputLen should 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],o)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneInto(e){e||(e=new this.constructor),e.set(...this.get());let{blockLen:t,buffer:n,length:i,finished:o,destroyed:s,pos:a}=this;return e.length=i,e.pos=a,e.finished=o,e.destroyed=s,i%t&&e.buffer.set(n),e}};var af=BigInt(4294967295),jg=BigInt(32);function r7(r,e=!1){return e?{h:Number(r&af),l:Number(r>>jg&af)}:{h:Number(r>>jg&af)|0,l:Number(r&af)|0}}function TP(r,e=!1){let t=new Uint32Array(r.length),n=new Uint32Array(r.length);for(let i=0;i<r.length;i++){let{h:o,l:s}=r7(r[i],e);[t[i],n[i]]=[o,s]}return[t,n]}var IP=(r,e)=>BigInt(r>>>0)<<jg|BigInt(e>>>0),_P=(r,e,t)=>r>>>t,kP=(r,e,t)=>r<<32-t|e>>>t,CP=(r,e,t)=>r>>>t|e<<32-t,PP=(r,e,t)=>r<<32-t|e>>>t,RP=(r,e,t)=>r<<64-t|e>>>t-32,DP=(r,e,t)=>r>>>t-32|e<<64-t,NP=(r,e)=>e,LP=(r,e)=>r,OP=(r,e,t)=>r<<t|e>>>32-t,BP=(r,e,t)=>e<<t|r>>>32-t,MP=(r,e,t)=>e<<t-32|r>>>64-t,FP=(r,e,t)=>r<<t-32|e>>>64-t;function UP(r,e,t,n){let i=(e>>>0)+(n>>>0);return{h:r+t+(i/2**32|0)|0,l:i|0}}var HP=(r,e,t)=>(r>>>0)+(e>>>0)+(t>>>0),zP=(r,e,t,n)=>e+t+n+(r/2**32|0)|0,$P=(r,e,t,n)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0),VP=(r,e,t,n,i)=>e+t+n+i+(r/2**32|0)|0,qP=(r,e,t,n,i)=>(r>>>0)+(e>>>0)+(t>>>0)+(n>>>0)+(i>>>0),KP=(r,e,t,n,i,o)=>e+t+n+i+o+(r/2**32|0)|0;var GP={fromBig:r7,split:TP,toBig:IP,shrSH:_P,shrSL:kP,rotrSH:CP,rotrSL:PP,rotrBH:RP,rotrBL:DP,rotr32H:NP,rotr32L:LP,rotlSH:OP,rotlSL:BP,rotlBH:MP,rotlBL:FP,add:UP,add3L:HP,add3H:zP,add4L:$P,add4H:VP,add5H:KP,add5L:qP},fe=GP;var[WP,YP]=fe.split(["0x428a2f98d728ae22","0x7137449123ef65cd","0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc","0x3956c25bf348b538","0x59f111f1b605d019","0x923f82a4af194f9b","0xab1c5ed5da6d8118","0xd807aa98a3030242","0x12835b0145706fbe","0x243185be4ee4b28c","0x550c7dc3d5ffb4e2","0x72be5d74f27b896f","0x80deb1fe3b1696b1","0x9bdc06a725c71235","0xc19bf174cf692694","0xe49b69c19ef14ad2","0xefbe4786384f25e3","0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65","0x2de92c6f592b0275","0x4a7484aa6ea6e483","0x5cb0a9dcbd41fbd4","0x76f988da831153b5","0x983e5152ee66dfab","0xa831c66d2db43210","0xb00327c898fb213f","0xbf597fc7beef0ee4","0xc6e00bf33da88fc2","0xd5a79147930aa725","0x06ca6351e003826f","0x142929670a0e6e70","0x27b70a8546d22ffc","0x2e1b21385c26c926","0x4d2c6dfc5ac42aed","0x53380d139d95b3df","0x650a73548baf63de","0x766a0abb3c77b2a8","0x81c2c92e47edaee6","0x92722c851482353b","0xa2bfe8a14cf10364","0xa81a664bbc423001","0xc24b8b70d0f89791","0xc76c51a30654be30","0xd192e819d6ef5218","0xd69906245565a910","0xf40e35855771202a","0x106aa07032bbd1b8","0x19a4c116b8d2d0c8","0x1e376c085141ab53","0x2748774cdf8eeb99","0x34b0bcb5e19b48a8","0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb","0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3","0x748f82ee5defb2fc","0x78a5636f43172f60","0x84c87814a1f0ab72","0x8cc702081a6439ec","0x90befffa23631e28","0xa4506cebde82bde9","0xbef9a3f7b2c67915","0xc67178f2e372532b","0xca273eceea26619c","0xd186b8c721c0c207","0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178","0x06f067aa72176fba","0x0a637dc5a2c898a6","0x113f9804bef90dae","0x1b710b35131c471b","0x28db77f523047d84","0x32caab7b40c72493","0x3c9ebe0a15c9bebc","0x431d67c49c100d4c","0x4cc5d4becb3e42b6","0x597f299cfc657e2a","0x5fcb6fab3ad6faec","0x6c44198c4a475817"].map(r=>BigInt(r))),ho=new Uint32Array(80),po=new Uint32Array(80),Qg=class extends fo{constructor(){super(128,64,16,!1),this.Ah=1779033703,this.Al=-205731576,this.Bh=-1150833019,this.Bl=-2067093701,this.Ch=1013904242,this.Cl=-23791573,this.Dh=-1521486534,this.Dl=1595750129,this.Eh=1359893119,this.El=-1377402159,this.Fh=-1694144372,this.Fl=725511199,this.Gh=528734635,this.Gl=-79577749,this.Hh=1541459225,this.Hl=327033209}get(){let{Ah:e,Al:t,Bh:n,Bl:i,Ch:o,Cl:s,Dh:a,Dl:c,Eh:l,El:u,Fh:d,Fl:h,Gh:f,Gl:p,Hh:m,Hl:g}=this;return[e,t,n,i,o,s,a,c,l,u,d,h,f,p,m,g]}set(e,t,n,i,o,s,a,c,l,u,d,h,f,p,m,g){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=i|0,this.Ch=o|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=h|0,this.Gh=f|0,this.Gl=p|0,this.Hh=m|0,this.Hl=g|0}process(e,t){for(let x=0;x<16;x++,t+=4)ho[x]=e.getUint32(t),po[x]=e.getUint32(t+=4);for(let x=16;x<80;x++){let b=ho[x-15]|0,A=po[x-15]|0,k=fe.rotrSH(b,A,1)^fe.rotrSH(b,A,8)^fe.shrSH(b,A,7),E=fe.rotrSL(b,A,1)^fe.rotrSL(b,A,8)^fe.shrSL(b,A,7),S=ho[x-2]|0,T=po[x-2]|0,$=fe.rotrSH(S,T,19)^fe.rotrBH(S,T,61)^fe.shrSH(S,T,6),R=fe.rotrSL(S,T,19)^fe.rotrBL(S,T,61)^fe.shrSL(S,T,6),H=fe.add4L(E,R,po[x-7],po[x-16]),F=fe.add4H(H,k,$,ho[x-7],ho[x-16]);ho[x]=F|0,po[x]=H|0}let{Ah:n,Al:i,Bh:o,Bl:s,Ch:a,Cl:c,Dh:l,Dl:u,Eh:d,El:h,Fh:f,Fl:p,Gh:m,Gl:g,Hh:y,Hl:w}=this;for(let x=0;x<80;x++){let b=fe.rotrSH(d,h,14)^fe.rotrSH(d,h,18)^fe.rotrBH(d,h,41),A=fe.rotrSL(d,h,14)^fe.rotrSL(d,h,18)^fe.rotrBL(d,h,41),k=d&f^~d&m,E=h&p^~h&g,S=fe.add5L(w,A,E,YP[x],po[x]),T=fe.add5H(S,y,b,k,WP[x],ho[x]),$=S|0,R=fe.rotrSH(n,i,28)^fe.rotrBH(n,i,34)^fe.rotrBH(n,i,39),H=fe.rotrSL(n,i,28)^fe.rotrBL(n,i,34)^fe.rotrBL(n,i,39),F=n&o^n&a^o&a,N=i&s^i&c^s&c;y=m|0,w=g|0,m=f|0,g=p|0,f=d|0,p=h|0,{h:d,l:h}=fe.add(l|0,u|0,T|0,$|0),l=a|0,u=c|0,a=o|0,c=s|0,o=n|0,s=i|0;let L=fe.add3L($,H,N);n=fe.add3H(L,T,R,F),i=L|0}({h:n,l:i}=fe.add(this.Ah|0,this.Al|0,n|0,i|0)),{h:o,l:s}=fe.add(this.Bh|0,this.Bl|0,o|0,s|0),{h:a,l:c}=fe.add(this.Ch|0,this.Cl|0,a|0,c|0),{h:l,l:u}=fe.add(this.Dh|0,this.Dl|0,l|0,u|0),{h:d,l:h}=fe.add(this.Eh|0,this.El|0,d|0,h|0),{h:f,l:p}=fe.add(this.Fh|0,this.Fl|0,f|0,p|0),{h:m,l:g}=fe.add(this.Gh|0,this.Gl|0,m|0,g|0),{h:y,l:w}=fe.add(this.Hh|0,this.Hl|0,y|0,w|0),this.set(n,i,o,s,a,c,l,u,d,h,f,p,m,g,y,w)}roundClean(){ho.fill(0),po.fill(0)}destroy(){this.buffer.fill(0),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}};var mo=Ma(()=>new Qg);var uf={};ot(uf,{aInRange:()=>qt,abool:()=>kn,abytes:()=>Fa,bitGet:()=>eR,bitLen:()=>t3,bitMask:()=>yl,bitSet:()=>tR,bytesToHex:()=>Ei,bytesToNumberBE:()=>Si,bytesToNumberLE:()=>Cn,concatBytes:()=>Ti,createHmacDrbg:()=>r3,ensureBytes:()=>Xe,equalBytes:()=>ZP,hexToBytes:()=>Es,hexToNumber:()=>e3,inRange:()=>gl,isBytes:()=>go,memoized:()=>Ss,notImplemented:()=>nR,numberToBytesBE:()=>yo,numberToBytesLE:()=>Ai,numberToHexUnpadded:()=>vs,numberToVarBytesBE:()=>QP,utf8ToBytes:()=>JP,validateObject:()=>an});var cf=BigInt(0),lf=BigInt(1),XP=BigInt(2);function go(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function Fa(r){if(!go(r))throw new Error("Uint8Array expected")}function kn(r,e){if(typeof e!="boolean")throw new Error(r+" boolean expected, got "+e)}var jP=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function Ei(r){Fa(r);let e="";for(let t=0;t<r.length;t++)e+=jP[r[t]];return e}function vs(r){let e=r.toString(16);return e.length&1?"0"+e:e}function e3(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);return r===""?cf:BigInt("0x"+r)}var vi={_0:48,_9:57,A:65,F:70,a:97,f:102};function n7(r){if(r>=vi._0&&r<=vi._9)return r-vi._0;if(r>=vi.A&&r<=vi.F)return r-(vi.A-10);if(r>=vi.a&&r<=vi.f)return r-(vi.a-10)}function Es(r){if(typeof r!="string")throw new Error("hex string expected, got "+typeof r);let e=r.length,t=e/2;if(e%2)throw new Error("hex string expected, got unpadded hex of length "+e);let n=new Uint8Array(t);for(let i=0,o=0;i<t;i++,o+=2){let s=n7(r.charCodeAt(o)),a=n7(r.charCodeAt(o+1));if(s===void 0||a===void 0){let c=r[o]+r[o+1];throw new Error('hex string expected, got non-hex character "'+c+'" at index '+o)}n[i]=s*16+a}return n}function Si(r){return e3(Ei(r))}function Cn(r){return Fa(r),e3(Ei(Uint8Array.from(r).reverse()))}function yo(r,e){return Es(r.toString(16).padStart(e*2,"0"))}function Ai(r,e){return yo(r,e).reverse()}function QP(r){return Es(vs(r))}function Xe(r,e,t){let n;if(typeof e=="string")try{n=Es(e)}catch(o){throw new Error(r+" must be hex string or Uint8Array, cause: "+o)}else if(go(e))n=Uint8Array.from(e);else throw new Error(r+" must be hex string or Uint8Array");let i=n.length;if(typeof t=="number"&&i!==t)throw new Error(r+" of length "+t+" expected, got "+i);return n}function Ti(...r){let e=0;for(let n=0;n<r.length;n++){let i=r[n];Fa(i),e+=i.length}let t=new Uint8Array(e);for(let n=0,i=0;n<r.length;n++){let o=r[n];t.set(o,i),i+=o.length}return t}function ZP(r,e){if(r.length!==e.length)return!1;let t=0;for(let n=0;n<r.length;n++)t|=r[n]^e[n];return t===0}function JP(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}var Zg=r=>typeof r=="bigint"&&cf<=r;function gl(r,e,t){return Zg(r)&&Zg(e)&&Zg(t)&&e<=r&&r<t}function qt(r,e,t,n){if(!gl(e,t,n))throw new Error("expected valid "+r+": "+t+" <= n < "+n+", got "+e)}function t3(r){let e;for(e=0;r>cf;r>>=lf,e+=1);return e}function eR(r,e){return r>>BigInt(e)&lf}function tR(r,e,t){return r|(t?lf:cf)<<BigInt(e)}var yl=r=>(XP<<BigInt(r-1))-lf,Jg=r=>new Uint8Array(r),i7=r=>Uint8Array.from(r);function r3(r,e,t){if(typeof r!="number"||r<2)throw new Error("hashLen must be a number");if(typeof e!="number"||e<2)throw new Error("qByteLen must be a number");if(typeof t!="function")throw new Error("hmacFn must be a function");let n=Jg(r),i=Jg(r),o=0,s=()=>{n.fill(1),i.fill(0),o=0},a=(...d)=>t(i,n,...d),c=(d=Jg())=>{i=a(i7([0]),d),n=a(),d.length!==0&&(i=a(i7([1]),d),n=a())},l=()=>{if(o++>=1e3)throw new Error("drbg: tried 1000 values");let d=0,h=[];for(;d<e;){n=a();let f=n.slice();h.push(f),d+=n.length}return Ti(...h)};return(d,h)=>{s(),c(d);let f;for(;!(f=h(l()));)c();return s(),f}}var rR={bigint:r=>typeof r=="bigint",function:r=>typeof r=="function",boolean:r=>typeof r=="boolean",string:r=>typeof r=="string",stringOrUint8Array:r=>typeof r=="string"||go(r),isSafeInteger:r=>Number.isSafeInteger(r),array:r=>Array.isArray(r),field:(r,e)=>e.Fp.isValid(r),hash:r=>typeof r=="function"&&Number.isSafeInteger(r.outputLen)};function an(r,e,t={}){let n=(i,o,s)=>{let a=rR[o];if(typeof a!="function")throw new Error("invalid validator function");let c=r[i];if(!(s&&c===void 0)&&!a(c,r))throw new Error("param "+String(i)+" is invalid. Expected "+o+", got "+c)};for(let[i,o]of Object.entries(e))n(i,o,!1);for(let[i,o]of Object.entries(t))n(i,o,!0);return r}var nR=()=>{throw new Error("not implemented")};function Ss(r){let e=new WeakMap;return(t,...n)=>{let i=e.get(t);if(i!==void 0)return i;let o=r(t,...n);return e.set(t,o),o}}var Ct=BigInt(0),et=BigInt(1),As=BigInt(2),iR=BigInt(3),n3=BigInt(4),o7=BigInt(5),s7=BigInt(8),oR=BigInt(9),sR=BigInt(16);function De(r,e){let t=r%e;return t>=Ct?t:e+t}function i3(r,e,t){if(e<Ct)throw new Error("invalid exponent, negatives unsupported");if(t<=Ct)throw new Error("invalid modulus");if(t===et)return Ct;let n=et;for(;e>Ct;)e&et&&(n=n*r%t),r=r*r%t,e>>=et;return n}function je(r,e,t){let n=r;for(;e-- >Ct;)n*=n,n%=t;return n}function df(r,e){if(r===Ct)throw new Error("invert: expected non-zero number");if(e<=Ct)throw new Error("invert: expected positive modulus, got "+e);let t=De(r,e),n=e,i=Ct,o=et,s=et,a=Ct;for(;t!==Ct;){let l=n/t,u=n%t,d=i-s*l,h=o-a*l;n=t,t=u,i=s,o=a,s=d,a=h}if(n!==et)throw new Error("invert: does not exist");return De(i,e)}function aR(r){let e=(r-et)/As,t,n,i;for(t=r-et,n=0;t%As===Ct;t/=As,n++);for(i=As;i<r&&i3(i,e,r)!==r-et;i++)if(i>1e3)throw new Error("Cannot find square root: likely non-prime P");if(n===1){let s=(r+et)/n3;return function(c,l){let u=c.pow(l,s);if(!c.eql(c.sqr(u),l))throw new Error("Cannot find square root");return u}}let o=(t+et)/As;return function(a,c){if(a.pow(c,e)===a.neg(a.ONE))throw new Error("Cannot find square root");let l=n,u=a.pow(a.mul(a.ONE,i),t),d=a.pow(c,o),h=a.pow(c,t);for(;!a.eql(h,a.ONE);){if(a.eql(h,a.ZERO))return a.ZERO;let f=1;for(let m=a.sqr(h);f<l&&!a.eql(m,a.ONE);f++)m=a.sqr(m);let p=a.pow(u,et<<BigInt(l-f-1));u=a.sqr(p),d=a.mul(d,p),h=a.mul(h,u),l=f}return d}}function cR(r){if(r%n3===iR){let e=(r+et)/n3;return function(n,i){let o=n.pow(i,e);if(!n.eql(n.sqr(o),i))throw new Error("Cannot find square root");return o}}if(r%s7===o7){let e=(r-o7)/s7;return function(n,i){let o=n.mul(i,As),s=n.pow(o,e),a=n.mul(i,s),c=n.mul(n.mul(a,As),s),l=n.mul(a,n.sub(c,n.ONE));if(!n.eql(n.sqr(l),i))throw new Error("Cannot find square root");return l}}return r%sR,aR(r)}var a7=(r,e)=>(De(r,e)&et)===et,lR=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function o3(r){let e={ORDER:"bigint",MASK:"bigint",BYTES:"isSafeInteger",BITS:"isSafeInteger"},t=lR.reduce((n,i)=>(n[i]="function",n),e);return an(r,t)}function uR(r,e,t){if(t<Ct)throw new Error("invalid exponent, negatives unsupported");if(t===Ct)return r.ONE;if(t===et)return e;let n=r.ONE,i=e;for(;t>Ct;)t&et&&(n=r.mul(n,i)),i=r.sqr(i),t>>=et;return n}function dR(r,e){let t=new Array(e.length),n=e.reduce((o,s,a)=>r.is0(s)?o:(t[a]=o,r.mul(o,s)),r.ONE),i=r.inv(n);return e.reduceRight((o,s,a)=>r.is0(s)?o:(t[a]=r.mul(o,t[a]),r.mul(o,s)),i),t}function s3(r,e){let t=e!==void 0?e:r.toString(2).length,n=Math.ceil(t/8);return{nBitLength:t,nByteLength:n}}function wo(r,e,t=!1,n={}){if(r<=Ct)throw new Error("invalid field: expected ORDER > 0, got "+r);let{nBitLength:i,nByteLength:o}=s3(r,e);if(o>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");let s,a=Object.freeze({ORDER:r,isLE:t,BITS:i,BYTES:o,MASK:yl(i),ZERO:Ct,ONE:et,create:c=>De(c,r),isValid:c=>{if(typeof c!="bigint")throw new Error("invalid field element: expected bigint, got "+typeof c);return Ct<=c&&c<r},is0:c=>c===Ct,isOdd:c=>(c&et)===et,neg:c=>De(-c,r),eql:(c,l)=>c===l,sqr:c=>De(c*c,r),add:(c,l)=>De(c+l,r),sub:(c,l)=>De(c-l,r),mul:(c,l)=>De(c*l,r),pow:(c,l)=>uR(a,c,l),div:(c,l)=>De(c*df(l,r),r),sqrN:c=>c*c,addN:(c,l)=>c+l,subN:(c,l)=>c-l,mulN:(c,l)=>c*l,inv:c=>df(c,r),sqrt:n.sqrt||(c=>(s||(s=cR(r)),s(a,c))),invertBatch:c=>dR(a,c),cmov:(c,l,u)=>u?l:c,toBytes:c=>t?Ai(c,o):yo(c,o),fromBytes:c=>{if(c.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+c.length);return t?Cn(c):Si(c)}});return Object.freeze(a)}function c7(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 a3(r){let e=c7(r);return e+Math.ceil(e/2)}function l7(r,e,t=!1){let n=r.length,i=c7(e),o=a3(e);if(n<16||n<o||n>1024)throw new Error("expected "+o+"-1024 bytes of input, got "+n);let s=t?Cn(r):Si(r),a=De(s,e-et)+et;return t?Ai(a,i):yo(a,i)}var u7=BigInt(0),ff=BigInt(1);function c3(r,e){let t=e.negate();return r?t:e}function d7(r,e){if(!Number.isSafeInteger(r)||r<=0||r>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+r)}function l3(r,e){d7(r,e);let t=Math.ceil(e/r)+1,n=2**(r-1);return{windows:t,windowSize:n}}function fR(r,e){if(!Array.isArray(r))throw new Error("array expected");r.forEach((t,n)=>{if(!(t instanceof e))throw new Error("invalid point at index "+n)})}function hR(r,e){if(!Array.isArray(r))throw new Error("array of scalars expected");r.forEach((t,n)=>{if(!e.isValid(t))throw new Error("invalid scalar at index "+n)})}var u3=new WeakMap,f7=new WeakMap;function d3(r){return f7.get(r)||1}function hf(r,e){return{constTimeNegate:c3,hasPrecomputes(t){return d3(t)!==1},unsafeLadder(t,n,i=r.ZERO){let o=t;for(;n>u7;)n&ff&&(i=i.add(o)),o=o.double(),n>>=ff;return i},precomputeWindow(t,n){let{windows:i,windowSize:o}=l3(n,e),s=[],a=t,c=a;for(let l=0;l<i;l++){c=a,s.push(c);for(let u=1;u<o;u++)c=c.add(a),s.push(c);a=c.double()}return s},wNAF(t,n,i){let{windows:o,windowSize:s}=l3(t,e),a=r.ZERO,c=r.BASE,l=BigInt(2**t-1),u=2**t,d=BigInt(t);for(let h=0;h<o;h++){let f=h*s,p=Number(i&l);i>>=d,p>s&&(p-=u,i+=ff);let m=f,g=f+Math.abs(p)-1,y=h%2!==0,w=p<0;p===0?c=c.add(c3(y,n[m])):a=a.add(c3(w,n[g]))}return{p:a,f:c}},wNAFUnsafe(t,n,i,o=r.ZERO){let{windows:s,windowSize:a}=l3(t,e),c=BigInt(2**t-1),l=2**t,u=BigInt(t);for(let d=0;d<s;d++){let h=d*a;if(i===u7)break;let f=Number(i&c);if(i>>=u,f>a&&(f-=l,i+=ff),f===0)continue;let p=n[h+Math.abs(f)-1];f<0&&(p=p.negate()),o=o.add(p)}return o},getPrecomputes(t,n,i){let o=u3.get(n);return o||(o=this.precomputeWindow(n,t),t!==1&&u3.set(n,i(o))),o},wNAFCached(t,n,i){let o=d3(t);return this.wNAF(o,this.getPrecomputes(o,t,i),n)},wNAFCachedUnsafe(t,n,i,o){let s=d3(t);return s===1?this.unsafeLadder(t,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,t,i),n,o)},setWindowSize(t,n){d7(n,e),f7.set(t,n),u3.delete(t)}}}function pf(r,e,t,n){if(fR(t,r),hR(n,e),t.length!==n.length)throw new Error("arrays of points and scalars must have equal length");let i=r.ZERO,o=t3(BigInt(t.length)),s=o>12?o-3:o>4?o-2:o?2:1,a=(1<<s)-1,c=new Array(a+1).fill(i),l=Math.floor((e.BITS-1)/s)*s,u=i;for(let d=l;d>=0;d-=s){c.fill(i);for(let f=0;f<n.length;f++){let p=n[f],m=Number(p>>BigInt(d)&BigInt(a));c[m]=c[m].add(t[f])}let h=i;for(let f=c.length-1,p=i;f>0;f--)p=p.add(c[f]),h=h.add(p);if(u=u.add(h),d!==0)for(let f=0;f<s;f++)u=u.double()}return u}function wl(r){return o3(r.Fp),an(r,{n:"bigint",h:"bigint",Gx:"field",Gy:"field"},{nBitLength:"isSafeInteger",nByteLength:"isSafeInteger"}),Object.freeze({...s3(r.n,r.nBitLength),...r,p:r.Fp.ORDER})}var Pn=BigInt(0),Tr=BigInt(1),mf=BigInt(2),pR=BigInt(8),mR={zip215:!0};function gR(r){let e=wl(r);return an(r,{hash:"function",a:"bigint",d:"bigint",randomBytes:"function"},{adjustScalarBytes:"function",domain:"function",uvRatio:"function",mapToCurve:"function"}),Object.freeze({...e})}function h7(r){let e=gR(r),{Fp:t,n,prehash:i,hash:o,randomBytes:s,nByteLength:a,h:c}=e,l=mf<<BigInt(a*8)-Tr,u=t.create,d=wo(e.n,e.nBitLength),h=e.uvRatio||((_,I)=>{try{return{isValid:!0,value:t.sqrt(_*t.inv(I))}}catch{return{isValid:!1,value:Pn}}}),f=e.adjustScalarBytes||(_=>_),p=e.domain||((_,I,D)=>{if(kn("phflag",D),I.length||D)throw new Error("Contexts/pre-hash are not supported");return _});function m(_,I){qt("coordinate "+_,I,Pn,l)}function g(_){if(!(_ instanceof x))throw new Error("ExtendedPoint expected")}let y=Ss((_,I)=>{let{ex:D,ey:P,ez:q}=_,G=_.is0();I==null&&(I=G?pR:t.inv(q));let Y=u(D*I),ie=u(P*I),oe=u(q*I);if(G)return{x:Pn,y:Tr};if(oe!==Tr)throw new Error("invZ was invalid");return{x:Y,y:ie}}),w=Ss(_=>{let{a:I,d:D}=e;if(_.is0())throw new Error("bad point: ZERO");let{ex:P,ey:q,ez:G,et:Y}=_,ie=u(P*P),oe=u(q*q),ue=u(G*G),xe=u(ue*ue),Ue=u(ie*I),He=u(ue*u(Ue+oe)),Ge=u(xe+u(D*u(ie*oe)));if(He!==Ge)throw new Error("bad point: equation left != right (1)");let Rt=u(P*q),Ht=u(G*Y);if(Rt!==Ht)throw new Error("bad point: equation left != right (2)");return!0});class x{constructor(I,D,P,q){this.ex=I,this.ey=D,this.ez=P,this.et=q,m("x",I),m("y",D),m("z",P),m("t",q),Object.freeze(this)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static fromAffine(I){if(I instanceof x)throw new Error("extended point not allowed");let{x:D,y:P}=I||{};return m("x",D),m("y",P),new x(D,P,Tr,u(D*P))}static normalizeZ(I){let D=t.invertBatch(I.map(P=>P.ez));return I.map((P,q)=>P.toAffine(D[q])).map(x.fromAffine)}static msm(I,D){return pf(x,d,I,D)}_setWindowSize(I){k.setWindowSize(this,I)}assertValidity(){w(this)}equals(I){g(I);let{ex:D,ey:P,ez:q}=this,{ex:G,ey:Y,ez:ie}=I,oe=u(D*ie),ue=u(G*q),xe=u(P*ie),Ue=u(Y*q);return oe===ue&&xe===Ue}is0(){return this.equals(x.ZERO)}negate(){return new x(u(-this.ex),this.ey,this.ez,u(-this.et))}double(){let{a:I}=e,{ex:D,ey:P,ez:q}=this,G=u(D*D),Y=u(P*P),ie=u(mf*u(q*q)),oe=u(I*G),ue=D+P,xe=u(u(ue*ue)-G-Y),Ue=oe+Y,He=Ue-ie,Ge=oe-Y,Rt=u(xe*He),Ht=u(Ue*Ge),Dt=u(xe*Ge),Hr=u(He*Ue);return new x(Rt,Ht,Hr,Dt)}add(I){g(I);let{a:D,d:P}=e,{ex:q,ey:G,ez:Y,et:ie}=this,{ex:oe,ey:ue,ez:xe,et:Ue}=I;if(D===BigInt(-1)){let uy=u((G-q)*(ue+oe)),dy=u((G+q)*(ue-oe)),Q2=u(dy-uy);if(Q2===Pn)return this.double();let fy=u(Y*mf*Ue),hy=u(ie*mf*xe),py=hy+fy,my=dy+uy,gy=hy-fy,dk=u(py*Q2),fk=u(my*gy),hk=u(py*gy),pk=u(Q2*my);return new x(dk,fk,pk,hk)}let He=u(q*oe),Ge=u(G*ue),Rt=u(ie*P*Ue),Ht=u(Y*xe),Dt=u((q+G)*(oe+ue)-He-Ge),Hr=Ht-Rt,yi=Ht+Rt,ol=u(Ge-D*He),ak=u(Dt*Hr),ck=u(yi*ol),lk=u(Dt*ol),uk=u(Hr*yi);return new x(ak,ck,uk,lk)}subtract(I){return this.add(I.negate())}wNAF(I){return k.wNAFCached(this,I,x.normalizeZ)}multiply(I){let D=I;qt("scalar",D,Tr,n);let{p:P,f:q}=this.wNAF(D);return x.normalizeZ([P,q])[0]}multiplyUnsafe(I,D=x.ZERO){let P=I;return qt("scalar",P,Pn,n),P===Pn?A:this.is0()||P===Tr?this:k.wNAFCachedUnsafe(this,P,x.normalizeZ,D)}isSmallOrder(){return this.multiplyUnsafe(c).is0()}isTorsionFree(){return k.unsafeLadder(this,n).is0()}toAffine(I){return y(this,I)}clearCofactor(){let{h:I}=e;return I===Tr?this:this.multiplyUnsafe(I)}static fromHex(I,D=!1){let{d:P,a:q}=e,G=t.BYTES;I=Xe("pointHex",I,G),kn("zip215",D);let Y=I.slice(),ie=I[G-1];Y[G-1]=ie&-129;let oe=Cn(Y),ue=D?l:t.ORDER;qt("pointHex.y",oe,Pn,ue);let xe=u(oe*oe),Ue=u(xe-Tr),He=u(P*xe-q),{isValid:Ge,value:Rt}=h(Ue,He);if(!Ge)throw new Error("Point.fromHex: invalid y coordinate");let Ht=(Rt&Tr)===Tr,Dt=(ie&128)!==0;if(!D&&Rt===Pn&&Dt)throw new Error("Point.fromHex: x=0 and x_0=1");return Dt!==Ht&&(Rt=u(-Rt)),x.fromAffine({x:Rt,y:oe})}static fromPrivateKey(I){return T(I).point}toRawBytes(){let{x:I,y:D}=this.toAffine(),P=Ai(D,t.BYTES);return P[P.length-1]|=I&Tr?128:0,P}toHex(){return Ei(this.toRawBytes())}}x.BASE=new x(e.Gx,e.Gy,Tr,u(e.Gx*e.Gy)),x.ZERO=new x(Pn,Tr,Tr,Pn);let{BASE:b,ZERO:A}=x,k=hf(x,a*8);function E(_){return De(_,n)}function S(_){return E(Cn(_))}function T(_){let I=t.BYTES;_=Xe("private key",_,I);let D=Xe("hashed private key",o(_),2*I),P=f(D.slice(0,I)),q=D.slice(I,2*I),G=S(P),Y=b.multiply(G),ie=Y.toRawBytes();return{head:P,prefix:q,scalar:G,point:Y,pointBytes:ie}}function $(_){return T(_).pointBytes}function R(_=new Uint8Array,...I){let D=Ti(...I);return S(o(p(D,Xe("context",_),!!i)))}function H(_,I,D={}){_=Xe("message",_),i&&(_=i(_));let{prefix:P,scalar:q,pointBytes:G}=T(I),Y=R(D.context,P,_),ie=b.multiply(Y).toRawBytes(),oe=R(D.context,ie,G,_),ue=E(Y+oe*q);qt("signature.s",ue,Pn,n);let xe=Ti(ie,Ai(ue,t.BYTES));return Xe("result",xe,t.BYTES*2)}let F=mR;function N(_,I,D,P=F){let{context:q,zip215:G}=P,Y=t.BYTES;_=Xe("signature",_,2*Y),I=Xe("message",I),D=Xe("publicKey",D,Y),G!==void 0&&kn("zip215",G),i&&(I=i(I));let ie=Cn(_.slice(Y,2*Y)),oe,ue,xe;try{oe=x.fromHex(D,G),ue=x.fromHex(_.slice(0,Y),G),xe=b.multiplyUnsafe(ie)}catch{return!1}if(!G&&oe.isSmallOrder())return!1;let Ue=R(q,ue.toRawBytes(),oe.toRawBytes(),I);return ue.add(oe.multiplyUnsafe(Ue)).subtract(xe).clearCofactor().equals(x.ZERO)}return b._setWindowSize(8),{CURVE:e,getPublicKey:$,sign:H,verify:N,ExtendedPoint:x,utils:{getExtendedPublicKey:T,randomPrivateKey:()=>s(t.BYTES),precompute(_=8,I=x.BASE){return I._setWindowSize(_),I.multiply(BigInt(3)),I}}}}var Ua=BigInt(0),f3=BigInt(1);function yR(r){return an(r,{a:"bigint"},{montgomeryBits:"isSafeInteger",nByteLength:"isSafeInteger",adjustScalarBytes:"function",domain:"function",powPminus2:"function",Gu:"bigint"}),Object.freeze({...r})}function p7(r){let e=yR(r),{P:t}=e,n=w=>De(w,t),i=e.montgomeryBits,o=Math.ceil(i/8),s=e.nByteLength,a=e.adjustScalarBytes||(w=>w),c=e.powPminus2||(w=>i3(w,t-BigInt(2),t));function l(w,x,b){let A=n(w*(x-b));return x=n(x-A),b=n(b+A),[x,b]}let u=(e.a-BigInt(2))/BigInt(4);function d(w,x){qt("u",w,Ua,t),qt("scalar",x,Ua,t);let b=x,A=w,k=f3,E=Ua,S=w,T=f3,$=Ua,R;for(let F=BigInt(i-1);F>=Ua;F--){let N=b>>F&f3;$^=N,R=l($,k,S),k=R[0],S=R[1],R=l($,E,T),E=R[0],T=R[1],$=N;let L=k+E,_=n(L*L),I=k-E,D=n(I*I),P=_-D,q=S+T,G=S-T,Y=n(G*L),ie=n(q*I),oe=Y+ie,ue=Y-ie;S=n(oe*oe),T=n(A*n(ue*ue)),k=n(_*D),E=n(P*(_+n(u*P)))}R=l($,k,S),k=R[0],S=R[1],R=l($,E,T),E=R[0],T=R[1];let H=c(E);return n(k*H)}function h(w){return Ai(n(w),o)}function f(w){let x=Xe("u coordinate",w,o);return s===32&&(x[31]&=127),Cn(x)}function p(w){let x=Xe("scalar",w),b=x.length;if(b!==o&&b!==s){let A=""+o+" or "+s;throw new Error("invalid scalar, expected "+A+" bytes, got "+b)}return Cn(a(x))}function m(w,x){let b=f(x),A=p(w),k=d(b,A);if(k===Ua)throw new Error("invalid private or public key received");return h(k)}let g=h(e.Gu);function y(w){return m(w,g)}return{scalarMult:m,scalarMultBase:y,getSharedSecret:(w,x)=>m(w,x),getPublicKey:w=>y(w),utils:{randomPrivateKey:()=>e.randomBytes(e.nByteLength)},GuBytes:g}}var xl=BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"),m7=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"),TW=BigInt(0),wR=BigInt(1),g7=BigInt(2),xR=BigInt(3),bR=BigInt(5),vR=BigInt(8);function y7(r){let e=BigInt(10),t=BigInt(20),n=BigInt(40),i=BigInt(80),o=xl,a=r*r%o*r%o,c=je(a,g7,o)*a%o,l=je(c,wR,o)*r%o,u=je(l,bR,o)*l%o,d=je(u,e,o)*u%o,h=je(d,t,o)*d%o,f=je(h,n,o)*h%o,p=je(f,i,o)*f%o,m=je(p,i,o)*f%o,g=je(m,e,o)*u%o;return{pow_p_5_8:je(g,g7,o)*r%o,b2:a}}function w7(r){return r[0]&=248,r[31]&=127,r[31]|=64,r}function ER(r,e){let t=xl,n=De(e*e*e,t),i=De(n*n*e,t),o=y7(r*i).pow_p_5_8,s=De(r*n*o,t),a=De(e*s*s,t),c=s,l=De(s*m7,t),u=a===r,d=a===De(-r,t),h=a===De(-r*m7,t);return u&&(s=c),(d||h)&&(s=l),a7(s,t)&&(s=De(-s,t)),{isValid:u||d,value:s}}var SR=wo(xl,void 0,!0),AR={a:BigInt(-1),d:BigInt("37095705934669439343138083508754565189542113879843219016388785533085940283555"),Fp:SR,n:BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"),h:vR,Gx:BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),Gy:BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960"),hash:mo,randomBytes:bs,adjustScalarBytes:w7,uvRatio:ER},bl=h7(AR);var vl=p7({P:xl,a:BigInt(486662),montgomeryBits:255,nByteLength:32,Gu:BigInt(9),powPminus2:r=>{let e=xl,{pow_p_5_8:t,b2:n}=y7(r);return De(je(t,xR,e)*n,e)},adjustScalarBytes:w7,randomBytes:bs});var Ha=32,ni=64,h3=32;function x7(){let r=bl.utils.randomPrivateKey(),e=bl.getPublicKey(r);return{privateKey:TR(r,e),publicKey:e}}function b7(r,e){let t=r.subarray(0,h3);return bl.sign(e instanceof Uint8Array?e:e.subarray(),t)}function v7(r,e,t){return bl.verify(e,t instanceof Uint8Array?t:t.subarray(),r)}function TR(r,e){let t=new Uint8Array(ni);for(let n=0;n<h3;n++)t[n]=r[n],t[h3+n]=e[n];return t}var El=class{type="Ed25519";raw;constructor(e){this.raw=$a(e,Ha)}toMultihash(){return At.digest(Ot(this))}toCID(){return B.createV1(114,this.toMultihash())}toString(){return ye.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return v7(this.raw,t,e)}},za=class{type="Ed25519";raw;publicKey;constructor(e,t){this.raw=$a(e,ni),this.publicKey=new El(t)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return b7(this.raw,e)}};function p3(r){if(r.length>ni){r=$a(r,ni+Ha);let n=r.subarray(0,ni),i=r.subarray(ni,r.length);return new za(n,i)}r=$a(r,ni);let e=r.subarray(0,ni),t=r.subarray(Ha);return new za(e,t)}function m3(r){return r=$a(r,Ha),new El(r)}async function S7(){let{privateKey:r,publicKey:e}=x7();return new za(r,e)}function $a(r,e){if(r=Uint8Array.from(r??[]),r.length!==e)throw new O(`Key must be a Uint8Array of length ${e}, got ${r.length}`);return r}var ct;(function(r){r.RSA="RSA",r.Ed25519="Ed25519",r.secp256k1="secp256k1"})(ct||(ct={}));var g3;(function(r){r[r.RSA=0]="RSA",r[r.Ed25519=1]="Ed25519",r[r.secp256k1=2]="secp256k1"})(g3||(g3={}));(function(r){r.codec=()=>Ye(g3)})(ct||(ct={}));var ii;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),ct.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.Type=ct.codec().decode(t);break}case 2:{o.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(ii||(ii={}));var Sl;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.Type!=null&&(n.uint32(8),ct.codec().encode(t.Type,n)),t.Data!=null&&(n.uint32(18),n.bytes(t.Data)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.Type=ct.codec().decode(t);break}case 2:{o.Data=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Sl||(Sl={}));var _l={};ot(_l,{MAX_RSA_KEY_SIZE:()=>v3,generateRSAKeyPair:()=>T3,jwkToJWKKeyPair:()=>O7,jwkToPkcs1:()=>MR,jwkToPkix:()=>S3,jwkToRSAPrivateKey:()=>L7,pkcs1ToJwk:()=>D7,pkcs1ToRSAPrivateKey:()=>xf,pkixToJwk:()=>N7,pkixToRSAPublicKey:()=>A3});var IR=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),xo=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),bo=new Uint32Array(64),y3=class extends fo{constructor(){super(64,32,8,!1),this.A=xo[0]|0,this.B=xo[1]|0,this.C=xo[2]|0,this.D=xo[3]|0,this.E=xo[4]|0,this.F=xo[5]|0,this.G=xo[6]|0,this.H=xo[7]|0}get(){let{A:e,B:t,C:n,D:i,E:o,F:s,G:a,H:c}=this;return[e,t,n,i,o,s,a,c]}set(e,t,n,i,o,s,a,c){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|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)bo[d]=e.getUint32(t,!1);for(let d=16;d<64;d++){let h=bo[d-15],f=bo[d-2],p=In(h,7)^In(h,18)^h>>>3,m=In(f,17)^In(f,19)^f>>>10;bo[d]=m+bo[d-7]+p+bo[d-16]|0}let{A:n,B:i,C:o,D:s,E:a,F:c,G:l,H:u}=this;for(let d=0;d<64;d++){let h=In(a,6)^In(a,11)^In(a,25),f=u+h+of(a,c,l)+IR[d]+bo[d]|0,m=(In(n,2)^In(n,13)^In(n,22))+sf(n,i,o)|0;u=l,l=c,c=a,a=s+f|0,s=o,o=i,i=n,n=f+m|0}n=n+this.A|0,i=i+this.B|0,o=o+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,i,o,s,a,c,l,u)}roundClean(){bo.fill(0)}destroy(){this.set(0,0,0,0,0,0,0,0),this.buffer.fill(0)}};var cn=Ma(()=>new y3);function U(r,e="utf8"){let t=jd[e];if(t==null)throw new Error(`Unsupported encoding "${e}"`);return t.encoder.encode(r).substring(1)}var _R=parseInt("11111",2),x3=parseInt("10000000",2),kR=parseInt("01111111",2),T7={2:CR,3:DR,5:RR,6:PR,16:w3,22:w3,48:w3};function Al(r,e={offset:0}){let t=r[e.offset]&_R;if(e.offset++,T7[t]!=null)return T7[t](r,e);throw new Error("No decoder for tag "+t)}function gf(r,e){let t=0;if((r[e.offset]&x3)===x3){let n=r[e.offset]&kR,i="0x";e.offset++;for(let o=0;o<n;o++,e.offset++)i+=r[e.offset].toString(16).padStart(2,"0");t=parseInt(i,16)}else t=r[e.offset],e.offset++;return t}function w3(r,e){gf(r,e);let t=[];for(;!(e.offset>=r.byteLength);){let n=Al(r,e);if(n===null)break;t.push(n)}return t}function CR(r,e){let t=gf(r,e),n=e.offset,i=e.offset+t,o=[];for(let s=n;s<i;s++)s===n&&r[s]===0||o.push(r[s]);return e.offset+=t,Uint8Array.from(o)}function PR(r,e){let t=gf(r,e);return e.offset+=t,["oid-unimplemented"]}function RR(r,e){return e.offset++,null}function DR(r,e){let t=gf(r,e),n=r[e.offset];e.offset++;let i=r.subarray(e.offset,e.offset+t);if(e.offset+=t,n!==0)throw new Error("Unused bits in bit string is unimplemented");return Al(i,{offset:0})}function NR(r){let e=r.toString(16);e.length%2===1&&(e="0"+e);let t=new ee;for(let n=0;n<e.length;n+=2)t.append(Uint8Array.from([parseInt(`${e[n]}${e[n+1]}`,16)]));return t}function b3(r){if(r.byteLength<128)return Uint8Array.from([r.byteLength]);let e=NR(r.byteLength);return new ee(Uint8Array.from([e.byteLength|x3]),e)}function ln(r){let e=new ee,t=parseInt("10000000",2);return(r.subarray()[0]&t)===t&&e.append(Uint8Array.from([0])),e.append(r),new ee(Uint8Array.from([2]),b3(e),e)}function I7(r){let e=Uint8Array.from([0]),t=new ee(e,r);return new ee(Uint8Array.from([3]),b3(t),t)}function yf(r){let e=new ee;for(let t of r)e.append(t);return new ee(Uint8Array.from([48]),b3(e),e)}function gr(r){if(isNaN(r)||r<=0)throw new O("random bytes length must be a Number bigger than 0");return bs(r)}var Tl=class extends Error{constructor(e="An error occurred while signing a message"){super(e),this.name="SigningError"}},Il=class extends Error{constructor(e="An error occurred while verifying a message"){super(e),this.name="VerificationError"}},wf=class extends Error{constructor(e="Missing Web Crypto API"){super(e),this.name="WebCryptoMissingError"}};var _7={get(r=globalThis){let e=r.crypto;if(e?.subtle==null)throw new wf("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 Ir=_7;async function k7(r){let e=await Ir.get().subtle.generateKey({name:"RSASSA-PKCS1-v1_5",modulusLength:r,publicExponent:new Uint8Array([1,0,1]),hash:{name:"SHA-256"}},!0,["sign","verify"]),t=await LR(e);return{privateKey:t[0],publicKey:t[1]}}async function C7(r,e){let t=await Ir.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["sign"]),n=await Ir.get().subtle.sign({name:"RSASSA-PKCS1-v1_5"},t,e instanceof Uint8Array?e:e.subarray());return new Uint8Array(n,0,n.byteLength)}async function P7(r,e,t){let n=await Ir.get().subtle.importKey("jwk",r,{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},!1,["verify"]);return Ir.get().subtle.verify({name:"RSASSA-PKCS1-v1_5"},n,e,t instanceof Uint8Array?t:t.subarray())}async function LR(r){if(r.privateKey==null||r.publicKey==null)throw new O("Private and public key are required");return Promise.all([Ir.get().subtle.exportKey("jwk",r.privateKey),Ir.get().subtle.exportKey("jwk",r.publicKey)])}function R7(r){if(r.kty!=="RSA")throw new O("invalid key type");if(r.n==null)throw new O("invalid key modulus");return C(r.n,"base64url").length*8}var Va=class{type="RSA";_key;_raw;_multihash;constructor(e,t){this._key=e,this._multihash=t}get raw(){return this._raw==null&&(this._raw=_l.jwkToPkix(this._key)),this._raw}toMultihash(){return this._multihash}toCID(){return B.createV1(114,this._multihash)}toString(){return ye.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return P7(this._key,t,e)}},kl=class{type="RSA";_key;_raw;publicKey;constructor(e,t){this._key=e,this.publicKey=t}get raw(){return this._raw==null&&(this._raw=_l.jwkToPkcs1(this._key)),this._raw}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return C7(this._key,e)}};var v3=8192,E3=18,OR=1062,BR=Uint8Array.from([48,13,6,9,42,134,72,134,247,13,1,1,1,5,0]);function D7(r){let e=Al(r);return{n:U(e[1],"base64url"),e:U(e[2],"base64url"),d:U(e[3],"base64url"),p:U(e[4],"base64url"),q:U(e[5],"base64url"),dp:U(e[6],"base64url"),dq:U(e[7],"base64url"),qi:U(e[8],"base64url"),kty:"RSA"}}function MR(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 O("JWK was missing components");return yf([ln(Uint8Array.from([0])),ln(C(r.n,"base64url")),ln(C(r.e,"base64url")),ln(C(r.d,"base64url")),ln(C(r.p,"base64url")),ln(C(r.q,"base64url")),ln(C(r.dp,"base64url")),ln(C(r.dq,"base64url")),ln(C(r.qi,"base64url"))]).subarray()}function N7(r){let e=Al(r,{offset:0});return{kty:"RSA",n:U(e[1][0],"base64url"),e:U(e[1][1],"base64url")}}function S3(r){if(r.n==null||r.e==null)throw new O("JWK was missing components");return yf([BR,I7(yf([ln(C(r.n,"base64url")),ln(C(r.e,"base64url"))]))]).subarray()}function xf(r){let e=D7(r);return L7(e)}function A3(r,e){if(r.byteLength>=OR)throw new wi("Key size is too large");let t=N7(r);if(e==null){let n=cn(ii.encode({Type:ct.RSA,Data:r}));e=or(E3,n)}return new Va(t,e)}function L7(r){if(R7(r)>v3)throw new O("Key size is too large");let e=O7(r),t=cn(ii.encode({Type:ct.RSA,Data:S3(e.publicKey)})),n=or(E3,t);return new kl(e.privateKey,new Va(e.publicKey,n))}async function T3(r){if(r>v3)throw new O("Key size is too large");let e=await k7(r),t=cn(ii.encode({Type:ct.RSA,Data:S3(e.publicKey)})),n=or(E3,t);return new kl(e.privateKey,new Va(e.publicKey,n))}function O7(r){if(r==null)throw new O("Missing key parameter");return{privateKey:r,publicKey:{kty:r.kty,n:r.n,e:r.e}}}var bf=class extends Ba{constructor(e,t){super(),this.finished=!1,this.destroyed=!1,ys(e);let n=_n(t);if(this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;let i=this.blockLen,o=new Uint8Array(i);o.set(n.length>i?e.create().update(n).digest():n);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),o.fill(0)}update(e){return Oa(this),this.iHash.update(e),this}digestInto(e){Oa(this),La(e,this.outputLen),this.finished=!0,this.iHash.digestInto(e),this.oHash.update(e),this.oHash.digestInto(e),this.destroy()}digest(){let e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||(e=Object.create(Object.getPrototypeOf(this),{}));let{oHash:t,iHash:n,finished:i,destroyed:o,blockLen:s,outputLen:a}=this;return e=e,e.finished=i,e.destroyed=o,e.blockLen=s,e.outputLen=a,e.oHash=t._cloneInto(e.oHash),e.iHash=n._cloneInto(e.iHash),e}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}},vo=(r,e,t)=>new bf(r,e).update(t).digest();vo.create=(r,e)=>new bf(r,e);function B7(r){r.lowS!==void 0&&kn("lowS",r.lowS),r.prehash!==void 0&&kn("prehash",r.prehash)}function FR(r){let e=wl(r);an(e,{a:"field",b:"field"},{allowedPrivateKeyLengths:"array",wrapPrivateKey:"boolean",isTorsionFree:"function",clearCofactor:"function",allowInfinityPoint:"boolean",fromBytes:"function",toBytes:"function"});let{endo:t,Fp:n,a:i}=e;if(t){if(!n.eql(i,n.ZERO))throw new Error("invalid endomorphism, can only be defined for Koblitz curves that have a=0");if(typeof t!="object"||typeof t.beta!="bigint"||typeof t.splitScalar!="function")throw new Error("invalid endomorphism, expected beta: bigint and splitScalar: function")}return Object.freeze({...e})}var{bytesToNumberBE:UR,hexToBytes:HR}=uf,I3=class extends Error{constructor(e=""){super(e)}},Ii={Err:I3,_tlv:{encode:(r,e)=>{let{Err:t}=Ii;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,i=vs(n);if(i.length/2&128)throw new t("tlv.encode: long form length too big");let o=n>127?vs(i.length/2|128):"";return vs(r)+o+i+e},decode(r,e){let{Err:t}=Ii,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 i=e[n++],o=!!(i&128),s=0;if(!o)s=i;else{let c=i&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}=Ii;if(r<_i)throw new e("integer: negative integers are not allowed");let t=vs(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}=Ii;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 UR(r)}},toSig(r){let{Err:e,_int:t,_tlv:n}=Ii,i=typeof r=="string"?HR(r):r;Fa(i);let{v:o,l:s}=n.decode(48,i);if(s.length)throw new e("invalid signature: left bytes after parsing");let{v:a,l:c}=n.decode(2,o),{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}=Ii,n=e.encode(2,t.encode(r.r)),i=e.encode(2,t.encode(r.s)),o=n+i;return e.encode(48,o)}},_i=BigInt(0),Bt=BigInt(1),IY=BigInt(2),M7=BigInt(3),_Y=BigInt(4);function zR(r){let e=FR(r),{Fp:t}=e,n=wo(e.n,e.nBitLength),i=e.toBytes||((m,g,y)=>{let w=g.toAffine();return Ti(Uint8Array.from([4]),t.toBytes(w.x),t.toBytes(w.y))}),o=e.fromBytes||(m=>{let g=m.subarray(1),y=t.fromBytes(g.subarray(0,t.BYTES)),w=t.fromBytes(g.subarray(t.BYTES,2*t.BYTES));return{x:y,y:w}});function s(m){let{a:g,b:y}=e,w=t.sqr(m),x=t.mul(w,m);return t.add(t.add(x,t.mul(m,g)),y)}if(!t.eql(t.sqr(e.Gy),s(e.Gx)))throw new Error("bad generator point: equation left != right");function a(m){return gl(m,Bt,e.n)}function c(m){let{allowedPrivateKeyLengths:g,nByteLength:y,wrapPrivateKey:w,n:x}=e;if(g&&typeof m!="bigint"){if(go(m)&&(m=Ei(m)),typeof m!="string"||!g.includes(m.length))throw new Error("invalid private key");m=m.padStart(y*2,"0")}let b;try{b=typeof m=="bigint"?m:Si(Xe("private key",m,y))}catch{throw new Error("invalid private key, expected hex or "+y+" bytes, got "+typeof m)}return w&&(b=De(b,x)),qt("private key",b,Bt,x),b}function l(m){if(!(m instanceof h))throw new Error("ProjectivePoint expected")}let u=Ss((m,g)=>{let{px:y,py:w,pz:x}=m;if(t.eql(x,t.ONE))return{x:y,y:w};let b=m.is0();g==null&&(g=b?t.ONE:t.inv(x));let A=t.mul(y,g),k=t.mul(w,g),E=t.mul(x,g);if(b)return{x:t.ZERO,y:t.ZERO};if(!t.eql(E,t.ONE))throw new Error("invZ was invalid");return{x:A,y:k}}),d=Ss(m=>{if(m.is0()){if(e.allowInfinityPoint&&!t.is0(m.py))return;throw new Error("bad point: ZERO")}let{x:g,y}=m.toAffine();if(!t.isValid(g)||!t.isValid(y))throw new Error("bad point: x or y not FE");let w=t.sqr(y),x=s(g);if(!t.eql(w,x))throw new Error("bad point: equation left != right");if(!m.isTorsionFree())throw new Error("bad point: not in prime-order subgroup");return!0});class h{constructor(g,y,w){if(this.px=g,this.py=y,this.pz=w,g==null||!t.isValid(g))throw new Error("x required");if(y==null||!t.isValid(y))throw new Error("y required");if(w==null||!t.isValid(w))throw new Error("z required");Object.freeze(this)}static fromAffine(g){let{x:y,y:w}=g||{};if(!g||!t.isValid(y)||!t.isValid(w))throw new Error("invalid affine point");if(g instanceof h)throw new Error("projective point not allowed");let x=b=>t.eql(b,t.ZERO);return x(y)&&x(w)?h.ZERO:new h(y,w,t.ONE)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}static normalizeZ(g){let y=t.invertBatch(g.map(w=>w.pz));return g.map((w,x)=>w.toAffine(y[x])).map(h.fromAffine)}static fromHex(g){let y=h.fromAffine(o(Xe("pointHex",g)));return y.assertValidity(),y}static fromPrivateKey(g){return h.BASE.multiply(c(g))}static msm(g,y){return pf(h,n,g,y)}_setWindowSize(g){p.setWindowSize(this,g)}assertValidity(){d(this)}hasEvenY(){let{y:g}=this.toAffine();if(t.isOdd)return!t.isOdd(g);throw new Error("Field doesn't support isOdd")}equals(g){l(g);let{px:y,py:w,pz:x}=this,{px:b,py:A,pz:k}=g,E=t.eql(t.mul(y,k),t.mul(b,x)),S=t.eql(t.mul(w,k),t.mul(A,x));return E&&S}negate(){return new h(this.px,t.neg(this.py),this.pz)}double(){let{a:g,b:y}=e,w=t.mul(y,M7),{px:x,py:b,pz:A}=this,k=t.ZERO,E=t.ZERO,S=t.ZERO,T=t.mul(x,x),$=t.mul(b,b),R=t.mul(A,A),H=t.mul(x,b);return H=t.add(H,H),S=t.mul(x,A),S=t.add(S,S),k=t.mul(g,S),E=t.mul(w,R),E=t.add(k,E),k=t.sub($,E),E=t.add($,E),E=t.mul(k,E),k=t.mul(H,k),S=t.mul(w,S),R=t.mul(g,R),H=t.sub(T,R),H=t.mul(g,H),H=t.add(H,S),S=t.add(T,T),T=t.add(S,T),T=t.add(T,R),T=t.mul(T,H),E=t.add(E,T),R=t.mul(b,A),R=t.add(R,R),T=t.mul(R,H),k=t.sub(k,T),S=t.mul(R,$),S=t.add(S,S),S=t.add(S,S),new h(k,E,S)}add(g){l(g);let{px:y,py:w,pz:x}=this,{px:b,py:A,pz:k}=g,E=t.ZERO,S=t.ZERO,T=t.ZERO,$=e.a,R=t.mul(e.b,M7),H=t.mul(y,b),F=t.mul(w,A),N=t.mul(x,k),L=t.add(y,w),_=t.add(b,A);L=t.mul(L,_),_=t.add(H,F),L=t.sub(L,_),_=t.add(y,x);let I=t.add(b,k);return _=t.mul(_,I),I=t.add(H,N),_=t.sub(_,I),I=t.add(w,x),E=t.add(A,k),I=t.mul(I,E),E=t.add(F,N),I=t.sub(I,E),T=t.mul($,_),E=t.mul(R,N),T=t.add(E,T),E=t.sub(F,T),T=t.add(F,T),S=t.mul(E,T),F=t.add(H,H),F=t.add(F,H),N=t.mul($,N),_=t.mul(R,_),F=t.add(F,N),N=t.sub(H,N),N=t.mul($,N),_=t.add(_,N),H=t.mul(F,_),S=t.add(S,H),H=t.mul(I,_),E=t.mul(L,E),E=t.sub(E,H),H=t.mul(L,F),T=t.mul(I,T),T=t.add(T,H),new h(E,S,T)}subtract(g){return this.add(g.negate())}is0(){return this.equals(h.ZERO)}wNAF(g){return p.wNAFCached(this,g,h.normalizeZ)}multiplyUnsafe(g){let{endo:y,n:w}=e;qt("scalar",g,_i,w);let x=h.ZERO;if(g===_i)return x;if(this.is0()||g===Bt)return this;if(!y||p.hasPrecomputes(this))return p.wNAFCachedUnsafe(this,g,h.normalizeZ);let{k1neg:b,k1:A,k2neg:k,k2:E}=y.splitScalar(g),S=x,T=x,$=this;for(;A>_i||E>_i;)A&Bt&&(S=S.add($)),E&Bt&&(T=T.add($)),$=$.double(),A>>=Bt,E>>=Bt;return b&&(S=S.negate()),k&&(T=T.negate()),T=new h(t.mul(T.px,y.beta),T.py,T.pz),S.add(T)}multiply(g){let{endo:y,n:w}=e;qt("scalar",g,Bt,w);let x,b;if(y){let{k1neg:A,k1:k,k2neg:E,k2:S}=y.splitScalar(g),{p:T,f:$}=this.wNAF(k),{p:R,f:H}=this.wNAF(S);T=p.constTimeNegate(A,T),R=p.constTimeNegate(E,R),R=new h(t.mul(R.px,y.beta),R.py,R.pz),x=T.add(R),b=$.add(H)}else{let{p:A,f:k}=this.wNAF(g);x=A,b=k}return h.normalizeZ([x,b])[0]}multiplyAndAddUnsafe(g,y,w){let x=h.BASE,b=(k,E)=>E===_i||E===Bt||!k.equals(x)?k.multiplyUnsafe(E):k.multiply(E),A=b(this,y).add(b(g,w));return A.is0()?void 0:A}toAffine(g){return u(this,g)}isTorsionFree(){let{h:g,isTorsionFree:y}=e;if(g===Bt)return!0;if(y)return y(h,this);throw new Error("isTorsionFree() has not been declared for the elliptic curve")}clearCofactor(){let{h:g,clearCofactor:y}=e;return g===Bt?this:y?y(h,this):this.multiplyUnsafe(e.h)}toRawBytes(g=!0){return kn("isCompressed",g),this.assertValidity(),i(h,this,g)}toHex(g=!0){return kn("isCompressed",g),Ei(this.toRawBytes(g))}}h.BASE=new h(e.Gx,e.Gy,t.ONE),h.ZERO=new h(t.ZERO,t.ONE,t.ZERO);let f=e.nBitLength,p=hf(h,e.endo?Math.ceil(f/2):f);return{CURVE:e,ProjectivePoint:h,normPrivateKeyToScalar:c,weierstrassEquation:s,isWithinCurveOrder:a}}function $R(r){let e=wl(r);return an(e,{hash:"hash",hmac:"function",randomBytes:"function"},{bits2int:"function",bits2int_modN:"function",lowS:"boolean"}),Object.freeze({lowS:!0,...e})}function F7(r){let e=$R(r),{Fp:t,n}=e,i=t.BYTES+1,o=2*t.BYTES+1;function s(N){return De(N,n)}function a(N){return df(N,n)}let{ProjectivePoint:c,normPrivateKeyToScalar:l,weierstrassEquation:u,isWithinCurveOrder:d}=zR({...e,toBytes(N,L,_){let I=L.toAffine(),D=t.toBytes(I.x),P=Ti;return kn("isCompressed",_),_?P(Uint8Array.from([L.hasEvenY()?2:3]),D):P(Uint8Array.from([4]),D,t.toBytes(I.y))},fromBytes(N){let L=N.length,_=N[0],I=N.subarray(1);if(L===i&&(_===2||_===3)){let D=Si(I);if(!gl(D,Bt,t.ORDER))throw new Error("Point is not on curve");let P=u(D),q;try{q=t.sqrt(P)}catch(ie){let oe=ie instanceof Error?": "+ie.message:"";throw new Error("Point is not on curve"+oe)}let G=(q&Bt)===Bt;return(_&1)===1!==G&&(q=t.neg(q)),{x:D,y:q}}else if(L===o&&_===4){let D=t.fromBytes(I.subarray(0,t.BYTES)),P=t.fromBytes(I.subarray(t.BYTES,2*t.BYTES));return{x:D,y:P}}else{let D=i,P=o;throw new Error("invalid Point, expected length of "+D+", or uncompressed "+P+", got "+L)}}}),h=N=>Ei(yo(N,e.nByteLength));function f(N){let L=n>>Bt;return N>L}function p(N){return f(N)?s(-N):N}let m=(N,L,_)=>Si(N.slice(L,_));class g{constructor(L,_,I){this.r=L,this.s=_,this.recovery=I,this.assertValidity()}static fromCompact(L){let _=e.nByteLength;return L=Xe("compactSignature",L,_*2),new g(m(L,0,_),m(L,_,2*_))}static fromDER(L){let{r:_,s:I}=Ii.toSig(Xe("DER",L));return new g(_,I)}assertValidity(){qt("r",this.r,Bt,n),qt("s",this.s,Bt,n)}addRecoveryBit(L){return new g(this.r,this.s,L)}recoverPublicKey(L){let{r:_,s:I,recovery:D}=this,P=k(Xe("msgHash",L));if(D==null||![0,1,2,3].includes(D))throw new Error("recovery id invalid");let q=D===2||D===3?_+e.n:_;if(q>=t.ORDER)throw new Error("recovery id 2 or 3 invalid");let G=(D&1)===0?"02":"03",Y=c.fromHex(G+h(q)),ie=a(q),oe=s(-P*ie),ue=s(I*ie),xe=c.BASE.multiplyAndAddUnsafe(Y,oe,ue);if(!xe)throw new Error("point at infinify");return xe.assertValidity(),xe}hasHighS(){return f(this.s)}normalizeS(){return this.hasHighS()?new g(this.r,s(-this.s),this.recovery):this}toDERRawBytes(){return Es(this.toDERHex())}toDERHex(){return Ii.hexFromSig({r:this.r,s:this.s})}toCompactRawBytes(){return Es(this.toCompactHex())}toCompactHex(){return h(this.r)+h(this.s)}}let y={isValidPrivateKey(N){try{return l(N),!0}catch{return!1}},normPrivateKeyToScalar:l,randomPrivateKey:()=>{let N=a3(e.n);return l7(e.randomBytes(N),e.n)},precompute(N=8,L=c.BASE){return L._setWindowSize(N),L.multiply(BigInt(3)),L}};function w(N,L=!0){return c.fromPrivateKey(N).toRawBytes(L)}function x(N){let L=go(N),_=typeof N=="string",I=(L||_)&&N.length;return L?I===i||I===o:_?I===2*i||I===2*o:N instanceof c}function b(N,L,_=!0){if(x(N))throw new Error("first arg must be private key");if(!x(L))throw new Error("second arg must be public key");return c.fromHex(L).multiply(l(N)).toRawBytes(_)}let A=e.bits2int||function(N){if(N.length>8192)throw new Error("input is too large");let L=Si(N),_=N.length*8-e.nBitLength;return _>0?L>>BigInt(_):L},k=e.bits2int_modN||function(N){return s(A(N))},E=yl(e.nBitLength);function S(N){return qt("num < 2^"+e.nBitLength,N,_i,E),yo(N,e.nByteLength)}function T(N,L,_=$){if(["recovered","canonical"].some(He=>He in _))throw new Error("sign() legacy options not supported");let{hash:I,randomBytes:D}=e,{lowS:P,prehash:q,extraEntropy:G}=_;P==null&&(P=!0),N=Xe("msgHash",N),B7(_),q&&(N=Xe("prehashed msgHash",I(N)));let Y=k(N),ie=l(L),oe=[S(ie),S(Y)];if(G!=null&&G!==!1){let He=G===!0?D(t.BYTES):G;oe.push(Xe("extraEntropy",He))}let ue=Ti(...oe),xe=Y;function Ue(He){let Ge=A(He);if(!d(Ge))return;let Rt=a(Ge),Ht=c.BASE.multiply(Ge).toAffine(),Dt=s(Ht.x);if(Dt===_i)return;let Hr=s(Rt*s(xe+Dt*ie));if(Hr===_i)return;let yi=(Ht.x===Dt?0:2)|Number(Ht.y&Bt),ol=Hr;return P&&f(Hr)&&(ol=p(Hr),yi^=1),new g(Dt,ol,yi)}return{seed:ue,k2sig:Ue}}let $={lowS:e.lowS,prehash:!1},R={lowS:e.lowS,prehash:!1};function H(N,L,_=$){let{seed:I,k2sig:D}=T(N,L,_),P=e;return r3(P.hash.outputLen,P.nByteLength,P.hmac)(I,D)}c.BASE._setWindowSize(8);function F(N,L,_,I=R){let D=N;L=Xe("msgHash",L),_=Xe("publicKey",_);let{lowS:P,prehash:q,format:G}=I;if(B7(I),"strict"in I)throw new Error("options.strict was renamed to lowS");if(G!==void 0&&G!=="compact"&&G!=="der")throw new Error("format must be compact or der");let Y=typeof D=="string"||go(D),ie=!Y&&!G&&typeof D=="object"&&D!==null&&typeof D.r=="bigint"&&typeof D.s=="bigint";if(!Y&&!ie)throw new Error("invalid signature, expected Uint8Array, hex string or Signature instance");let oe,ue;try{if(ie&&(oe=new g(D.r,D.s)),Y){try{G!=="compact"&&(oe=g.fromDER(D))}catch(yi){if(!(yi instanceof Ii.Err))throw yi}!oe&&G!=="der"&&(oe=g.fromCompact(D))}ue=c.fromHex(_)}catch{return!1}if(!oe||P&&oe.hasHighS())return!1;q&&(L=e.hash(L));let{r:xe,s:Ue}=oe,He=k(L),Ge=a(Ue),Rt=s(He*Ge),Ht=s(xe*Ge),Dt=c.BASE.multiplyAndAddUnsafe(ue,Rt,Ht)?.toAffine();return Dt?s(Dt.x)===xe:!1}return{CURVE:e,getPublicKey:w,getSharedSecret:b,sign:H,verify:F,ProjectivePoint:c,Signature:g,utils:y}}function VR(r){return{hash:r,hmac:(e,...t)=>vo(r,e,Xg(...t)),randomBytes:bs}}function U7(r,e){let t=n=>F7({...r,...VR(n)});return{...t(e),create:t}}var $7=BigInt("0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"),H7=BigInt("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"),qR=BigInt(1),_3=BigInt(2),z7=(r,e)=>(r+e/_3)/e;function KR(r){let e=$7,t=BigInt(3),n=BigInt(6),i=BigInt(11),o=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,h=je(d,t,e)*u%e,f=je(h,_3,e)*l%e,p=je(f,i,e)*f%e,m=je(p,o,e)*p%e,g=je(m,a,e)*m%e,y=je(g,c,e)*g%e,w=je(y,a,e)*m%e,x=je(w,t,e)*u%e,b=je(x,s,e)*p%e,A=je(b,n,e)*l%e,k=je(A,_3,e);if(!k3.eql(k3.sqr(k),r))throw new Error("Cannot find square root");return k}var k3=wo($7,void 0,void 0,{sqrt:KR}),un=U7({a:BigInt(0),b:BigInt(7),Fp:k3,n:H7,Gx:BigInt("55066263022277343669578718895168534326250603453777594175500187360389116729240"),Gy:BigInt("32670510020758816978083085130507043184471273380659243275938904335757337482424"),h:BigInt(1),lowS:!0,endo:{beta:BigInt("0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee"),splitScalar:r=>{let e=H7,t=BigInt("0x3086d221a7d46bcde86c90e49284eb15"),n=-qR*BigInt("0xe4437ed6010e88286f547fa90abfe4c3"),i=BigInt("0x114ca50f7a8e2f3f657c1108d9d44cfd8"),o=t,s=BigInt("0x100000000000000000000000000000000"),a=z7(o*r,e),c=z7(-n*r,e),l=De(r-a*t-c*i,e),u=De(-a*n-c*o,e),d=l>s,h=u>s;if(d&&(l=e-l),h&&(u=e-u),l>s||u>s)throw new Error("splitScalar: Endomorphism failed, k="+r);return{k1neg:d,k1:l,k2neg:h,k2:u}}}},cn),BY=BigInt(0);var MY=un.ProjectivePoint;function C3(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function V7(r,e){let t=Se.digest(e instanceof Uint8Array?e:e.subarray());if(C3(t))return t.then(({digest:n})=>un.sign(n,r).toDERRawBytes()).catch(n=>{throw new Tl(String(n))});try{return un.sign(t.digest,r).toDERRawBytes()}catch(n){throw new Tl(String(n))}}function q7(r,e,t){let n=Se.digest(t instanceof Uint8Array?t:t.subarray());if(C3(n))return n.then(({digest:i})=>un.verify(e,i,r)).catch(i=>{throw new Il(String(i))});try{return un.verify(e,n.digest,r)}catch(i){throw new Il(String(i))}}var Cl=class{type="secp256k1";raw;_key;constructor(e){this._key=W7(e),this.raw=K7(this._key)}toMultihash(){return At.digest(Ot(this))}toCID(){return B.createV1(114,this.toMultihash())}toString(){return ye.encode(this.toMultihash().bytes).substring(1)}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}verify(e,t){return q7(this._key,t,e)}},Pl=class{type="secp256k1";raw;publicKey;constructor(e,t){this.raw=G7(e),this.publicKey=new Cl(t??Y7(e))}equals(e){return e==null||!(e.raw instanceof Uint8Array)?!1:J(this.raw,e.raw)}sign(e){return V7(this.raw,e)}};function P3(r){return new Pl(r)}function R3(r){return new Cl(r)}async function X7(){let r=GR();return new Pl(r)}function K7(r){return un.ProjectivePoint.fromHex(r).toRawBytes(!0)}function G7(r){try{return un.getPublicKey(r,!0),r}catch(e){throw new sl(String(e))}}function W7(r){try{return un.ProjectivePoint.fromHex(r),r}catch(e){throw new wi(String(e))}}function Y7(r){try{return un.getPublicKey(r,!0)}catch(e){throw new sl(String(e))}}function GR(){return un.utils.randomPrivateKey()}async function vf(r,e){if(r==="Ed25519")return S7();if(r==="secp256k1")return X7();if(r==="RSA")return T3(e??2048);throw new En}function wt(r,e){let{Type:t,Data:n}=ii.decode(r),i=n??new Uint8Array;switch(t){case ct.RSA:return A3(i,e);case ct.Ed25519:return m3(i);case ct.secp256k1:return R3(i);default:throw new En}}function Ef(r){let{Type:e,Data:t}=ii.decode(r.digest),n=t??new Uint8Array;switch(e){case ct.Ed25519:return m3(n);case ct.secp256k1:return R3(n);default:throw new En}}function Ot(r){return ii.encode({Type:ct[r.type],Data:r.raw})}function j7(r){let e=Sl.decode(r),t=e.Data??new Uint8Array;switch(e.Type){case ct.RSA:return xf(t);case ct.Ed25519:return p3(t);case ct.secp256k1:return P3(t);default:throw new En}}function Q7(r){return r.byteLength===64?p3(r):r.byteLength===32?P3(r):xf(r)}function qa(r){return Sl.encode({Type:ct[r.type],Data:r.raw})}var Z7=Symbol.for("nodejs.util.inspect.custom"),WR=114,Rl=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()})`}[Id]=!0;toString(){return this.string==null&&(this.string=ye.encode(this.multihash.bytes).slice(1)),this.string}toMultihash(){return this.multihash}toCID(){return B.createV1(WR,this.multihash)}toJSON(){return this.toString()}equals(e){if(e==null)return!1;if(e instanceof Uint8Array)return J(this.multihash.bytes,e);if(typeof e=="string")return this.toString()===e;if(e?.toMultihash()?.bytes!=null)return J(this.multihash.bytes,e.toMultihash().bytes);throw new Error("not valid Id")}[Z7](){return`PeerId(${this.toString()})`}},Dl=class extends Rl{type="RSA";publicKey;constructor(e){super({...e,type:"RSA"}),this.publicKey=e.publicKey}},Nl=class extends Rl{type="Ed25519";publicKey;constructor(e){super({...e,type:"Ed25519"}),this.publicKey=e.publicKey}},Ll=class extends Rl{type="secp256k1";publicKey;constructor(e){super({...e,type:"secp256k1"}),this.publicKey=e.publicKey}},YR=2336,Ol=class{type="url";multihash;publicKey;url;constructor(e){this.url=e.toString(),this.multihash=At.digest(C(this.url))}[Z7](){return`PeerId(${this.url})`}[Id]=!0;toString(){return this.toCID().toString()}toMultihash(){return this.multihash}toCID(){return B.createV1(YR,this.toMultihash())}toJSON(){return this.toString()}equals(e){return e==null?!1:(e instanceof Uint8Array&&(e=U(e)),e.toString()===this.toString())}};var XR=114,J7=2336;function Ne(r,e){let t;if(r.charAt(0)==="1"||r.charAt(0)==="Q")t=pe(ye.decode(`z${r}`));else{if(r.startsWith("k51qzi5uqu5")||r.startsWith("kzwfwjn5ji4")||r.startsWith("k2k4r8")||r.startsWith("bafz"))return Kt(B.parse(r));if(e==null)throw new O('Please pass a multibase decoder for strings that do not start with "1" or "Q"');t=pe(e.decode(r))}return Tt(t)}function oi(r){if(r.type==="Ed25519")return new Nl({multihash:r.toCID().multihash,publicKey:r});if(r.type==="secp256k1")return new Ll({multihash:r.toCID().multihash,publicKey:r});if(r.type==="RSA")return new Dl({multihash:r.toCID().multihash,publicKey:r});throw new En}function ew(r){return oi(r.publicKey)}function Tt(r){if(QR(r))return new Dl({multihash:r});if(jR(r))try{let e=Ef(r);if(e.type==="Ed25519")return new Nl({multihash:r,publicKey:e});if(e.type==="secp256k1")return new Ll({multihash:r,publicKey:e})}catch{let t=U(r.digest);return new Ol(new URL(t))}throw new oo("Supplied PeerID Multihash is invalid")}function Kt(r){if(r?.multihash==null||r.version==null||r.version===1&&r.code!==XR&&r.code!==J7)throw new Dd("Supplied PeerID CID is invalid");if(r.code===J7){let e=U(r.multihash.digest);return new Ol(new URL(e))}return Tt(r.multihash)}function jR(r){return r.code===At.code}function QR(r){return r.code===Se.code}function Ts(r,e){let t={[Symbol.iterator]:()=>t,next:()=>{let n=r.next(),i=n.value;return n.done===!0||i==null?{done:!0,value:void 0}:{done:!1,value:e(i)}}};return t}function Sf(r){let e=pe(ye.decode(`z${r}`));return Tt(e)}var Mt=class{map;constructor(e){if(this.map=new Map,e!=null)for(let[t,n]of e.entries())this.map.set(t.toString(),{key:t,value:n})}[Symbol.iterator](){return this.entries()}clear(){this.map.clear()}delete(e){return this.map.delete(e.toString())}entries(){return Ts(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 Ts(this.map.values(),e=>e.key)}values(){return Ts(this.map.values(),e=>e.value)}get size(){return this.map.size}};var yr=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 Ts(this.set.entries(),e=>{let t=Sf(e[0]);return[t,t]})}forEach(e){this.set.forEach(t=>{let n=Sf(t);e(n,n,this)})}has(e){return this.set.has(e.toString())}values(){return Ts(this.set.values(),e=>Sf(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 D3(){return new yr}function tw(r,e,t,n){ys(r);let i=t7({dkLen:32,asyncTick:10},n),{c:o,dkLen:s,asyncTick:a}=i;if(uo(o),uo(s),uo(a),o<1)throw new Error("PBKDF2: iterations (c) should be >= 1");let c=_n(e),l=_n(t),u=new Uint8Array(s),d=vo.create(r,c),h=d._cloneInto().update(l);return{c:o,dkLen:s,asyncTick:a,DK:u,PRF:d,PRFSalt:h}}function rw(r,e,t,n,i){return r.destroy(),e.destroy(),n&&n.destroy(),i.fill(0),t}function nw(r,e,t,n){let{c:i,dkLen:o,DK:s,PRF:a,PRFSalt:c}=tw(r,e,t,n),l,u=new Uint8Array(4),d=xs(u),h=new Uint8Array(a.outputLen);for(let f=1,p=0;p<o;f++,p+=a.outputLen){let m=s.subarray(p,p+a.outputLen);d.setInt32(0,f,!1),(l=c._cloneInto(l)).update(u).digestInto(h),m.set(h.subarray(0,m.length));for(let g=1;g<i;g++){a._cloneInto(l).update(h).digestInto(h);for(let y=0;y<m.length;y++)m[y]^=h[y]}}return rw(a,c,s,l,h)}async function Af(r,e,t,n){let{c:i,dkLen:o,asyncTick:s,DK:a,PRF:c,PRFSalt:l}=tw(r,e,t,n),u,d=new Uint8Array(4),h=xs(d),f=new Uint8Array(c.outputLen);for(let p=1,m=0;m<o;p++,m+=c.outputLen){let g=a.subarray(m,m+c.outputLen);h.setInt32(0,p,!1),(u=l._cloneInto(u)).update(d).digestInto(f),g.set(f.subarray(0,g.length)),await Jy(i-1,s,()=>{c._cloneInto(u).update(f).digestInto(f);for(let y=0;y<g.length;y++)g[y]^=f[y]})}return rw(c,l,a,u,f)}var Bl=new Uint32Array([1732584193,4023233417,2562383102,271733878,3285377520]),Eo=new Uint32Array(80),N3=class extends fo{constructor(){super(64,20,8,!1),this.A=Bl[0]|0,this.B=Bl[1]|0,this.C=Bl[2]|0,this.D=Bl[3]|0,this.E=Bl[4]|0}get(){let{A:e,B:t,C:n,D:i,E:o}=this;return[e,t,n,i,o]}set(e,t,n,i,o){this.A=e|0,this.B=t|0,this.C=n|0,this.D=i|0,this.E=o|0}process(e,t){for(let c=0;c<16;c++,t+=4)Eo[c]=e.getUint32(t,!1);for(let c=16;c<80;c++)Eo[c]=nf(Eo[c-3]^Eo[c-8]^Eo[c-14]^Eo[c-16],1);let{A:n,B:i,C:o,D:s,E:a}=this;for(let c=0;c<80;c++){let l,u;c<20?(l=of(i,o,s),u=1518500249):c<40?(l=i^o^s,u=1859775393):c<60?(l=sf(i,o,s),u=2400959708):(l=i^o^s,u=3395469782);let d=nf(n,5)+l+a+u+Eo[c]|0;a=s,s=o,o=nf(i,30),i=n,n=d}n=n+this.A|0,i=i+this.B|0,o=o+this.C|0,s=s+this.D|0,a=a+this.E|0,this.set(n,i,o,s,a)}roundClean(){Eo.fill(0)}destroy(){this.set(0,0,0,0,0),this.buffer.fill(0)}},iw=Ma(()=>new N3);var ow={sha1:iw,"sha2-256":cn,"sha2-512":mo};function Ml(r,e,t,n,i){if(i!=="sha1"&&i!=="sha2-256"&&i!=="sha2-512"){let a=Object.keys(ow).join(" / ");throw new O(`Hash '${i}' is unknown or not supported. Must be ${a}`)}let o=ow[i],s=nw(o,r,e,{c:t,dkLen:n});return St.encode(s).substring(1)}var L3={32:16777619n,64:1099511628211n,128:309485009821345068724781371n,256:374144419156711147060143317175368453031918731002211n,512:35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852759n,1024:5016456510113118655434598811035278955030765345404790744303017523831112055108147451509157692220295382716162651878526895249385292291816524375083746691371804094271873160484737966720260389217684476157468082573n},sw={32:2166136261n,64:14695981039346656037n,128:144066263297769815596495629667062367629n,256:100029257958052580907070968620625704837092796014241193945225284501741471925557n,512:9659303129496669498009435400716310466090418745672637896108374329434462657994582932197716438449813051892206539805784495328239340083876191928701583869517785n,1024:14197795064947621068722070641403218320880622795441933960878474914617582723252296732303717722150864096521202355549365628174669108571814760471015076148029755969804077320157692458563003215304957150157403644460363550505412711285966361610267868082893823963790439336411086884584107735010676915n},aw=new globalThis.TextEncoder;function ZR(r,e){let t=L3[e],n=sw[e];for(let i=0;i<r.length;i++)n^=BigInt(r[i]),n=BigInt.asUintN(e,n*t);return n}function JR(r,e,t){if(t.length===0)throw new Error("The `utf8Buffer` option must have a length greater than zero");let n=L3[e],i=sw[e],o=r;for(;o.length>0;){let s=aw.encodeInto(o,t);o=o.slice(s.read);for(let a=0;a<s.written;a++)i^=BigInt(t[a]),i=BigInt.asUintN(e,i*n)}return i}function O3(r,{size:e=32,utf8Buffer:t}={}){if(!L3[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 JR(r,e,t);r=aw.encode(r)}return ZR(r,e)}var Fl={hash:r=>Number(O3(r,{size:32})),hashV:(r,e)=>eD(Fl.hash(r,e))};function eD(r){let e=r.toString(16);return e.length%2===1&&(e=`0${e}`),C(e,"base16")}var B3=64,Rn=class{fp;h;seed;constructor(e,t,n,i=2){if(i>B3)throw new TypeError("Invalid Fingerprint Size");let o=t.hashV(e,n),s=le(i);for(let a=0;a<s.length;a++)s[a]=o[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?J(this.fp,e.fp):!1}};function Is(r,e){return Math.floor(Math.random()*(e-r))+r}var _s=class{contents;constructor(e){this.contents=new Array(e).fill(null)}has(e){if(!(e instanceof Rn))throw new TypeError("Invalid Fingerprint");return this.contents.some(t=>e.equals(t))}add(e){if(!(e instanceof Rn))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 Rn))throw new TypeError("Invalid Fingerprint");let t=Is(0,this.contents.length-1),n=this.contents[t];return this.contents[t]=e,n}remove(e){if(!(e instanceof Rn))throw new TypeError("Invalid Fingerprint");let t=this.contents.findIndex(n=>e.equals(n));return t>-1?(this.contents[t]=null,!0):!1}};var tD=500,Ul=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??Fl,this.seed=e.seed??Is(0,Math.pow(2,10))}add(e){typeof e=="string"&&(e=C(e));let t=new Rn(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,i=(n^t.hash())%this.filterSize;if(this.buckets[n]==null&&(this.buckets[n]=new _s(this.bucketSize)),this.buckets[i]==null&&(this.buckets[i]=new _s(this.bucketSize)),this.buckets[n].add(t)||this.buckets[i].add(t))return this.count++,!0;let o=[n,i],s=o[Is(0,o.length-1)];this.buckets[s]==null&&(this.buckets[s]=new _s(this.bucketSize));for(let a=0;a<tD;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 _s(this.bucketSize)),this.buckets[s].add(c)))return this.count++,!0}return!1}has(e){typeof e=="string"&&(e=C(e));let t=new Rn(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,i=this.buckets[n]?.has(t)??!1;if(i)return i;let o=(n^t.hash())%this.filterSize;return this.buckets[o]?.has(t)??!1}remove(e){typeof e=="string"&&(e=C(e));let t=new Rn(e,this.hash,this.seed,this.fingerprintSize),n=this.hash.hash(e,this.seed)%this.filterSize,i=this.buckets[n]?.remove(t)??!1;if(i)return this.count--,i;let o=(n^t.hash())%this.filterSize,s=this.buckets[o]?.remove(t)??!1;return s&&this.count--,s}get reliable(){return Math.floor(100*(this.count/this.filterSize))<=90}},rD={1:.5,2:.84,4:.95,8:.98};function nD(r=.001){return r>.002?2:r>1e-5?4:8}function cw(r,e=.001){let t=nD(e),n=rD[t],i=Math.round(r/n),o=Math.min(Math.ceil(Math.log2(1/e)+Math.log2(2*t)),B3);return{filterSize:i,bucketSize:t,fingerprintSize:o}}var Tf=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??Fl,this.seed=e.seed??Is(0,Math.pow(2,10)),this.filterSeries=[new Ul({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 Ul({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 _r(r,e=.001,t){return new Tf({...cw(r,e),...t??{}})}var If=class{filter;constructor(e,t){this.filter=_r(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 M3(r,e=.001){return new If(r,e)}var F3=class extends Mt{metric;constructor(e){super();let{name:t,metrics:n}=e;this.metric=n.registerMetric(t),this.updateComponentMetric()}set(e,t){return super.set(e,t),this.updateComponentMetric(),this}delete(e){let t=super.delete(e);return this.updateComponentMetric(),t}clear(){super.clear(),this.updateComponentMetric()}updateComponentMetric(){this.metric.update(this.size)}};function Hl(r){let{name:e,metrics:t}=r,n;return t!=null?n=new F3({name:e,metrics:t}):n=new Mt,n}var ki=class{full;pendingBytes;wantlist;blocks;blockPresences;constructor(e=!1,t=0){this.full=e,this.wantlist=new Map,this.blocks=new Map,this.blockPresences=new Map,this.pendingBytes=0}addWantlistEntry(e,t){let n=St.encode(e.multihash.bytes);this.wantlist.set(n,t)}addBlockPresence(e,t){let n=St.encode(e.multihash.bytes);this.blockPresences.set(n,t)}addBlock(e,t){let n=St.encode(e.multihash.bytes);this.blocks.set(n,t)}};function iD(r){let e=new Uint8Array(r.reduce((n,i)=>n+ve(i),0)),t=0;for(let n of r)e=Ze(n,e,t),t+=ve(n);return e}var lw=iD;function U3(r){return lw([r.version,r.code,r.multihash.code,r.multihash.digest.byteLength])}var _f=class{peerId;blockstore;network;wants;exchangeCount;bytesSent;bytesReceived;lastExchange;maxSizeReplaceHasWithBlock;log;constructor(e,t){this.peerId=e.peerId,this.blockstore=e.blockstore,this.network=e.network,this.wants=new Map,this.log=e.logger.forComponent(`helia:bitswap:ledger:${e.peerId}`),this.exchangeCount=0,this.bytesSent=0,this.bytesReceived=0,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock??1024}sentBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesSent+=e}receivedBytes(e){this.exchangeCount++,this.lastExchange=new Date().getTime(),this.bytesReceived+=e}debtRatio(){return this.bytesSent/(this.bytesReceived+1)}async sendBlocksToPeer(e){let t=new ki,n=new Set;for(let[i,o]of this.wants.entries())try{let s=await this.blockstore.get(o.cid,e);o.wantType===yt.WantHave?s.byteLength<this.maxSizeReplaceHasWithBlock?(this.log("sending have and block for %c",o.cid),n.add(i),t.addBlock(o.cid,{data:s,prefix:U3(o.cid)})):(this.log("sending have for %c",o.cid),t.addBlockPresence(o.cid,{cid:o.cid.bytes,type:sn.HaveBlock})):(this.log("sending block for %c",o.cid),n.add(i),t.addBlock(o.cid,{data:s,prefix:U3(o.cid)}))}catch(s){if(s.name!=="NotFoundError")throw s;if(this.log("do not have block for %c",o.cid),!o.sendDontHave||o.sentDoNotHave===!0)continue;o.sentDoNotHave=!0,t.addBlockPresence(o.cid,{cid:o.cid.bytes,type:sn.DoNotHaveBlock})}if(t.blocks.size>0||t.blockPresences.size>0){this.log("sending message"),await this.network.sendMessage(this.peerId,t,e),this.log("sent message"),this.sentBytes([...t.blocks.values()].reduce((i,o)=>i+o.data.byteLength,0));for(let i of n)this.wants.delete(i)}}};var kf=class{blockstore;network;ledgerMap;maxSizeReplaceHasWithBlock;log;logger;constructor(e,t={}){this.blockstore=e.blockstore,this.network=e.network,this.maxSizeReplaceHasWithBlock=t.maxSizeReplaceHasWithBlock,this.log=e.logger.forComponent("helia:bitswap:peer-want-lists"),this.logger=e.logger,this.ledgerMap=Hl({name:"helia_bitswap_ledger_map",metrics:e.metrics}),this.network.addEventListener("bitswap:message",n=>{this.receiveMessage(n.detail.peer,n.detail.message).catch(i=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,i)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}ledgerForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return{peer:t.peerId,value:t.debtRatio(),sent:t.bytesSent,received:t.bytesReceived,exchanged:t.exchangeCount}}wantListForPeer(e){let t=this.ledgerMap.get(e);if(t!=null)return[...t.wants.values()]}peers(){return Array.from(this.ledgerMap.values()).map(e=>e.peerId)}async receiveMessage(e,t){let n=this.ledgerMap.get(e);if(n==null&&(n=new _f({peerId:e,blockstore:this.blockstore,network:this.network,logger:this.logger},{maxSizeReplaceHasWithBlock:this.maxSizeReplaceHasWithBlock}),this.ledgerMap.set(e,n)),n.receivedBytes(t.blocks?.reduce((i,o)=>i+o.data.byteLength,0)??0),t.wantlist!=null){t.wantlist.full===!0&&n.wants.clear();for(let i of t.wantlist.entries){let o=B.decode(i.cid),s=U(o.multihash.bytes,"base64");i.cancel===!0?(this.log("peer %p cancelled want of block for %c",e,o),n.wants.delete(s)):(i.wantType===yt.WantHave?this.log("peer %p wanted block presence for %c",e,o):this.log("peer %p wanted block for %c",e,o),n.wants.set(s,{cid:o,priority:i.priority,wantType:i.wantType??yt.WantBlock,sendDontHave:i.sendDontHave??!1}))}}this.log("send blocks to peer"),await n.sendBlocksToPeer()}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),i=[];for(let o of this.ledgerMap.values())o.wants.has(n)&&i.push(o);await Promise.all(i.map(async o=>o.sendBlocksToPeer(t)))}peerDisconnected(e){this.ledgerMap.delete(e)}};function oD(r,e){try{if(typeof r=="string"&&r.length>0)return sD(r);if(typeof r=="number"&&isFinite(r))return e?.long?cD(r):aD(r);throw new Error("Value is not a string or number.")}catch(t){let n=lD(t)?`${t.message}. value=${JSON.stringify(r)}`:"An unknown error has occured.";throw new Error(n)}}function sD(r){if(r=String(r),r.length>100)throw new Error("Value exceeds the maximum length of 100 characters.");let e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(!e)return NaN;let t=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return t*315576e5;case"weeks":case"week":case"w":return t*6048e5;case"days":case"day":case"d":return t*864e5;case"hours":case"hour":case"hrs":case"hr":case"h":return t*36e5;case"minutes":case"minute":case"mins":case"min":case"m":return t*6e4;case"seconds":case"second":case"secs":case"sec":case"s":return t*1e3;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:throw new Error(`The unit ${n} was matched, but no matching case exists.`)}}var Pf=oD;function aD(r){let e=Math.abs(r);return e>=864e5?`${Math.round(r/864e5)}d`:e>=36e5?`${Math.round(r/36e5)}h`:e>=6e4?`${Math.round(r/6e4)}m`:e>=1e3?`${Math.round(r/1e3)}s`:`${r}ms`}function cD(r){let e=Math.abs(r);return e>=864e5?Cf(r,e,864e5,"day"):e>=36e5?Cf(r,e,36e5,"hour"):e>=6e4?Cf(r,e,6e4,"minute"):e>=1e3?Cf(r,e,1e3,"second"):`${r} ms`}function Cf(r,e,t,n){let i=e>=t*1.5;return`${Math.round(r/t)} ${n}${i?"s":""}`}function lD(r){return typeof r=="object"&&r!==null&&"message"in r}function H3(r){t.debug=t,t.default=t,t.coerce=c,t.disable=o,t.enable=i,t.enabled=s,t.humanize=Pf,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 h=0;h<u.length;h++)d=(d<<5)-d+u.charCodeAt(h),d|=0;return t.colors[Math.abs(d)%t.colors.length]}t.selectColor=e;function t(u){let d,h=null,f,p;function m(...g){if(!m.enabled)return;let y=m,w=Number(new Date),x=w-(d||w);y.diff=x,y.prev=d,y.curr=w,d=w,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let b=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(k,E)=>{if(k==="%%")return"%";b++;let S=t.formatters[E];if(typeof S=="function"){let T=g[b];k=S.call(y,T),g.splice(b,1),b--}return k}),t.formatArgs.call(y,g),(y.log||t.log).apply(y,g)}return m.namespace=u,m.useColors=t.useColors(),m.color=t.selectColor(u),m.extend=n,m.destroy=t.destroy,Object.defineProperty(m,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(f!==t.namespaces&&(f=t.namespaces,p=t.enabled(u)),p),set:g=>{h=g}}),typeof t.init=="function"&&t.init(m),m}function n(u,d){let h=t(this.namespace+(typeof d>"u"?":":d)+u);return h.log=this.log,h}function i(u){t.save(u),t.namespaces=u,t.names=[],t.skips=[];let d,h=(typeof u=="string"?u:"").split(/[\s,]+/),f=h.length;for(d=0;d<f;d++)h[d]&&(u=h[d].replace(/\*/g,".*?"),u[0]==="-"?t.skips.push(new RegExp("^"+u.substr(1)+"$")):t.names.push(new RegExp("^"+u+"$")))}function o(){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,h;for(d=0,h=t.skips.length;d<h;d++)if(t.skips[d].test(u))return!1;for(d=0,h=t.names.length;d<h;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 Rf=gD(),uD=["#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 dD(){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 fD(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Pf(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,i=>{i!=="%%"&&(t++,i==="%c"&&(n=t))}),r.splice(n,0,e)}var hD=console.debug??console.log??(()=>{});function pD(r){try{r?Rf?.setItem("debug",r):Rf?.removeItem("debug")}catch{}}function mD(){let r;try{r=Rf?.getItem("debug")}catch{}return!r&&typeof globalThis.process<"u"&&"env"in globalThis.process&&(r=globalThis.process.env.DEBUG),r}function gD(){try{return localStorage}catch{}}function yD(r){r.j=function(e){try{return JSON.stringify(e)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}}var uw=H3({formatArgs:fD,save:pD,load:mD,useColors:dD,setupFormatters:yD,colors:uD,storage:Rf,log:hD});var kr=uw;kr.formatters.b=r=>r==null?"undefined":ye.baseEncode(r);kr.formatters.t=r=>r==null?"undefined":kt.baseEncode(r);kr.formatters.m=r=>r==null?"undefined":St.baseEncode(r);kr.formatters.p=r=>r==null?"undefined":r.toString();kr.formatters.c=r=>r==null?"undefined":r.toString();kr.formatters.k=r=>r==null?"undefined":r.toString();kr.formatters.a=r=>r==null?"undefined":r.toString();kr.formatters.e=r=>r==null?"undefined":dw(r.stack)??dw(r.message)??r.toString();function wD(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 fw(r){return{forComponent(e){return we(`${r}:${e}`)}}}function So(){return{forComponent(r){return we(r)}}}function we(r){let e=wD(`${r}:trace`);return kr.enabled(`${r}:trace`)&&kr.names.map(t=>t.toString()).find(t=>t.includes(":trace"))!=null&&(e=kr(`${r}:trace`)),Object.assign(kr(r),{error:kr(`${r}:error`),trace:e})}function dw(r){if(r!=null&&(r=r.trim(),r.length!==0))return r}var $3=ut(pw(),1);var $l=class extends Error{constructor(e){super(e),this.name="TimeoutError"}},V3=class extends Error{constructor(e){super(),this.name="AbortError",this.message=e}},mw=r=>globalThis.DOMException===void 0?new V3(r):new DOMException(r),gw=r=>{let e=r.reason===void 0?mw("This operation was aborted."):r.reason;return e instanceof Error?e:mw(e)};function Dn(r,e){let{milliseconds:t,fallback:n,message:i,customTimers:o={setTimeout,clearTimeout}}=e,s,a,l=new Promise((u,d)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){let{signal:f}=e;f.aborted&&d(gw(f)),a=()=>{d(gw(f))},f.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(u,d);return}let h=new $l;s=o.setTimeout.call(void 0,()=>{if(n){try{u(n())}catch(f){d(f)}return}typeof r.cancel=="function"&&r.cancel(),i===!1?u():i instanceof Error?d(i):(h.message=i??`Promise timed out after ${t} milliseconds`,d(h))},t),(async()=>{try{u(await r)}catch(f){d(f)}})()}).finally(()=>{l.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return l.clear=()=>{o.clearTimeout.call(void 0,s),s=void 0},l}function q3(r,e,t){let n=0,i=r.length;for(;i>0;){let o=Math.trunc(i/2),s=n+o;t(r[s],e)<=0?(n=++s,i-=o+1):i=o}return n}var Vl=class{#e=[];enqueue(e,t){t={priority:0,...t};let n={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(n);return}let i=q3(this.#e,n,(o,s)=>s.priority-o.priority);this.#e.splice(i,0,n)}setPriority(e,t){let n=this.#e.findIndex(o=>o.id===e);if(n===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);let[i]=this.#e.splice(n,1);this.enqueue(i.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 Cr=class extends $3.default{#e;#r;#n=0;#m;#u;#A=0;#y;#a;#s;#c;#i=0;#t;#l;#w;#p=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Vl,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#r=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#m=e.intervalCap,this.#u=e.interval,this.#s=new e.queueClass,this.#c=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#w=e.throwOnTimeout===!0,this.#l=e.autoStart===!1}get#d(){return this.#r||this.#n<this.#m}get#b(){return this.#i<this.#t}#f(){this.#i--,this.#g(),this.emit("next")}#v(){this.#T(),this.#x(),this.#a=void 0}get#E(){let e=Date.now();if(this.#y===void 0){let t=this.#A-e;if(t<0)this.#n=this.#e?this.#i:0;else return this.#a===void 0&&(this.#a=setTimeout(()=>{this.#v()},t)),!0}return!1}#g(){if(this.#s.size===0)return this.#y&&clearInterval(this.#y),this.#y=void 0,this.emit("empty"),this.#i===0&&this.emit("idle"),!1;if(!this.#l){let e=!this.#E;if(this.#d&&this.#b){let t=this.#s.dequeue();return t?(this.emit("active"),t(),e&&this.#x(),!0):!1}}return!1}#x(){this.#r||this.#y!==void 0||(this.#y=setInterval(()=>{this.#T()},this.#u),this.#A=Date.now()+this.#u)}#T(){this.#n===0&&this.#i===0&&this.#y&&(clearInterval(this.#y),this.#y=void 0),this.#n=this.#e?this.#i:0,this.#h()}#h(){for(;this.#g(););}get concurrency(){return this.#t}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.#t=e,this.#h()}async#R(e){return new Promise((t,n)=>{e.addEventListener("abort",()=>{n(e.reason)},{once:!0})})}setPriority(e,t){this.#s.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#p++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#w,...t},new Promise((n,i)=>{this.#s.enqueue(async()=>{this.#i++,this.#n++;try{t.signal?.throwIfAborted();let o=e({signal:t.signal});t.timeout&&(o=Dn(Promise.resolve(o),{milliseconds:t.timeout})),t.signal&&(o=Promise.race([o,this.#R(t.signal)]));let s=await o;n(s),this.emit("completed",s)}catch(o){if(o instanceof $l&&!t.throwOnTimeout){n();return}i(o),this.emit("error",o)}finally{this.#f()}},t),this.emit("add"),this.#g()})}async addAll(e,t){return Promise.all(e.map(async n=>this.add(n,t)))}start(){return this.#l?(this.#l=!1,this.#h(),this):this}pause(){this.#l=!0}clear(){this.#s=new this.#c}async onEmpty(){this.#s.size!==0&&await this.#C("empty")}async onSizeLessThan(e){this.#s.size<e||await this.#C("next",()=>this.#s.size<e)}async onIdle(){this.#i===0&&this.#s.size===0||await this.#C("idle")}async#C(e,t){return new Promise(n=>{let i=()=>{t&&!t()||(this.off(e,i),n())};this.on(e,i)})}get size(){return this.#s.size}sizeBy(e){return this.#s.filter(e).length}get pending(){return this.#i}get isPaused(){return this.#l}};function Nf(r){let e=[ar.A];return r==null?e:Array.isArray(r)?r.length===0?e:r:[r]}var K3=60;function Lf(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:ar[e.type]})),Answer:(r.Answer??r.answers??[]).map(e=>({name:e.name,type:ar[e.type],TTL:e.TTL??e.ttl??K3,data:e.data instanceof Uint8Array?U(e.data):e.data}))}}var vD=4;function G3(r,e={}){let t=new Cr({concurrency:e.queryConcurrency??vD});return async(n,i={})=>{let o=new URLSearchParams;o.set("name",n),Nf(i.types).forEach(a=>{o.append("type",ar[a])}),i.onProgress?.(new M("dns:query",{detail:n}));let s=await t.add(async()=>{let a=await fetch(`${r}?${o}`,{headers:{accept:"application/dns-json"},signal:i?.signal});if(a.status!==200)throw new Error(`Unexpected HTTP status: ${a.status} - ${a.statusText}`);let c=Lf(await a.json());return i.onProgress?.(new M("dns:response",{detail:c})),c},{signal:i.signal});if(s==null)throw new Error("No DNS response received");return s}}function yw(){return[G3("https://cloudflare-dns.com/dns-query"),G3("https://dns.google/resolve")]}var xw=ut(W3(),1);var Y3=class{lru;constructor(e){this.lru=(0,xw.default)(e)}get(e,t){let n=!0,i=[];for(let o of t){let s=this.getAnswers(e,o);if(s.length===0){n=!1;break}i.push(...s)}if(n)return Lf({answers:i})}getAnswers(e,t){let n=`${e.toLowerCase()}-${t}`,i=this.lru.get(n);if(i!=null){let o=i.filter(s=>s.expires>Date.now()).map(({expires:s,value:a})=>({...a,TTL:Math.round((s-Date.now())/1e3),type:ar[a.type]}));return o.length===0&&this.lru.remove(n),o}return[]}add(e,t){let n=`${e.toLowerCase()}-${t.type}`,i=this.lru.get(n)??[];i.push({expires:Date.now()+(t.TTL??K3)*1e3,value:t}),this.lru.set(n,i)}remove(e,t){let n=`${e.toLowerCase()}-${t}`;this.lru.remove(n)}clear(){this.lru.clear()}};function bw(r){return new Y3(r)}var ED=1e3,Of=class{resolvers;cache;constructor(e){this.resolvers={},this.cache=bw(e.cacheSize??ED),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["."]=yw())}async query(e,t={}){let n=Nf(t.types),i=t.cached!==!1?this.cache.get(e,n):void 0;if(i!=null)return t.onProgress?.(new M("dns:cache",{detail:i})),i;let o=`${e.split(".").pop()}.`,s=(this.resolvers[o]??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,types:n});for(let u of l.Answer)this.cache.add(e,u);return l}catch(l){a.push(l),t.onProgress?.(new M("dns:error",{detail:l}))}}throw a.length===1?a[0]:new AggregateError(a,`DNS lookup of ${e} ${n} failed`)}};var ar;(function(r){r[r.A=1]="A",r[r.CNAME=5]="CNAME",r[r.TXT=16]="TXT",r[r.AAAA=28]="AAAA"})(ar||(ar={}));function ks(r={}){return new Of(r)}var SD=["string","number","bigint","symbol"],AD=["Function","Generator","AsyncGenerator","GeneratorFunction","AsyncGeneratorFunction","AsyncFunction","Observable","Array","Buffer","Object","RegExp","Date","Error","Map","Set","WeakMap","WeakSet","ArrayBuffer","SharedArrayBuffer","DataView","Promise","URL","HTMLElement","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"];function vw(r){if(r===null)return"null";if(r===void 0)return"undefined";if(r===!0||r===!1)return"boolean";let e=typeof r;if(SD.includes(e))return e;if(e==="function")return"Function";if(Array.isArray(r))return"Array";if(TD(r))return"Buffer";let t=ID(r);return t||"Object"}function TD(r){return r&&r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer.call(null,r)}function ID(r){let e=Object.prototype.toString.call(r).slice(8,-1);if(AD.includes(e))return e}var v=class{constructor(e,t,n){this.major=e,this.majorEncoded=e<<5,this.name=t,this.terminal=n}toString(){return`Type[${this.major}].${this.name}`}compare(e){return this.major<e.major?-1:this.major>e.major?1:0}};v.uint=new v(0,"uint",!0);v.negint=new v(1,"negint",!0);v.bytes=new v(2,"bytes",!0);v.string=new v(3,"string",!0);v.array=new v(4,"array",!1);v.map=new v(5,"map",!1);v.tag=new v(6,"tag",!1);v.float=new v(7,"float",!0);v.false=new v(7,"false",!0);v.true=new v(7,"true",!0);v.null=new v(7,"null",!0);v.undefined=new v(7,"undefined",!0);v.break=new v(7,"break",!0);var z=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 Ka=globalThis.process&&!globalThis.process.browser&&globalThis.Buffer&&typeof globalThis.Buffer.isBuffer=="function",_D=new TextDecoder,kD=new TextEncoder;function Bf(r){return Ka&&globalThis.Buffer.isBuffer(r)}function ql(r){return r instanceof Uint8Array?Bf(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):r:Uint8Array.from(r)}var Tw=Ka?(r,e,t)=>t-e>64?globalThis.Buffer.from(r.subarray(e,t)).toString("utf8"):Sw(r,e,t):(r,e,t)=>t-e>64?_D.decode(r.subarray(e,t)):Sw(r,e,t),Mf=Ka?r=>r.length>64?globalThis.Buffer.from(r):Ew(r):r=>r.length>64?kD.encode(r):Ew(r),si=r=>Uint8Array.from(r),Ga=Ka?(r,e,t)=>Bf(r)?new Uint8Array(r.subarray(e,t)):r.slice(e,t):(r,e,t)=>r.slice(e,t),Iw=Ka?(r,e)=>(r=r.map(t=>t instanceof Uint8Array?t:globalThis.Buffer.from(t)),ql(globalThis.Buffer.concat(r,e))):(r,e)=>{let t=new Uint8Array(e),n=0;for(let i of r)n+i.length>t.length&&(i=i.subarray(0,t.length-n)),t.set(i,n),n+=i.length;return t},_w=Ka?r=>globalThis.Buffer.allocUnsafe(r):r=>new Uint8Array(r);function kw(r,e){if(Bf(r)&&Bf(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 Ew(r){let e=[],t=0;for(let n=0;n<r.length;n++){let i=r.charCodeAt(n);i<128?e[t++]=i:i<2048?(e[t++]=i>>6|192,e[t++]=i&63|128):(i&64512)===55296&&n+1<r.length&&(r.charCodeAt(n+1)&64512)===56320?(i=65536+((i&1023)<<10)+(r.charCodeAt(++n)&1023),e[t++]=i>>18|240,e[t++]=i>>12&63|128,e[t++]=i>>6&63|128,e[t++]=i&63|128):(e[t++]=i>>12|224,e[t++]=i>>6&63|128,e[t++]=i&63|128)}return e}function Sw(r,e,t){let n=[];for(;e<t;){let i=r[e],o=null,s=i>239?4:i>223?3:i>191?2:1;if(e+s<=t){let a,c,l,u;switch(s){case 1:i<128&&(o=i);break;case 2:a=r[e+1],(a&192)===128&&(u=(i&31)<<6|a&63,u>127&&(o=u));break;case 3:a=r[e+1],c=r[e+2],(a&192)===128&&(c&192)===128&&(u=(i&15)<<12|(a&63)<<6|c&63,u>2047&&(u<55296||u>57343)&&(o=u));break;case 4:a=r[e+1],c=r[e+2],l=r[e+3],(a&192)===128&&(c&192)===128&&(l&192)===128&&(u=(i&15)<<18|(a&63)<<12|(c&63)<<6|l&63,u>65535&&u<1114112&&(o=u))}}o===null?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|o&1023),n.push(o),e+=s}return X3(n)}var Aw=4096;function X3(r){let e=r.length;if(e<=Aw)return String.fromCharCode.apply(String,r);let t="",n=0;for(;n<e;)t+=String.fromCharCode.apply(String,r.slice(n,n+=Aw));return t}var CD=256,Kl=class{constructor(e=CD){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 i=t.length-(this.maxCursor-this.cursor)-1;t.set(e,i)}else{if(t){let i=t.length-(this.maxCursor-this.cursor)-1;i<t.length&&(this.chunks[this.chunks.length-1]=t.subarray(0,i),this.maxCursor=this.cursor-1)}e.length<64&&e.length<this.chunkSize?(t=_w(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=Ga(n,0,this.cursor)}else t=Iw(this.chunks,this.cursor);return e&&this.reset(),t}};var Q="CBOR decode error:",Ci="CBOR encode error:",Gl=[];Gl[23]=1;Gl[24]=2;Gl[25]=3;Gl[26]=5;Gl[27]=9;function Pi(r,e,t){if(r.length-e<t)throw new Error(`${Q} not enough data for type`)}var Ft=[24,256,65536,4294967296,BigInt("18446744073709551616")];function Vr(r,e,t){Pi(r,e,1);let n=r[e];if(t.strict===!0&&n<Ft[0])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function qr(r,e,t){Pi(r,e,2);let n=r[e]<<8|r[e+1];if(t.strict===!0&&n<Ft[1])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function Kr(r,e,t){Pi(r,e,4);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3];if(t.strict===!0&&n<Ft[2])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);return n}function Gr(r,e,t){Pi(r,e,8);let n=r[e]*16777216+(r[e+1]<<16)+(r[e+2]<<8)+r[e+3],i=r[e+4]*16777216+(r[e+5]<<16)+(r[e+6]<<8)+r[e+7],o=(BigInt(n)<<BigInt(32))+BigInt(i);if(t.strict===!0&&o<Ft[3])throw new Error(`${Q} integer encoded in more bytes than necessary (strict decode)`);if(o<=Number.MAX_SAFE_INTEGER)return Number(o);if(t.allowBigInt===!0)return o;throw new Error(`${Q} integers outside of the safe integer range are not supported`)}function Cw(r,e,t,n){return new z(v.uint,Vr(r,e+1,n),2)}function Pw(r,e,t,n){return new z(v.uint,qr(r,e+1,n),3)}function Rw(r,e,t,n){return new z(v.uint,Kr(r,e+1,n),5)}function Dw(r,e,t,n){return new z(v.uint,Gr(r,e+1,n),9)}function dn(r,e){return Gt(r,0,e.value)}function Gt(r,e,t){if(t<Ft[0]){let n=Number(t);r.push([e|n])}else if(t<Ft[1]){let n=Number(t);r.push([e|24,n])}else if(t<Ft[2]){let n=Number(t);r.push([e|25,n>>>8,n&255])}else if(t<Ft[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<Ft[4]){let i=[e|27,0,0,0,0,0,0,0],o=Number(n&BigInt(4294967295)),s=Number(n>>BigInt(32)&BigInt(4294967295));i[8]=o&255,o=o>>8,i[7]=o&255,o=o>>8,i[6]=o&255,o=o>>8,i[5]=o&255,i[4]=s&255,s=s>>8,i[3]=s&255,s=s>>8,i[2]=s&255,s=s>>8,i[1]=s&255,r.push(i)}else throw new Error(`${Q} encountered BigInt larger than allowable range`)}}dn.encodedSize=function(e){return Gt.encodedSize(e.value)};Gt.encodedSize=function(e){return e<Ft[0]?1:e<Ft[1]?2:e<Ft[2]?3:e<Ft[3]?5:9};dn.compareTokens=function(e,t){return e.value<t.value?-1:e.value>t.value?1:0};function Nw(r,e,t,n){return new z(v.negint,-1-Vr(r,e+1,n),2)}function Lw(r,e,t,n){return new z(v.negint,-1-qr(r,e+1,n),3)}function Ow(r,e,t,n){return new z(v.negint,-1-Kr(r,e+1,n),5)}var j3=BigInt(-1),Bw=BigInt(1);function Mw(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i!="bigint"){let o=-1-i;if(o>=Number.MIN_SAFE_INTEGER)return new z(v.negint,o,9)}if(n.allowBigInt!==!0)throw new Error(`${Q} integers outside of the safe integer range are not supported`);return new z(v.negint,j3-BigInt(i),9)}function Ff(r,e){let t=e.value,n=typeof t=="bigint"?t*j3-Bw:t*-1-1;Gt(r,e.type.majorEncoded,n)}Ff.encodedSize=function(e){let t=e.value,n=typeof t=="bigint"?t*j3-Bw:t*-1-1;return n<Ft[0]?1:n<Ft[1]?2:n<Ft[2]?3:n<Ft[3]?5:9};Ff.compareTokens=function(e,t){return e.value<t.value?1:e.value>t.value?-1:0};function Wl(r,e,t,n){Pi(r,e,t+n);let i=Ga(r,e+t,e+t+n);return new z(v.bytes,i,t+n)}function Fw(r,e,t,n){return Wl(r,e,1,t)}function Uw(r,e,t,n){return Wl(r,e,2,Vr(r,e+1,n))}function Hw(r,e,t,n){return Wl(r,e,3,qr(r,e+1,n))}function zw(r,e,t,n){return Wl(r,e,5,Kr(r,e+1,n))}function $w(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i=="bigint")throw new Error(`${Q} 64-bit integer bytes lengths not supported`);return Wl(r,e,9,i)}function Uf(r){return r.encodedBytes===void 0&&(r.encodedBytes=r.type===v.string?Mf(r.value):r.value),r.encodedBytes}function Wa(r,e){let t=Uf(e);Gt(r,e.type.majorEncoded,t.length),r.push(t)}Wa.encodedSize=function(e){let t=Uf(e);return Gt.encodedSize(t.length)+t.length};Wa.compareTokens=function(e,t){return RD(Uf(e),Uf(t))};function RD(r,e){return r.length<e.length?-1:r.length>e.length?1:kw(r,e)}function Yl(r,e,t,n,i){let o=t+n;Pi(r,e,o);let s=new z(v.string,Tw(r,e+t,e+o),o);return i.retainStringBytes===!0&&(s.byteValue=Ga(r,e+t,e+o)),s}function Vw(r,e,t,n){return Yl(r,e,1,t,n)}function qw(r,e,t,n){return Yl(r,e,2,Vr(r,e+1,n),n)}function Kw(r,e,t,n){return Yl(r,e,3,qr(r,e+1,n),n)}function Gw(r,e,t,n){return Yl(r,e,5,Kr(r,e+1,n),n)}function Ww(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i=="bigint")throw new Error(`${Q} 64-bit integer string lengths not supported`);return Yl(r,e,9,i,n)}var Yw=Wa;function Ya(r,e,t,n){return new z(v.array,n,t)}function Xw(r,e,t,n){return Ya(r,e,1,t)}function jw(r,e,t,n){return Ya(r,e,2,Vr(r,e+1,n))}function Qw(r,e,t,n){return Ya(r,e,3,qr(r,e+1,n))}function Zw(r,e,t,n){return Ya(r,e,5,Kr(r,e+1,n))}function Jw(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i=="bigint")throw new Error(`${Q} 64-bit integer array lengths not supported`);return Ya(r,e,9,i)}function e9(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return Ya(r,e,1,1/0)}function Hf(r,e){Gt(r,v.array.majorEncoded,e.value)}Hf.compareTokens=dn.compareTokens;Hf.encodedSize=function(e){return Gt.encodedSize(e.value)};function Xa(r,e,t,n){return new z(v.map,n,t)}function t9(r,e,t,n){return Xa(r,e,1,t)}function r9(r,e,t,n){return Xa(r,e,2,Vr(r,e+1,n))}function n9(r,e,t,n){return Xa(r,e,3,qr(r,e+1,n))}function i9(r,e,t,n){return Xa(r,e,5,Kr(r,e+1,n))}function o9(r,e,t,n){let i=Gr(r,e+1,n);if(typeof i=="bigint")throw new Error(`${Q} 64-bit integer map lengths not supported`);return Xa(r,e,9,i)}function s9(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return Xa(r,e,1,1/0)}function zf(r,e){Gt(r,v.map.majorEncoded,e.value)}zf.compareTokens=dn.compareTokens;zf.encodedSize=function(e){return Gt.encodedSize(e.value)};function a9(r,e,t,n){return new z(v.tag,t,1)}function c9(r,e,t,n){return new z(v.tag,Vr(r,e+1,n),2)}function l9(r,e,t,n){return new z(v.tag,qr(r,e+1,n),3)}function u9(r,e,t,n){return new z(v.tag,Kr(r,e+1,n),5)}function d9(r,e,t,n){return new z(v.tag,Gr(r,e+1,n),9)}function $f(r,e){Gt(r,v.tag.majorEncoded,e.value)}$f.compareTokens=dn.compareTokens;$f.encodedSize=function(e){return Gt.encodedSize(e.value)};var MD=20,FD=21,UD=22,HD=23;function f9(r,e,t,n){if(n.allowUndefined===!1)throw new Error(`${Q} undefined values are not supported`);return n.coerceUndefinedToNull===!0?new z(v.null,null,1):new z(v.undefined,void 0,1)}function h9(r,e,t,n){if(n.allowIndefinite===!1)throw new Error(`${Q} indefinite length items not allowed`);return new z(v.break,void 0,1)}function Q3(r,e,t){if(t){if(t.allowNaN===!1&&Number.isNaN(r))throw new Error(`${Q} NaN values are not supported`);if(t.allowInfinity===!1&&(r===1/0||r===-1/0))throw new Error(`${Q} Infinity values are not supported`)}return new z(v.float,r,e)}function p9(r,e,t,n){return Q3(Z3(r,e+1),3,n)}function m9(r,e,t,n){return Q3(J3(r,e+1),5,n)}function g9(r,e,t,n){return Q3(b9(r,e+1),9,n)}function Vf(r,e,t){let n=e.value;if(n===!1)r.push([v.float.majorEncoded|MD]);else if(n===!0)r.push([v.float.majorEncoded|FD]);else if(n===null)r.push([v.float.majorEncoded|UD]);else if(n===void 0)r.push([v.float.majorEncoded|HD]);else{let i,o=!1;(!t||t.float64!==!0)&&(w9(n),i=Z3(Nn,1),n===i||Number.isNaN(n)?(Nn[0]=249,r.push(Nn.slice(0,3)),o=!0):(x9(n),i=J3(Nn,1),n===i&&(Nn[0]=250,r.push(Nn.slice(0,5)),o=!0))),o||(zD(n),i=b9(Nn,1),Nn[0]=251,r.push(Nn.slice(0,9)))}}Vf.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){w9(n);let i=Z3(Nn,1);if(n===i||Number.isNaN(n))return 3;if(x9(n),i=J3(Nn,1),n===i)return 5}return 9};var y9=new ArrayBuffer(9),fn=new DataView(y9,1),Nn=new Uint8Array(y9,0);function w9(r){if(r===1/0)fn.setUint16(0,31744,!1);else if(r===-1/0)fn.setUint16(0,64512,!1);else if(Number.isNaN(r))fn.setUint16(0,32256,!1);else{fn.setFloat32(0,r);let e=fn.getUint32(0),t=(e&2139095040)>>23,n=e&8388607;if(t===255)fn.setUint16(0,31744,!1);else if(t===0)fn.setUint16(0,(r&2147483648)>>16|n>>13,!1);else{let i=t-127;i<-24?fn.setUint16(0,0):i<-14?fn.setUint16(0,(e&2147483648)>>16|1<<24+i,!1):fn.setUint16(0,(e&2147483648)>>16|i+15<<10|n>>13,!1)}}}function Z3(r,e){if(r.length-e<2)throw new Error(`${Q} not enough data for float16`);let t=(r[e]<<8)+r[e+1];if(t===31744)return 1/0;if(t===64512)return-1/0;if(t===32256)return NaN;let n=t>>10&31,i=t&1023,o;return n===0?o=i*2**-24:n!==31?o=(i+1024)*2**(n-25):o=i===0?1/0:NaN,t&32768?-o:o}function x9(r){fn.setFloat32(0,r,!1)}function J3(r,e){if(r.length-e<4)throw new Error(`${Q} not enough data for float32`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,4).getFloat32(0,!1)}function zD(r){fn.setFloat64(0,r,!1)}function b9(r,e){if(r.length-e<8)throw new Error(`${Q} not enough data for float64`);let t=(r.byteOffset||0)+e;return new DataView(r.buffer,t,8).getFloat64(0,!1)}Vf.compareTokens=dn.compareTokens;function ke(r,e,t){throw new Error(`${Q} encountered invalid minor (${t}) for major ${r[e]>>>5}`)}function qf(r){return()=>{throw new Error(`${Q} ${r}`)}}var V=[];for(let r=0;r<=23;r++)V[r]=ke;V[24]=Cw;V[25]=Pw;V[26]=Rw;V[27]=Dw;V[28]=ke;V[29]=ke;V[30]=ke;V[31]=ke;for(let r=32;r<=55;r++)V[r]=ke;V[56]=Nw;V[57]=Lw;V[58]=Ow;V[59]=Mw;V[60]=ke;V[61]=ke;V[62]=ke;V[63]=ke;for(let r=64;r<=87;r++)V[r]=Fw;V[88]=Uw;V[89]=Hw;V[90]=zw;V[91]=$w;V[92]=ke;V[93]=ke;V[94]=ke;V[95]=qf("indefinite length bytes/strings are not supported");for(let r=96;r<=119;r++)V[r]=Vw;V[120]=qw;V[121]=Kw;V[122]=Gw;V[123]=Ww;V[124]=ke;V[125]=ke;V[126]=ke;V[127]=qf("indefinite length bytes/strings are not supported");for(let r=128;r<=151;r++)V[r]=Xw;V[152]=jw;V[153]=Qw;V[154]=Zw;V[155]=Jw;V[156]=ke;V[157]=ke;V[158]=ke;V[159]=e9;for(let r=160;r<=183;r++)V[r]=t9;V[184]=r9;V[185]=n9;V[186]=i9;V[187]=o9;V[188]=ke;V[189]=ke;V[190]=ke;V[191]=s9;for(let r=192;r<=215;r++)V[r]=a9;V[216]=c9;V[217]=l9;V[218]=u9;V[219]=d9;V[220]=ke;V[221]=ke;V[222]=ke;V[223]=ke;for(let r=224;r<=243;r++)V[r]=qf("simple values are not supported");V[244]=ke;V[245]=ke;V[246]=ke;V[247]=f9;V[248]=qf("simple values are not supported");V[249]=p9;V[250]=m9;V[251]=g9;V[252]=ke;V[253]=ke;V[254]=ke;V[255]=h9;var Ln=[];for(let r=0;r<24;r++)Ln[r]=new z(v.uint,r,1);for(let r=-1;r>=-24;r--)Ln[31-r]=new z(v.negint,r,1);Ln[64]=new z(v.bytes,new Uint8Array(0),1);Ln[96]=new z(v.string,"",1);Ln[128]=new z(v.array,0,1);Ln[160]=new z(v.map,0,1);Ln[244]=new z(v.false,!1,1);Ln[245]=new z(v.true,!0,1);Ln[246]=new z(v.null,null,1);function e4(r){switch(r.type){case v.false:return si([244]);case v.true:return si([245]);case v.null:return si([246]);case v.bytes:return r.value.length?void 0:si([64]);case v.string:return r.value===""?si([96]):void 0;case v.array:return r.value===0?si([128]):void 0;case v.map:return r.value===0?si([160]):void 0;case v.uint:return r.value<24?si([Number(r.value)]):void 0;case v.negint:if(r.value>=-24)return si([31-Number(r.value)])}}var VD={float64:!1,mapSorter:KD,quickEncodeToken:e4};function r4(){let r=[];return r[v.uint.major]=dn,r[v.negint.major]=Ff,r[v.bytes.major]=Wa,r[v.string.major]=Yw,r[v.array.major]=Hf,r[v.map.major]=zf,r[v.tag.major]=$f,r[v.float.major]=Vf,r}var v9=r4(),t4=new Kl,Kf=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(`${Ci} object contains circular references`);return new r(t,e)}},Ao={null:new z(v.null,null),undefined:new z(v.undefined,void 0),true:new z(v.true,!0),false:new z(v.false,!1),emptyArray:new z(v.array,0),emptyMap:new z(v.map,0)},To={number(r,e,t,n){return!Number.isInteger(r)||!Number.isSafeInteger(r)?new z(v.float,r):r>=0?new z(v.uint,r):new z(v.negint,r)},bigint(r,e,t,n){return r>=BigInt(0)?new z(v.uint,r):new z(v.negint,r)},Uint8Array(r,e,t,n){return new z(v.bytes,r)},string(r,e,t,n){return new z(v.string,r)},boolean(r,e,t,n){return r?Ao.true:Ao.false},null(r,e,t,n){return Ao.null},undefined(r,e,t,n){return Ao.undefined},ArrayBuffer(r,e,t,n){return new z(v.bytes,new Uint8Array(r))},DataView(r,e,t,n){return new z(v.bytes,new Uint8Array(r.buffer,r.byteOffset,r.byteLength))},Array(r,e,t,n){if(!r.length)return t.addBreakTokens===!0?[Ao.emptyArray,new z(v.break)]:Ao.emptyArray;n=Kf.createCheck(n,r);let i=[],o=0;for(let s of r)i[o++]=Xl(s,t,n);return t.addBreakTokens?[new z(v.array,r.length),i,new z(v.break)]:[new z(v.array,r.length),i]},Object(r,e,t,n){let i=e!=="Object",o=i?r.keys():Object.keys(r),s=i?r.size:o.length;if(!s)return t.addBreakTokens===!0?[Ao.emptyMap,new z(v.break)]:Ao.emptyMap;n=Kf.createCheck(n,r);let a=[],c=0;for(let l of o)a[c++]=[Xl(l,t,n),Xl(i?r.get(l):r[l],t,n)];return qD(a,t),t.addBreakTokens?[new z(v.map,s),a,new z(v.break)]:[new z(v.map,s),a]}};To.Map=To.Object;To.Buffer=To.Uint8Array;for(let r of"Uint8Clamped Uint16 Uint32 Int8 Int16 Int32 BigUint64 BigInt64 Float32 Float64".split(" "))To[`${r}Array`]=To.DataView;function Xl(r,e={},t){let n=vw(r),i=e&&e.typeEncoders&&e.typeEncoders[n]||To[n];if(typeof i=="function"){let s=i(r,n,e,t);if(s!=null)return s}let o=To[n];if(!o)throw new Error(`${Ci} unsupported type: ${n}`);return o(r,n,e,t)}function qD(r,e){e.mapSorter&&r.sort(e.mapSorter)}function KD(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 i=t.type.major,o=v9[i].compareTokens(t,n);return o===0&&console.warn("WARNING: complex key types used, CBOR key sorting guarantees are gone"),o}function E9(r,e,t,n){if(Array.isArray(e))for(let i of e)E9(r,i,t,n);else t[e.type.major](r,e,n)}function n4(r,e,t){let n=Xl(r,t);if(!Array.isArray(n)&&t.quickEncodeToken){let i=t.quickEncodeToken(n);if(i)return i;let o=e[n.type.major];if(o.encodedSize){let s=o.encodedSize(n,t),a=new Kl(s);if(o(a,n,t),a.chunks.length!==1)throw new Error(`Unexpected error: pre-calculated length for ${n} was wrong`);return ql(a.chunks[0])}}return t4.reset(),E9(t4,n,e,t),t4.toBytes(!0)}function Ri(r,e){return e=Object.assign({},VD,e),n4(r,v9,e)}var GD={strict:!1,allowIndefinite:!0,allowUndefined:!0,allowBigInt:!0},Gf=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=Ln[e];if(t===void 0){let n=V[e];if(!n)throw new Error(`${Q} no decoder for major type ${e>>>5} (byte 0x${e.toString(16).padStart(2,"0")})`);let i=e&31;t=n(this.data,this._pos,i,this.options)}return this._pos+=t.encodedLength,t}},jl=Symbol.for("DONE"),Wf=Symbol.for("BREAK");function WD(r,e,t){let n=[];for(let i=0;i<r.value;i++){let o=ja(e,t);if(o===Wf){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed array`)}if(o===jl)throw new Error(`${Q} found array but not enough entries (got ${i}, expected ${r.value})`);n[i]=o}return n}function YD(r,e,t){let n=t.useMaps===!0,i=n?void 0:{},o=n?new Map:void 0;for(let s=0;s<r.value;s++){let a=ja(e,t);if(a===Wf){if(r.value===1/0)break;throw new Error(`${Q} got unexpected break to lengthed map`)}if(a===jl)throw new Error(`${Q} found map but not enough entries (got ${s} [no key], expected ${r.value})`);if(n!==!0&&typeof a!="string")throw new Error(`${Q} non-string keys not supported (got ${typeof a})`);if(t.rejectDuplicateMapKeys===!0&&(n&&o.has(a)||!n&&a in i))throw new Error(`${Q} found repeat map key "${a}"`);let c=ja(e,t);if(c===jl)throw new Error(`${Q} found map but not enough entries (got ${s} [no value], expected ${r.value})`);n?o.set(a,c):i[a]=c}return n?o:i}function ja(r,e){if(r.done())return jl;let t=r.next();if(t.type===v.break)return Wf;if(t.type.terminal)return t.value;if(t.type===v.array)return WD(t,r,e);if(t.type===v.map)return YD(t,r,e);if(t.type===v.tag){if(e.tags&&typeof e.tags[t.value]=="function"){let n=ja(r,e);return e.tags[t.value](n)}throw new Error(`${Q} tag not supported (${t.value})`)}throw new Error("unsupported")}function i4(r,e){if(!(r instanceof Uint8Array))throw new Error(`${Q} data to decode must be a Uint8Array`);e=Object.assign({},GD,e);let t=e.tokenizer||new Gf(r,e),n=ja(t,e);if(n===jl)throw new Error(`${Q} did not find any content to decode`);if(n===Wf)throw new Error(`${Q} got unexpected break`);return[n,r.subarray(t.pos())]}function xr(r,e){let[t,n]=i4(r,e);if(n.length>0)throw new Error(`${Q} too many terminals, data makes no sense`);return t}var Di="/",S9=new TextEncoder().encode(Di),Yf=S9[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]!==Yf)throw new Error("Invalid key")}toString(e="utf8"){return U(this._buf,e)}uint8Array(){return this._buf}get[Symbol.toStringTag](){return`Key(${this.toString()})`}static withNamespaces(e){return new r(e.join(Di))}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=S9),this._buf[0]!==Yf){let e=new Uint8Array(this._buf.byteLength+1);e.fill(Yf,0,1),e.set(this._buf,1),this._buf=e}for(;this._buf.byteLength>1&&this._buf[this._buf.byteLength-1]===Yf;)this._buf=this._buf.subarray(0,-1)}less(e){let t=this.list(),n=e.list();for(let i=0;i<t.length;i++){if(n.length<i+1)return!1;let o=t[i],s=n[i];if(o<s)return!0;if(o>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(Di).slice(1)}type(){return XD(this.baseNamespace())}name(){return jD(this.baseNamespace())}instance(e){return new r(this.toString()+":"+e)}path(){let e=this.parent().toString();return e.endsWith(Di)||(e+=Di),e+=this.type(),new r(e)}parent(){let e=this.list();return e.length===1?new r(Di):new r(e.slice(0,-1).join(Di))}child(e){return this.toString()===Di?e:e.toString()===Di?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(),...QD(e.map(t=>t.namespaces()))])}};function XD(r){let e=r.split(":");return e.length<2?"":e.slice(0,-1).join(":")}function jD(r){let e=r.split(":");return e[e.length-1]}function QD(r){return[].concat(...r)}function Xf({enumerable:r=!0,configurable:e=!1}={}){return{enumerable:r,configurable:e,writable:!1}}function*ZD(r,e){if(e!=null&&typeof e=="object")if(Array.isArray(e))for(let[t,n]of e.entries()){let i=[...r,t],o=B.asCID(n);o!=null?yield[i.join("/"),o]:typeof n=="object"&&(yield*s4(n,i))}else{let t=B.asCID(e);t!=null?yield[r.join("/"),t]:yield*s4(e,r)}}function*s4(r,e){if(r==null||r instanceof Uint8Array)return;let t=B.asCID(r);t!=null&&(yield[e.join("/"),t]);for(let[n,i]of Object.entries(r)){let o=[...e,n];yield*ZD(o,i)}}function*JD(r,e){if(Array.isArray(e))for(let[t,n]of e.entries()){let i=[...r,t];yield i.join("/"),typeof n=="object"&&B.asCID(n)==null&&(yield*a4(n,i))}else yield*a4(e,r)}function*a4(r,e){if(!(r==null||typeof r!="object"))for(let[t,n]of Object.entries(r)){let i=[...e,t];yield i.join("/"),n!=null&&!(n instanceof Uint8Array)&&typeof n=="object"&&B.asCID(n)==null&&(yield*JD(i,n))}}function eN(r,e){let t=r;for(let[n,i]of e.entries()){if(t=t[i],t==null)throw new Error(`Object has no property at ${e.slice(0,n+1).map(s=>`[${JSON.stringify(s)}]`).join("")}`);let o=B.asCID(t);if(o!=null)return{value:o,remaining:e.slice(n+1).join("/")}}return{value:t}}var c4=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:Xf(),bytes:Xf(),value:Xf(),asBlock:Xf()})}links(){return s4(this.value,[])}tree(){return a4(this.value,[])}get(e="/"){return eN(this.value,e.split("/").filter(Boolean))}};function jf({bytes:r,cid:e,value:t,codec:n}){let i=t!==void 0?t:n?.decode(r);if(i===void 0)throw new Error('Missing required argument, must either provide "value" or "codec"');return new c4({cid:e,bytes:r,value:i})}var I9="/pin/",A9="/pinned-block/",l4=mr,T9=1;function Qf(r){return r.version===0&&(r=r.toV1()),new Fe(`${I9}${r.toString(l4)}`)}var Zf=class{datastore;blockstore;getCodec;constructor(e,t,n){this.datastore=e,this.blockstore=t,this.getCodec=n}async*add(e,t={}){let n=Qf(e);if(await this.datastore.has(n))throw new Error("Already pinned");let i=Math.round(t.depth??1/0);if(i<0)throw new Error("Depth must be greater than or equal to 0");let o=new fr({concurrency:T9});for await(let a of this.#e(e,o,{...t,depth:i}))await this.#r(a,c=>c.pinnedBy.find(l=>J(l,e.bytes))!=null?!1:(c.pinCount++,c.pinnedBy.push(e.bytes),!0),t),yield a;let s={depth:i,metadata:t.metadata??{}};await this.datastore.put(n,Ri(s),t)}async*#e(e,t,n){if(n.depth===-1)return;let i=await this.getCodec(e.code),o=await this.blockstore.get(e,n),s=jf({bytes:o,cid:e,codec:i});yield e;for await(let[,a]of s.links())yield*await t.add(async()=>this.#e(a,t,{...n,depth:n.depth-1}))}async#r(e,t,n){let i=new Fe(`${A9}${l4.encode(e.multihash.bytes)}`),o={pinCount:0,pinnedBy:[]};try{o=xr(await this.datastore.get(i,n))}catch(a){if(a.name!=="NotFoundError")throw a}if(t(o)){if(o.pinCount===0&&await this.datastore.has(i)){await this.datastore.delete(i);return}await this.datastore.put(i,Ri(o),n),n.onProgress?.(new M("helia:pin:add",e))}}async*rm(e,t={}){let n=Qf(e),i=await this.datastore.get(n,t),o=xr(i);await this.datastore.delete(n,t);let s=new fr({concurrency:T9});for await(let a of this.#e(e,s,{...t,depth:o.depth}))await this.#r(a,c=>(c.pinCount--,c.pinnedBy=c.pinnedBy.filter(l=>J(l,e.bytes)),!0),{...t,depth:o.depth}),yield a}async*ls(e={}){for await(let{key:t,value:n}of this.datastore.query({prefix:I9+(e.cid!=null?`${e.cid.toString(mr)}`:"")},e)){let i=B.parse(t.toString().substring(5),mr),o=xr(n);yield{cid:i,...o}}}async isPinned(e,t={}){let n=new Fe(`${A9}${l4.encode(e.multihash.bytes)}`);return this.datastore.has(n,t)}async get(e,t){let n=Qf(e),i=await this.datastore.get(n,t);return xr(i)}async setMetadata(e,t,n){let i=Qf(e),o=await this.datastore.get(i,n),s=xr(o);s.metadata=t??{},await this.datastore.put(i,Ri(s),n)}};var Jf=class extends Error{static name="InsufficientProvidersError";constructor(e="Insufficient providers found"){super(e),this.name="InsufficientProvidersError"}},Ps=class extends Error{static name="NoRoutersAvailableError";constructor(e="No routers available"){super(e),this.name="NoRoutersAvailableError"}},eh=class extends Error{static name="UnknownHashAlgorithmError";constructor(e="Unknown hash algorithm"){super(e),this.name="UnknownHashAlgorithmError"}},th=class extends Error{static name="UnknownCodecError";constructor(e="Unknown codec"){super(e),this.name="UnknownCodecError"}};var tN=5,rh=class{log;routers;providerLookupConcurrency;constructor(e,t){this.log=e.logger.forComponent("helia:routing"),this.routers=t.routers??[],this.providerLookupConcurrency=t.providerLookupConcurrency??tN,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 $t(...this.routers)}async stop(){await tr(...this.routers)}async*findProviders(e,t={}){if(this.routers.length===0)throw new Ps("No content routers available");let n=new Vt({concurrency:this.providerLookupConcurrency});n.addEventListener("error",()=>{});for await(let i of pr(n.toGenerator(),...Rs(this.routers,"findProviders").map(o=>o.findProviders(e,t))))if(i!=null){if(i.multiaddrs.length===0){if(n.find(i.id)!=null)continue;n.add(async()=>{try{let o=await this.findPeer(i.id,t);return o.multiaddrs.length===0?null:o}catch(o){return this.log.error("could not load multiaddrs for peer %p",i.id,o),null}},{peerId:i.id,signal:t.signal}).catch(o=>{this.log.error("could not load multiaddrs for peer %p",i.id,o)})}yield i}}async provide(e,t={}){if(this.routers.length===0)throw new Ps("No content routers available");await Promise.all(Rs(this.routers,"provide").map(async n=>{await n.provide(e,t)}))}async cancelReprovide(e,t={}){await Promise.all(Rs(this.routers,"cancelReprovide").map(async n=>{await n.cancelReprovide(e,t)}))}async put(e,t,n){await Promise.all(Rs(this.routers,"put").map(async i=>{await i.put(e,t,n)}))}async get(e,t){return Promise.any(Rs(this.routers,"get").map(async n=>n.get(e,t)))}async findPeer(e,t){if(this.routers.length===0)throw new Ps("No peer routers available");let n=this,i=pr(...Rs(this.routers,"findPeer").map(o=>async function*(){try{yield await o.findPeer(e,t)}catch(s){n.log.error(s)}}()));for await(let o of i)if(o!=null)return o;throw new Ce("Could not find peer in routing")}async*getClosestPeers(e,t={}){if(this.routers.length===0)throw new Ps("No peer routers available");for await(let n of pr(...Rs(this.routers,"getClosestPeers").map(i=>i.getClosestPeers(e,t))))n!=null&&(yield n)}};function Rs(r,e){return r.filter(t=>t[e]!=null)}var Io={},Qa=r=>{r.addEventListener("message",e=>{Qa.dispatchEvent("message",r,e)}),r.port!=null&&r.port.addEventListener("message",e=>{Qa.dispatchEvent("message",r,e)})};Qa.addEventListener=(r,e)=>{Io[r]==null&&(Io[r]=[]),Io[r].push(e)};Qa.removeEventListener=(r,e)=>{Io[r]!=null&&(Io[r]=Io[r].filter(t=>t===e))};Qa.dispatchEvent=function(r,e,t){Io[r]!=null&&Io[r].forEach(n=>n(e,t))};var u4=Qa;var d4="lock:worker:request-read",f4="lock:worker:release-read",h4="lock:master:grant-read",p4="lock:worker:request-write",m4="lock:worker:release-write",g4="lock:master:grant-write";var _9=(r=21)=>Math.random().toString().substring(2);var k9=(r,e,t,n,i)=>(o,s)=>{if(s.data.type!==t)return;let a={type:s.data.type,name:s.data.name,identifier:s.data.identifier};r.dispatchEvent(new MessageEvent(e,{data:{name:a.name,handler:async()=>{o.postMessage({type:i,name:a.name,identifier:a.identifier}),await new Promise(c=>{let l=u=>{if(u?.data==null)return;let d={type:u.data.type,name:u.data.name,identifier:u.data.identifier};d.type===n&&d.identifier===a.identifier&&(o.removeEventListener("message",l),c())};o.addEventListener("message",l)})}}}))},C9=(r,e,t,n)=>async()=>{let i=_9();return globalThis.postMessage({type:e,identifier:i,name:r}),new Promise(o=>{let s=a=>{if(a?.data==null)return;let c={type:a.data.type,identifier:a.data.identifier};c.type===t&&c.identifier===i&&(globalThis.removeEventListener("message",s),o(()=>{globalThis.postMessage({type:n,identifier:i,name:r})}))};globalThis.addEventListener("message",s)})},rN={singleProcess:!1},P9=r=>{if(r=Object.assign({},rN,r),!!globalThis.document||r.singleProcess){let t=new EventTarget;return u4.addEventListener("message",k9(t,"requestReadLock",d4,f4,h4)),u4.addEventListener("message",k9(t,"requestWriteLock",p4,m4,g4)),t}return{isWorker:!0,readLock:t=>C9(t,d4,h4,f4),writeLock:t=>C9(t,p4,g4,m4)}};var Ds={},_o;async function y4(r,e){let t,n=new Promise(i=>{t=i});return r.add(async()=>Dn((async()=>{await new Promise(i=>{t(()=>{i()})})})(),{milliseconds:e.timeout})),n}var nN=(r,e)=>{if(_o.isWorker===!0)return{readLock:_o.readLock(r,e),writeLock:_o.writeLock(r,e)};let t=new Cr({concurrency:1}),n;return{async readLock(){if(n!=null)return y4(n,e);n=new Cr({concurrency:e.concurrency,autoStart:!1});let i=n,o=y4(n,e);return t.add(async()=>{i.start(),await i.onIdle().then(()=>{n===i&&(n=null)})}),o},async writeLock(){return n=null,y4(t,e)}}},iN={name:"lock",concurrency:1/0,timeout:846e5,singleProcess:!1};function Ns(r){let e=Object.assign({},iN,r);return _o==null&&(_o=P9(e),_o.isWorker!==!0&&(_o.addEventListener("requestReadLock",t=>{Ds[t.data.name]!=null&&Ds[t.data.name].readLock().then(async n=>t.data.handler().finally(()=>{n()}))}),_o.addEventListener("requestWriteLock",async t=>{Ds[t.data.name]!=null&&Ds[t.data.name].writeLock().then(async n=>t.data.handler().finally(()=>{n()}))}))),Ds[e.name]==null&&(Ds[e.name]=nN(e.name,e)),Ds[e.name]}var nh=class{lock;child;pins;started;constructor(e,t,n={}){this.child=e,this.pins=t,this.lock=Ns({singleProcess:n.holdGcLock}),this.started=!1}isStarted(){return this.started}async start(){await $t(this.child),this.started=!0}async stop(){await tr(this.child),this.started=!1}unwrap(){return this.child}async put(e,t,n={}){n?.signal?.throwIfAborted();let i=await this.lock.readLock();try{return await this.child.put(e,t,n)}finally{i()}}async*putMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.putMany(e,t)}finally{n()}}async get(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{return await this.child.get(e,t)}finally{n()}}async*getMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.readLock();try{yield*this.child.getMany(e,t)}finally{n()}}async delete(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{if(await this.pins.isPinned(e))throw new Error("CID was pinned");await this.child.delete(e,t)}finally{n()}}async*deleteMany(e,t={}){t?.signal?.throwIfAborted();let n=await this.lock.writeLock();try{let i=this;yield*this.child.deleteMany(async function*(){for await(let o of e){if(await i.pins.isPinned(o))throw new Error("CID was pinned");yield o}}(),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 w4=new Fe("/version"),R9=1;async function D9(r){if(!await r.has(w4)){await r.put(w4,C(`${R9}`));return}let e=await r.get(w4),t=U(e);if(parseInt(t,10)!==R9)throw new Error("Unknown datastore version, a datastore migration may be required")}var Co={};ot(Co,{code:()=>Pr,decode:()=>ko,decodeOptions:()=>uN,encode:()=>Za,encodeOptions:()=>cN,name:()=>dN,toByteView:()=>L9});var N9=42;function L9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function oN(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=B.asCID(r);if(!e)return null;let t=new Uint8Array(e.bytes.byteLength+1);return t.set(e.bytes,1),[new z(v.tag,N9),new z(v.bytes,t)]}function sN(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function aN(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 x4={float64:!0,typeEncoders:{Object:oN,undefined:sN,number:aN}},cN={...x4,typeEncoders:{...x4.typeEncoders}};function lN(r){if(r[0]!==0)throw new Error("Invalid CID for CBOR tag 42; expected leading 0x00");return B.decode(r.subarray(1))}var ih={allowIndefinite:!1,coerceUndefinedToNull:!0,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};ih.tags[N9]=lN;var uN={...ih,tags:ih.tags.slice()},dN="dag-cbor",Pr=113,Za=r=>Ri(r,x4),ko=r=>xr(L9(r),ih);var Ls={};ot(Ls,{code:()=>ai,decode:()=>ec,encode:()=>sh,format:()=>EN,name:()=>vN,parse:()=>AN,stringify:()=>EN});var b4=class extends Array{constructor(){super(),this.inRecursive=[]}prefix(e){let t=this.inRecursive[this.inRecursive.length-1];t&&(t.type===v.array&&(t.elements++,t.elements!==1&&e.push([44])),t.type===v.map&&(t.elements++,t.elements!==1&&(t.elements%2===1?e.push([44]):e.push([58]))))}[v.uint.major](e,t){this.prefix(e);let n=String(t.value),i=[];for(let o=0;o<n.length;o++)i[o]=n.charCodeAt(o);e.push(i)}[v.negint.major](e,t){this[v.uint.major](e,t)}[v.bytes.major](e,t){throw new Error(`${Ci} unsupported type: Uint8Array`)}[v.string.major](e,t){this.prefix(e);let n=Mf(JSON.stringify(t.value));e.push(n.length>32?ql(n):n)}[v.array.major](e,t){this.prefix(e),this.inRecursive.push({type:v.array,elements:0}),e.push([91])}[v.map.major](e,t){this.prefix(e),this.inRecursive.push({type:v.map,elements:0}),e.push([123])}[v.tag.major](e,t){}[v.float.major](e,t){if(t.type.name==="break"){let s=this.inRecursive.pop();if(s){if(s.type===v.array)e.push([93]);else if(s.type===v.map)e.push([125]);else throw new Error("Unexpected recursive type; this should not happen!");return}throw new Error("Unexpected break; this should not happen!")}if(t.value===void 0)throw new Error(`${Ci} 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),i=[],o=!1;for(let s=0;s<n.length;s++)i[s]=n.charCodeAt(s),!o&&(i[s]===46||i[s]===101||i[s]===69)&&(o=!0);o||(i.push(46),i.push(48)),e.push(i)}};function fN(r,e){if(Array.isArray(r[0])||Array.isArray(e[0]))throw new Error(`${Ci} complex map keys are not supported`);let t=r[0],n=e[0];if(t.type!==v.string||n.type!==v.string)throw new Error(`${Ci} non-string map keys are not supported`);if(t<n)return-1;if(t>n)return 1;throw new Error(`${Ci} unexpected duplicate map keys, this is not supported`)}var hN={addBreakTokens:!0,mapSorter:fN};function Ql(r,e){return e=Object.assign({},hN,e),n4(r,new b4,e)}var Ja=class{constructor(e,t={}){this._pos=0,this.data=e,this.options=t,this.modeStack=["value"],this.lastToken=""}pos(){return this._pos}done(){return this._pos>=this.data.length}ch(){return this.data[this._pos]}currentMode(){return this.modeStack[this.modeStack.length-1]}skipWhitespace(){let e=this.ch();for(;e===32||e===9||e===13||e===10;)e=this.data[++this._pos]}expect(e){if(this.data.length-this._pos<e.length)throw new Error(`${Q} unexpected end of input at position ${this._pos}`);for(let t=0;t<e.length;t++)if(this.data[this._pos++]!==e[t])throw new Error(`${Q} unexpected token at position ${this._pos}, expected to find '${String.fromCharCode(...e)}'`)}parseNumber(){let e=this._pos,t=!1,n=!1,i=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 z(v.uint,0,this._pos-e);if(i([48,49,50,51,52,53,54,55,56,57]),t&&this._pos===e+1)throw new Error(`${Q} unexpected token at position ${this._pos}`);if(!this.done()&&this.ch()===46){if(n)throw new Error(`${Q} unexpected token at position ${this._pos}`);n=!0,this._pos++,i([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++,i([48,49,50,51,52,53,54,55,56,57]));let o=String.fromCharCode.apply(null,this.data.subarray(e,this._pos)),s=parseFloat(o);return n?new z(v.float,s,this._pos-e):this.options.allowBigInt!==!0||Number.isSafeInteger(s)?new z(s>=0?v.uint:v.negint,s,this._pos-e):new z(s>=0?v.uint:v.negint,BigInt(o),this._pos-e)}parseString(){if(this.ch()!==34)throw new Error(`${Q} unexpected character at position ${this._pos}; this shouldn't happen`);this._pos++;for(let o=this._pos,s=0;o<this.data.length&&s<65536;o++,s++){let a=this.data[o];if(a===92||a<32||a>=128)break;if(a===34){let c=String.fromCharCode.apply(null,this.data.subarray(this._pos,o));return this._pos=o+1,new z(v.string,c,s)}}let e=this._pos,t=[],n=()=>{if(this._pos+4>=this.data.length)throw new Error(`${Q} unexpected end of unicode escape sequence at position ${this._pos}`);let o=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(`${Q} unexpected unicode escape character at position ${this._pos}`);o=o*16+a,this._pos++}return o},i=()=>{let o=this.ch(),s=null,a=o>239?4:o>223?3:o>191?2:1;if(this._pos+a>this.data.length)throw new Error(`${Q} unexpected unicode sequence at position ${this._pos}`);let c,l,u,d;switch(a){case 1:o<128&&(s=o);break;case 2:c=this.data[this._pos+1],(c&192)===128&&(d=(o&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=(o&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=(o&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 o=this.ch(),s;switch(o){case 92:if(this._pos++,this.done())throw new Error(`${Q} 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(`${Q} unexpected string escape character at position ${this._pos}`)}break;case 34:return this._pos++,new z(v.string,X3(t),this._pos-e);default:if(o<32)throw new Error(`${Q} invalid control character at position ${this._pos}`);o<128?(t.push(o),this._pos++):i()}}throw new Error(`${Q} unexpected end of string at position ${this._pos}`)}parseValue(){switch(this.ch()){case 123:return this.modeStack.push("obj-start"),this._pos++,new z(v.map,1/0,1);case 91:return this.modeStack.push("array-start"),this._pos++,new z(v.array,1/0,1);case 34:return this.parseString();case 110:return this.expect([110,117,108,108]),new z(v.null,null,4);case 102:return this.expect([102,97,108,115,101]),new z(v.false,!1,5);case 116:return this.expect([116,114,117,101]),new z(v.true,!0,4);case 45:case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.parseNumber();default:throw new Error(`${Q} unexpected character at position ${this._pos}`)}}next(){switch(this.skipWhitespace(),this.currentMode()){case"value":return this.modeStack.pop(),this.parseValue();case"array-value":{if(this.modeStack.pop(),this.ch()===93)return this._pos++,this.skipWhitespace(),new z(v.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting array delimiter but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue()}case"array-start":return this.modeStack.pop(),this.ch()===93?(this._pos++,this.skipWhitespace(),new z(v.break,void 0,1)):(this.modeStack.push("array-value"),this.skipWhitespace(),this.parseValue());case"obj-key":if(this.ch()===125)return this.modeStack.pop(),this._pos++,this.skipWhitespace(),new z(v.break,void 0,1);if(this.ch()!==44)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting object delimiter but found '${String.fromCharCode(this.ch())}'`);this._pos++,this.skipWhitespace();case"obj-start":{if(this.modeStack.pop(),this.ch()===125)return this._pos++,this.skipWhitespace(),new z(v.break,void 0,1);let e=this.parseString();if(this.skipWhitespace(),this.ch()!==58)throw new Error(`${Q} unexpected character at position ${this._pos}, was expecting key/value delimiter ':' but found '${String.fromCharCode(this.ch())}'`);return this._pos++,this.modeStack.push("obj-value"),e}case"obj-value":return this.modeStack.pop(),this.modeStack.push("obj-key"),this.skipWhitespace(),this.parseValue();default:throw new Error(`${Q} unexpected parse state at position ${this._pos}; this shouldn't happen`)}}};function v4(r,e){return e=Object.assign({tokenizer:new Ja(r,e)},e),xr(r,e)}function mN(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}function gN(r){if(r.asCID!==r&&r["/"]!==r.bytes)return null;let e=B.asCID(r);if(!e)return null;let t=e.toString();return[new z(v.map,1/0,1),new z(v.string,"/",1),new z(v.string,t,t.length),new z(v.break,void 0,1)]}function oh(r){let e=St.encode(r).slice(1);return[new z(v.map,1/0,1),new z(v.string,"/",1),new z(v.map,1/0,1),new z(v.string,"bytes",5),new z(v.string,e,e.length),new z(v.break,void 0,1),new z(v.break,void 0,1)]}function On(r){return oh(new Uint8Array(r.buffer,r.byteOffset,r.byteLength))}function yN(r){return oh(new Uint8Array(r))}function wN(){throw new Error("`undefined` is not supported by the IPLD Data Model and cannot be encoded")}function xN(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 bN={typeEncoders:{Object:gN,Buffer:oh,Uint8Array:oh,Int8Array:On,Uint16Array:On,Int16Array:On,Uint32Array:On,Int32Array:On,Float32Array:On,Float64Array:On,Uint8ClampedArray:On,BigInt64Array:On,BigUint64Array:On,DataView:On,ArrayBuffer:yN,undefined:wN,number:xN}},E4=class extends Ja{constructor(e,t){super(e,t),this.tokenBuffer=[]}done(){return this.tokenBuffer.length===0&&super.done()}_next(){return this.tokenBuffer.length>0?this.tokenBuffer.pop():super.next()}next(){let e=this._next();if(e.type===v.map){let t=this._next();if(t.type===v.string&&t.value==="/"){let n=this._next();if(n.type===v.string){if(this._next().type!==v.break)throw new Error("Invalid encoded CID form");return this.tokenBuffer.push(n),new z(v.tag,42,0)}if(n.type===v.map){let i=this._next();if(i.type===v.string&&i.value==="bytes"){let o=this._next();if(o.type===v.string){for(let a=0;a<2;a++)if(this._next().type!==v.break)throw new Error("Invalid encoded Bytes form");let s=St.decode(`m${o.value}`);return new z(v.bytes,s,o.value.length)}this.tokenBuffer.push(o)}this.tokenBuffer.push(i)}this.tokenBuffer.push(n)}this.tokenBuffer.push(t)}return e}},S4={allowIndefinite:!1,allowUndefined:!1,allowNaN:!1,allowInfinity:!1,allowBigInt:!0,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,tags:[]};S4.tags[42]=B.parse;var vN="dag-json",ai=297,sh=r=>Ql(r,bN),ec=r=>{let e=mN(r),t=Object.assign(S4,{tokenizer:new E4(e,S4)});return v4(e,t)},EN=r=>SN.decode(sh(r));var SN=new TextDecoder,AN=r=>ec(TN.encode(r)),TN=new TextEncoder;var bt={};ot(bt,{code:()=>Le,createLink:()=>q9,createNode:()=>V9,decode:()=>xt,encode:()=>Ie,name:()=>BN,prepare:()=>ht,validate:()=>I4});var IN=new TextDecoder;function A4(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 i=r[e++];if(t+=n<28?(i&127)<<n:(i&127)*2**n,i<128)break}return[t,e]}function ah(r,e){let t;[t,e]=A4(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 O9(r,e){let t;return[t,e]=A4(r,e),[t&7,t>>3,e]}function _N(r){let e={},t=r.length,n=0;for(;n<t;){let i,o;if([i,o,n]=O9(r,n),o===1){if(e.Hash)throw new Error("protobuf: (PBLink) duplicate Hash section");if(i!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) 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]=ah(r,n)}else if(o===2){if(e.Name!==void 0)throw new Error("protobuf: (PBLink) duplicate Name section");if(i!==2)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Name`);if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) invalid order, found Tsize before Name");let s;[s,n]=ah(r,n),e.Name=IN.decode(s)}else if(o===3){if(e.Tsize!==void 0)throw new Error("protobuf: (PBLink) duplicate Tsize section");if(i!==0)throw new Error(`protobuf: (PBLink) wrong wireType (${i}) for Tsize`);[e.Tsize,n]=A4(r,n)}else throw new Error(`protobuf: (PBLink) invalid fieldNumber, expected 1, 2 or 3, got ${o}`)}if(n>t)throw new Error("protobuf: (PBLink) unexpected end of data");return e}function B9(r){let e=r.length,t=0,n,i=!1,o;for(;t<e;){let a,c;if([a,c,t]=O9(r,t),a!==2)throw new Error(`protobuf: (PBNode) invalid wireType, expected 2, got ${a}`);if(c===1){if(o)throw new Error("protobuf: (PBNode) duplicate Data section");[o,t]=ah(r,t),n&&(i=!0)}else if(c===2){if(i)throw new Error("protobuf: (PBNode) duplicate Links section");n||(n=[]);let l;[l,t]=ah(r,t),n.push(_N(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 o&&(s.Data=o),s.Links=n||[],s}var F9=new TextEncoder,M9=2**32,kN=2**31;function CN(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=Zl(e,t,r.Tsize)-1,e[t]=24}if(typeof r.Name=="string"){let n=F9.encode(r.Name);t-=n.length,e.set(n,t),t=Zl(e,t,n.length)-1,e[t]=18}return r.Hash&&(t-=r.Hash.length,e.set(r.Hash,t),t=Zl(e,t,r.Hash.length)-1,e[t]=10),e.length-t}function U9(r){let e=RN(r),t=new Uint8Array(e),n=e;if(r.Data&&(n-=r.Data.length,t.set(r.Data,n),n=Zl(t,n,r.Data.length)-1,t[n]=10),r.Links)for(let i=r.Links.length-1;i>=0;i--){let o=CN(r.Links[i],t.subarray(0,n));n-=o,n=Zl(t,n,o)-1,t[n]=18}return t}function PN(r){let e=0;if(r.Hash){let t=r.Hash.length;e+=1+t+tc(t)}if(typeof r.Name=="string"){let t=F9.encode(r.Name).length;e+=1+t+tc(t)}return typeof r.Tsize=="number"&&(e+=1+tc(r.Tsize)),e}function RN(r){let e=0;if(r.Data){let t=r.Data.length;e+=1+t+tc(t)}if(r.Links)for(let t of r.Links){let n=PN(t);e+=1+n+tc(n)}return e}function Zl(r,e,t){e-=tc(t);let n=e;for(;t>=kN;)r[e++]=t&127|128,t/=128;for(;t>=128;)r[e++]=t&127|128,t>>>=7;return r[e]=t,n}function tc(r){return r%2===0&&r++,Math.floor((DN(r)+6)/7)}function DN(r){let e=0;return r>=M9&&(r=Math.floor(r/M9),e=32),r>=65536&&(r>>>=16,e+=16),r>=256&&(r>>>=8,e+=8),e+NN[r]}var NN=[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 LN=["Data","Links"],ON=["Hash","Name","Tsize"],T4=new TextEncoder;function z9(r,e){if(r===e)return 0;let t=r.Name?T4.encode(r.Name):[],n=e.Name?T4.encode(e.Name):[],i=t.length,o=n.length;for(let s=0,a=Math.min(i,o);s<a;++s)if(t[s]!==n[s]){i=t[s],o=n[s];break}return i<o?-1:o<i?1:0}function H9(r,e){return!Object.keys(r).some(t=>!e.includes(t))}function $9(r){if(typeof r.asCID=="object"){let t=B.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=B.asCID(r.Hash);try{t||(typeof r.Hash=="string"?t=B.parse(r.Hash):r.Hash instanceof Uint8Array&&(t=B.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 ht(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=T4.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($9),e.Links.sort(z9);else throw new TypeError("Invalid DAG-PB form");else e.Links=[];return e}function I4(r){if(!r||typeof r!="object"||Array.isArray(r)||r instanceof Uint8Array||r["/"]&&r["/"]===r.bytes)throw new TypeError("Invalid DAG-PB form");if(!H9(r,LN))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(!H9(t,ON))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&&z9(t,r.Links[e-1])===-1)throw new TypeError("Invalid DAG-PB form (links must be sorted by Name bytes)")}}function V9(r,e=[]){return ht({Data:r,Links:e})}function q9(r,e,t){return $9({Hash:t,Name:r,Tsize:e})}function K9(r){return r instanceof ArrayBuffer?new Uint8Array(r,0,r.byteLength):r}var BN="dag-pb",Le=112;function Ie(r){I4(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),U9(e)}function xt(r){let e=K9(r),t=B9(e),n={};return t.Data&&(n.Data=t.Data),t.Links&&(n.Links=t.Links.map(i=>{let o={};try{o.Hash=B.decode(i.Hash)}catch{}if(!o.Hash)throw new Error("Invalid Hash field found in link, expected CID");return i.Name!==void 0&&(o.Name=i.Name),i.Tsize!==void 0&&(o.Tsize=i.Tsize),o})),n}function rc(r){return r?.then!=null}function G9(r=[],e){let t={[Le]:bt,[We]:Ar,[Pr]:Co,[ai]:Ls,[ri]:_a};return r.forEach(n=>{t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let o=e(n);rc(o)?i=await o:i=o,t[i.code]=i}if(i!=null)return i;throw new th(`Could not load codec for ${n}`)}}function W9(r=[],e){let t={[Se.code]:Se,[Xd.code]:Xd,[At.code]:At};return r.forEach(n=>{t[n.code]=n}),async n=>{let i=t[n];if(i==null&&e!=null){let o=e(n);rc(o)?i=await o:i=o,t[i.code]=i}if(i!=null)return i;throw new eh(`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 hn=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 Ni=class{has(e,t){return Promise.reject(new Error(".has is not implemented"))}put(e,t,n){return Promise.reject(new Error(".put is not implemented"))}async*putMany(e,t){for await(let{cid:n,block:i}of e)await this.put(n,i,t),yield n}get(e,t){return Promise.reject(new Error(".get is not implemented"))}async*getMany(e,t){for await(let n of e)yield{cid:n,block:await this.get(n,t)}}delete(e,t){return Promise.reject(new Error(".delete is not implemented"))}async*deleteMany(e,t){for await(let n of e)await this.delete(n,t),yield n}async*getAll(e){throw new Error(".getAll is not implemented")}};var ch=0,lh=class extends Ni{child;constructor(e){super(),this.child=e}put(e,t){return e.multihash.code===ch||this.child==null?e:this.child.put(e,t)}get(e){if(e.multihash.code===ch)return e.multihash.digest;if(this.child==null)throw new hn;return this.child.get(e)}has(e){return e.multihash.code===ch?!0:this.child==null?!1:this.child.has(e)}delete(e){if(e.code!==ch&&this.child!=null)return this.child.delete(e)}getAll(e){return this.child!=null?this.child.getAll(e):[]}};function MN(r){return r[Symbol.asyncIterator]!=null}function FN(r,e){let t=0;if(MN(r))return async function*(){for await(let c of r)await e(c,t++)&&(yield c)}();let n=Ta(r),{value:i,done:o}=n.next();if(o===!0)return function*(){}();let s=e(i,t++);if(typeof s.then=="function")return async function*(){await s&&(yield i);for await(let c of n)await e(c,t++)&&(yield c)}();let a=e;return function*(){s===!0&&(yield i);for(let c of n)a(c,t++)&&(yield c)}()}var Wr=FN;function UN(r){return r[Symbol.asyncIterator]!=null}function Y9(r){return r?.then!=null}function HN(r,e){let t=0;if(UN(r))return async function*(){for await(let c of r){let l=e(c,t++);Y9(l)&&await l,yield c}}();let n=Ta(r),{value:i,done:o}=n.next();if(o===!0)return function*(){}();if(typeof e(i,t++)?.then=="function")return async function*(){yield i;for await(let c of n){let l=e(c,t++);Y9(l)&&await l,yield c}}();let a=e;return function*(){yield i;for(let c of n)a(c,t++),yield c}()}var Os=HN;var uh=class{child;getHasher;log;logger;components;constructor(e){this.log=e.logger.forComponent("helia:networked-storage"),this.logger=e.logger,this.components=e,this.child=new lh(e.blockstore),this.getHasher=e.getHasher}async put(e,t,n={}){return await this.child.has(e,n)?(n.onProgress?.(new M("blocks:put:duplicate",e)),e):(n.onProgress?.(new M("blocks:put:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async i=>i.announce?.(e,t,n))),n.onProgress?.(new M("blocks:put:blockstore:put",e)),this.child.put(e,t,n))}async*putMany(e,t={}){let n=Wr(e,async({cid:o})=>{let s=await this.child.has(o,t);return s&&t.onProgress?.(new M("blocks:put-many:duplicate",o)),!s}),i=Os(n,async({cid:o,block:s})=>{t.onProgress?.(new M("blocks:put-many:providers:notify",o)),await Promise.all(this.components.blockBrokers.map(async a=>a.announce?.(o,s,t)))});t.onProgress?.(new M("blocks:put-many:blockstore:put-many")),yield*this.child.putMany(i,t)}async get(e,t={}){if(t.offline!==!0&&!await this.child.has(e,t)){let n=await this.getHasher(e.multihash.code);t.onProgress?.(new M("blocks:get:providers:get",e));let i=await X9(e,this.components.blockBrokers,n,{...t,log:this.log});return t.onProgress?.(new M("blocks:get:blockstore:put",e)),await this.child.put(e,i,t),t.onProgress?.(new M("blocks:get:providers:notify",e)),await Promise.all(this.components.blockBrokers.map(async o=>o.announce?.(e,i,t))),i}return t.onProgress?.(new M("blocks:get:blockstore:get",e)),this.child.get(e,t)}async*getMany(e,t={}){t.onProgress?.(new M("blocks:get-many:blockstore:get-many")),yield*this.child.getMany(Os(e,async n=>{if(t.offline!==!0&&!await this.child.has(n,t)){let i=await this.getHasher(n.multihash.code);t.onProgress?.(new M("blocks:get-many:providers:get",n));let o=await X9(n,this.components.blockBrokers,i,{...t,log:this.log});t.onProgress?.(new M("blocks:get-many:blockstore:put",n)),await this.child.put(n,o,t),t.onProgress?.(new M("blocks:get-many:providers:notify",n)),await Promise.all(this.components.blockBrokers.map(async s=>s.announce?.(n,o,t)))}}))}async delete(e,t={}){t.onProgress?.(new M("blocks:delete:blockstore:delete",e)),await this.child.delete(e,t)}async*deleteMany(e,t={}){t.onProgress?.(new M("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 M("blocks:get-all:blockstore:get-many")),yield*this.child.getAll(e)}},dh=class extends uh{started;constructor(e){super(e),this.started=!1}isStarted(){return this.started}async start(){await $t(this.child,...this.components.blockBrokers),this.started=!0}async stop(){await tr(this.child,...this.components.blockBrokers),this.started=!1}unwrap(){return this.child}createSession(e,t){let n=this.components.blockBrokers.map(i=>i.createSession==null?i:i.createSession(t));return new _4({blockstore:this.child,blockBrokers:n,getHasher:this.getHasher,logger:this.logger},{root:e})}},_4=class extends uh{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 put(e,t,n={}){let i=de([this.closeController.signal,n.signal]);try{return await super.put(e,t,{...n,signal:i})}finally{i.clear()}}async*putMany(e,t={}){let n=de([this.closeController.signal,t.signal]);try{yield*super.putMany(e,{...t,signal:n})}finally{n.clear()}}async get(e,t={}){let n=de([this.closeController.signal,t.signal]);try{return await super.get(e,{...t,signal:n})}finally{n.clear()}}async*getMany(e,t={}){let n=de([this.closeController.signal,t.signal]);try{yield*super.getMany(e,{...t,signal:n})}finally{n.clear()}}async delete(e,t={}){let n=de([this.closeController.signal,t.signal]);try{await super.delete(e,{...t,signal:n})}finally{n.clear()}}async*deleteMany(e,t={}){let n=de([this.closeController.signal,t.signal]);try{yield*super.deleteMany(e,{...t,signal:n})}finally{n.clear()}}async has(e,t={}){let n=de([this.closeController.signal,t.signal]);try{return await super.has(e,{...t,signal:n})}finally{n.clear()}}async*getAll(e={}){let t=de([this.closeController.signal,e.signal]);try{yield*super.getAll({...e,signal:t})}finally{t.clear()}}};function zN(r){return typeof r.retrieve=="function"}var $N=(r,e)=>{if(e==null)throw new O(`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,i=e.digest(t);if(rc(i)?n=await i:n=i,!J(n.digest,r.multihash.digest))throw new oo("Hash of downloaded block did not match multihash from passed CID")}};async function X9(r,e,t,n){let i=$N(r,t),o=new AbortController,s=de([o.signal,n.signal]);o.signal;let a=[];for(let c of e)zN(c)&&a.push(c);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 i(d),l=!0}});return l||await i(u),u}catch(l){throw n.log.error("could not retrieve verified block for %c",r,l),l}}))}finally{o.abort(),s.clear()}}var Bs=class extends be{initialPeerSearchComplete;requests;name;log;logger;minProviders;maxProviders;providers;evictionFilter;constructor(e,t){super(),this.name=t.name,this.logger=e.logger,this.log=e.logger.forComponent(this.name),this.requests=new Map,this.minProviders=t.minProviders??1,this.maxProviders=t.maxProviders??5,this.providers=[],this.evictionFilter=_r(this.maxProviders)}async retrieve(e,t={}){let n=St.encode(e.multihash.bytes),i=this.requests.get(n);if(i!=null)return this.log("join existing request for %c",e),i;let o=Z();if(this.requests.set(n,o.promise),this.providers.length===0){let l=!1;this.initialPeerSearchComplete==null&&(l=!0,this.log=this.logger.forComponent(`${this.name}:${e}`),this.initialPeerSearchComplete=this.findProviders(e,this.minProviders,t)),await this.initialPeerSearchComplete,l&&this.log("found initial session peers for %c",e)}let s=!1,a=new fr({concurrency:this.maxProviders});a.addEventListener("error",()=>{}),a.addEventListener("failure",l=>{this.log.error("error querying provider %o, evicting from session",l.detail.job.options.provider,l.detail.error),this.evict(l.detail.job.options.provider)}),a.addEventListener("success",l=>{s=!0,o.resolve(l.detail.result)}),a.addEventListener("idle",()=>{s||t.signal?.aborted===!0||Promise.resolve().then(async()=>{this.log("no session peers had block for for %c, finding new providers",e);for(let l=0;l<this.minProviders&&this.providers.length!==0;l++){let u=this.providers[Math.floor(Math.random()*this.providers.length)];this.evict(u)}await this.findProviders(e,this.minProviders,t),this.log("found new providers re-retrieving %c",e),this.requests.delete(n),o.resolve(await this.retrieve(e,t))}).catch(l=>{this.log.error("could not find new providers for %c",e,l),o.reject(l)})});let c=l=>{a.add(async()=>this.queryProvider(e,l.detail,t),{provider:l.detail}).catch(u=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,u)})};this.addEventListener("provider",c),Promise.all([...this.providers].map(async l=>a.add(async()=>this.queryProvider(e,l,t),{provider:l}))).catch(l=>{t.signal?.aborted!==!0&&this.log.error("error retrieving session block for %c",e,l)});try{return await o.promise}finally{this.removeEventListener("provider",c),a.clear(),this.requests.delete(n)}}evict(e){this.evictionFilter.add(this.toEvictionKey(e));let t=this.providers.findIndex(n=>this.equals(n,e));t!==-1&&this.providers.splice(t,1)}isEvicted(e){return this.evictionFilter.has(this.toEvictionKey(e))}hasProvider(e){return!!(this.providers.find(t=>this.equals(t,e))!=null||this.isEvicted(e))}async findProviders(e,t,n){let i=Z(),o=0;return Promise.resolve().then(async()=>{this.log("finding %d-%d new provider(s) for %c",t,this.maxProviders,e);for await(let s of this.findNewProviders(e,n)){if(o===this.maxProviders||n.signal?.aborted===!0)break;if(!this.hasProvider(s)&&(this.log("found %d/%d new providers",o,this.maxProviders),this.providers.push(s),this.safeDispatchEvent("provider",{detail:s}),o++,o===t&&(this.log("session is ready"),i.resolve()),this.providers.length===this.maxProviders)){this.log("found max session peers",o);break}}if(this.log("found %d/%d new session peers",o,this.maxProviders),o<t)throw new Jf(`Found ${o} of ${t} ${this.name} providers for ${e}`)}).catch(s=>{this.log.error("error searching routing for potential session peers for %c",e,s.errors??s),i.reject(s)}),i.promise}};var fh=class{blockstore;datastore;pins;logger;routing;getCodec;getHasher;dns;metrics;log;constructor(e){this.logger=e.logger??So(),this.log=this.logger.forComponent("helia"),this.getHasher=W9(e.hashers,e.loadHasher),this.getCodec=G9(e.codecs,e.loadCodec),this.dns=e.dns??ks(),this.metrics=e.metrics;let t={blockstore:e.blockstore,datastore:e.datastore,logger:this.logger,blockBrokers:[],getHasher:this.getHasher,getCodec:this.getCodec,dns:this.dns,metrics:this.metrics,...e.components??{}};this.routing=t.routing=new rh(t,{routers:(e.routers??[]).flatMap(i=>{let o=[i];return i[Qn]!=null&&o.push(i[Qn]),i[Zn]!=null&&o.push(i[Zn]),o}),providerLookupConcurrency:e.providerLookupConcurrency});let n=new dh(t);this.pins=new Zf(e.datastore,n,this.getCodec),this.blockstore=new nh(n,this.pins,{holdGcLock:e.holdGcLock??!0}),this.datastore=e.datastore,t.blockBrokers=e.blockBrokers.map(i=>i(t))}async start(){await D9(this.datastore),await $t(this.blockstore,this.datastore,this.routing)}async stop(){await tr(this.blockstore,this.datastore,this.routing)}async gc(e={}){let t=await this.blockstore.lock.writeLock();try{let n=this,i=this.blockstore.unwrap();this.log("gc start"),await Lt(i.deleteMany(async function*(){for await(let{cid:o}of i.getAll())try{if(await n.pins.isPinned(o,e))continue;yield o,e.onProgress?.(new M("helia:gc:deleted",o))}catch(s){n.log.error("Error during gc",s),e.onProgress?.(new M("helia:gc:error",s))}}()))}finally{t()}this.log("gc finished")}};var k4=class extends Bs{wantList;network;constructor(e,t){super(e,{...t,name:"helia:bitswap:session"}),this.wantList=e.wantList,this.network=e.network}async queryProvider(e,t,n){this.log("sending WANT-BLOCK for %c to %p",e,t);let i=await this.wantList.wantSessionBlock(e,t,n);if(this.log("%p %s %c",t,i.has?"has":"does not have",e),i.has&&i.block!=null)return i.block;throw new Error("Provider did not have block")}async*findNewProviders(e,t={}){for await(let n of this.network.findProviders(e,t))yield n.id}toEvictionKey(e){return e.toMultihash().bytes}equals(e,t){return e.equals(t)}};function j9(r,e){return new k4(r,e)}var hh=class{blocksReceived;duplicateBlocksReceived;dataReceived;duplicateDataReceived;constructor(e){this.blocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_received_blocks"),this.duplicateBlocksReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_received_blocks"),this.dataReceived=e.metrics?.registerMetricGroup("helia_bitswap_data_received_bytes"),this.duplicateDataReceived=e.metrics?.registerMetricGroup("helia_bitswap_duplicate_data_received_bytes")}updateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.blocksReceived?.increment(n)}updateDuplicateBlocksReceived(e=1,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateBlocksReceived?.increment(n)}updateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.dataReceived?.increment(n)}updateDuplicateDataReceived(e,t){let n={global:e};t!=null&&(n[t.toString()]=e),this.duplicateDataReceived?.increment(n)}};var C4=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 ph(r){let{name:e,metrics:t}=r,n;return t!=null?n=new C4({name:e,metrics:t}):n=new Map,n}function KN(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(ve(t))}return e}var Q9=KN;var mh=class extends be{peers;wants;network;log;sendMessagesDelay;sendMessagesTimeout;hashLoader;sendingMessages;constructor(e,t={}){super(),this.peers=Hl({name:"helia_bitswap_peers",metrics:e.metrics}),this.wants=ph({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(i=>{this.log.error("error receiving bitswap message from %p",n.detail.peer,i)})}),this.network.addEventListener("peer:connected",n=>{this.peerConnected(n.detail).catch(i=>{this.log.error("error processing newly connected bitswap peer %p",n.detail,i)})}),this.network.addEventListener("peer:disconnected",n=>{this.peerDisconnected(n.detail)})}async addEntry(e,t){let n=U(e.multihash.bytes,"base64"),i=this.wants.get(n);i==null&&(i={cid:e,priority:t.priority??1,wantType:t.wantType??yt.WantBlock,cancel:!1,sendDontHave:!0},this.wants.set(n,i)),i.wantType===yt.WantHave&&t.wantType===yt.WantBlock&&(i.wantType=yt.WantBlock),await this.sendMessagesDebounced();try{return t.wantType===yt.WantBlock?(await Nt(this,"block",t?.signal,{filter:a=>J(e.multihash.digest,a.detail.cid.multihash.digest),errorMessage:"Want was aborted"})).detail:(await Nt(this,"presence",t?.signal,{filter:s=>J(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),i.cancel=!0,await this.sendMessagesDebounced())}}async sendMessagesDebounced(){await this.sendingMessages?.promise,clearTimeout(this.sendMessagesTimeout),this.sendMessagesTimeout=setTimeout(()=>{this.sendMessages().catch(e=>{this.log("error sending messages to peers",e)})},this.sendMessagesDelay)}async sendMessages(){this.sendingMessages=Z(),await Promise.all([...this.peers.entries()].map(async([e,t])=>{let n=new Set,i=new ki;for(let[o,s]of this.wants.entries())t.has(o)||s.cancel||(n.add(o),i.addWantlistEntry(s.cid,{cid:s.cid.bytes,priority:s.priority,wantType:s.wantType,cancel:s.cancel,sendDontHave:s.sendDontHave}));if(i.wantlist.size!==0)try{await this.network.sendMessage(e,i);for(let o of n)t.add(o)}catch(o){this.log.error("error sending full wantlist to new peer",o)}})).catch(e=>{this.log.error("error sending messages",e)});for(let[e,t]of this.wants)if(t.cancel){this.wants.delete(e);for(let n of this.peers.values())n.delete(e)}this.sendingMessages.resolve()}has(e){let t=U(e.multihash.bytes,"base64");return this.wants.has(t)}async wantSessionPresence(e,t,n={}){let i=new ki;return i.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:yt.WantHave,priority:1}),await this.network.sendMessage(t,i),(await Nt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&J(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async wantBlock(e,t={}){return this.addEntry(e,{...t,wantType:yt.WantBlock})}async wantSessionBlock(e,t,n={}){let i=new ki;return i.addWantlistEntry(e,{cid:e.bytes,sendDontHave:!0,wantType:yt.WantBlock,priority:1}),await this.network.sendMessage(t,i),(await Nt(this,"presence",n.signal,{filter:s=>t.equals(s.detail.sender)&&J(e.multihash.digest,s.detail.cid.multihash.digest)})).detail}async receivedBlock(e,t){let n=U(e.multihash.bytes,"base64"),i=this.wants.get(n);i!=null&&(i.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 i of t.blocks){if(i.prefix==null||i.data==null)continue;let o=Q9(i.prefix),s=o[0],a=o[1],c=o[2],l=c===Se.code?Se:await this.hashLoader?.getHasher(c);if(l==null){this.log.error("unknown hash algorithm",c);continue}let u=l.digest(i.data);u.then!=null&&(u=await u);let d=B.create(s===0?0:1,a,u);this.log("received block from %p for %c",e,d),this.safeDispatchEvent("block",{detail:{sender:e,cid:d,block:i.data}}),this.safeDispatchEvent("presence",{detail:{sender:e,cid:d,has:!0,block:i.data}});let h=U(d.multihash.bytes,"base64"),f=this.wants.get(h);f!=null&&(f.cancel=!0,n=!0)}for(let{cid:i,type:o}of t.blockPresences){let s=B.decode(i);this.log("received %s from %p for %c",o,e,s),this.safeDispatchEvent("presence",{detail:{sender:e,cid:s,has:o===sn.HaveBlock}})}n&&await this.sendMessagesDebounced()}async peerConnected(e){let t=new Set,n=new ki(!0);for(let[i,o]of this.wants.entries())o.cancel||(t.add(i),n.addWantlistEntry(o.cid,{cid:o.cid.bytes,priority:1,wantType:yt.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(i){this.log.error("error sending full wantlist to new peer %p",e,i)}}peerDisconnected(e){this.peers.delete(e)}start(){}stop(){this.peers.clear(),clearTimeout(this.sendMessagesTimeout)}};var gh=class{log;logger;stats;network;blockstore;peerWantLists;wantList;constructor(e,t={}){this.logger=e.logger,this.log=e.logger.forComponent("helia:bitswap"),this.blockstore=e.blockstore,this.stats=new hh(e),this.network=new rf(e,t),this.peerWantLists=new kf({...e,network:this.network},t),this.wantList=new mh({...e,network:this.network},t)}createSession(e={}){return j9({wantList:this.wantList,network:this.network,logger:this.logger},e)}async want(e,t={}){let n=new AbortController,i=de([n.signal,t.signal]);n.signal,this.network.findAndConnect(e,{...t,signal:i}).catch(o=>{n.signal.aborted||this.log.error("error during finding and connect for cid %c",e,o)});try{return(await this.wantList.wantBlock(e,{...t,signal:i})).block}finally{n.abort(),i.clear()}}async notify(e,t,n={}){await Promise.all([this.peerWantLists.receivedBlock(e,n),this.wantList.receivedBlock(e,n)])}getWantlist(){return[...this.wantList.wants.values()].filter(e=>!e.cancel).map(e=>({cid:e.cid,priority:e.priority,wantType:e.wantType}))}getPeerWantlist(e){return this.peerWantLists.wantListForPeer(e)}async start(){this.wantList.start(),await this.network.start()}async stop(){this.wantList.stop(),await this.network.stop()}};var Z9=(r,e={})=>new gh(r,e);var P4=class{bitswap;started;constructor(e,t={}){let{getHasher:n}=e;this.bitswap=Z9(e,{hashLoader:{getHasher:async i=>n(i)},...t}),this.started=!1}isStarted(){return this.started}async start(){await this.bitswap.start(),this.started=!0}async stop(){await this.bitswap.stop(),this.started=!1}async announce(e,t,n){await this.bitswap.notify(e,t,n)}async retrieve(e,t={}){return this.bitswap.want(e,t)}createSession(e){let t=this.bitswap.createSession(e);return{announce:async(n,i,o)=>{await this.bitswap.notify(n,i,o)},retrieve:async(n,i)=>t.retrieve(n,i)}}};function Jl(r={}){return e=>new P4(e,r)}var yh=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,i){return this.readAtomically(()=>{let o=0,s=0,a=this.peekChar();if(a===void 0)return;let c=a==="0",l=2**(8*i)-1;for(;;){let u=this.readAtomically(()=>{let d=this.readChar();if(d===void 0)return;let h=Number.parseInt(d,e);if(!Number.isNaN(h))return h});if(u===void 0)break;if(o*=e,o+=u,o>l||(s+=1,t!==void 0&&s>t))return}if(s!==0)return!n&&c&&s>1?void 0:o})}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 i=n*2;if(n<t.length-3){let s=this.readSeparator(":",n,()=>this.readIPv4Addr());if(s!==void 0)return t[i]=s[0],t[i+1]=s[1],t[i+2]=s[2],t[i+3]=s[3],[i+4,!0]}let o=this.readSeparator(":",n,()=>this.readNumber(16,4,!0,2));if(o===void 0)return[i,!1];t[i]=o>>8,t[i+1]=o&255}return[t.length,!1]};return this.readAtomically(()=>{let t=new Uint8Array(16),[n,i]=e(t);if(n===16)return t;if(i||this.readGivenChar(":")===void 0||this.readGivenChar(":")===void 0)return;let o=new Uint8Array(14),s=16-(n+2),[a]=e(o.subarray(0,s));return t.set(o.subarray(0,a),16-a),t})}readIPAddr(){return this.readIPv4Addr()??this.readIPv6Addr()}};var J9=45,GN=15,nc=new yh;function wh(r){if(!(r.length>GN))return nc.new(r).parseWith(()=>nc.readIPv4Addr())}function xh(r){if(r.includes("%")&&(r=r.split("%")[0]),!(r.length>J9))return nc.new(r).parseWith(()=>nc.readIPv6Addr())}function Ms(r,e=!1){if(r.includes("%")&&(r=r.split("%")[0]),r.length>J9)return;let t=nc.new(r).parseWith(()=>nc.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 Bn(r){return!!wh(r)}function ic(r){return!!xh(r)}function bh(r){return!!Ms(r)}var tx=ut(ex(),1),WN=["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"],YN=WN.map(r=>new tx.Netmask(r));function R4(r){for(let e of YN)if(e.contains(r))return!0;return!1}function XN(r){return/^::ffff:([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$/.test(r)}function jN(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"),i=`${parseInt(n.substring(0,2),16)}.${parseInt(n.substring(2),16)}.${parseInt(t.substring(0,2),16)}.${parseInt(t.substring(2),16)}`;return R4(i)}function QN(r){return/^::ffff:([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/.test(r)}function ZN(r){let e=r.split(":"),t=e[e.length-1];return R4(t)}function JN(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 br(r){return Bn(r)?R4(r):XN(r)?jN(r):QN(r)?ZN(r):ic(r)?JN(r):void 0}var eL=r=>r.toString().split("/").slice(1),oc=r=>({match:e=>e.length<1?!1:r(e[0])?e.slice(1):!1,pattern:"fn"}),me=r=>({match:e=>oc(t=>t===r).match(e),pattern:r}),Fs=()=>({match:r=>oc(e=>typeof e=="string").match(r),pattern:"{string}"}),tu=()=>({match:r=>oc(e=>!isNaN(parseInt(e))).match(r),pattern:"{number}"}),qe=()=>({match:r=>{if(r.length<2||r[0]!=="p2p"&&r[0]!=="ipfs")return!1;if(r[1].startsWith("Q")||r[1].startsWith("1"))try{ye.decode(`z${r[1]}`)}catch{return!1}else return!1;return r.slice(2)},pattern:"/p2p/{peerid}"}),ru=()=>({match:r=>{if(r.length<2||r[0]!=="certhash")return!1;try{ll.decode(r[1])}catch{return!1}return r.slice(2)},pattern:"/certhash/{certhash}"}),Oe=r=>({match:e=>{let t=r.match(e);return t===!1?e:t},pattern:`optional(${r.pattern})`}),cr=(...r)=>({match:e=>{let t;for(let n of r){let i=n.match(e);i!==!1&&(t==null||i.length<t.length)&&(t=i)}return t??!1},pattern:`or(${r.map(e=>e.pattern).join(", ")})`}),Ee=(...r)=>({match:e=>{for(let t of r){let n=t.match(e);if(n===!1)return!1;e=n}return e},pattern:`and(${r.map(e=>e.pattern).join(", ")})`});function Ke(...r){function e(i){let o=eL(i);for(let s of r){let a=s.match(o);if(a===!1)return!1;o=a}return o}function t(i){return e(i)!==!1}function n(i){let o=e(i);return o===!1?!1:o.length===0}return{matchers:r,matches:t,exactMatch:n}}var Eh=Ee(me("dns4"),Fs()),Sh=Ee(me("dns6"),Fs()),Ah=Ee(me("dnsaddr"),Fs()),N4=Ee(me("dns"),Fs()),Bte=Ke(Eh,Oe(qe())),Mte=Ke(Sh,Oe(qe())),Fte=Ke(Ah,Oe(qe())),nu=Ke(cr(N4,Ah,Eh,Sh),Oe(qe())),rx=Ee(me("ip4"),oc(Bn)),nx=Ee(me("ip6"),oc(ic)),L4=cr(rx,nx),Li=cr(L4,N4,Eh,Sh,Ah),ix=Ke(cr(L4,Ee(cr(N4,Ah,Eh,Sh),Oe(qe())))),O4=Ke(rx),B4=Ke(nx),ox=Ke(L4),M4=Ee(Li,me("tcp"),tu()),iu=Ee(Li,me("udp"),tu()),Us=Ke(Ee(M4,Oe(qe()))),Ute=Ke(iu),F4=Ee(iu,me("quic"),Oe(qe())),Th=Ee(iu,me("quic-v1"),Oe(qe())),tL=cr(F4,Th),Hte=Ke(F4),sx=Ke(Th),D4=cr(Li,M4,iu,F4,Th),ax=cr(Ee(D4,me("ws"),Oe(qe()))),Oi=Ke(ax),cx=cr(Ee(D4,me("wss"),Oe(qe())),Ee(D4,me("tls"),Oe(Ee(me("sni"),Fs())),me("ws"),Oe(qe()))),Hs=Ke(cx),lx=Ee(iu,me("webrtc-direct"),Oe(ru()),Oe(ru()),Oe(qe())),ou=Ke(lx),ux=Ee(Th,me("webtransport"),Oe(ru()),Oe(ru()),Oe(qe())),U4=Ke(ux),vh=cr(ax,cx,Ee(M4,Oe(qe())),Ee(tL,Oe(qe())),Ee(Li,Oe(qe())),lx,ux,qe()),Ih=Ke(vh),rL=Ee(vh,me("p2p-circuit"),qe()),Rr=Ke(rL),nL=cr(Ee(vh,me("p2p-circuit"),me("webrtc"),Oe(qe())),Ee(vh,me("webrtc"),Oe(qe())),Ee(me("webrtc"),Oe(qe()))),su=Ke(nL),iL=cr(Ee(Li,me("tcp"),tu(),me("http"),Oe(qe())),Ee(Li,me("http"),Oe(qe()))),dx=Ke(iL),oL=cr(Ee(Li,me("tcp"),cr(Ee(me("443"),me("http")),Ee(tu(),me("https"))),Oe(qe())),Ee(Li,me("tls"),me("http"),Oe(qe())),Ee(Li,me("https"),Oe(qe()))),fx=Ke(oL),sL=cr(Ee(me("memory"),Fs(),Oe(qe()))),zte=Ke(sL);function hx(r,e,t){let n=0;for(let i of r)if(!(n<e)){if(n>t)break;if(i!==255)return!1;n++}return!0}function px(r,e,t,n){let i=0;for(let o of r)if(!(i<t)){if(i>n)break;if(o!==e[i])return!1;i++}return!0}function H4(r){switch(r.length){case zs:return r.join(".");case $s:{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 mx(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 i=t+1;i<r.length;i++)if(r[i]!=0)return-1;break}return e}function gx(r){let e="0x";for(let t of r)e+=(t>>4).toString(16)+(t&15).toString(16);return e}var zs=4,$s=16,Wte=parseInt("0xFFFF",16),aL=new Uint8Array([0,0,0,0,0,0,0,0,0,0,255,255]);function au(r,e){e.length===$s&&r.length===zs&&hx(e,0,11)&&(e=e.slice(12)),e.length===zs&&r.length===$s&&px(r,aL,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 i=0;i<t;i++)n[i]=r[i]&e[i];return n}function yx(r,e){if(typeof e=="string"&&(e=Ms(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 z4(r){let[e,t]=r.split("/");if(!e||!t)throw new Error("Failed to parse given CIDR: "+r);let n=zs,i=wh(e);if(i==null&&(n=$s,i=xh(e),i==null))throw new Error("Failed to parse given CIDR: "+r);let o=parseInt(t,10);if(Number.isNaN(o)||String(o).length!==t.length||o<0||o>n*8)throw new Error("Failed to parse given CIDR: "+r);let s=$4(o,8*n);return{network:au(i,s),mask:s}}function $4(r,e){if(e!==8*zs&&e!==8*$s)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 i=0;i<t;i++){if(r>=8){n[i]=255,r-=8;continue}n[i]=255-(255>>r),r=0}return n}var Vs=class{constructor(e,t){if(t==null)({network:this.network,mask:this.mask}=z4(e));else{let n=Ms(e);if(n==null)throw new Error("Failed to parse network");t=String(t);let i=parseInt(t,10);if(Number.isNaN(i)||String(i).length!==t.length||i<0||i>n.length*8){let o=Ms(t);if(o==null)throw new Error("Failed to parse mask");this.mask=o}else this.mask=$4(i,8*n.length);this.network=au(n,this.mask)}}contains(e){return yx({network:this.network,mask:this.mask},e)}toString(){let e=mx(this.mask),t=e!==-1?String(e):gx(this.mask);return H4(this.network)+"/"+t}};function wx(r,e){return new Vs(r).contains(e)}var xx=Bn,cL=ic,V4=function(r){let e=0;if(r=r.toString().trim(),xx(r)){let t=new Uint8Array(e+4);return r.split(/\./g).forEach(n=>{t[e++]=parseInt(n,10)&255}),t}if(cL(r)){let t=r.split(":",8),n;for(n=0;n<t.length;n++){let o=xx(t[n]),s;o&&(s=V4(t[n]),t[n]=U(s.slice(0,2),"base16")),s!=null&&++n<8&&t.splice(n,0,U(s.slice(2,4),"base16"))}if(t[0]==="")for(;t.length<8;)t.unshift("0");else if(t[t.length-1]==="")for(;t.length<8;)t.push("0");else if(t.length<8){for(n=0;n<t.length&&t[n]!=="";n++);let o=[n,1];for(n=9-t.length;n>0;n--)o.push("0");t.splice.apply(t,o)}let i=new Uint8Array(e+16);for(n=0;n<t.length;n++){let o=parseInt(t[n],16);i[e++]=o>>8&255,i[e++]=o&255}return i}throw new Error("invalid ip address")},bx=function(r,e=0,t){e=~~e,t=t??r.length-e;let n=new DataView(r.buffer);if(t===4){let i=[];for(let o=0;o<t;o++)i.push(r[e+o]);return i.join(".")}if(t===16){let i=[];for(let o=0;o<t;o+=2)i.push(n.getUint16(e+o).toString(16));return i.join(":").replace(/(^|:)0(:0)*:0(:|$)/,"$1::$3").replace(/:{3,4}/,"::")}return""};var sc={},q4={},uL=[[4,32,"ip4"],[6,16,"tcp"],[33,16,"dccp"],[41,128,"ip6"],[42,-1,"ip6zone"],[43,8,"ipcidr"],[53,-1,"dns",!0],[54,-1,"dns4",!0],[55,-1,"dns6",!0],[56,-1,"dnsaddr",!0],[132,16,"sctp"],[273,16,"udp"],[275,0,"p2p-webrtc-star"],[276,0,"p2p-webrtc-direct"],[277,0,"p2p-stardust"],[280,0,"webrtc-direct"],[281,0,"webrtc"],[290,0,"p2p-circuit"],[301,0,"udt"],[302,0,"utp"],[400,-1,"unix",!1,!0],[421,-1,"ipfs"],[421,-1,"p2p"],[443,0,"https"],[444,96,"onion"],[445,296,"onion3"],[446,-1,"garlic64"],[448,0,"tls"],[449,-1,"sni"],[460,0,"quic"],[461,0,"quic-v1"],[465,0,"webtransport"],[466,-1,"certhash"],[477,0,"ws"],[478,0,"wss"],[479,0,"p2p-websocket-star"],[480,0,"http"],[481,-1,"http-path"],[777,-1,"memory"]];uL.forEach(r=>{let e=dL(...r);q4[e.code]=e,sc[e.name]=e});function dL(r,e,t,n,i){return{code:r,size:e,name:t,resolvable:!!n,path:!!i}}function se(r){if(typeof r=="number"){if(q4[r]!=null)return q4[r];throw new Error(`no protocol with code: ${r}`)}else if(typeof r=="string"){if(sc[r]!=null)return sc[r];throw new Error(`no protocol with name: ${r}`)}throw new Error(`invalid protocol id type: ${typeof r}`)}var fL=se("ip4"),hL=se("ip6"),pL=se("ipcidr");function Y4(r,e){switch(se(r).code){case 4:case 41:return gL(e);case 42:return W4(e);case 43:return U(e,"base10");case 6:case 273:case 33:case 132:return Sx(e).toString();case 53:case 54:case 55:case 56:case 400:case 449:case 777:return W4(e);case 421:return bL(e);case 444:return Ex(e);case 445:return Ex(e);case 466:return xL(e);case 481:return globalThis.encodeURIComponent(W4(e));default:return U(e,"base16")}}function X4(r,e){switch(se(r).code){case 4:return vx(e);case 41:return vx(e);case 42:return G4(e);case 43:return C(e,"base10");case 6:case 273:case 33:case 132:return Q4(parseInt(e,10));case 53:case 54:case 55:case 56:case 400:case 449:case 777:return G4(e);case 421:return yL(e);case 444:return vL(e);case 445:return EL(e);case 466:return wL(e);case 481:return G4(globalThis.decodeURIComponent(e));default:return C(e,"base16")}}function j4(r){let e,t;if(r.stringTuples().forEach(([n,i])=>{(n===fL.code||n===hL.code)&&(t=i),n===pL.code&&(e=i)}),e==null||t==null)throw new Error("Invalid multiaddr");return new Vs(t,e)}var K4=Object.values(ps).map(r=>r.decoder),mL=function(){let r=K4[0].or(K4[1]);return K4.slice(2).forEach(e=>r=r.or(e)),r}();function vx(r){if(!bh(r))throw new Error("invalid ip address");return V4(r)}function gL(r){let e=bx(r,0,r.length);if(e==null)throw new Error("ipBuff is required");if(!bh(e))throw new Error("invalid ip address");return e}function Q4(r){let e=new ArrayBuffer(2);return new DataView(e).setUint16(0,r),new Uint8Array(e)}function Sx(r){return new DataView(r.buffer).getUint16(r.byteOffset)}function G4(r){let e=C(r),t=Uint8Array.from(Ze(e.length));return ge([t,e],t.length+e.length)}function W4(r){let e=hr(r);if(r=r.slice(ve(e)),r.length!==e)throw new Error("inconsistent lengths");return U(r)}function yL(r){let e;r[0]==="Q"||r[0]==="1"?e=pe(ye.decode(`z${r}`)).bytes:e=B.parse(r).multihash.bytes;let t=Uint8Array.from(Ze(e.length));return ge([t,e],t.length+e.length)}function wL(r){let e=mL.decode(r),t=Uint8Array.from(Ze(e.length));return ge([t,e],t.length+e.length)}function xL(r){let e=hr(r),t=r.slice(ve(e));if(t.length!==e)throw new Error("inconsistent lengths");return"u"+U(t,"base64url")}function bL(r){let e=hr(r),t=r.slice(ve(e));if(t.length!==e)throw new Error("inconsistent lengths");return U(t,"base58btc")}function vL(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=kt.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 i=Q4(n);return ge([t,i],t.length+i.length)}function EL(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=kt.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 i=Q4(n);return ge([t,i],t.length+i.length)}function Ex(r){let e=r.slice(0,r.length-2),t=r.slice(r.length-2),n=U(e,"base32"),i=Sx(t);return`${n}:${i}`}function Ax(r){r=Z4(r);let e=[],t=[],n=null,i=r.split("/").slice(1);if(i.length===1&&i[0]==="")return{bytes:new Uint8Array,string:"/",tuples:[],stringTuples:[],path:null};for(let o=0;o<i.length;o++){let s=i[o],a=se(s);if(a.size===0){e.push([a.code]),t.push([a.code]);continue}if(o++,o>=i.length)throw new _h("invalid address: "+r);if(a.path===!0){n=Z4(i.slice(o).join("/")),e.push([a.code,X4(a.code,n)]),t.push([a.code,n]);break}let c=X4(a.code,i[o]);e.push([a.code,c]),t.push([a.code,Y4(a.code,c)])}return{string:Tx(t),bytes:kh(e),tuples:e,stringTuples:t,path:n}}function J4(r){let e=[],t=[],n=null,i=0;for(;i<r.length;){let o=hr(r,i),s=ve(o),a=se(o),c=SL(a,r.slice(i+s));if(c===0){e.push([o]),t.push([o]),i+=s;continue}let l=r.slice(i+s,i+s+c);if(i+=c+s,i>r.length)throw new _h("Invalid address Uint8Array: "+U(r,"base16"));e.push([o,l]);let u=Y4(o,l);if(t.push([o,u]),a.path===!0){n=u;break}}return{bytes:Uint8Array.from(r),string:Tx(t),tuples:e,stringTuples:t,path:n}}function Tx(r){let e=[];return r.map(t=>{let n=se(t[0]);return e.push(n.name),t.length>1&&t[1]!=null&&e.push(t[1]),null}),Z4(e.join("/"))}function kh(r){return ge(r.map(e=>{let t=se(e[0]),n=Uint8Array.from(Ze(t.code));return e.length>1&&e[1]!=null&&(n=ge([n,e[1]])),n}))}function SL(r,e){if(r.size>0)return r.size/8;if(r.size===0)return 0;{let t=hr(e instanceof Uint8Array?e:Uint8Array.from(e));return t+ve(t)}}function Z4(r){return"/"+r.trim().split("/").filter(e=>e).join("/")}var _h=class extends Error{static name="ParseError";name="ParseError";constructor(e){super(`Error parsing address: ${e}`)}};var AL=Symbol.for("nodejs.util.inspect.custom"),t6=Symbol.for("@multiformats/js-multiaddr/multiaddr"),TL=[se("dns").code,se("dns4").code,se("dns6").code,se("dnsaddr").code],e6=class extends Error{constructor(e="No available resolver"){super(e),this.name="NoAvailableResolverError"}},Ch=class r{bytes;#e;#r;#n;#m;[t6]=!0;constructor(e){e==null&&(e="");let t;if(e instanceof Uint8Array)t=J4(e);else if(typeof e=="string"){if(e.length>0&&e.charAt(0)!=="/")throw new Error(`multiaddr "${e}" must start with a "/"`);t=Ax(e)}else if(Po(e))t=J4(e.bytes);else throw new Error("addr must be a string, Buffer, or another Multiaddr");this.bytes=t.bytes,this.#e=t.string,this.#r=t.tuples,this.#n=t.stringTuples,this.#m=t.path}toString(){return this.#e}toJSON(){return this.toString()}toOptions(){let e,t,n,i,o="",s=se("tcp"),a=se("udp"),c=se("ip4"),l=se("ip6"),u=se("dns6"),d=se("ip6zone");for(let[f,p]of this.stringTuples())f===d.code&&(o=`%${p??""}`),TL.includes(f)&&(t=s.name==="tcp"?"tcp":"udp",i=443,n=`${p??""}${o}`,e=f===u.code?6:4),(f===s.code||f===a.code)&&(t=se(f).name==="tcp"?"tcp":"udp",i=parseInt(p??"")),(f===c.code||f===l.code)&&(t=se(f).name==="tcp"?"tcp":"udp",n=`${p??""}${o}`,e=f===l.code?6:4);if(e==null||t==null||n==null||i==null)throw new Error('multiaddr must have a valid format: "/{ip4, ip6, dns4, dns6, dnsaddr}/{address}/{tcp, udp}/{port}".');return{family:e,host:n,transport:t,port:i}}protos(){return this.#r.map(([e])=>Object.assign({},se(e)))}protoCodes(){return this.#r.map(([e])=>e)}protoNames(){return this.#r.map(([e])=>se(e).name)}tuples(){return this.#r.map(([e,t])=>t==null?[e]:[e,t])}stringTuples(){return this.#n.map(([e,t])=>t==null?[e]:[e,t])}encapsulate(e){return e=new r(e),new r(this.toString()+e.toString())}decapsulate(e){let t=e.toString(),n=this.toString(),i=n.lastIndexOf(t);if(i<0)throw new Error(`Address ${this.toString()} does not contain subaddress: ${e.toString()}`);return new r(n.slice(0,i))}decapsulateCode(e){let t=this.tuples();for(let n=t.length-1;n>=0;n--)if(t[n][0]===e)return new r(kh(t.slice(0,n)));return this}getPeerId(){try{let e=[];this.stringTuples().forEach(([n,i])=>{n===sc.p2p.code&&e.push([n,i]),n===sc["p2p-circuit"].code&&(e=[])});let t=e.pop();if(t?.[1]!=null){let n=t[1];return n[0]==="Q"||n[0]==="1"?U(ye.decode(`z${n}`),"base58btc"):U(B.parse(n).multihash.bytes,"base58btc")}return null}catch{return null}}getPath(){return this.#m}equals(e){return J(this.bytes,e.bytes)}async resolve(e){let t=this.protos().find(o=>o.resolvable);if(t==null)return[this];let n=ac.get(t.name);if(n==null)throw new e6(`no available resolver for ${t.name}`);return(await n(this,e)).map(o=>K(o))}nodeAddress(){let e=this.toOptions();if(e.transport!=="tcp"&&e.transport!=="udp")throw new Error(`multiaddr must have a valid format - no protocol with name: "${e.transport}". Must have a valid transport protocol: "{tcp, udp}"`);return{family:e.family,address:e.host,port:e.port}}isThinWaistAddress(e){let t=(e??this).protos();return!(t.length!==2||t[0].code!==4&&t[0].code!==41||t[1].code!==6&&t[1].code!==273)}[AL](){return`Multiaddr(${this.#e})`}};var ac=new Map;function Po(r){return!!r?.[t6]}function K(r){return new Ch(r)}var IL=[se("tcp").code,se("dns").code,se("dnsaddr").code,se("dns4").code,se("dns6").code];function Ix(r){return Cx("sni",r)?.[1]}function _x(r){let e=Cx("tcp",r)?.[1];return e==null?"":`:${e}`}function Cx(r,e){let t;try{t=se(r).code}catch{return}for(let[n,i]of e)if(n===t&&i!=null)return[n,i]}function kx(r){return r.some(([e,t])=>e===se("tls").code)}function Mn(r,e,t){let n=Px[se(r).name];if(n==null)throw new Error(`Can't interpret protocol ${se(r).name}`);let i=n(e,t);return r===se("ip6").code?`[${i}]`:i}var Px={ip4:(r,e)=>r,ip6:(r,e)=>e.length===0?r:`[${r}]`,tcp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`tcp://${Mn(t[0],t[1]??"",e)}:${r}`},udp:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`udp://${Mn(t[0],t[1]??"",e)}:${r}`},dnsaddr:(r,e)=>r,dns4:(r,e)=>r,dns6:(r,e)=>r,dns:(r,e)=>r,ipfs:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Mn(t[0],t[1]??"",e)}`},p2p:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return`${Mn(t[0],t[1]??"",e)}`},http:(r,e)=>{let t=kx(e),n=Ix(e),i=_x(e);if(t&&n!=null)return`https://${n}${i}`;let o=t?"https://":"http://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Mn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${o}${a}`},"http-path":(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Mn(t[0],t[1]??"",e),i=decodeURIComponent(r);return`${n}/${i}`},tls:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Mn(t[0],t[1]??"",e)},sni:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");return Mn(t[0],t[1]??"",e)},https:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Mn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`https://${n}`},ws:(r,e)=>{let t=kx(e),n=Ix(e),i=_x(e);if(t&&n!=null)return`wss://${n}${i}`;let o=t?"wss://":"ws://",s=e.pop();if(s==null)throw new Error("Unexpected end of multiaddr");let a=Mn(s[0],s[1]??"",e);return a=a.replace("tcp://",""),`${o}${a}`},wss:(r,e)=>{let t=e.pop();if(t==null)throw new Error("Unexpected end of multiaddr");let n=Mn(t[0],t[1]??"",e);return n=n.replace("tcp://",""),`wss://${n}`}};function Ph(r,e){let n=K(r).stringTuples(),i=n.pop();if(i==null)throw new Error("Unexpected end of multiaddr");let o=se(i[0]),s=Px[o.name];if(s==null)throw new Error(`No interpreter found for ${o.name}`);let a=s(i[1]??"",n);return e?.assumeHttp!==!1&&IL.includes(i[0])&&(a=a.replace(/^.*:\/\//,""),i[1]==="443"?a=`https://${a}`:a=`http://${a}`),(a.startsWith("http://")||a.startsWith("https://")||a.startsWith("ws://")||a.startsWith("wss://"))&&(a=new URL(a).toString(),a.endsWith("/")&&(a=a.substring(0,a.length-1))),a}var Rh=class{url;#e=0;#r=0;#n=0;#m=0;#u=new Map;log;transformRequestInit;constructor(e,{logger:t,transformRequestInit:n}){this.url=e instanceof URL?e:new URL(e),this.transformRequestInit=n,this.log=t.forComponent(`helia:trustless-gateway-block-broker:${this.url.hostname}`)}#A(e){let t=e.multihash.bytes;return St.encode(t)}async getRawBlock(e,t){let n=new URL(this.url.toString());if(n.pathname=`/ipfs/${e.toString()}`,n.search="?format=raw",t?.aborted===!0)throw new Error(`Signal to fetch raw block for CID ${e} from gateway ${this.url} was aborted prior to fetch`);let i=this.#A(e),o=new AbortController,s=()=>{o.abort()};t?.addEventListener("abort",s);try{let a=this.#u.get(i);if(a==null){this.#e++;let c={signal:o.signal,headers:{Accept:"application/vnd.ipld.raw"},cache:"force-cache"},l=this.transformRequestInit!=null?await this.transformRequestInit(c):c;a=fetch(n.toString(),l).then(async u=>{if(this.log("GET %s %d",n,u.status),!u.ok)throw this.#r++,new Error(`unable to fetch raw block for CID ${e} from gateway ${this.url}`);return this.#m++,new Uint8Array(await u.arrayBuffer())}),this.#u.set(i,a)}return await a}catch{throw t?.aborted===!0?new Error(`fetching raw block for CID ${e} from gateway ${this.url} was aborted`):(this.#r++,new Error(`unable to fetch raw block for CID ${e}`))}finally{t?.removeEventListener("abort",s),this.#u.delete(i)}}reliability(){return this.#e===0?1:this.#n>0?-1/0:this.#m/(this.#e+this.#r*3)}incrementInvalidBlocks(){this.#n++}getStats(){return{attempts:this.#e,errors:this.#r,invalidBlocks:this.#n,successes:this.#m,pendingResponses:this.#u.size}}};function _L(r,e,t){return r.filter(n=>{if(fx.matches(n)||e&&dx.matches(n))return t||nu.matches(n)?!0:br(n.toOptions().host)===!1;if(!e&&t){let{host:i}=n.toOptions();if(i==="127.0.0.1"||i==="localhost"||i.endsWith(".localhost"))return!0}return!1})}async function*Dh(r,e,t,n,i,o={}){for await(let s of e.findProviders(r,o)){let a=_L(s.multiaddrs,n,i);if(a.length===0)continue;let c=Ph(a[0]);yield new Rh(c,{logger:t,transformRequestInit:o.transformRequestInit})}}var r6=class extends Bs{routing;allowInsecure;allowLocal;transformRequestInit;constructor(e,t){super(e,{...t,name:"helia:trustless-gateway:session"}),this.routing=e.routing,this.allowInsecure=t.allowInsecure??Nh,this.allowLocal=t.allowLocal??Lh,this.transformRequestInit=t.transformRequestInit}async queryProvider(e,t,n){this.log("fetching BLOCK for %c from %s",e,t.url);let i=await t.getRawBlock(e,n.signal);return this.log.trace("got block for %c from %s",e,t.url),await n.validateFn?.(i),i}async*findNewProviders(e,t={}){yield*Dh(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})}toEvictionKey(e){return e.url.toString()}equals(e,t){return e.url.toString()===t.url.toString()}};function Rx(r,e){return new r6(r,e)}var Oh=class{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??Nh,this.allowLocal=t.allowLocal??Lh,this.transformRequestInit=t.transformRequestInit}async retrieve(e,t={}){let n=[];for await(let i of Dh(e,this.routing,this.logger,this.allowInsecure,this.allowLocal,{...t,transformRequestInit:this.transformRequestInit})){this.log("getting block for %c from %s",e,i.url);try{let o=await i.getRawBlock(e,t.signal);this.log.trace("got block for %c from %s",e,i.url);try{await t.validateFn?.(o)}catch(s){this.log.error("failed to validate block for %c from %s",e,i.url,s);continue}return o}catch(o){if(this.log.error("failed to get block for %c from %s",e,i.url,o),o instanceof Error?n.push(o):n.push(new Error(`Unable to fetch raw block for CID ${e} from gateway ${i.url}`)),t.signal?.aborted===!0){this.log.trace("request aborted while fetching raw block for CID %c from gateway %s",e,i.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 Rx({logger:this.logger,routing:this.routing},{...e,allowLocal:this.allowLocal,allowInsecure:this.allowInsecure,transformRequestInit:this.transformRequestInit})}};var Nh=!1,Lh=!1;function cu(r={}){return e=>new Oh(e,r)}async function*Bh(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 Mx=ut(Mh(),1);var Fh=class extends Error{static name="SignatureCreationError";constructor(e="Record signature creation failed"){super(e),this.name="SignatureCreationError"}},Fn=class extends Error{static name="SignatureVerificationError";constructor(e="Record signature verification failed"){super(e),this.name="SignatureVerificationError"}},Uh=class extends Error{static name="RecordExpiredError";constructor(e="Record has expired"){super(e),this.name="RecordExpiredError"}},qs=class extends Error{static name="UnsupportedValidityError";constructor(e="The validity type is unsupported"){super(e),this.name="UnsupportedValidityError"}},Hh=class extends Error{static name="RecordTooLargeError";constructor(e="The record is too large"){super(e),this.name="RecordTooLargeError"}},lu=class extends Error{static name="InvalidValueError";constructor(e="Value must be a valid content path starting with /"){super(e),this.name="InvalidValueError"}},zh=class extends Error{static name="InvalidRecordDataError";constructor(e="Invalid record data"){super(e),this.name="InvalidRecordDataError"}},uu=class extends Error{static name="InvalidEmbeddedPublicKeyError";constructor(e="Invalid embedded public key"){super(e),this.name="InvalidEmbeddedPublicKeyError"}};var Wt;(function(r){let e;(function(i){i.EOL="EOL"})(e=r.ValidityType||(r.ValidityType={}));let t;(function(i){i[i.EOL=0]="EOL"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.ValidityType||(r.ValidityType={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{s.lengthDelimited!==!1&&o.fork(),i.value!=null&&(o.uint32(10),o.bytes(i.value)),i.signatureV1!=null&&(o.uint32(18),o.bytes(i.signatureV1)),i.validityType!=null&&(o.uint32(24),r.ValidityType.codec().encode(i.validityType,o)),i.validity!=null&&(o.uint32(34),o.bytes(i.validity)),i.sequence!=null&&(o.uint32(40),o.uint64(i.sequence)),i.ttl!=null&&(o.uint32(48),o.uint64(i.ttl)),i.pubKey!=null&&(o.uint32(58),o.bytes(i.pubKey)),i.signatureV2!=null&&(o.uint32(66),o.bytes(i.signatureV2)),i.data!=null&&(o.uint32(74),o.bytes(i.data)),s.lengthDelimited!==!1&&o.ldelim()},(i,o,s={})=>{let a={},c=o==null?i.len:i.pos+o;for(;i.pos<c;){let l=i.uint32();switch(l>>>3){case 1:{a.value=i.bytes();break}case 2:{a.signatureV1=i.bytes();break}case 3:{a.validityType=r.ValidityType.codec().decode(i);break}case 4:{a.validity=i.bytes();break}case 5:{a.sequence=i.uint64();break}case 6:{a.ttl=i.uint64();break}case 7:{a.pubKey=i.bytes();break}case 8:{a.signatureV2=i.bytes();break}case 9:{a.data=i.bytes();break}default:{i.skipType(l&7);break}}}return a})),n),r.encode=i=>re(i,r.codec()),r.decode=(i,o)=>te(i,r.codec(),o)})(Wt||(Wt={}));var kL=we("ipns:utils"),Dx=C("/ipns/"),CL=114,PL=0,RL=18;function du(r){let e;if(r.pubKey!=null)try{e=wt(r.pubKey)}catch(t){throw kL.error(t),t}if(e!=null)return e}function Nx(r,e,t){let n=C(e);return ge([r,t,n])}function Vh(r){let e=C("ipns-signature:");return ge([e,r])}function Ro(r){return"signatureV1"in r?Wt.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}):Wt.encode({pubKey:r.pubKey,signatureV2:r.signatureV2,data:r.data})}function Dr(r){let e=Wt.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 Fn("Missing data or signatureV2");let t=Ox(e.data),n=DL(t.Value),i=U(t.Validity);if(e.value!=null&&e.signatureV1!=null)return NL(e),{value:n,validityType:Wt.ValidityType.EOL,validity:i,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:Wt.ValidityType.EOL,validity:i,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 Bi(r){return ge([Dx,r.bytes])}function cc(r){let e=pe(r.slice(Dx.length));if(!$h(e,PL)&&!$h(e,RL))throw new oo("Multihash in IPNS key was not identity or sha2-256");return e}function Lx(r,e,t,n,i){let o;if(e===Wt.ValidityType.EOL)o=0;else throw new qs("The validity type is unsupported");return Ri({Value:r,Validity:t,ValidityType:o,Sequence:n,TTL:i})}function Ox(r){let e=xr(r);if(e.ValidityType===0)e.ValidityType=Wt.ValidityType.EOL;else throw new qs("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 DL(r){let e=U(r).trim();if(e.startsWith("/"))return e;try{return`/ipfs/${B.decode(r).toV1().toString()}`}catch{}try{return`/ipfs/${B.parse(e).toV1().toString()}`}catch{}throw new lu("Value must be a valid content path starting with /")}function Bx(r){if(r!=null){let e=BL(r);if(e!=null)return e.code===CL?`/ipns/${e.toString(mr)}`:`/ipfs/${e.toV1().toString()}`;if(LL(r))return`/ipns/${mr.encode(r.bytes)}`;let t=r.toString().trim();if(t.startsWith("/")&&t.length>1)return t}throw new lu("Value must be a valid content path starting with /")}function NL(r){if(r.data==null)throw new zh("Record data is missing");let e=Ox(r.data);if(!J(e.Value,r.value??new Uint8Array(0)))throw new Fn('Field "value" did not match between protobuf and CBOR');if(!J(e.Validity,r.validity??new Uint8Array(0)))throw new Fn('Field "validity" did not match between protobuf and CBOR');if(e.ValidityType!==r.validityType)throw new Fn('Field "validityType" did not match between protobuf and CBOR');if(e.Sequence!==r.sequence)throw new Fn('Field "sequence" did not match between protobuf and CBOR');if(e.TTL!==r.ttl)throw new Fn('Field "ttl" did not match between protobuf and CBOR')}function LL(r){return r.bytes instanceof Uint8Array}function OL(r){return typeof r?.toCID=="function"}function BL(r){if(OL(r))return r.toCID();try{return B.parse(r)}catch{}return B.asCID(r)}function $h(r,e){return r.code===e}var ML=we("ipns"),Fx=5*60*1e9,FL="/ipns/",zne=FL.length,Ux={v1Compatible:!0,ttlNs:Fx};async function Hx(r,e,t,n,i=Ux){let o=new Mx.default(Date.now()+Number(n)),s=Wt.ValidityType.EOL,a=BigInt(i.ttlNs??Fx);return UL(r,e,t,s,o.toString(),a,i)}var UL=async(r,e,t,n,i,o,s=Ux)=>{t=BigInt(t);let a=C(i),c=Bx(e),l=C(c),u=Lx(l,n,a,t,o),d=Vh(u),h=await r.sign(d),f;if(r.type==="RSA"&&(f=Ot(r.publicKey)),s.v1Compatible===!0){let p=await HL(r,l,n,a),m={value:c,signatureV1:p,validity:i,validityType:n,sequence:t,ttl:o,signatureV2:h,data:u};return f!=null&&(m.pubKey=f),m}else{let p={value:c,validity:i,validityType:n,sequence:t,ttl:o,signatureV2:h,data:u};return f!=null&&(p.pubKey=f),p}},HL=async(r,e,t,n)=>{try{let i=Nx(e,t,n);return await r.sign(i)}catch(i){throw ML.error("record signature creation failed",i),new Fh("Record signature creation failed")}};var zx=ut(Mh(),1);var qh=we("ipns:validator"),zL=1024*10,$L=async(r,e)=>{let t=Dr(e),n;try{let i=Vh(t.data);n=await r.verify(i,t.signatureV2)}catch{n=!1}if(!n)throw qh.error("record signature verification failed"),new Fn("Record signature verification failed");if(t.validityType===Wt.ValidityType.EOL){if(zx.default.fromString(t.validity).toDate().getTime()<Date.now())throw qh.error("record has expired"),new Uh("record has expired")}else if(t.validityType!=null)throw qh.error("the validity type is unsupported"),new qs("The validity type is unsupported");qh("ipns record for %s is valid",t.value)};async function Do(r,e){if(e.byteLength>zL)throw new Hh("The record is too large");let t=cc(r),n;$h(t,0)&&(n=Ef(t));let i=Dr(e),o=du(i)??n;if(o==null)throw new uu("Could not extract public key from IPNS record or routing key");let s=Bi(o.toMultihash());if(!J(s,r))throw new uu("Embedded public key did not match routing key");await $L(o,e)}var Kh=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MESSAGE_LENGTH"};async function*fu(r,e={}){let t=/\r?\n/,n=new TextDecoder("utf8"),i="";for await(let o of r){if(typeof o=="string"&&(o=new TextEncoder().encode(o)),nn(o)&&(o=o.subarray()),i+=n.decode(o,{stream:!0}),i.length>(e?.maxMessageLength??i.length))throw new Kh("Incoming message too long");let s=i.split(t);i=s.pop()??"";for(let a=0;a<s.length;a++)yield JSON.parse(s[a])}i+=n.decode(),i!==""&&(yield JSON.parse(i))}var lc=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 VL(r){return r[Symbol.asyncIterator]!=null}function qL(r){if(VL(r))return(async()=>{for await(let e of r)return e})();for(let e of r)return e}var hu=qL;var $x=C("/ipns/");function Vx(r){return J(r.subarray(0,$x.byteLength),$x)}var Gh=class{client;constructor(e){this.client=e}async*findProviders(e,t={}){yield*Je(this.client.getProviders(e,t),n=>({id:n.ID,multiaddrs:n.Addrs??[]}))}async provide(){}async cancelReprovide(){}async put(e,t,n){if(!Vx(e))return;let i=cc(e),o=B.createV1(114,i),s=Dr(t);await this.client.putIPNS(o,s,n)}async get(e,t){if(!Vx(e))throw new Ce("Not found");let n=cc(e),i=B.createV1(114,n);try{let o=await this.client.getIPNS(i,t);return Ro(o)}catch(o){throw o.name==="BadResponseError"?new Ce("Not found"):o}}},Wh=class{client;constructor(e){this.client=e}async findPeer(e,t={}){let n=await hu(this.client.getPeers(e,t));if(n!=null)return{id:n.ID,multiaddrs:n.Addrs??[]};throw new Ce("Not found")}async*getClosestPeers(e,t={}){}};var Ut=we("delegated-routing-v1-http-api-client"),Yh={concurrentRequests:4,timeout:3e4,cacheTTL:5*60*1e3,cacheName:"delegated-routing-v1-cache"},Xh=class{started;httpQueue;shutDownController;clientUrl;timeout;contentRouting;peerRouting;filterAddrs;filterProtocols;inFlightRequests;cacheName;cache;cacheTTL;constructor(e,t={}){this.started=!1,this.shutDownController=new AbortController,this.shutDownController.signal,this.httpQueue=new Cr({concurrency:t.concurrentRequests??Yh.concurrentRequests}),this.inFlightRequests=new Map,this.clientUrl=e instanceof URL?e:new URL(e),this.timeout=t.timeout??Yh.timeout,this.filterAddrs=t.filterAddrs,this.filterProtocols=t.filterProtocols,this.contentRouting=new Gh(this),this.peerRouting=new Wh(this),this.cacheName=t.cacheName??Yh.cacheName,this.cacheTTL=t.cacheTTL??Yh.cacheTTL}get[Qn](){return this.contentRouting}get[Zn](){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&&Ut("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={}){Ut("getProviders starts: %c",e);let n=AbortSignal.timeout(this.timeout),i=de([this.shutDownController.signal,n,t.signal]);let o=Z(),s=Z();this.httpQueue.add(async()=>(o.resolve(),s.promise));try{await o.promise;let a=new URL(`${this.clientUrl}routing/v1/providers/${e.toString()}`);this.#r(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:i},l=await this.#n(a.toString(),c);if(l==null)throw new Un("No response received");if(!l.ok)throw l.status===404?new Ce("No matching records found"):l.status===422?new lc("Request does not conform to schema or semantic constraints"):new Un(`Unexpected status code: ${l.status}`);if(l.body==null)throw new Un("Routing response had no body");let u=l.headers.get("Content-Type");if(u==null)throw new Un("No Content-Type header received");if(u?.startsWith("application/json")){let d=await l.json();for(let h of d.Providers){let f=this.#e(h);f!=null&&(yield f)}}else if(u.includes("application/x-ndjson"))for await(let d of fu(Bh(l.body))){let h=this.#e(d);h!=null&&(yield h)}else throw new Un(`Unsupported Content-Type: ${u}`)}catch(a){Ut.error("getProviders errored:",a)}finally{i.clear(),s.resolve(),Ut("getProviders finished: %c",e)}}async*getPeers(e,t={}){Ut("getPeers starts: %c",e);let n=AbortSignal.timeout(this.timeout),i=de([this.shutDownController.signal,n,t.signal]);let o=Z(),s=Z();this.httpQueue.add(async()=>(o.resolve(),s.promise));try{await o.promise;let a=new URL(`${this.clientUrl}routing/v1/peers/${e.toCID().toString()}`);this.#r(a,t.filterAddrs,t.filterProtocols);let c={headers:{Accept:"application/x-ndjson"},signal:i},l=await this.#n(a.toString(),c);if(l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new lc("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")==="application/json"){let d=await l.json();for(let h of d.Peers){let f=this.#e(h);f!=null&&(yield f)}}else for await(let d of fu(Bh(l.body))){let h=this.#e(d);h!=null&&(yield h)}}catch(a){Ut.error("getPeers errored:",a)}finally{i.clear(),s.resolve(),Ut("getPeers finished: %c",e)}}async getIPNS(e,t={}){Ut("getIPNS starts: %s",e);let n=AbortSignal.timeout(this.timeout),i=de([this.shutDownController.signal,n,t.signal]);let o=Z(),s=Z();this.httpQueue.add(async()=>(o.resolve(),s.promise));let a=`${this.clientUrl}routing/v1/ipns/${e}`;try{await o.promise;let c={headers:{Accept:"application/vnd.ipfs.ipns-record"},signal:i},l=await this.#n(a,c);if(Ut("getIPNS GET %s %d",a,l.status),l.status===404)throw new Ce("No matching records found");if(l.status===422)throw new lc("Request does not conform to schema or semantic constraints");if(l.body==null)throw new Un("GET ipns response had no body");let u=await l.arrayBuffer(),d=new Uint8Array(u,0,u.byteLength);return t.validate!==!1&&await Do(Bi(e.multihash),d),Dr(d)}catch(c){throw Ut.error("getIPNS GET %s error:",a,c),c}finally{i.clear(),s.resolve(),Ut("getIPNS finished: %s",e)}}async putIPNS(e,t,n={}){Ut("putIPNS starts: %c",e);let i=AbortSignal.timeout(this.timeout),o=de([this.shutDownController.signal,i,n.signal]);let s=Z(),a=Z();this.httpQueue.add(async()=>(s.resolve(),a.promise));let c=`${this.clientUrl}routing/v1/ipns/${e}`;try{await s.promise;let l=Ro(t),u={method:"PUT",headers:{"Content-Type":"application/vnd.ipfs.ipns-record"},body:l,signal:o},d=await this.#n(c,u);if(Ut("putIPNS PUT %s %d",c,d.status),d.status!==200)throw new Un("PUT ipns response had status other than 200")}catch(l){throw Ut.error("putIPNS PUT %s error:",c,l.stack),l}finally{o.clear(),a.resolve(),Ut("putIPNS finished: %c",e)}}#e(e){try{let t=[],n=e.Addrs?.map(K)??[];return e.Protocols!=null&&t.push(...e.Protocols),e.Protocol!=null&&(t.push(e.Protocol),delete e.Protocol),{...e,Schema:"peer",ID:Ne(e.ID),Addrs:n,Protocols:t}}catch(t){Ut.error("could not conform record to peer schema",t)}}#r(e,t,n){if(t!=null||this.filterAddrs!=null){let i=t?.join(",")??this.filterAddrs?.join(",")??"";i!==""&&e.searchParams.set("filter-addrs",i)}if(n!=null||this.filterProtocols!=null){let i=n?.join(",")??this.filterProtocols?.join(",")??"";i!==""&&e.searchParams.set("filter-protocols",i)}}async#n(e,t){let n=t.method??"GET",i=`${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 Ut("returning cached response for %s",i),c;await this.cache?.delete(e)}}let o=this.inFlightRequests.get(i);if(o!=null){let c=await o;return Ut("deduplicating outgoing request for %s",i),c.clone()}let s=fetch(e,t).then(async c=>{if(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(i)});return this.inFlightRequests.set(i,s),await s}};function jh(r,e={}){return new Xh(new URL(r),e)}var i6=ut(Mh(),1);function Qh(r,e){let t=e.map((n,i)=>({record:Dr(n),index:i}));return t.sort((n,i)=>{let o=n.record.sequence,s=i.record.sequence;if(o>s)return-1;if(o<s)return 1;if(n.record.validityType===Wt.ValidityType.EOL&&i.record.validityType===Wt.ValidityType.EOL){let a=i6.default.fromString(n.record.validity).toDate(),c=i6.default.fromString(i.record.validity).toDate();if(a.getTime()>c.getTime())return-1;if(a.getTime()<c.getTime())return 1}return 0}),t[0].index}var Zh=class extends Error{static name="DNSLinkNotFoundError";constructor(e="DNSLink not found"){super(e),this.name="DNSLinkNotFoundError"}},Jh=class extends Error{static name="RecordsFailedValidationError";constructor(e="Records failed validation"){super(e),this.name="RecordsFailedValidationError"}},ep=class extends Error{static name="UnsupportedMultibasePrefixError";constructor(e="Unsupported multibase prefix"){super(e),this.name="UnsupportedMultibasePrefixError"}},tp=class extends Error{static name="UnsupportedMultihashCodecError";constructor(e="Unsupported multihash codec"){super(e),this.name="UnsupportedMultihashCodecError"}},rp=class extends Error{static name="InvalidValueError";constructor(e="Invalid value"){super(e),this.name="InvalidValueError"}};var KL=32;async function qx(r,e,t,n,i={}){if(e===0)throw new Error("recursion limit exceeded");n("query %s for TXT and CNAME records",r);let s=((await t.query(r,{...i,types:[ar.TXT]}))?.Answer??[]).sort((l,u)=>l.data.localeCompare(u.data));n("found %d TXT records for %s",s.length,r);for(let l of s)try{let u=l.data;if(u.startsWith('"')&&u.endsWith('"')&&(u=u.substring(1,u.length-1)),!u.startsWith("dnslink="))continue;n("%s TXT %s",l.name,u),u=u.replace("dnslink=","");let[,d,h,...f]=u.split("/");if(d==="ipfs")try{return{value:`/ipfs/${B.parse(h)}${f.length>0?`/${f.join("/")}`:""}`,answer:l}}catch{}else if(d==="ipns"){try{let p;return h.charAt(0)==="1"||h.charAt(0)==="Q"?p=Ne(h):p=Kt(B.parse(h)),{value:`/ipns/${p}${f.length>0?`/${f.join("/")}`:""}`,answer:l}}catch{}return await np(h,e-1,t,n,i)}else{if(d==="dnslink")return await np(h,e-1,t,n,i);n('unknown protocol "%s" in DNSLink record for domain: %s',d,r);continue}}catch(u){n.error("could not parse DNS link record for domain %s, %s",r,l.data,u)}n("no DNSLink records found for %s, falling back to CNAME",r);let c=((await t.query(r,{...i,types:[ar.CNAME]}))?.Answer??[]).sort((l,u)=>l.data.localeCompare(u.data));n("found %d CNAME records for %s",c.length,r);for(let l of c)try{return await np(l.data,e-1,t,n,i)}catch(u){n.error("domain %s cname %s had no DNSLink records",r,l.data,u)}throw new Zh(`No DNSLink records found for domain: ${r}`)}async function np(r,e,t,n,i={}){if(e===0)throw new Error("recursion limit exceeded");r.startsWith("_dnslink.")||(r=`_dnslink.${r}`);try{return await qx(r,e,t,n,i)}catch(o){if(o.code!=="ENOTFOUND"&&o.code!=="ENODATA"&&o.name!=="DNSLinkNotFoundError"&&o.name!=="NotFoundError")throw o;return r.startsWith("_dnslink.")?r=r.replace("_dnslink.",""):r=`_dnslink.${r}`,qx(r,e,t,n,i)}}async function Kx(r,e,t,n={}){return np(r,n.maxRecursiveDepth??KL,e,t,n)}var o6=class{routing;constructor(e){this.routing=e}async put(e,t,n={}){try{await this.routing.put(e,t,n)}catch(i){n.onProgress?.(new M("ipns:routing:helia:error",i))}}async get(e,t={}){try{return await this.routing.get(e,t)}catch(n){t.onProgress?.(new M("ipns:routing:helia:error",n))}throw new Error("Not found")}};function Gx(r){return new o6(r)}var uc=1e3,s6=60*uc,ip=60*s6,Wx=36*ip,Yx="/ipfs/kad/1.0.0",Xx=48*ip;var jx=24*ip,Qx=10,Zx=16384,Jx=ip,Yie=10*uc;var op=20,dc=3,eb=5*s6,tb=uc,rb=5*uc,nb=5*s6,ib=30*uc,ob=180*uc,a6=`${ro}-kad-dht`;var pu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={key:le(0),value:le(0),timeReceived:""},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(pu||(pu={}));function sb(r){let e=r.getUTCFullYear(),t=String(r.getUTCMonth()+1).padStart(2,"0"),n=String(r.getUTCDate()).padStart(2,"0"),i=String(r.getUTCHours()).padStart(2,"0"),o=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${i}:${o}:${s}.${c}Z`}function ab(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),i=parseInt(t[2],10)-1,o=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,i,o,s,a,c,l))}var tt=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 pu.encode(this.prepareSerialize())}prepareSerialize(){return{key:this.key,value:this.value,timeReceived:sb(this.timeReceived)}}static deserialize(e){let t=pu.decode(e);return new r(t.key,t.value,new Date(t.timeReceived))}static fromDeserialized(e){let t=ab(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 sp=globalThis.CustomEvent??Event;async function*Yt(r,e={}){let t=e.concurrency??1/0;t<1&&(t=1/0);let n=e.ordered??!1,i=new EventTarget,o=[],s=Z(),a=Z(),c=!1,l,u=!1;i.addEventListener("task-complete",()=>{a.resolve()}),Promise.resolve().then(async()=>{try{for await(let p of r){if(o.length===t&&(s=Z(),await s.promise),u)break;let m={done:!1};o.push(m),p().then(g=>{m.done=!0,m.ok=!0,m.value=g,i.dispatchEvent(new sp("task-complete"))},g=>{m.done=!0,m.err=g,i.dispatchEvent(new sp("task-complete"))})}c=!0,i.dispatchEvent(new sp("task-complete"))}catch(p){l=p,i.dispatchEvent(new sp("task-complete"))}});function d(){return n?o[0]?.done:!!o.find(p=>p.done)}function*h(){for(;o.length>0&&o[0].done;){let p=o[0];if(o.shift(),p.ok)yield p.value;else throw u=!0,s.resolve(),p.err;s.resolve()}}function*f(){for(;d();)for(let p=0;p<o.length;p++)if(o[p].done){let m=o[p];if(o.splice(p,1),p--,m.ok)yield m.value;else throw u=!0,s.resolve(),m.err;s.resolve()}}for(;;){if(d()||(a=Z(),await a.promise),l!=null)throw l;if(n?yield*h():yield*f(),c&&o.length===0)break}}var No=class extends Error{constructor(e="Query error"){super(e),this.name="QueryError"}},ap=class extends Error{constructor(e="Query aborted"){super(e),this.name="QueryAbortedError"}},cp=class extends Error{constructor(e="Invalid record"){super(e),this.name="InvalidRecordError"}},lp=class extends Error{constructor(e="No selector function configured for prefix"){super(e),this.name="MissingSelectorError"}};var cb;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.key=t.bytes();break}case 2:{o.value=t.bytes();break}case 3:{o.author=t.bytes();break}case 4:{o.signature=t.bytes();break}case 5:{o.timeReceived=t.string();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(cb||(cb={}));var _e;(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"})(_e||(_e={}));var up;(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"})(up||(up={}));(function(r){r.codec=()=>Ye(up)})(_e||(_e={}));var hc;(function(r){r.NOT_CONNECTED="NOT_CONNECTED",r.CONNECTED="CONNECTED",r.CAN_CONNECT="CAN_CONNECT",r.CANNOT_CONNECT="CANNOT_CONNECT"})(hc||(hc={}));var c6;(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"})(c6||(c6={}));(function(r){r.codec=()=>Ye(c6)})(hc||(hc={}));var fc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.multiaddrs!=null)for(let o of t.multiaddrs)n.uint32(18),n.bytes(o);t.connection!=null&&(n.uint32(24),hc.codec().encode(t.connection,n)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={id:le(0),multiaddrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.id=t.bytes();break}case 2:{if(i.limits?.multiaddrs!=null&&o.multiaddrs.length===i.limits.multiaddrs)throw new Ve('Decode error - map field "multiaddrs" had too many elements');o.multiaddrs.push(t.bytes());break}case 3:{o.connection=hc.codec().decode(t);break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(fc||(fc={}));var Mi;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.type!=null&&up[t.type]!==0&&(n.uint32(8),_e.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 o of t.closer)n.uint32(66),fc.codec().encode(o,n);if(t.providers!=null)for(let o of t.providers)n.uint32(74),fc.codec().encode(o,n);i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={type:_e.PUT_VALUE,closer:[],providers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.type=_e.codec().decode(t);break}case 10:{o.clusterLevel=t.int32();break}case 2:{o.key=t.bytes();break}case 3:{o.record=t.bytes();break}case 8:{if(i.limits?.closer!=null&&o.closer.length===i.limits.closer)throw new Ve('Decode error - map field "closer" had too many elements');o.closer.push(fc.codec().decode(t,t.uint32(),{limits:i.limits?.closer$}));break}case 9:{if(i.limits?.providers!=null&&o.providers.length===i.limits.providers)throw new Ve('Decode error - map field "providers" had too many elements');o.providers.push(fc.codec().decode(t,t.uint32(),{limits:i.limits?.providers$}));break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Mi||(Mi={}));function l6(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 mu(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 dp(r,e={}){let t={...r,name:"FINAL_PEER",type:2};return e.onProgress?.(new CustomEvent("kad-dht:query:final-peer",{detail:t})),t}function Yr(r,e={}){let t={...r,name:"QUERY_ERROR",type:3};return e.onProgress?.(new CustomEvent("kad-dht:query:query-error",{detail:t})),t}function u6(r,e={}){let t={...r,name:"PROVIDER",type:4};return e.onProgress?.(new CustomEvent("kad-dht:query:provider",{detail:t})),t}function gu(r,e={}){let t={...r,name:"VALUE",type:5};return e.onProgress?.(new CustomEvent("kad-dht:query:value",{detail:t})),t}function d6(r,e={}){let t={...r,name:"DIAL_PEER",type:7};return e.onProgress?.(new CustomEvent("kad-dht:query:dial-peer",{detail:t})),t}function lb(r,e,t){if(t.length===0)throw new O("No records given");let i=U(e).split("/");if(i.length<3)throw new O("Record key does not have a selector function");let o=r[i[1].toString()];if(o==null)throw new lp(`No selector function configured for key type "${i[1]}"`);return t.length===1?0:o(e,t)}function WL(r,e){return 0}var ub={pk:WL};async function pc(r,e){let t=e.key,i=U(t).split("/");if(i.length<3)return;let o=r[i[1].toString()];if(o==null)throw new O(`No validator available for key type "${i[1]}"`);await o(t,e.value)}var YL=async(r,e)=>{if(!(r instanceof Uint8Array))throw new O('"key" must be a Uint8Array');if(r.byteLength<5)throw new O("Invalid public key record");if(U(r.subarray(0,4))!=="/pk/")throw new O("key was not prefixed with /pk/");let n=wt(e),i=r.slice(4);if(!J(i,n.toMultihash().bytes))throw new O("public key does not match passed in key")},db={pk:YL};var XL=C("/pk/");function fb(r){return{...r,multiaddrs:r.multiaddrs.filter(e=>{let[[t,n]]=e.stringTuples();if(t===53||t===54||t===55)return n!=="localhost";if(t!==4&&t!==6||n==null)return!1;let i=br(n);return i==null?!0:!i})}}async function Lo(r){return(await Se.digest(r)).digest}async function Xt(r){return Lo(r.toMultihash().bytes)}function Oo(r,e){return new Fe(`${r}/${U(e,"base32")}`,!1)}function hb(r){return ge([XL,r.toMultihash().bytes])}function pb(r){return U(r.subarray(0,4))==="/pk/"}function mb(r){let e=pe(r.subarray(4));return Tt(e)}function f6(r,e){let t=new Date;return new tt(r,e,t).serialize()}var jL=290,QL=54,ZL=55,JL=56,eO=4,tO=41;function gb(r){let e=r.stringTuples();for(let t of e)if(t[0]===jL)return!1;if(e[0][0]===QL||e[0][0]===ZL||e[0][0]===JL)return!0;if(e[0][0]===eO||e[0][0]===tO){let t=br(`${e[0][1]}`);return t==null||!t}return!1}function fp(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:B.createV1(We,pe(C(n,"base32"))),peerId:Ne(t)}}function hp(r,e,t){let n=typeof e=="string"?e:U(e.multihash.bytes,"base32"),i=[r,n];return t!=null&&i.push(t.toString()),new Fe(i.join("/"))}function pp(r){return new Date(hr(r))}function Ks(r,e,t){return async function*(...n){let i=e.queryTime?.timer(t),o=e.errorTime?.timer(t),s=!1;try{e.queries?.increment({[t]:!0}),yield*r(...n)}catch(a){throw s=!0,o?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||i?.()}}}function mp(r,e,t){return async function(...n){let i=e?.queryTime?.timer(t),o=e?.errorTime?.timer(t),s=!1;try{return e.queries?.increment({[t]:!0}),await r(...n)}catch(a){throw s=!0,o?.(),e.errors?.increment({[t]:!0}),a}finally{e.queries?.decrement({[t]:!0}),s||i?.()}}}var gp=class{log;components;validators;selectors;peerRouting;queryManager;network;datastorePrefix;constructor(e,t){let{validators:n,selectors:i,peerRouting:o,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=i,this.peerRouting=o,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){this.log("getLocal %b",e);let t=Oo(this.datastorePrefix,e);this.log("fetching record for key %k",t);let n=await this.components.datastore.get(t);this.log("found %k in local datastore",t);let i=tt.deserialize(n);return await pc(this.validators,i),i}async*sendCorrectionRecord(e,t,n,i={}){this.log("sendCorrection for %b",e);let o=f6(e,n);for(let{value:s,from:a}of t){if(J(s,n)){this.log("record was ok");continue}if(this.components.peerId.equals(a)){try{let u=Oo(this.datastorePrefix,e);this.log(`Storing corrected record for key ${u.toString()}`),await this.components.datastore.put(u,o.subarray())}catch(u){this.log.error("Failed error correcting self",u)}continue}let c=!1,l={type:_e.PUT_VALUE,key:e,record:o};for await(let u of this.network.sendRequest(a,l,i))u.name==="PEER_RESPONSE"&&u.record!=null&&J(u.record.value,tt.deserialize(o).value)&&(c=!0),yield u;c||(yield Yr({from:a,error:new No("Value not put correctly")},i)),this.log.error("Failed error correcting entry")}}async*put(e,t,n={}){this.log("put key %b value %b",e,t);let i=f6(e,t),o=Oo(this.datastorePrefix,e);this.log(`storing record for key ${o.toString()}`),await this.components.datastore.put(o,i.subarray()),yield*Re(this.peerRouting.getClosestPeers(e,{...n,signal:n.signal}),s=>Je(s,a=>async()=>{if(a.name!=="FINAL_PEER")return[a];let c=[],l={type:_e.PUT_VALUE,key:e,record:i};this.log("send put to %p",a.peer.id);for await(let u of this.network.sendRequest(a.peer.id,l,n))c.push(u),u.name==="PEER_RESPONSE"&&(u.record!=null&&J(u.record.value,tt.deserialize(i).value)||c.push(Yr({from:a.peer.id,error:new No("Value not put correctly")},n)));return c}),s=>Yt(s,{ordered:!1,concurrency:dc}),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))a.name==="VALUE"&&n.push(a),yield a;if(n.length===0)return;let i=n.map(a=>a.value),o=0;try{o=lb(this.selectors,e,i)}catch(a){if(a.name!=="InvalidParametersError")throw a}let s=i[o];if(this.log("GetValue %b %b",e,s),s==null)throw new Ce("Best value was not found");yield*this.sendCorrectionRecord(e,n,s,t),yield n[o]}async*getMany(e,t={}){this.log("getMany values for %b",e);try{let o=await this.getLocal(e);yield gu({value:o.value,from:this.components.peerId},t)}catch(o){this.log("error getting local value for %b",e,o)}let n=this,i=async function*({peer:o,signal:s}){for await(let a of n.peerRouting.getValueOrPeers(o,e,{...t,signal:s}))yield a,a.name==="PEER_RESPONSE"&&a.record!=null&&(yield gu({from:o,value:a.record.value},t))};yield*this.queryManager.run(e,i,t)}};function yb(r,e){return{id:r.id.toMultihash().bytes,multiaddrs:(r.multiaddrs??[]).map(n=>n.bytes),connection:e}}function yu(r){if(r.id==null)throw new Error("Invalid peer in message");let e=pe(r.id);return{id:Tt(e),multiaddrs:(r.multiaddrs??[]).map(t=>K(t))}}var yp=class{log;components;network;peerRouting;queryManager;routingTable;providers;constructor(e,t){let{network:n,peerRouting:i,queryManager:o,routingTable:s,providers:a,logPrefix:c}=t;this.components=e,this.log=e.logger.forComponent(`${c}:content-routing`),this.network=n,this.peerRouting=i,this.queryManager=o,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 i=e.multihash.bytes;await this.providers.addProvider(e,this.components.peerId);let o={type:_e.ADD_PROVIDER,key:i,providers:[yb({id:this.components.peerId,multiaddrs:t})]},s=0,a=c=>async()=>{if(c.name!=="FINAL_PEER")return[c];let l=[];this.log("putProvider %s to %p",e,c.peer.id);try{this.log("sending provider record for %s to %p",e,c.peer.id);for await(let u of this.network.sendMessage(c.peer.id,o,n))u.name==="PEER_RESPONSE"&&(this.log("sent provider record for %s to %p",e,c.peer.id),s++),l.push(u)}catch(u){this.log.error("error sending provide record to peer %p",c.peer.id,u),l.push(Yr({from:c.peer.id,error:u},n))}return l};yield*Re(this.peerRouting.getClosestPeers(i,n),c=>Je(c,l=>a(l)),c=>Yt(c,{ordered:!1,concurrency:dc}),async function*(c){for await(let l of c)yield*l}),this.log("sent provider records to %d peers",s)}async*findProviders(e,t){let n=this.routingTable.kBucketSize,i=0,o=e.multihash.bytes,s=this;this.log("findProviders %c",e);let a=await this.providers.getProviders(e);if(a.length>0){let u=[];for(let d of a.slice(0,n))try{let h=await this.components.peerStore.get(d);u.push({id:d,multiaddrs:h.addresses.map(({multiaddr:f})=>f)})}catch(h){if(h.name!=="NotFoundError")throw h;this.log("no peer store entry for %p",d)}if(yield mu({from:this.components.peerId,messageType:_e.GET_PROVIDERS,providers:u},t),yield u6({from:this.components.peerId,providers:u},t),i+=u.length,i>=n)return}let c=async function*({peer:u,signal:d}){let h={type:_e.GET_PROVIDERS,key:o};yield*s.network.sendRequest(u,h,{...t,signal:d})},l=new yr(a);for await(let u of this.queryManager.run(o,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 h of u.providers)l.has(h.id)||(l.add(h.id),d.push(h));if(d.length>0&&(yield u6({from:u.from,providers:d},t),i+=d.length,i>=n))return}}};var mc=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),i=e-this.movingAverage,o=n*i;this.movingAverage=n*e+(1-n)*this.movingAverage,this.variance=(1-n)*(this.variance+i*o),this.deviation=Math.sqrt(this.variance),this.forecast=this.movingAverage+n*i}else this.movingAverage=e;this.previousTime=t}};var nO=1.2,iO=2,oO=2e3,Hn=class{success;failure;next;metric;timeoutMultiplier;failureMultiplier;minTimeout;constructor(e={}){this.success=new mc(e.interval??5e3),this.failure=new mc(e.interval??5e3),this.next=new mc(e.interval??5e3),this.failureMultiplier=e.failureMultiplier??iO,this.timeoutMultiplier=e.timeoutMultiplier??nO,this.minTimeout=e.minTimeout??oO,e.metricName!=null&&(this.metric=e.metrics?.registerMetricGroup(e.metricName))}getTimeoutSignal(e={}){let t=Math.max(Math.round(this.next.movingAverage*(e.timeoutFactor??this.timeoutMultiplier)),this.minTimeout),n=AbortSignal.timeout(t),i=de([e.signal,n]);return i.start=Date.now(),i.timeout=t,i}cleanUp(e){let t=Date.now()-e.start;e.aborted?(this.failure.push(t),this.next.push(t*this.failureMultiplier),this.metric?.update({failureMovingAverage:this.failure.movingAverage,failureDeviation:this.failure.deviation,failureForecast:this.failure.forecast,failureVariance:this.failure.variance,failure:t})):(this.success.push(t),this.next.push(t),this.metric?.update({successMovingAverage:this.success.movingAverage,successDeviation:this.success.deviation,successForecast:this.success.forecast,successVariance:this.success.variance,success:t}))}};var h6=class{readNext;haveNext;ended;nextResult;constructor(){this.ended=!1,this.readNext=Z(),this.haveNext=Z()}[Symbol.asyncIterator](){return this}async next(){if(this.nextResult==null&&await this.haveNext.promise,this.nextResult==null)throw new Error("HaveNext promise resolved but nextResult was undefined");let e=this.nextResult;return this.nextResult=void 0,this.readNext.resolve(),this.readNext=Z(),e}async throw(e){return this.ended=!0,e!=null&&(this.haveNext.promise.catch(()=>{}),this.haveNext.reject(e)),{done:!0,value:void 0}}async return(){let e={done:!0,value:void 0};return 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 new Error("Cannot push value onto an ended pushable");for(;this.nextResult!=null;)await this.readNext.promise;e!=null?this.nextResult={done:!1,value:e}:(this.ended=!0,this.nextResult={done:!0,value:void 0}),this.haveNext.resolve(),this.haveNext=Z(),await st(this.readNext.promise,t?.signal,t)}};function wb(){return new h6}var wp=class extends Error{name="UnexpectedEOFError";code="ERR_UNEXPECTED_EOF"};var p6=class extends Error{code;constructor(e,t){super(e),this.code=t}},m6=class extends p6{type;constructor(e){super(e,"ABORT_ERR"),this.type="aborted",this.name="AbortError"}};function Gs(r,e){let t=wb();r.sink(t).catch(async s=>{await t.end(s)}),r.sink=async s=>{for await(let a of s)await t.push(a);await t.end()};let n=r.source;r.source[Symbol.iterator]!=null?n=r.source[Symbol.iterator]():r.source[Symbol.asyncIterator]!=null&&(n=r.source[Symbol.asyncIterator]());let i=new ee;return{read:async(s,a)=>{a?.signal?.throwIfAborted();let c,l=new Promise((u,d)=>{c=()=>{d(new m6("Read aborted"))},a?.signal?.addEventListener("abort",c)});try{if(s==null){let{done:d,value:h}=await Promise.race([n.next(),l]);return d===!0?new ee:h}for(;i.byteLength<s;){let{value:d,done:h}=await Promise.race([n.next(),l]);if(h===!0)throw new wp("unexpected end of input");i.append(d)}let u=i.sublist(0,s);return i.consume(s),u}finally{c!=null&&a?.signal?.removeEventListener("abort",c)}},write:async(s,a)=>{a?.signal?.throwIfAborted(),s instanceof Uint8Array?await t.push(s,a):await t.push(s.subarray(),a)},unwrap:()=>{if(i.byteLength>0){let s=r.source;r.source=async function*(){e?.yieldBytes===!1?yield i:yield*i,yield*s}()}return r}}}var xp=class extends Error{name="InvalidMessageLengthError";code="ERR_INVALID_MSG_LENGTH"},bp=class extends Error{name="InvalidDataLengthError";code="ERR_MSG_DATA_TOO_LONG"},vp=class extends Error{name="InvalidDataLengthLengthError";code="ERR_MSG_LENGTH_TOO_LONG"};function ci(r,e={}){let t=Gs(r,e);e.maxDataLength!=null&&e.maxLengthLength==null&&(e.maxLengthLength=ve(e.maxDataLength));let n=e?.lengthDecoder??hr,i=e?.lengthEncoder??Ze;return{read:async s=>{let a=-1,c=new ee;for(;;){c.append(await t.read(1,s));try{a=n(c)}catch(l){if(l instanceof RangeError)continue;throw l}if(a<0)throw new xp("Invalid message length");if(e?.maxLengthLength!=null&&c.byteLength>e.maxLengthLength)throw new vp("message length length too long");if(a>-1)break}if(e?.maxDataLength!=null&&a>e.maxDataLength)throw new bp("message length too long");return t.read(a,s)},write:async(s,a)=>{await t.write(new ee(i(s.byteLength),s),a)},writeV:async(s,a)=>{let c=new ee(...s.flatMap(l=>[i(l.byteLength),l]));await t.write(c,a)},unwrap:()=>t.unwrap()}}function rt(r,e){let t=ci(r,e),n={read:async(i,o)=>{let s=await t.read(o);return i.decode(s)},write:async(i,o,s)=>{await t.write(o.encode(i),s)},writeV:async(i,o,s)=>{await t.writeV(i.map(a=>o.encode(a)),s)},pb:i=>({read:async o=>n.read(i,o),write:async(o,s)=>n.write(o,i,s),writeV:async(o,s)=>n.writeV(o,i,s),unwrap:()=>n}),unwrap:()=>t.unwrap()};return n}var Ep=class extends be{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 Hn({...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,i],o){return{...o,to:n.toString(),"message type":`${i.type}`}},getAttributesFromYieldedValue:(n,i)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((o,s)=>{i[`providers-${s}`]=o.id.toString()}),n.closer.length>0&&n.closer.forEach((o,s)=>{i[`closer-${s}`]=o.id.toString()})),i)})??this.sendRequest,this.sendMessage=e.metrics?.traceFunction("libp2p.kadDHT.sendMessage",this.sendMessage.bind(this),{optionsIndex:2,getAttributesFromArgs([n,i],o){return{...o,to:n.toString(),"message type":`${i.type}`}},getAttributesFromYieldedValue:(n,i)=>(n.name==="PEER_RESPONSE"&&(n.providers.length>0&&n.providers.forEach((o,s)=>{i[`providers-${s}`]=o.id.toString()}),n.closer.length>0&&n.closer.forEach((o,s)=>{i[`closer-${s}`]=o.id.toString()})),i)})??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 i=t.type;if(i==null)throw new O("Message type was missing");this.log("sending %s to %p",t.type,e),yield d6({peer:e},n),yield l6({to:e,type:i},n);let o,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[i]:!0}),o=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n);let c=await this._writeReadMessage(o,t,n);o.close(n).catch(l=>{this.log.error("error closing stream to %p",e,l),o?.abort(l)}),yield mu({from:e,messageType:c.type,closer:c.closer.map(yu),providers:c.providers.map(yu),record:c.record==null?void 0:tt.deserialize(c.record)},n)}catch(a){this.metrics.errors?.increment({[i]:!0}),o?.abort(a),n.signal?.aborted!==!0&&this.log.error("could not send %s to %p - %e",t.type,e,a),yield Yr({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async*sendMessage(e,t,n={}){if(!this.running)return;let i=t.type;if(i==null)throw new O("Message type was missing");this.log("sending %s to %p",t.type,e),yield d6({peer:e},n),yield l6({to:e,type:i},n);let o,s=this.timeout.getTimeoutSignal(n);n={...n,signal:s};try{this.metrics.operations?.increment({[i]:!0}),o=await(await this.components.connectionManager.openConnection(e,n)).newStream(this.protocol,n),await this._writeMessage(o,t,n),o.close(n).catch(c=>{this.log.error("error closing stream to %p",e,c),o?.abort(c)}),yield mu({from:e,messageType:i},n)}catch(a){this.metrics.errors?.increment({[i]:!0}),o?.abort(a),yield Yr({from:e,error:a},n)}finally{this.timeout.cleanUp(s)}}async _writeMessage(e,t,n){await rt(e).write(t,Mi,n)}async _writeReadMessage(e,t,n){let i=rt(e);await i.write(t,Mi,n);let o=await i.read(Mi,n);return o.closer.forEach(s=>{this.safeDispatchEvent("peer",{detail:yu(s)})}),o.providers.forEach(s=>{this.safeDispatchEvent("peer",{detail:yu(s)})}),o}};function Nr(r,e){if(r.length!==e.length)throw new Error("Inputs should have the same length");let t=at(r.length);for(let n=0;n<r.length;n++)t[n]=r[n]^e[n];return t}function Bo(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 Mo=class{originDhtKey;capacity;peerDistances;constructor(e,t){this.originDhtKey=e,this.capacity=t,this.peerDistances=[]}get length(){return this.peerDistances.length}get peers(){return this.peerDistances.map(e=>e.peer)}async add(e){let t=await Xt(e.id);this.addWithKadId(e,t)}addWithKadId(e,t){if(this.peerDistances.find(o=>o.peer.id.equals(e.id))!=null)return;let n={peer:e,distance:Nr(this.originDhtKey,t)},i=!1;for(let o=0;o<this.peerDistances.length;o++){let s=Bo(this.peerDistances[o].distance,n.distance);if(s===0||s===1){i=!0,this.peerDistances.splice(o,0,n);break}}i||this.peerDistances.push(n),this.peerDistances=this.peerDistances.slice(0,this.capacity)}async isCloser(e){if(this.length===0)return!0;let t=await Xt(e),n=Nr(t,this.originDhtKey),i=this.peerDistances[this.peerDistances.length-1].distance;return Bo(n,i)===-1}async anyCloser(e){return e.length===0?!1:Promise.any(e.map(async t=>this.isCloser(t)))}};var Sp=class{log;routingTable;network;validators;queryManager;peerStore;peerId;constructor(e,t){this.routingTable=t.routingTable,this.network=t.network,this.validators=t.validators,this.queryManager=t.queryManager,this.peerStore=e.peerStore,this.peerId=e.peerId,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){let t,n=await this.routingTable.find(e);if(n!=null){this.log("findPeerLocal found %p in routing table",e);try{t=await this.peerStore.get(n)}catch(i){if(i.name!=="NotFoundError")throw i}}if(t==null)try{t=await this.peerStore.get(e)}catch(i){if(i.name!=="NotFoundError")throw i}if(t!=null)return this.log("findPeerLocal found %p in peer store",e),{id:t.id,multiaddrs:t.addresses.map(i=>i.multiaddr)}}async*_getValueSingle(e,t,n={}){let i={type:_e.GET_VALUE,key:t};yield*this.network.sendRequest(e,i,n)}async*getPublicKeyFromNode(e,t={}){let n=hb(e);for await(let i of this._getValueSingle(e,n,t))if(yield i,i.name==="PEER_RESPONSE"&&i.record!=null){let o=wt(i.record.value),s=oi(o);if(!s.equals(e))throw new wi("public key does not match id");if(s.publicKey==null)throw new wi("public key missing");yield gu({from:e,value:i.record.value},t)}throw new No(`Node not responding with its public key: ${e.toString()}`)}async*findPeer(e,t={}){if(this.log("findPeer %p",e),t.useCache!==!1){let i=await this.findPeerLocal(e);if(i!=null){this.log("found local"),yield dp({from:this.peerId,peer:i},t);return}}let n=!1;if(t.useNetwork!==!1){let i=this,o=async function*({peer:s,signal:a}){let c={type:_e.FIND_NODE,key:e.toMultihash().bytes};for await(let l of i.network.sendRequest(s,c,{...t,signal:a}))if(yield l,l.name==="PEER_RESPONSE"){let u=l.closer.find(d=>d.id.equals(e));u!=null&&(yield dp({from:l.from,peer:u},t))}};for await(let s of this.queryManager.run(e.toMultihash().bytes,o,t))s.name==="FINAL_PEER"&&(n=!0),yield s}n||(yield Yr({from:this.peerId,error:new Ce("Not found")},t))}async*getClosestPeers(e,t={}){this.log("getClosestPeers to %b",e);let n=await Lo(e),i=this.routingTable.closestPeers(n),o=this,s=new Mo(n,this.routingTable.kBucketSize);await Promise.all(i.map(async c=>{await s.add({id:c,multiaddrs:[]})}));let a=async function*({peer:c,signal:l}){o.log("closerPeersSingle %s from %p",U(e,"base32"),c);let u={type:_e.FIND_NODE,key:e};yield*o.network.sendRequest(c,u,{...t,signal:l})};for await(let c of this.queryManager.run(e,a,t))c.name==="PEER_RESPONSE"&&await Promise.all(c.closer.map(async l=>{await s.add(l)})),yield c;this.log("found %d peers close to %b",s.length,e);for(let c of s.peers)yield dp({from:this.peerId,peer:c},t)}async*getValueOrPeers(e,t,n={}){for await(let i of this._getValueSingle(e,t,n)){if(i.name==="PEER_RESPONSE"&&i.record!=null)try{await this._verifyRecordOnline(i.record)}catch{let s="invalid record received, discarded";this.log(s),yield Yr({from:i.from,error:new No(s)},n);continue}yield i}}async _verifyRecordOnline(e){if(e.timeReceived==null)throw new cp("invalid record received");await pc(this.validators,new tt(e.key,e.value,e.timeReceived))}async getCloserPeersOffline(e,t){let n=[];try{let c=pe(e),l=Tt(c),u=await this.peerStore.get(l);n.push({id:u.id,multiaddrs:u.addresses.map(({multiaddr:d})=>d)})}catch{}let i=await Lo(e),o=this.routingTable.closestPeers(i),s=await Xt(t),a=Nr(s,i);for(let c of o){let l=await Xt(c),u=Nr(l,i);if(Bo(u,a)===-1)try{let d=await this.peerStore.get(c);n.push({id:c,multiaddrs:d.addresses.map(({multiaddr:h})=>h)})}catch(d){if(d.name!=="NotFoundError")throw d}}return n.length>0?this.log("getCloserPeersOffline found %d peer(s) closer to %b than %p",n.length,e,t):this.log("getCloserPeersOffline could not find peer closer to %b than %p with %d peers in the routing table",e,t,this.routingTable.size),n}};var Ap=class{log;datastore;datastorePrefix;lock;constructor(e,t){this.log=e.logger.forComponent(`${t.logPrefix}:providers`),this.datastorePrefix=`${t.datastorePrefix}/provider`,this.datastore=e.datastore,this.lock=t.lock}async addProvider(e,t){let n=await this.lock.readLock();try{this.log("%p provides %s",t,e),await this.writeProviderEntry(e,t)}finally{n()}}async removeProvider(e,t){let n=await this.lock.writeLock();try{let i=hp(this.datastorePrefix,e,t);this.log("%p no longer provides %s",t,e),await this.datastore.delete(i)}finally{n()}}async getProviders(e){let t=await this.lock.readLock();try{this.log("get providers for %c",e);let n=await this.loadProviders(e);return this.log("got %d providers for %c",n.size,e),[...n.keys()]}finally{t()}}async writeProviderEntry(e,t,n=new Date){let i=hp(this.datastorePrefix,e,t),o=Ze(n.getTime());await this.datastore.put(i,o)}async loadProviders(e){let t=new Mt,n=hp(this.datastorePrefix,e);for await(let i of this.datastore.query({prefix:n.toString()})){let{peerId:o}=fp(i.key);t.set(o,pp(i.value))}return t}};async function*xb(r){let{key:e,startingPeer:t,ourPeerId:n,signal:i,query:o,alpha:s,pathIndex:a,numPaths:c,queryFuncTimeout:l,log:u,peersSeen:d,connectionManager:h}=r,f=new fr({concurrency:s,sort:(g,y)=>Bo(g.options.distance,y.options.distance)}),p=await Lo(e);function m(g,y){if(g==null)return;d.add(g);let w=Nr(y,p);f.add(async()=>{let x=[i];l!=null&&x.push(AbortSignal.timeout(l));let b=de(x);try{for await(let A of o({...r,key:e,peer:g,signal:b,pathIndex:a,numPaths:c})){if(b.aborted)return;if(A.name==="PEER_RESPONSE")for(let k of A.closer){if(d.has(k.id)){u.trace("already seen %p in query",k.id);continue}if(n.equals(k.id)){u("not querying ourselves");continue}if(!await h.isDialable(k.multiaddrs)){u("not querying undialable peer");continue}let E=await Xt(k.id),S=Nr(E,p);if(Bo(S,w)!==-1){u.trace("skipping %p as they are not closer to %b than %p",k.id,e,g);continue}u.trace("querying closer peer %p",k.id),m(k.id,E)}f.safeDispatchEvent("completed",{detail:A})}}catch(A){if(!i.aborted)return Yr({from:g,error:A},r)}finally{b.clear()}},{distance:w}).catch(x=>{u.error(x)})}m(t,await Xt(t));try{for await(let g of f.toGenerator({signal:i}))g!=null&&(yield g)}catch(g){throw i.aborted?new ap("Query aborted"):g}}var Tp=class{disjointPaths;alpha;shutDownController;running;logger;peerId;connectionManager;routingTable;initialQuerySelfHasRun;logPrefix;constructor(e,t){this.logPrefix=t.logPrefix,this.disjointPaths=t.disjointPaths??op,this.alpha=t.alpha??dc,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.routingTable=t.routingTable,this.logger=e.logger,this.peerId=e.peerId,this.connectionManager=e.connectionManager,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(ob);n={...n,signal:c}}let i=new AbortController,o=de([this.shutDownController.signal,i.signal,n.signal]);i.signal;let s=this.logger.forComponent(`${this.logPrefix}:query:`+U(e,"base58btc")),a=!1;try{n.isSelfQuery!==!0&&this.initialQuerySelfHasRun!=null&&(s("waiting for initial query-self query before continuing"),await st(this.initialQuerySelfHasRun.promise,o),this.initialQuerySelfHasRun=void 0),s("query:start");let c=await Lo(e),l=this.routingTable.closestPeers(c),u=l.slice(0,Math.min(this.disjointPaths,l.length));if(l.length===0){s.error("Running query with no peers");return}let d=new yr,h=u.map((f,p)=>xb({...n,key:e,startingPeer:f,ourPeerId:this.peerId,signal:o,query:t,pathIndex:p,numPaths:u.length,alpha:this.alpha,queryFuncTimeout:n.queryFuncTimeout,log:s,peersSeen:d,onProgress:n.onProgress,connectionManager:this.connectionManager}));for await(let f of pr(...h)){if(f.name==="QUERY_ERROR"&&s.error("query error",f.error),f.name==="PEER_RESPONSE")for(let p of[...f.closer,...f.providers])await this.connectionManager.isDialable(p.multiaddrs)&&await this.routingTable.add(p.id);yield f}a=!0}catch(c){if(!(!this.running&&c.name==="QueryAbortedError"))throw c}finally{a||(s("query exited early"),i.abort()),o.clear(),s("query:done")}}};function sO(r){return r[Symbol.asyncIterator]!=null}function aO(r){if(sO(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 Ip=aO;var cO=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 lO(r,e,t){let n,i=new Promise((o,s)=>{if(t={rejectionEvents:["error"],multiArgs:!1,resolveImmediately:!1,...t},!(t.count>=0&&(t.count===Number.POSITIVE_INFINITY||Number.isInteger(t.count))))throw new TypeError("The `count` option should be at least 0 or more");t.signal?.throwIfAborted();let a=[e].flat(),c=[],{addListener:l,removeListener:u}=cO(r),d=(...f)=>{let p=t.multiArgs?f:f[0];t.filter&&!t.filter(p)||(c.push(p),t.count===c.length&&(n(),o(c)))},h=f=>{n(),s(f)};n=()=>{for(let f of a)u(f,d);for(let f of t.rejectionEvents)u(f,h)};for(let f of a)l(f,d);for(let f of t.rejectionEvents)l(f,h);t.signal&&t.signal.addEventListener("abort",()=>{h(t.signal.reason)},{once:!0}),t.resolveImmediately&&o(c)});if(i.cancel=n,typeof t.timeout=="number"){let o=Dn(i,{milliseconds:t.timeout});return o.cancel=n,o}return i}function bb(r,e,t){typeof t=="function"&&(t={filter:t}),t={...t,count:1,resolveImmediately:!1};let n=lO(r,e,t),i=n.then(o=>o[0]);return i.cancel=n.cancel,i}var _p=class{log;peerId;peerRouting;routingTable;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.running=!1,this.peerRouting=t.peerRouting,this.routingTable=t.routingTable,this.count=t.count??op,this.interval=t.interval??eb,this.initialInterval=t.initialInterval??tb,this.queryTimeout=t.queryTimeout??rb,this.initialQuerySelfHasRun=t.initialQuerySelfHasRun,this.querySelf=mp(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)})},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=Z(),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=de(e);this.controller.signal;try{this.routingTable.size===0&&(this.log("routing table was empty, waiting for some peers before running query"),await bb(this.routingTable,"peer:add",{signal:t,filter:o=>!this.peerId.equals(o.detail)}),this.log("routing table has peers, continuing with query")),this.log("run self-query, look for %d peers timing out after %dms",this.count,this.queryTimeout);let n=Date.now(),i=await Re(this.peerRouting.getClosestPeers(this.peerId.toMultihash().bytes,{signal:t,isSelfQuery:!0}),o=>ao(o,this.count),async o=>Ip(o));this.log("self-query found %d peers in %dms",i,Date.now()-n)}catch(n){this.log.error("self-query error",n)}finally{t.clear(),this.initialQuerySelfHasRun!=null&&(this.initialQuerySelfHasRun.resolve(),this.initialQuerySelfHasRun=void 0)}}this.querySelfPromise.resolve(),this.querySelfPromise=void 0,this.running&&(this.timeoutId=setTimeout(()=>{this.querySelf().catch(e=>{this.log.error("error running self-query",e)})},this.interval))}};var kp=class extends be{log;reprovideQueue;maxQueueSize;datastore;timeout;reprovideTimeout;running;shutdownController;reprovideThreshold;contentRouting;datastorePrefix;addressManager;validity;interval;lock;peerId;constructor(e,t){super(),this.log=e.logger.forComponent(`${t.logPrefix}:reprovider`),this.peerId=e.peerId,this.reprovideQueue=new fr({concurrency:t.concurrency??Qx,metrics:e.metrics,metricName:`${t.metricsPrefix}_reprovide_queue`}),this.reprovideTimeout=new Hn({...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??jx,this.maxQueueSize=t.maxQueueSize??Zx,this.validity=t.validity??Xx,this.interval=t.interval??Jx,this.contentRouting=t.contentRouting,this.lock=t.lock,this.running=!1,this.reprovide=mp(this.reprovide.bind(this),t.operationMetrics,"PROVIDE")}start(){this.running||(this.running=!0,this.shutdownController=new AbortController,this.shutdownController.signal,this.timeout=setTimeout(()=>{this.cleanUp().catch(e=>{this.log.error("error running reprovide/cleanup - %e",e)})},this.interval))}stop(){this.running=!1,this.reprovideQueue.clear(),clearTimeout(this.timeout),this.shutdownController?.abort()}async cleanUp(){let e=await this.lock.writeLock();try{this.safeDispatchEvent("reprovide:start");for await(let t of this.datastore.query({prefix:this.datastorePrefix}))try{let{cid:n,peerId:i}=fp(t.key),o=pp(t.value).getTime(),s=o+this.validity,a=Date.now(),c=a>s;this.log.trace("comparing: %d < %d = %s %s",o,a-this.validity,c,c?"(expired)":""),c&&await this.datastore.delete(t.key),this.peerId.equals(i)&&a-s<this.reprovideThreshold&&this.queueReprovide(n).catch(l=>{this.log.error("could not reprovide %c - %e",n,l)})}catch(n){this.log.error("error processing datastore key %s - %e",t.key,n.message)}this.log("reprovide/cleanup successful")}finally{e(),this.safeDispatchEvent("reprovide:end"),this.running&&(this.timeout=setTimeout(()=>{this.cleanUp().catch(t=>{this.log.error("error running re-provide - %e",t)})},this.interval))}}async queueReprovide(e){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);let t=this.reprovideQueue.queue.find(n=>n.options.cid.equals(e));if(t!=null)return this.log.trace("not adding %c to re-provide queue - already in queue",e),t.join();this.log.trace("adding %c to re-provide queue",e),this.reprovideQueue.add(async n=>{if(n.signal?.throwIfAborted(),!this.running)return;this.log.trace("re-providing %c",e);let i=this.reprovideTimeout.getTimeoutSignal(n);try{await this.reprovide(n.cid,n)}finally{this.reprovideTimeout.cleanUp(i)}this.log.trace("re-provided %c",e)},{signal:this.shutdownController?.signal,cid:e}).catch(n=>{this.log.error("could not re-provide key %c - %e",e,n)})}async reprovide(e,t){await Lt(this.contentRouting.provide(e,this.addressManager.getAddresses(),t))}};var uO=20,dO=5e3,fO="kad-close",hO=50,Cp=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??dO,this.peerSetSize=t.peerSetSize??uO,this.closeTagName=t.closeTagName??fO,this.closeTagValue=t.closeTagValue??hO,this.closestPeers=new yr,this.onPeerPing=this.onPeerPing.bind(this),this.running=!1}async start(){if(this.running)return;this.running=!0;let e=await Xt(this.components.peerId);this.newPeers=new Mo(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 yr(this.newPeers?.peers.map(i=>i.id)),t=e.difference(this.closestPeers),n=this.closestPeers.difference(e);this.closestPeers=e,await Promise.all([...[...t].map(async i=>{await this.components.peerStore.merge(i,{tags:{[this.closeTagName]:{value:this.closeTagValue},[a6]:{value:1}}})}),...[...n].map(async i=>{await this.components.peerStore.merge(i,{tags:{[this.closeTagName]:void 0,[a6]:void 0}})})])}};function wu(r){return Array.isArray(r?.peers)}var Pp=class{root;localPeer;prefixLength;splitThreshold;kBucketSize;numberOfNodesToPing;lastPingThreshold;ping;verify;onAdd;onRemove;onMove;addingPeerMap;constructor(e){this.prefixLength=e.prefixLength??vb,this.kBucketSize=e.kBucketSize??g6,this.splitThreshold=e.splitThreshold??this.kBucketSize,this.numberOfNodesToPing=e.numberOfOldContactsToPing??Eb,this.lastPingThreshold=e.lastPingThreshold??Sb,this.ping=e.ping,this.verify=e.verify,this.onAdd=e.onAdd,this.onRemove=e.onRemove,this.addingPeerMap=new Mt,this.root={prefix:"",depth:0,peers:[]}}async addSelfPeer(e){this.localPeer={peerId:e,kadId:await Xt(e),lastPing:Date.now()}}async add(e,t){let n={peerId:e,kadId:await Xt(e),lastPing:0},i=this.addingPeerMap.get(e);if(i!=null)return i;try{let o=this._add(n,t);this.addingPeerMap.set(e,o),await o}finally{this.addingPeerMap.delete(e)}}async _add(e,t){let n=this._determineBucket(e.kadId);if(this._indexOf(n,e.kadId)>-1)return;if(n.peers.length===this.splitThreshold&&n.depth<this.prefixLength){await this._split(n),await this._add(e,t);return}if(n.peers.length<this.kBucketSize){if(!mO(e,this.lastPingThreshold)){n.peers.push(e),await this.onAdd?.(e,n);return}await this.verify(e,t)&&(e.lastPing=Date.now(),await this._add(e,t));return}let i=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),o=!1;for await(let s of this.ping(i,t))o=!0,await this.remove(s.kadId);o&&await this._add(e,t)}*closest(e,t=this.kBucketSize){let n=new Mo(e,t);for(let i of this.toIterable())n.addWithKadId({id:i.peerId,multiaddrs:[]},i.kadId);yield*Je(n.peers,i=>i.id)}count(){function e(t){if(wu(t))return t.peers.length;let n=0;return t.left!=null&&(n+=e(t.left)),t.right!=null&&(n+=e(t.right)),n}return e(this.root)}get(e){let t=this._determineBucket(e),n=this._indexOf(t,e);return t.peers[n]}async remove(e){let t=this._determineBucket(e),n=this._indexOf(t,e);if(n>-1){let i=t.peers.splice(n,1)[0];await this.onRemove?.(i,t)}}*toIterable(){function*e(t){if(wu(t)){yield*t.peers;return}yield*e(t.left),yield*e(t.right)}yield*e(this.root)}distance(e,t){return BigInt("0x"+U(Nr(e,t),"base16"))}_determineBucket(e){let t=U(e,"base2");function n(i,o=0){return wu(i)?i:t[o]==="0"?n(i.left,o+1):n(i.right,o+1)}return n(this.root)}_indexOf(e,t){return e.peers.findIndex(n=>J(n.kadId,t))}async _split(e){let t={prefix:"0",depth:e.depth+1,peers:[]},n={prefix:"1",depth:e.depth+1,peers:[]};for(let i of e.peers)U(i.kadId,"base2")[e.depth]==="0"?(t.peers.push(i),await this.onMove?.(i,e,t)):(n.peers.push(i),await this.onMove?.(i,e,n));pO(e,t,n)}};function pO(r,e,t){return delete r.peers,r.left=e,r.right=t,r.prefix===""&&(delete r.depth,delete r.prefix),!0}function mO(r,e){return r.lastPing<Date.now()-e}var g6=20,vb=6;var gO=20,yO=100,Eb=3;var wO=20,xO=100,Ab="kad-peer",bO=1,Sb=6e5,vO=!0,EO=1e3,Rp=class extends be{kBucketSize;kb;network;closestPeerTagger;log;components;running;pingNewContactTimeout;pingNewContactQueue;pingOldContactTimeout;pingOldContactQueue;populateFromDatastoreOnStart;populateFromDatastoreLimit;protocol;peerTagName;peerTagValue;metrics;constructor(e,t){super(),this.components=e,this.log=e.logger.forComponent(`${t.logPrefix}:routing-table`),this.kBucketSize=t.kBucketSize??g6,this.running=!1,this.protocol=t.protocol,this.network=t.network,this.peerTagName=t.peerTagName??Ab,this.peerTagValue=t.peerTagValue??bO,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??vO,this.populateFromDatastoreLimit=t.populateFromDatastoreLimit??EO,this.pingOldContactQueue=new Vt({concurrency:t.pingOldContactConcurrency??wO,metricName:`${t.metricsPrefix}_ping_old_contact_queue`,metrics:this.components.metrics,maxSize:t.pingOldContactMaxQueueSize??xO}),this.pingOldContactTimeout=new Hn({...t.pingOldContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_old_contact_time_milliseconds`}),this.pingNewContactQueue=new Vt({concurrency:t.pingNewContactConcurrency??gO,metricName:`${t.metricsPrefix}_ping_new_contact_queue`,metrics:this.components.metrics,maxSize:t.pingNewContactMaxQueueSize??yO}),this.pingNewContactTimeout=new Hn({...t.pingNewContactTimeout??{},metrics:this.components.metrics,metricName:`${t.metricsPrefix}_routing_table_ping_new_contact_time_milliseconds`}),this.kb=new Pp({kBucketSize:t.kBucketSize,prefixLength:t.prefixLength,splitThreshold:t.splitThreshold,numberOfOldContactsToPing:t.numberOfOldContactsToPing,lastPingThreshold:t.lastPingThreshold,ping:this.pingOldContacts,verify:this.verifyNewContact,onAdd:this.peerAdded,onRemove:this.peerRemoved}),this.closestPeerTagger=new Cp(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,await $t(this.closestPeerTagger),await this.kb.addSelfPeer(this.components.peerId))}async afterStart(){Promise.resolve().then(async()=>{if(!this.populateFromDatastoreOnStart)return;let e=0;for(let t of await this.components.peerStore.all({filters:[n=>n.protocols.includes(this.protocol)&&n.tags.has(Ab)],limit:this.populateFromDatastoreLimit})){if(!this.running)return;try{await this.add(t.id),e++}catch{this.log("failed to add peer %p to routing table, removing kad-dht peer tags - %e"),await this.components.peerStore.merge(t.id,{tags:{[this.peerTagName]:void 0}})}}this.log("added %d peer store peers to the routing table",e)}).catch(e=>{this.log.error("error adding peer store peers to the routing table %e",e)})}async stop(){this.running=!1,await tr(this.closestPeerTagger),this.pingOldContactQueue.abort(),this.pingNewContactQueue.abort()}async peerAdded(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:{value:this.peerTagValue}}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_added:!0}),this.safeDispatchEvent("peer:add",{detail:e.peerId})}async peerRemoved(e,t){this.components.peerId.equals(e.peerId)||await this.components.peerStore.merge(e.peerId,{tags:{[this.peerTagName]:void 0}}),this.updateMetrics(),this.metrics?.kadBucketEvents.increment({peer_removed:!0}),this.safeDispatchEvent("peer:remove",{detail:e.peerId})}async*pingOldContacts(e,t){if(!this.running)return;let n=[];for(let i of e){if(this.kb.get(i.kadId)==null){this.log("asked to ping contact %p that was not in routing table",i.peerId);continue}this.metrics?.kadBucketEvents.increment({ping_old_contact:!0}),n.push(async()=>{let o=this.pingOldContactQueue.find(i.peerId);if(o!=null)return this.log("asked to ping contact %p was already being pinged",i.peerId),await o.join(t)?void 0:i;if(!await this.pingOldContactQueue.add(async a=>{let c=this.pingOldContactTimeout.getTimeoutSignal(),l=de([c,a?.signal]);try{return await this.pingContact(i,a)}catch{return this.metrics?.kadBucketEvents.increment({ping_old_contact_error:!0}),!0}finally{this.pingOldContactTimeout.cleanUp(c),l.clear()}},{peerId:i.peerId,signal:t?.signal}))return i})}for await(let i of Yt(n))i!=null&&(yield i)}async verifyNewContact(e,t){let n=this.pingNewContactTimeout.getTimeoutSignal(),i=de([n,t?.signal]);try{let o=this.pingNewContactQueue.find(e.peerId);return o!=null?(this.log("joining existing ping to add new peer %p to routing table",e.peerId),await o.join({signal:i})):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:i})}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),i.clear()}}async pingContact(e,t){let n;try{this.log("pinging contact %p",e.peerId);for await(let i of this.network.sendRequest(e.peerId,{type:_e.PING},t))if(i.type===Dp.PEER_RESPONSE)return i.messageType===_e.PING?(this.log("contact %p ping ok",e.peerId),this.safeDispatchEvent("peer:ping",{detail:e.peerId}),!0):!1;return!1}catch(i){return this.log("error pinging old contact %p - %e",e.peerId,i),n?.abort(i),!1}}get size(){return this.kb==null?0:this.kb.count()}async find(e){let t=await Xt(e);return this.kb.get(t)?.peerId}closestPeer(e){let t=this.closestPeers(e,1);if(t.length>0)return t[0]}closestPeers(e,t=this.kBucketSize){return this.kb==null?[]:[...this.kb.closest(e,t)]}async add(e,t){if(this.kb==null)throw new Error("RoutingTable is not started");await this.kb.add(e,t)}async remove(e){if(this.kb==null)throw new Error("RoutingTable is not started");let t=await Xt(e);await this.kb.remove(t)}updateMetrics(){if(this.metrics==null||this.kb==null)return;let e=0,t=0,n=0,i=20,o=0;function s(a){if(wu(a)){a.depth>n&&(n=a.depth),t++,e+=a.peers.length,a.peers.length<i&&(i=a.peers.length),a.peers.length>o&&(o=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(i),this.metrics.routingTableKadBucketMaxOccupancy.update(o),this.metrics.routingTableKadBucketMaxDepth.update(n)}};var Tb=[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 Np=15,Lp=class{log;peerRouting;routingTable;refreshInterval;refreshQueryTimeout;commonPrefixLengthRefreshedAt;refreshTimeoutId;constructor(e,t){let{peerRouting:n,routingTable:i,refreshInterval:o,refreshQueryTimeout:s,logPrefix:a}=t;this.log=e.logger.forComponent(`${a}:routing-table:refresh`),this.peerRouting=n,this.routingTable=i,this.refreshInterval=o??nb,this.refreshQueryTimeout=s??ib,this.commonPrefixLengthRefreshedAt=[],this.refreshTable=this.refreshTable.bind(this)}async afterStart(){this.log(`refreshing routing table every ${this.refreshInterval}ms`),this.refreshTable(!0)}async stop(){this.refreshTimeoutId!=null&&clearTimeout(this.refreshTimeoutId)}refreshTable(e=!1){this.log("refreshing routing table");let t=this._maxCommonPrefix(),n=this._getTrackedCommonPrefixLengthsForRefresh(t);this.log(`max common prefix length ${t}`),this.log(`tracked CPLs [ ${n.map(i=>i.toISOString()).join(", ")} ]`),Promise.all(n.map(async(i,o)=>{try{if(await this._refreshCommonPrefixLength(o,i,e),this._numPeersForCpl(t)===0){let s=Math.min(2*(o+1),n.length-1);for(let a=o+1;a<s+1;a++)try{await this._refreshCommonPrefixLength(a,i,e)}catch(c){this.log.error(c)}}}catch(s){this.log.error(s)}})).catch(i=>{this.log.error(i)}).then(()=>{this.refreshTimeoutId=setTimeout(this.refreshTable,this.refreshInterval),this.refreshTimeoutId.unref!=null&&this.refreshTimeoutId.unref()}).catch(i=>{this.log.error(i)})}async _refreshCommonPrefixLength(e,t,n){if(!n&&t.getTime()>Date.now()-this.refreshInterval){this.log("not running refresh for cpl %s as time since last refresh not above interval",e);return}let i=await this._generateRandomPeerId(e);this.log("starting refreshing cpl %s with key %p (routing table size was %s)",e,i,this.routingTable.size);let o=AbortSignal.timeout(this.refreshQueryTimeout);let s=await Ip(this.peerRouting.getClosestPeers(i.toMultihash().bytes,{signal:o}));this.log(`found ${s} 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)}_getTrackedCommonPrefixLengthsForRefresh(e){e>Np&&(e=Np);let t=[];for(let n=0;n<=e;n++)t[n]=this.commonPrefixLengthRefreshedAt[n]??new Date;return t}async _generateRandomPeerId(e){if(this.routingTable.kb==null)throw new Error("Routing table not started");if(this.routingTable.kb.localPeer==null)throw new Error("Local peer not set");let t=gr(2),n=(t[1]<<8)+t[0],i=await this._makePeerId(this.routingTable.kb.localPeer.kadId,n,e),o=pe(i);return Tt(o)}async _makePeerId(e,t,n){if(n>Np)throw new Error(`Cannot generate peer ID for common prefix length greater than ${Np}`);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=Tb[c],u=new ArrayBuffer(34),d=new DataView(u,0,u.byteLength);return d.setUint8(0,Se.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=Nr(this.routingTable.kb.localPeer.kadId,e),n=0;for(let i of t)if(i===0)n++;else break;yield n}}};var Op=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 he("Missing key");let n;try{n=B.decode(t.key)}catch{throw new he("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 i=>{let o=pe(i.id),s=Tt(o),a=i.multiaddrs.map(c=>K(c));if(!e.equals(s)){this.log("invalid provider peer %p from %p",i.id,e);return}if(i.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 Bp=class{peerRouting;peerInfoMapper;peerId;addressManager;log;constructor(e,t){let{peerRouting:n,logPrefix:i}=t;this.log=e.logger.forComponent(`${i}:rpc:handlers:find-node`),this.peerId=e.peerId,this.addressManager=e.addressManager,this.peerRouting=n,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(this.log("incoming request from %p for peers closer to %b",e,t.key),t.key==null)throw new he("Invalid FIND_NODE message received - key was missing");let n=await this.peerRouting.getCloserPeersOffline(t.key,e);J(this.peerId.toMultihash().bytes,t.key)&&n.push({id:this.peerId,multiaddrs:this.addressManager.getAddresses().map(o=>o.decapsulateCode(se("p2p").code))});let i={type:_e.FIND_NODE,clusterLevel:t.clusterLevel,closer:n.map(this.peerInfoMapper).filter(({multiaddrs:o})=>o.length).map(o=>({id:o.id.toMultihash().bytes,multiaddrs:o.multiaddrs.map(s=>s.bytes)})),providers:[]};return i.closer.length===0&&this.log("could not find any peers closer to %b than %p",t.key,e),i}};function AO(r){return r[Symbol.asyncIterator]!=null}function TO(r){if(AO(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 Fi=TO;var Mp=class{peerId;peerRouting;providers;peerStore;peerInfoMapper;log;constructor(e,t){let{peerRouting:n,providers:i,logPrefix:o}=t;this.log=e.logger.forComponent(`${o}:rpc:handlers:get-providers`),this.peerId=e.peerId,this.peerStore=e.peerStore,this.peerRouting=n,this.providers=i,this.peerInfoMapper=t.peerInfoMapper}async handle(e,t){if(t.key==null)throw new he("Invalid GET_PROVIDERS message received - key was missing");let n;try{n=B.decode(t.key)}catch{throw new he("Invalid CID")}this.log("%p asking for providers for %s",e,n);let[i,o]=await Promise.all([Fi(Je(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.getCloserPeersOffline(t.key,this.peerId)]),s={type:_e.GET_PROVIDERS,key:t.key,clusterLevel:t.clusterLevel,closer: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)})),providers: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)}))};return this.log("got %s providers %s closerPeers",s.providers.length,s.closer.length),s}async _getAddresses(e){return[]}};var Fp=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 he("Invalid key");let i={type:_e.GET_VALUE,key:n,clusterLevel:t.clusterLevel,closer:[],providers:[]};if(pb(n)){this.log("is public key");let a=mb(n),c;try{let l=await this.peerStore.get(a);if(l.id.publicKey==null)throw new Ce("No public key found in key book");c=Ot(l.id.publicKey)}catch(l){if(l.name!=="NotFoundError")throw l}if(c!=null)return this.log("returning found public key"),i.record=new tt(n,c,new Date).serialize(),i}let[o,s]=await Promise.all([this._checkLocalDatastore(n),this.peerRouting.getCloserPeersOffline(n,e)]);return o!=null&&(this.log("had record for %b in local datastore",n),i.record=o.serialize()),s.length>0&&(this.log("had %s closer peers in routing table",s.length),i.closer=s.map(a=>({id:a.id.toMultihash().bytes,multiaddrs:a.multiaddrs.map(c=>c.bytes)}))),i}async _checkLocalDatastore(e){this.log("checkLocalDatastore looking for %b",e);let t=Oo(this.datastorePrefix,e),n;try{n=await this.datastore.get(t)}catch(o){if(o.name==="NotFoundError")return;throw o}let i=tt.deserialize(n);if(i.timeReceived==null||Date.now()-i.timeReceived.getTime()>Wx){await this.datastore.delete(t);return}return i}};var Up=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 Hp=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){let i=`Empty record from: ${e.toString()}`;throw this.log.error(i),new he(i)}try{let i=tt.deserialize(t.record);await pc(this.validators,i),i.timeReceived=new Date;let o=Oo(this.datastorePrefix,i.key);await this.components.datastore.put(o,i.serialize().subarray()),this.log("put record for %b into datastore under key %k",n,o)}catch(i){this.log("did not put record for key %b into datastore %o",n,i)}return t}};var zp=class{handlers;routingTable;log;metrics;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`)},this.log=e.logger.forComponent(`${t.logPrefix}:rpc`),this.routingTable=t.routingTable,this.handlers={[_e.GET_VALUE.toString()]:new Fp(e,t),[_e.PUT_VALUE.toString()]:new Hp(e,t),[_e.FIND_NODE.toString()]:new Bp(e,t),[_e.ADD_PROVIDER.toString()]:new Op(e,t),[_e.GET_PROVIDERS.toString()]:new Mp(e,t),[_e.PING.toString()]:new Up(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})}}onIncomingStream(e){let t="unknown";Promise.resolve().then(async()=>{let{stream:n,connection:i}=e,o=i.remotePeer,s=this;await Re(n,a=>An(a),async function*(a){for await(let c of a){let l=Mi.decode(c);t=l.type,s.log("incoming %s from %p",l.type,o);let u=await s.handleMessage(o,l);u!=null&&(yield Mi.encode(u))}},a=>Sn(a),n)}).catch(n=>{this.log.error("error handling %s RPC message from %p - %e",t,e.connection.remotePeer,n)})}};var $p=class extends be{log;components;protocol;running;registrarId;constructor(e,t){super();let{protocol:n,logPrefix:i}=t;this.components=e,this.log=e.logger.forComponent(`${i}: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 y6=class{dht;constructor(e){this.dht=e}async provide(e,t={}){await Lt(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)}async put(e,t,n){await Lt(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 Ce("Could not find value for key")}},w6=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 Ce("Peer not found")}async*getClosestPeers(e,t={}){for await(let n of this.dht.getClosestPeers(e,t))n.name==="FINAL_PEER"&&(yield n.peer)}},IO=32,_O=64,Vp=class extends be{protocol;routingTable;providers;network;peerRouting;components;log;running;kBucketSize;clientMode;validators;selectors;queryManager;contentFetching;contentRouting;routingTableRefresh;rpc;topologyListener;querySelf;maxInboundStreams;maxOutboundStreams;dhtContentRouting;dhtPeerRouting;peerInfoMapper;reprovider;constructor(e,t={}){super();let n=t.logPrefix??"libp2p:kad-dht",i=t.datastorePrefix??"/dht",o=t.metricsPrefix??"libp2p_kad_dht",s={queries:e.metrics?.registerMetricGroup(`${o}_operations_total`,{label:"operation"}),errors:e.metrics?.registerCounterGroup(`${o}_operation_errors_total`,{label:"operation"}),queryTime:e.metrics?.registerMetricGroup(`${o}_operation_time_seconds`,{label:"operation"}),errorTime:e.metrics?.registerMetricGroup(`${o}_operation_error_time_seconds`,{label:"operation"})};this.running=!1,this.components=e,this.log=e.logger.forComponent(n),this.protocol=t.protocol??Yx,this.kBucketSize=t.kBucketSize??20,this.clientMode=t.clientMode??!0,this.maxInboundStreams=t.maxInboundStreams??IO,this.maxOutboundStreams=t.maxOutboundStreams??_O,this.peerInfoMapper=t.peerInfoMapper??fb;let a=Ns();this.providers=new Ap(e,{...t.providers,logPrefix:n,datastorePrefix:i,lock:a}),this.validators={...db,...t.validators},this.selectors={...ub,...t.selectors},this.network=new Ep(e,{protocol:this.protocol,logPrefix:n,metricsPrefix:o}),this.routingTable=new Rp(e,{kBucketSize:t.kBucketSize,pingOldContactTimeout:t.pingOldContactTimeout,pingOldContactConcurrency:t.pingOldContactConcurrency,pingOldContactMaxQueueSize:t.pingOldContactMaxQueueSize,pingNewContactTimeout:t.pingNewContactTimeout,pingNewContactConcurrency:t.pingNewContactConcurrency,pingNewContactMaxQueueSize:t.pingNewContactMaxQueueSize,protocol:this.protocol,logPrefix:n,metricsPrefix:o,prefixLength:t.prefixLength,splitThreshold:t.kBucketSplitThreshold,network:this.network});let c=Z();t.allowQueryWithZeroPeers===!0&&c.resolve(),this.queryManager=new Tp(e,{disjointPaths:Math.ceil(this.kBucketSize/2),logPrefix:n,metricsPrefix:o,initialQuerySelfHasRun:c,routingTable:this.routingTable}),this.peerRouting=new Sp(e,{routingTable:this.routingTable,network:this.network,validators:this.validators,queryManager:this.queryManager,logPrefix:n}),this.contentFetching=new gp(e,{validators:this.validators,selectors:this.selectors,peerRouting:this.peerRouting,queryManager:this.queryManager,network:this.network,logPrefix:n,datastorePrefix:i}),this.contentRouting=new yp(e,{network:this.network,peerRouting:this.peerRouting,queryManager:this.queryManager,routingTable:this.routingTable,providers:this.providers,logPrefix:n}),this.routingTableRefresh=new Lp(e,{peerRouting:this.peerRouting,routingTable:this.routingTable,logPrefix:n}),this.rpc=new zp(e,{routingTable:this.routingTable,providers:this.providers,peerRouting:this.peerRouting,validators:this.validators,logPrefix:n,metricsPrefix:o,datastorePrefix:i,peerInfoMapper:this.peerInfoMapper}),this.topologyListener=new $p(e,{protocol:this.protocol,logPrefix:n}),this.querySelf=new _p(e,{peerRouting:this.peerRouting,interval:t.querySelfInterval,initialInterval:t.initialQuerySelfInterval,logPrefix:n,initialQuerySelfHasRun:c,routingTable:this.routingTable,operationMetrics:s}),this.reprovider=new kp(e,{...t.reprovide,logPrefix:n,metricsPrefix:o,datastorePrefix:i,contentRouting:this.contentRouting,lock:a,operationMetrics:s}),this.network.addEventListener("peer",l=>{let u=l.detail;this.onPeerConnect(u).catch(d=>{this.log.error("could not add %p to routing table",u.id,d)}),this.dispatchEvent(new CustomEvent("peer",{detail:u}))}),this.topologyListener.addEventListener("peer",l=>{let u=l.detail;Promise.resolve().then(async()=>{let d=await this.components.peerStore.get(u),h={id:u,multiaddrs:d.addresses.map(({multiaddr:f})=>f),protocols:d.protocols};await this.onPeerConnect(h)}).catch(d=>{this.log.error("could not add %p to routing table - %e",u,d)})}),this.dhtPeerRouting=new w6(this),this.dhtContentRouting=new y6(this),t.clientMode==null&&e.events.addEventListener("self:peer:update",l=>{this.log("received update of self-peer info"),Promise.resolve().then(async()=>{let u=l.detail.peer.addresses.some(({multiaddr:h})=>gb(h)),d=this.getMode();u&&d==="client"?await this.setMode("server"):d==="server"&&!u&&await this.setMode("client")}).catch(u=>{this.log.error("error setting dht server mode",u)})}),this.get=Ks(this.get.bind(this),s,"GET_VALUE"),this.findProviders=Ks(this.findProviders.bind(this),s,"FIND_PROVIDERS"),this.findPeer=Ks(this.findPeer.bind(this),s,"FIND_PEER"),this.getClosestPeers=Ks(this.getClosestPeers.bind(this),s,"GET_CLOSEST_PEERS"),this.provide=Ks(this.provide.bind(this),s,"PROVIDE"),this.put=Ks(this.put.bind(this),s,"PUT_VALUE")}[Symbol.toStringTag]="@libp2p/kad-dht";[Pe]=["@libp2p/content-routing","@libp2p/peer-routing","@libp2p/peer-discovery"];[zr]=["@libp2p/identify"];get[Qn](){return this.dhtContentRouting}get[Zn](){return this.dhtPeerRouting}get[os](){return this}async onPeerConnect(e){if(this.log.trace("peer %p connected",e.id),e=this.peerInfoMapper(e),e.multiaddrs.length===0){this.log.trace("ignoring %p as there were no valid addresses in %s after filtering",e.id,e.multiaddrs.map(t=>t.toString()));return}try{await this.routingTable.add(e.id)}catch(t){this.log.error("could not add %p to routing table",e.id,t)}}isStarted(){return this.running}getMode(){return this.clientMode?"client":"server"}async setMode(e,t=!1){if(e===this.getMode()&&!t){this.log("already in %s mode",e);return}if(await this.components.registrar.unhandle(this.protocol),e===this.getMode()&&!t){this.log("already in %s mode",e);return}e==="client"?(this.log("enabling client mode while in %s mode",this.getMode()),this.clientMode=!0):(this.log("enabling server mode while in %s mode",this.getMode()),this.clientMode=!1,await this.components.registrar.handle(this.protocol,this.rpc.onIncomingStream.bind(this.rpc),{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams}))}async start(){this.running||(this.running=!0,await this.setMode(this.clientMode?"client":"server",!0),await $t(this.routingTable,this.queryManager,this.network,this.topologyListener,this.routingTableRefresh,this.reprovider),await $t(this.querySelf))}async stop(){this.running=!1,await tr(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){await this.providers.removeProvider(e,this.components.peerId)}async*findProviders(e,t={}){yield*this.contentRouting.findProviders(e,t)}async*findPeer(e,t={}){yield*this.peerRouting.findPeer(e,t)}async*getClosestPeers(e,t={}){yield*this.peerRouting.getClosestPeers(e,t)}async refreshRoutingTable(){this.routingTableRefresh.refreshTable(!0)}};var Dp;(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"})(Dp||(Dp={}));function Ib(r={}){return e=>new Vp(e,r)}function qp(r){return new Fe("/dht/record/"+U(r,"base32"),!1)}function _b(r){return{async put(e,t,n={}){try{let i=qp(e);try{let s=await r.get(i),a=tt.deserialize(s);if(J(a.value,t))return}catch(s){if(s.name!=="NotFoundError")throw s}let o=new tt(e,t,new Date);n.onProgress?.(new M("ipns:routing:datastore:put")),await r.put(i,o.serialize(),n)}catch(i){throw n.onProgress?.(new M("ipns:routing:datastore:error",i)),i}},async get(e,t={}){try{let n=qp(e);t.onProgress?.(new M("ipns:routing:datastore:get"));let i=await r.get(n,t),o=tt.deserialize(i);return{record:o.value,created:o.timeReceived}}catch(n){throw t.onProgress?.(new M("ipns:routing:datastore:error",n)),n}},async has(e,t={}){let n=qp(e);return r.has(n,t)},async delete(e,t){let n=qp(e);return r.delete(n,t)}}}var x6="/ipns/";function b6(r,e){return r.code===e}var Ui=we("helia:ipns"),Pb=60*1e3,Rb=60*Pb,PO=48*Rb,v6=23*Rb,kb=BigInt(Pb)*5000000n,Cb={[mr.prefix]:mr,[ye.prefix]:ye},E6=class{routers;localStore;timeout;dns;log;constructor(e,t=[]){this.routers=[Gx(e.routing),...t],this.localStore=_b(e.datastore),this.dns=e.dns,this.log=e.logger.forComponent("helia:ipns")}async publish(e,t,n={}){try{let i=1n,o=Bi(e.publicKey.toMultihash());if(await this.localStore.has(o,n)){let{record:l}=await this.localStore.get(o,n);i=Dr(l).sequence+1n}let s=n.ttl!=null?BigInt(n.ttl)*1000000n:kb,a=await Hx(e,t,i,n.lifetime??PO,{...n,ttlNs:s}),c=Ro(a);return await this.localStore.put(o,c,n),n.offline!==!0&&await Promise.all(this.routers.map(async l=>{await l.put(o,c,n)})),a}catch(i){throw n.onProgress?.(new M("ipns:publish:error",i)),i}}async resolve(e,t={}){let n=xy(e)?e.toMultihash():e,i=Bi(n),o=await this.#r(i,t);return{...await this.#e(o.value,t),record:o}}async resolveDNSLink(e,t={}){let n=await Kx(e,this.dns,this.log,t);return{...await this.#e(n.value,t),answer:n.answer}}republish(e={}){if(this.timeout!=null)throw new Error("Republish is already running");e.signal?.addEventListener("abort",()=>{clearTimeout(this.timeout)});async function t(){let n=Date.now();e.onProgress?.(new M("ipns:republish:start"));let o=Date.now()-n,s=v6-o;s<0&&(s=e.interval??v6),setTimeout(()=>{t().catch(a=>{Ui.error("error republishing",a)})},s)}this.timeout=setTimeout(()=>{t().catch(n=>{Ui.error("error republishing",n)})},e.interval??v6)}async#e(e,t={}){let n=e.split("/");try{let i=n[1];if(i==="ipns"){let o=n[2],s=o.substring(0,1),a;if(s==="1"||s==="Q")a=ye.decode(`z${o}`);else if(Cb[s]!=null)a=Cb[s].decode(o);else throw new ep(`Unsupported multibase prefix "${s}"`);let c;try{c=pe(a)}catch{c=B.decode(a).multihash}if(!b6(c,0)&&!b6(c,18))throw new tp(`Unsupported multihash codec "${c.code}"`);let{cid:l}=await this.resolve(c,t),u=n.slice(3).join("/");return{cid:l,path:u}}else if(i==="ipfs"){let o=B.parse(n[2]),s=n.slice(3).join("/");return{cid:o,path:s}}}catch(i){Ui.error("error parsing ipfs path",i)}throw Ui.error("invalid ipfs path %s",e),new rp("Invalid value")}async#r(e,t={}){let n=[];if(await this.localStore.has(e,t))if(Ui("record is present in the cache"),t.nocache!==!0)try{let{record:a,created:c}=await this.localStore.get(e,t);this.log("record retrieved from cache"),await Do(e,a),this.log("record was valid");let l=Dr(a),u=Number((l.ttl??kb)/1000000n);if(c.getTime()+u>Date.now())return this.log("record TTL was valid"),l;if(t.offline===!0)return this.log("record TTL has been reached but we are resolving offline-only, returning record"),l;this.log("record TTL has been reached, searching routing for updates"),n.push(a)}catch(a){this.log("cached record was invalid",a),await this.localStore.delete(e,t)}else Ui("ignoring local cache due to nocache=true option");if(t.offline===!0)throw new Ce("Record was not present in the cache or has expired");Ui("did not have record locally");let o=0;if(await Promise.all(this.routers.map(async a=>{let c;try{c=await a.get(e,{...t,validate:!1})}catch(l){Ui.error("error finding IPNS record",l);return}try{await Do(e,c),n.push(c)}catch(l){o++,Ui.error("error finding IPNS record",l)}})),n.length===0)throw o>0?new Jh(`${o>1?`${o} records`:"Record"} found for routing key ${o>1?"were":"was"} invalid`):new Ce("Could not find record for routing key");let s=n[Qh(e,n)];return await this.localStore.put(e,s,t),Dr(s)}async republishRecord(e,t,n={}){let i;try{if(i=du(t)?.toMultihash(),i==null)if(typeof e=="string"){e.startsWith(x6)&&(e=e.slice(x6.length));try{i=Ne(e).toMultihash()}catch(a){throw new Error(`Invalid string key: ${a.message}`)}}else i=e;if(i==null)throw new Error("No public key multihash found to determine the routing key");let o=Bi(i),s=Ro(t);await Do(o,s),await this.localStore.put(o,s,n),n.offline!==!0&&await Promise.all(this.routers.map(async a=>{await a.put(o,s,n)}))}catch(o){throw n.onProgress?.(new M("ipns:republish:error",{key:i,record:t,err:o})),o}}};function Db(r,{routers:e=[]}={}){return new E6(r,e)}var Nb="[a-fA-F\\d:]",Fo=r=>r&&r.includeBoundaries?`(?:(?<=\\s|^)(?=${Nb})|(?<=${Nb})(?=\\s|$))`:"",zn="(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}",It="[a-fA-F\\d]{1,4}",Kp=`
|
|
4
4
|
(?:
|
|
5
5
|
(?:${It}:){7}(?:${It}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
|
|
6
6
|
(?:${It}:){6}(?:${zn}|:${It}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
(?:${It}:){1}(?:(?::${It}){0,4}:${zn}|(?::${It}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
|
|
12
12
|
(?::(?:(?::${It}){0,5}:${zn}|(?::${It}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
|
|
13
13
|
)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
|
|
14
|
-
`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),RO=new RegExp(`(?:^${zn}$)|(?:^${Kp}$)`),DO=new RegExp(`^${zn}$`),NO=new RegExp(`^${Kp}$`),S6=r=>r&&r.exact?RO:new RegExp(`(?:${Fo(r)}${zn}${Fo(r)})|(?:${Fo(r)}${Kp}${Fo(r)})`,"g");S6.v4=r=>r&&r.exact?DO:new RegExp(`${Fo(r)}${zn}${Fo(r)}`,"g");S6.v6=r=>r&&r.exact?NO:new RegExp(`${Fo(r)}${Kp}${Fo(r)}`,"g");var A6=S6;function T6(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function Lb(){return!1}var{toString:LO}=Object.prototype;function I6(r){return LO.call(r)==="[object RegExp]"}var Ob={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function _6(r,e={}){if(!I6(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(Ob).map(i=>(typeof e[i]=="boolean"?e[i]:r[i])?Ob[i]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function k6(r,e,{timeout:t}={}){try{return T6(()=>_6(r).test(e),{timeout:t})()}catch(n){if(Lb(n))return!1;throw n}}var OO=15,BO=45,Bb={timeout:400};function C6(r){return r.length>BO?!1:k6(A6.v6({exact:!0}),r,Bb)}function Mb(r){return r.length>OO?!1:k6(A6.v4({exact:!0}),r,Bb)}var Fb={http:"80",https:"443",ws:"80",wss:"443"},MO=["http","https","ws","wss"];function Gp(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:i,port:o}=FO(r),a="/"+[UO(i,t),HO(o,n),zO(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return K(a)}function FO(r){let[e]=r.split(":");MO.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:i}=new URL(r);if(i==null||i===""){let o=$O(e);o!=null&&(i=o),o==null&&t==="http:"&&(i="80")}return{scheme:e,hostname:n,port:i}}function UO(r,e){if(!(r==null||r==="")){if(Mb(r))return["ip4",r];if(C6(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(C6(t))return["ip6",t]}return[e,r]}}function HO(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function zO(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function $O(r){if(!(r==null||r===""||Fb[r]==null))return Fb[r]}var VO=["https://trustless-gateway.link","https://4everland.io"],qO=2336;function KO(r){return r=r.toString(),{id:Kt(B.createV1(qO,At.digest(C(r)))),multiaddrs:[Gp(r)]}}var P6=class{gateways;constructor(e={}){this.gateways=(e.gateways??VO).map(t=>KO(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function R6(r={}){return new P6(r)}var D6=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)}};function N6(r){return new D6(r)}function L6(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var GO=["https://trustless-gateway.link","https://4everland.io"],WO=2336;function YO(r){return r=r.toString(),{id:Kt(B.createV1(WO,At.digest(C(r)))),multiaddrs:[Gp(r)]}}var O6=class{gateways;constructor(e={}){this.gateways=(e.gateways??GO).map(t=>YO(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function B6(r={}){return new O6(r)}var M6=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)}};function F6(r){return new M6(r)}var xu=class extends Ni{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(kt.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(kt.encode(e.multihash.bytes));if(t==null)throw new hn;return t}has(e){return this.data.has(kt.encode(e.multihash.bytes))}async delete(e){this.data.delete(kt.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:B.createV1(We,pe(kt.decode(e))),block:t}}};var Que=we("blockstore:core:tiered");var zb="SHARDING";function jO(r){return r[Symbol.asyncIterator]!=null}function QO(r,e){return jO(r)?async function*(){yield*(await Fi(r)).sort(e)}():function*(){yield*Fi(r).sort(e)}()}var Wp=QO;var Hi=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:i}of e)await this.put(n,i,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,i){e.push({key:n,value:i})},delete(n){t.push(n)},commit:async n=>{await Lt(this.putMany(e,n)),e=[],await Lt(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 i=e.prefix;n=Wr(n,o=>o.key.toString().startsWith(i))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((i,o)=>Wr(i,o),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((i,o)=>Wp(i,o),n)),e.offset!=null){let i=0,o=e.offset;n=Wr(n,()=>i++>=o)}return e.limit!=null&&(n=ao(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let i=e.prefix;n=Wr(n,o=>o.toString().startsWith(i))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((i,o)=>Wr(i,o),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((i,o)=>Wp(i,o),n)),e.offset!=null){let i=e.offset,o=0;n=Wr(n,()=>o++>=i)}return e.limit!=null&&(n=ao(n,e.limit)),n}};var Ws=class extends Hi{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new hn;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Fe(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Fe(e)}};var Cde=new Fe(zb);var Vde=we("datastore:core:tiered");var Yp=class extends fh{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};function U6(){let r=Z(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function Vb(){let r=U6(),e=U6();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var gc=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function Xp(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function H6(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function lr(r,...e){if(!H6(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function z6(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 qb(r,e){lr(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function $6(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}var zi=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),Kb=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),ZO=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!ZO)throw new Error("Non little-endian hardware is not supported");function JO(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function jp(r){if(typeof r=="string")r=JO(r);else if(H6(r))r=Qp(r);else throw new Error("Uint8Array expected, got "+typeof r);return r}function Gb(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Wb(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 V6=(r,e)=>{function t(n,...i){if(lr(n),r.nonceLength!==void 0){let u=i[0];if(!u)throw new Error("nonce / iv required");r.varSizeNonce?lr(u):lr(u,r.nonceLength)}let o=r.tagLength;o&&i[1]!==void 0&&lr(i[1]);let s=e(n,...i),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");lr(d)}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,lr(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(lr(u),o&&u.length<o)throw new Error("invalid ciphertext length: smaller than tagLength="+o);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function q6(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error("invalid output length, expected "+r+", got: "+e.length);if(t&&!eB(e))throw new Error("invalid output, must be aligned");return e}function K6(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function eB(r){return r.byteOffset%4===0}function Qp(r){return Uint8Array.from(r)}function $i(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var Xb=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),tB=Xb("expand 16-byte k"),rB=Xb("expand 32-byte k"),nB=zi(tB),iB=zi(rB);function j(r,e){return r<<e|r>>>32-e}function G6(r){return r.byteOffset%4===0}var Zp=64,oB=16,jb=2**32-1,Yb=new Uint32Array;function sB(r,e,t,n,i,o,s,a){let c=i.length,l=new Uint8Array(Zp),u=zi(l),d=G6(i)&&G6(o),h=d?zi(i):Yb,f=d?zi(o):Yb;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=jb)throw new Error("arx: counter overflow");let m=Math.min(Zp,c-p);if(d&&m===Zp){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,w;y<oB;y++)w=g+y,f[w]=h[w]^u[y];p+=Zp;continue}for(let g=0,y;g<m;g++)y=p+g,o[y]=i[y]^l[g];p+=m}}function W6(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:i,counterRight:o,rounds:s}=Gb({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return Xp(i),Xp(s),$6(o),$6(t),(a,c,l,u,d=0)=>{lr(a),lr(c),lr(l);let h=l.length;if(u===void 0&&(u=new Uint8Array(h)),lr(u),Xp(d),d<0||d>=jb)throw new Error("arx: counter overflow");if(u.length<h)throw new Error(`arx: output (${u.length}) is shorter than data (${h})`);let f=[],p=a.length,m,g;if(p===32)f.push(m=Qp(a)),g=iB;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),g=nB,f.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);G6(c)||f.push(c=Qp(c));let y=zi(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,y,zi(c.subarray(0,16)),y),c=c.subarray(16)}let w=16-i;if(w!==c.length)throw new Error(`arx: nonce must be ${w} or 16 bytes`);if(w!==12){let b=new Uint8Array(12);b.set(c,o?0:12-c.length),c=b,f.push(c)}let x=zi(c);return sB(r,g,y,x,l,u,d,s),$i(...f),u}}var jt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,Y6=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=jp(e),lr(e,32);let t=jt(e,0),n=jt(e,2),i=jt(e,4),o=jt(e,6),s=jt(e,8),a=jt(e,10),c=jt(e,12),l=jt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|i<<6)&7939,this.r[3]=(i>>>7|o<<9)&8191,this.r[4]=(o>>>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]=jt(e,16+2*u)}process(e,t,n=!1){let i=n?0:2048,{h:o,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],h=s[5],f=s[6],p=s[7],m=s[8],g=s[9],y=jt(e,t+0),w=jt(e,t+2),x=jt(e,t+4),b=jt(e,t+6),A=jt(e,t+8),k=jt(e,t+10),E=jt(e,t+12),S=jt(e,t+14),T=o[0]+(y&8191),$=o[1]+((y>>>13|w<<3)&8191),R=o[2]+((w>>>10|x<<6)&8191),H=o[3]+((x>>>7|b<<9)&8191),F=o[4]+((b>>>4|A<<12)&8191),N=o[5]+(A>>>1&8191),L=o[6]+((A>>>14|k<<2)&8191),_=o[7]+((k>>>11|E<<5)&8191),I=o[8]+((E>>>8|S<<8)&8191),D=o[9]+(S>>>5|i),P=0,q=P+T*a+$*(5*g)+R*(5*m)+H*(5*p)+F*(5*f);P=q>>>13,q&=8191,q+=N*(5*h)+L*(5*d)+_*(5*u)+I*(5*l)+D*(5*c),P+=q>>>13,q&=8191;let G=P+T*c+$*a+R*(5*g)+H*(5*m)+F*(5*p);P=G>>>13,G&=8191,G+=N*(5*f)+L*(5*h)+_*(5*d)+I*(5*u)+D*(5*l),P+=G>>>13,G&=8191;let Y=P+T*l+$*c+R*a+H*(5*g)+F*(5*m);P=Y>>>13,Y&=8191,Y+=N*(5*p)+L*(5*f)+_*(5*h)+I*(5*d)+D*(5*u),P+=Y>>>13,Y&=8191;let ie=P+T*u+$*l+R*c+H*a+F*(5*g);P=ie>>>13,ie&=8191,ie+=N*(5*m)+L*(5*p)+_*(5*f)+I*(5*h)+D*(5*d),P+=ie>>>13,ie&=8191;let oe=P+T*d+$*u+R*l+H*c+F*a;P=oe>>>13,oe&=8191,oe+=N*(5*g)+L*(5*m)+_*(5*p)+I*(5*f)+D*(5*h),P+=oe>>>13,oe&=8191;let ue=P+T*h+$*d+R*u+H*l+F*c;P=ue>>>13,ue&=8191,ue+=N*a+L*(5*g)+_*(5*m)+I*(5*p)+D*(5*f),P+=ue>>>13,ue&=8191;let xe=P+T*f+$*h+R*d+H*u+F*l;P=xe>>>13,xe&=8191,xe+=N*c+L*a+_*(5*g)+I*(5*m)+D*(5*p),P+=xe>>>13,xe&=8191;let Ue=P+T*p+$*f+R*h+H*d+F*u;P=Ue>>>13,Ue&=8191,Ue+=N*l+L*c+_*a+I*(5*g)+D*(5*m),P+=Ue>>>13,Ue&=8191;let He=P+T*m+$*p+R*f+H*h+F*d;P=He>>>13,He&=8191,He+=N*u+L*l+_*c+I*a+D*(5*g),P+=He>>>13,He&=8191;let Ge=P+T*g+$*m+R*p+H*f+F*h;P=Ge>>>13,Ge&=8191,Ge+=N*d+L*u+_*l+I*c+D*a,P+=Ge>>>13,Ge&=8191,P=(P<<2)+P|0,P=P+q|0,q=P&8191,P=P>>>13,G+=P,o[0]=q,o[1]=G,o[2]=Y,o[3]=ie,o[4]=oe,o[5]=ue,o[6]=xe,o[7]=Ue,o[8]=He,o[9]=Ge}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),i=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=i,i=e[a]>>>13,e[a]&=8191;e[0]+=i*5,i=e[0]>>>13,e[0]&=8191,e[1]+=i,i=e[1]>>>13,e[1]&=8191,e[2]+=i,n[0]=e[0]+5,i=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+i,i=n[a]>>>13,n[a]&=8191;n[9]-=8192;let o=(i^1)-1;for(let a=0;a<10;a++)n[a]&=o;o=~o;for(let a=0;a<10;a++)e[a]=e[a]&o|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;$i(n)}update(e){z6(this);let{buffer:t,blockLen:n}=this;e=jp(e);let i=e.length;for(let o=0;o<i;){let s=Math.min(n-this.pos,i-o);if(s===n){for(;n<=i-o;o+=n)this.process(e,o);continue}t.set(e.subarray(o,o+s),this.pos),this.pos+=s,o+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){$i(this.h,this.r,this.buffer,this.pad)}digestInto(e){z6(this),qb(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:i}=this;if(i){for(t[i++]=1;i<16;i++)t[i]=0;this.process(t,0,!0)}this.finalize();let o=0;for(let s=0;s<8;s++)e[o++]=n[s]>>>0,e[o++]=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 aB(r){let e=(n,i)=>r(i).update(jp(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var Qb=aB(r=>new Y6(r));function ev(r,e,t,n,i,o=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],h=e[2],f=e[3],p=e[4],m=e[5],g=e[6],y=e[7],w=i,x=t[0],b=t[1],A=t[2],k=s,E=a,S=c,T=l,$=u,R=d,H=h,F=f,N=p,L=m,_=g,I=y,D=w,P=x,q=b,G=A;for(let ie=0;ie<o;ie+=2)k=k+$|0,D=j(D^k,16),N=N+D|0,$=j($^N,12),k=k+$|0,D=j(D^k,8),N=N+D|0,$=j($^N,7),E=E+R|0,P=j(P^E,16),L=L+P|0,R=j(R^L,12),E=E+R|0,P=j(P^E,8),L=L+P|0,R=j(R^L,7),S=S+H|0,q=j(q^S,16),_=_+q|0,H=j(H^_,12),S=S+H|0,q=j(q^S,8),_=_+q|0,H=j(H^_,7),T=T+F|0,G=j(G^T,16),I=I+G|0,F=j(F^I,12),T=T+F|0,G=j(G^T,8),I=I+G|0,F=j(F^I,7),k=k+R|0,G=j(G^k,16),_=_+G|0,R=j(R^_,12),k=k+R|0,G=j(G^k,8),_=_+G|0,R=j(R^_,7),E=E+H|0,D=j(D^E,16),I=I+D|0,H=j(H^I,12),E=E+H|0,D=j(D^E,8),I=I+D|0,H=j(H^I,7),S=S+F|0,P=j(P^S,16),N=N+P|0,F=j(F^N,12),S=S+F|0,P=j(P^S,8),N=N+P|0,F=j(F^N,7),T=T+$|0,q=j(q^T,16),L=L+q|0,$=j($^L,12),T=T+$|0,q=j(q^T,8),L=L+q|0,$=j($^L,7);let Y=0;n[Y++]=s+k|0,n[Y++]=a+E|0,n[Y++]=c+S|0,n[Y++]=l+T|0,n[Y++]=u+$|0,n[Y++]=d+R|0,n[Y++]=h+H|0,n[Y++]=f+F|0,n[Y++]=p+N|0,n[Y++]=m+L|0,n[Y++]=g+_|0,n[Y++]=y+I|0,n[Y++]=w+D|0,n[Y++]=x+P|0,n[Y++]=b+q|0,n[Y++]=A+G|0}function cB(r,e,t,n){let i=r[0],o=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],h=e[4],f=e[5],p=e[6],m=e[7],g=t[0],y=t[1],w=t[2],x=t[3];for(let A=0;A<20;A+=2)i=i+c|0,g=j(g^i,16),h=h+g|0,c=j(c^h,12),i=i+c|0,g=j(g^i,8),h=h+g|0,c=j(c^h,7),o=o+l|0,y=j(y^o,16),f=f+y|0,l=j(l^f,12),o=o+l|0,y=j(y^o,8),f=f+y|0,l=j(l^f,7),s=s+u|0,w=j(w^s,16),p=p+w|0,u=j(u^p,12),s=s+u|0,w=j(w^s,8),p=p+w|0,u=j(u^p,7),a=a+d|0,x=j(x^a,16),m=m+x|0,d=j(d^m,12),a=a+d|0,x=j(x^a,8),m=m+x|0,d=j(d^m,7),i=i+l|0,x=j(x^i,16),p=p+x|0,l=j(l^p,12),i=i+l|0,x=j(x^i,8),p=p+x|0,l=j(l^p,7),o=o+u|0,g=j(g^o,16),m=m+g|0,u=j(u^m,12),o=o+u|0,g=j(g^o,8),m=m+g|0,u=j(u^m,7),s=s+d|0,y=j(y^s,16),h=h+y|0,d=j(d^h,12),s=s+d|0,y=j(y^s,8),h=h+y|0,d=j(d^h,7),a=a+c|0,w=j(w^a,16),f=f+w|0,c=j(c^f,12),a=a+c|0,w=j(w^a,8),f=f+w|0,c=j(c^f,7);let b=0;n[b++]=i,n[b++]=o,n[b++]=s,n[b++]=a,n[b++]=g,n[b++]=y,n[b++]=w,n[b++]=x}var lB=W6(ev,{counterRight:!1,counterLength:4,allowShortKeys:!1}),uB=W6(ev,{counterRight:!1,counterLength:8,extendNonceFn:cB,allowShortKeys:!1});var dB=new Uint8Array(16),Zb=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(dB.subarray(t))},fB=new Uint8Array(32);function Jb(r,e,t,n,i){let o=r(e,t,fB),s=Qb.create(o);i&&Zb(s,i),Zb(s,n);let a=new Uint8Array(16),c=Kb(a);K6(c,0,BigInt(i?i.length:0),!0),K6(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return $i(o,a),l}var tv=r=>(e,t,n)=>({encrypt(o,s){let a=o.length;s=q6(a+16,s,!1),s.set(o);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=Jb(r,e,t,c,n);return s.set(l,a),$i(l),s},decrypt(o,s){s=q6(o.length-16,s,!1);let a=o.subarray(0,-16),c=o.subarray(-16),l=Jb(r,e,t,a,n);if(!Wb(c,l))throw new Error("invalid tag");return s.set(o.subarray(0,-16)),r(e,t,s,s,1),$i(l),s}}),X6=V6({blockSize:64,nonceLength:12,tagLength:16},tv(lB)),_fe=V6({blockSize:64,nonceLength:24,tagLength:16},tv(uB));function nv(r,e,t){return ys(r),t===void 0&&(t=new Uint8Array(r.outputLen)),vo(r,_n(t),_n(e))}var j6=new Uint8Array([0]),rv=new Uint8Array;function iv(r,e,t,n=32){if(ys(r),uo(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let i=Math.ceil(n/r.outputLen);t===void 0&&(t=rv);let o=new Uint8Array(i*r.outputLen),s=vo.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<i;l++)j6[0]=l+1,a.update(l===0?rv:c).update(t).update(j6).digestInto(c),o.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),j6.fill(0),o.slice(0,n)}var Q6={hashSHA256(r){return cn(r.subarray())},getHKDF(r,e){let t=nv(cn,e,r),i=iv(cn,t,void 0,96),o=i.subarray(0,32),s=i.subarray(32,64),a=i.subarray(64,96);return[o,s,a]},generateX25519KeyPair(){let r=vl.utils.randomPrivateKey();return{publicKey:vl.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:vl.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return vl.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return X6(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,i){return X6(n,e,t).decrypt(r.subarray(),i)}};var ov=Q6;function sv(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 yc=r=>{let e=at(2);return e[0]=r>>8,e[1]=r,e};yc.bytes=2;var bu=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)};bu.bytes=2;function av(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 Z6(r,e){!e.enabled||!gc||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${U(r.privateKey,"hex")}`)):e("Missing local static keys."))}function J6(r,e){!e.enabled||!gc||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${U(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function cv(r,e){!e.enabled||!gc||e(r?`REMOTE_STATIC_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote static public key.")}function e8(r,e){!e.enabled||!gc||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function t8(r,e,t){!t.enabled||!gc||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&U(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&U(e.k,"hex")}`))}var wc=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var hB=0,pB=4294967295,mB="Cipherstate has reached maximum n, a new handshake must be performed",Jp=class{n;bytes;view;constructor(e=hB){this.n=e,this.bytes=le(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>pB)throw new Error(mB)}};var Ys=le(0),xc=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new Jp(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 i=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),i}},r8=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=C(t,"utf-8");this.h=gB(e,n),this.ck=this.h,this.cs=new xc(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new xc(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ee(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,Ys);return[new xc(this.crypto,e),new xc(this.crypto,t)]}},n8=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:i,initiator:o,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new r8(t,n),this.ss.mixHash(i),this.initiator=o,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 i=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(i),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},vu=class extends n8{writeMessageA(e){return new ee(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ee(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ee(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new wc(`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 wc(`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 wc(`handshake stage 2 validation fail: ${t.message}`)}}};function gB(r,e){if(e.length<=32){let t=le(32);return t.set(e),t}else return r.hash(e)}var e1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let o of t.webtransportCerthashes)n.uint32(10),n.bytes(o);if(t.streamMuxers!=null)for(let o of t.streamMuxers)n.uint32(18),n.string(o);i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={webtransportCerthashes:[],streamMuxers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(i.limits?.webtransportCerthashes!=null&&o.webtransportCerthashes.length===i.limits.webtransportCerthashes)throw new Ve('Decode error - map field "webtransportCerthashes" had too many elements');o.webtransportCerthashes.push(t.bytes());break}case 2:{if(i.limits?.streamMuxers!=null&&o.streamMuxers.length===i.limits.streamMuxers)throw new Ve('Decode error - map field "streamMuxers" had too many elements');o.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(e1||(e1={}));var Eu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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),e1.codec().encode(t.extensions,n)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={identityKey:le(0),identitySig:le(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=e1.codec().decode(t,t.uint32(),{limits:i.limits?.extensions});break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Eu||(Eu={}));async function i8(r,e,t){let n=await r.sign(lv(e));return Eu.encode({identityKey:Ot(r.publicKey),identitySig:n,extensions:t})}async function o8(r,e,t){try{let n=Eu.decode(r),i=wt(n.identityKey);if(t?.equals(i)===!1)throw new Error(`Payload identity key ${i} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let o=lv(e);if(!await i.verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new kd(n.message)}}function lv(r){let e=C("noise-libp2p-static-key:");return r instanceof Uint8Array?ge([e,r],e.length+r.length):(r.prepend(e),r)}async function uv(r,e){let{log:t,connection:n,crypto:i,privateKey:o,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await i8(o,a.publicKey,l),d=new vu({crypto:i,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});Z6(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(Ys),e),t.trace("Stage 0 - Initiator finished sending first message."),J6(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let h=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),e8(d.re,t),cv(d.rs,t),t.trace("Initiator going to check remote's signature...");let f=await o8(h,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,m]=d.ss.split();return t8(p,m,t),{payload:f,encrypt:g=>p.encryptWithAd(Ys,g),decrypt:(g,y)=>m.decryptWithAd(Ys,g,y)}}async function dv(r,e){let{log:t,connection:n,crypto:i,privateKey:o,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await i8(o,a.publicKey,l),d=new vu({crypto:i,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});Z6(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."),e8(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."),J6(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let h=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let f=await o8(h,d.rs,c),[p,m]=d.ss.split();return t8(p,m,t),{payload:f,encrypt:g=>m.encryptWithAd(Ys,g),decrypt:(g,y)=>p.decryptWithAd(Ys,g,y)}}var hv=16;function pv(r,e){return async function*(t){for await(let n of t)for(let i=0;i<n.length;i+=65519){let o=i+65519;o>n.length&&(o=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(i,o)):s=r.encrypt(n.sublist(i,o)),e?.encryptedPackets.increment(),yield new ee(yc(s.byteLength),s)}}}function mv(r,e){return async function*(t){for await(let n of t)for(let i=0;i<n.length;i+=65535){let o=i+65535;if(o>n.length&&(o=n.length),o-hv<i)throw new Error("Invalid chunk");let s=n.sublist(i,o),a=n.subarray(i,o-hv);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var t1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:i,crypto:o,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=o??ov;this.crypto=sv(c),this.extensions={webtransportCerthashes:[],...i},this.metrics=a?av(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??le(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Pe]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=ci(e,{lengthEncoder:yc,lengthDecoder:bu,maxDataLength:65535}),i=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),o=await this.createSecureConnection(n,i);e.source=o.source,e.sink=o.sink;let s=wt(i.payload.identityKey);return{conn:e,remoteExtensions:i.payload.extensions,remotePeer:oi(s),streamMuxer:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let i=t.get(n);if(i!=null)return i}if(e.length)throw new Cd("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=ci(e,{lengthEncoder:yc,lengthDecoder:bu,maxDataLength:65535}),i=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),o=await this.createSecureConnection(n,i);e.source=o.source,e.sink=o.sink;let s=wt(i.payload.identityKey);return{conn:e,remoteExtensions:i.payload.extensions,remotePeer:oi(s),streamMuxer:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,i){let o;try{o=await uv({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async performHandshakeResponder(e,t,n,i){let o;try{o=await dv({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async createSecureConnection(e,t){let[n,i]=Vb(),o=e.unwrap();return await Re(n,pv(t,this.metrics),o,s=>An(s,{lengthDecoder:bu}),mv(t,this.metrics),n),i}};function r1(r={}){return e=>new t1(e,r)}function bc(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var $n=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},vc=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Ec=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},n1=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},i1=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},o1=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},s1=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Sc=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var gv=new Set([$n.name,vc.name,Ec.name,i1.name,o1.name,s1.name,Sc.name]),Au=256*1024,yv=16*1024*1024;var wv={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Au,maxStreamWindowSize:yv,maxMessageSize:64*1024};function xv(r){if(r.keepAliveInterval<=0)throw new O("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new O("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new O("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Au)throw new O("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new O("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new O("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new O("MaxMessageSize must be greater than a kilobyte")}var pt;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(pt||(pt={}));var nt;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(nt||(nt={}));var Whe=Object.values(nt).filter(r=>typeof r!="string"),bv=0,pn;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(pn||(pn={}));var Uo=12;var vv=2**24;function yB(r){if(r[0]!==bv)throw new $n("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*vv+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*vv+(r[9]<<16)+(r[10]<<8)+r[11]}}var a1=class{source;buffer;frameInProgress;constructor(e){this.source=wB(e),this.buffer=new ee,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:i}=t;n===pt.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,i)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new n1("decoding frame already in progress");if(this.buffer.length<Uo)return;let e=yB(this.buffer.subarray(0,Uo));return this.buffer.consume(Uo),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function wB(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function s8(r){let e=new Uint8Array(Uo);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function Ev(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function c1(r,e){let t=bc(r).return?.();Ev(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var xB=5e3;function a8(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Ho=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=Z(),this.closed=Z(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??xB,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=rr({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new as(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let i=this.sendNewStream(t);a8(i)&&await i}let n=()=>{c1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let i of e){i=i instanceof Uint8Array?new ee(i):i;let o=this.sendData(i,t);a8(o)&&(this.sendingData=Z(),await o,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await st(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully"))}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await st(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await st(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await st(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();a8(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new Rd("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var mn;(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"})(mn||(mn={}));var l1=class extends Ho{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=mn.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Au,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Os(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Uo,e.length),i=this.getSendFlags();this.sendFrame({type:pt.Data,flag:i,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:pt.WindowUpdate,flag:nt.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|nt.FIN;this.sendFrame({type:pt.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,i=()=>{this.status==="open"||this.status==="closing"?n(new zt("Stream aborted")):t()};e.signal?.addEventListener("abort",i);try{await new Promise((o,s)=>{this.sendWindowCapacityUpdate=()=>{o()},n=s,t=o})}finally{e.signal?.removeEventListener("abort",i)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Sc("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&nt.ACK)===nt.ACK&&this.state===mn.SYNSent&&(this.state=mn.Established),(e&nt.FIN)===nt.FIN&&this.remoteCloseWrite(),(e&nt.RST)===nt.RST&&this.reset()}getSendFlags(){switch(this.state){case mn.Init:return this.state=mn.SYNSent,nt.SYN;case mn.SYNReceived:return this.state=mn.Established,nt.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let i=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:pt.WindowUpdate,flag:e,streamID:this._id,length:i})}};var Sv="/yamux/1.0.0",bB=500,u1=class{protocol=Sv;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Pe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new c8(this._components,{...this._init,...e})}},c8=class{protocol=Sv;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...wv,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),xv(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=rr({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let i=()=>{let a=bc(n);if(a.return!=null){let c=a.return();vB(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},o,s;try{let a=new a1(n);try{this.closeController.signal.addEventListener("abort",i);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",i)}o=pn.NormalTermination}catch(a){gv.has(a.name)?(this.log?.error("protocol error in sink",a),o=pn.ProtocolError):(this.log?.error("internal error in sink",a),o=pn.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,o):await this.close({reason:o})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new Jn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Jn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new so("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,mn.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new Jn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Jn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((i,o)=>{let s=()=>{o(new Jn("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),i()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??pn.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(bB);e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??pn.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,i){if(this._streams.get(e)!=null)throw new O("Stream already exists with that id");let o=new l1({id:e.toString(),name:t,state:n,direction:i,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(o)},log:this.logger.forComponent(`libp2p:yamux:${i}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:i,length:o}=e;if(this.log?.trace("received frame %o",e),n===0)switch(i){case pt.Ping:{this.handlePing(e);return}case pt.GoAway:{this.handleGoAway(o);return}default:throw new $n("Invalid frame type")}else switch(e.type){case pt.Data:case pt.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new $n("Invalid frame type")}}handlePing(e){if(e.flag===nt.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,nt.ACK);else if(e.flag===nt.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new $n("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new vc("ping not requested");if(this.activePing.id!==e)throw new Ec("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",pn[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:i,type:o}=e;(i&nt.SYN)===nt.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(o===pt.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(o){case pt.WindowUpdate:{s.handleWindowUpdate(e);return}case pt.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new O("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:pt.WindowUpdate,flag:nt.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:pt.WindowUpdate,flag:nt.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,mn.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===pt.Data){if(t===void 0)throw new $n("Invalid frame");this.source.push(new ee(s8(e),t))}else this.source.push(s8(e))}sendPing(e,t=nt.SYN){t===nt.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:pt.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=pn.NormalTermination){this.log?.("sending GoAway reason=%s",pn[e]),this.localGoAway=e,this.sendFrame({type:pt.GoAway,flag:0,streamID:0,length:e})}};function vB(r){return r!=null&&typeof r.then=="function"}function Av(r={}){return e=>new u1(e,r)}var EB=41;function d1(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===EB)return wx("2000::/3",t)}catch{}return!1}function f1(r){try{let[[e]]=r.stringTuples();return e===4||e===41}catch{}return!1}function gn(r){try{if(!f1(r))return!1;let[[,e]]=r.stringTuples();return e==null?!1:br(e)??!1}catch{}return!0}function Tv(r,e,t){let n,i;function o(){let a={signal:i.signal};if(t?.timeout!=null){let c=de([i.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{i.signal.aborted||(n=setTimeout(o,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(o,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,i=new AbortController,i.signal,t?.runImmediately===!0?queueMicrotask(()=>{o()}):n=setTimeout(o,e))},stop:()=>{clearTimeout(n),i?.abort(),s=!1}}}var Iv="libp2p",_v="autonat",kv="1.0.0";var Qe;(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=()=>Ye(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 i;(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"})(i||(i={})),function(l){l.codec=()=>Ye(i)}(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,h,f={})=>{if(f.lengthDelimited!==!1&&h.fork(),d.id!=null&&(h.uint32(10),h.bytes(d.id)),d.addrs!=null)for(let p of d.addrs)h.uint32(18),h.bytes(p);f.lengthDelimited!==!1&&h.ldelim()},(d,h,f={})=>{let p={addrs:[]},m=h==null?d.len:d.pos+h;for(;d.pos<m;){let g=d.uint32();switch(g>>>3){case 1:{p.id=d.bytes();break}case 2:{if(f.limits?.addrs!=null&&p.addrs.length===f.limits.addrs)throw new Ve('Decode error - map field "addrs" had too many elements');p.addrs.push(d.bytes());break}default:{d.skipType(g&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,h)=>te(d,l.codec(),h)})(o=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,h,f={})=>{f.lengthDelimited!==!1&&h.fork(),d.peer!=null&&(h.uint32(10),r.PeerInfo.codec().encode(d.peer,h)),f.lengthDelimited!==!1&&h.ldelim()},(d,h,f={})=>{let p={},m=h==null?d.len:d.pos+h;for(;d.pos<m;){let g=d.uint32();switch(g>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:f.limits?.peer});break}default:{d.skipType(g&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,h)=>te(d,l.codec(),h)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,h,f={})=>{f.lengthDelimited!==!1&&h.fork(),d.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(d.status,h)),d.statusText!=null&&(h.uint32(18),h.string(d.statusText)),d.addr!=null&&(h.uint32(26),h.bytes(d.addr)),f.lengthDelimited!==!1&&h.ldelim()},(d,h,f={})=>{let p={},m=h==null?d.len:d.pos+h;for(;d.pos<m;){let g=d.uint32();switch(g>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(d);break}case 2:{p.statusText=d.string();break}case 3:{p.addr=d.bytes();break}default:{d.skipType(g&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,h)=>te(d,l.codec(),h)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let h={},f=u==null?l.len:l.pos+u;for(;l.pos<f;){let p=l.uint32();switch(p>>>3){case 1:{h.type=r.MessageType.codec().decode(l);break}case 2:{h.dial=r.Dial.codec().decode(l,l.uint32(),{limits:d.limits?.dial});break}case 3:{h.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return h})),c),r.encode=l=>re(l,r.codec()),r.decode=(l,u)=>te(l,r.codec(),u)})(Qe||(Qe={}));var kB=4,CB=8,h1=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??Iv}/${_v}/${kv}`,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=new Map,this.findPeers=Tv(this.findRandomPeers.bind(this),6e4),this.addressFilter=_r(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Pe]=["@libp2p/autonat"];get[zr](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream - %e",t)})},{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=de([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(i=>i.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){let t=AbortSignal.timeout(this.timeout);let n=rt(e.stream,{maxDataLength:this.maxMessageSize}).pb(Qe);try{let i=await n.read({signal:t}),o=await this.handleAutonatMessage(i,e.connection,{signal:t});await n.write(o,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(i){this.log.error("error handling incoming autonat stream - %e",i),e.stream.abort(i)}}async handleAutonatMessage(e,t,n){let i=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),o=e.dial;if(o==null)return this.log.error("dial was missing from message"),{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=o.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=pe(a.id);s=Tt(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.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:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>K(d)).filter(d=>{let h=d.toOptions();return gn(d)?!1:h.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):i.includes(h.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==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:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.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 await(let d of c){let h;u=d;try{if(h=await this.components.connectionManager.openConnection(d,n),!h.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,h.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.OK,addr:h.remoteAddr.decapsulateCode(se("p2p").code).bytes}}}catch(f){this.log.error("could not dial %p - %e",s,f),l=f.message}finally{h!=null&&await h.close()}}return{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((i,o)=>i.type==="observed"&&o.type!=="observed"?1:o.type==="observed"&&i.type!=="observed"?-1:0).filter(i=>!(!(i.expires<Date.now())||i.multiaddr.toOptions().family===6&&(!t||!d1(i.multiaddr))||gn(i.multiaddr)));for(let i of n){let o=i.multiaddr.toString(),s=this.dialResults.get(o);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=i.expires<Date.now();if(a&&this.addressFilter.remove?.(o),this.addressFilter.has(o))continue;this.addressFilter.add(o),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",o),s={multiaddr:i.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:D3(),queue:new Vt({concurrency:3,maxSize:50}),type:i.type,lastVerified:i.lastVerified},this.dialResults.set(o,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})=>s.toOptions().family===6),i=this.getNetworkSegment(e.remoteAddr),o=this.getFirstUnverifiedMultiaddr(i,n);if(o==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){o.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",o.multiaddr),this.confirmAddress(o)):this.log("skipping verifying %a because we are too close to the connection limit",o.multiaddr);return}o.queue.add(async s=>{await this.askPeerToVerify(e,i,s)},{peerId:e.remotePeer,multiaddr:o.multiaddr}).catch(s=>{o?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,o?.multiaddr,s)})}async askPeerToVerify(e,t,n){let i=this.dialResults.get(n.multiaddr.toString());if(i==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let o=AbortSignal.timeout(this.timeout);this.log.trace("asking %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:o});try{let a=rt(s).pb(Qe),[,c]=await Promise.all([a.write({type:Qe.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:o}),a.read({signal:o})]);if(c.type!==Qe.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!==Qe.ResponseStatus.OK&&l!==Qe.ResponseStatus.E_DIAL_ERROR)return;if(i=this.dialResults.get(n.multiaddr.toString()),i==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(i.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(i.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(i.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(i.verifyingPeers.add(e.remotePeer),i.networkSegments.push(t),l===Qe.ResponseStatus.OK){if(i.success++,i.type!=="observed"){this.confirmAddress(i);return}}else l===Qe.ResponseStatus.E_DIAL_ERROR&&i.failure++;this.log("%a success %d failure %d",i.multiaddr,i.success,i.failure),i.success===kB&&this.confirmAddress(i),i.failure===CB&&this.unconfirmAddress(i)}finally{try{await s.close({signal:o})}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=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function Cv(r={}){return e=>new h1(e,r)}var PB=W("dns4"),RB=W("dns6"),DB=W("dnsaddr"),js=vt(W("dns"),DB,PB,RB),g1=vt(W("ip4"),W("ip6")),Ac=vt(ce(g1,W("tcp")),ce(js,W("tcp"))),y1=ce(g1,W("udp")),NB=ce(y1,W("utp")),LB=ce(y1,W("quic")),OB=ce(y1,W("quic-v1")),l8=vt(ce(Ac,W("ws")),ce(js,W("ws"))),p1=vt(ce(l8,W("p2p")),l8),u8=vt(ce(Ac,W("wss")),ce(js,W("wss")),ce(Ac,W("tls"),W("ws")),ce(js,W("tls"),W("ws"))),m1=vt(ce(u8,W("p2p")),u8),d8=vt(ce(Ac,W("http")),ce(g1,W("http")),ce(js,W("http"))),f8=vt(ce(Ac,W("https")),ce(g1,W("https")),ce(js,W("https"))),Pv=ce(y1,W("webrtc-direct"),W("certhash")),Nv=vt(ce(Pv,W("p2p")),Pv),Rv=ce(OB,W("webtransport"),W("certhash"),W("certhash")),Lv=vt(ce(Rv,W("p2p")),Rv),Ov=vt(ce(p1,W("p2p-webrtc-star"),W("p2p")),ce(m1,W("p2p-webrtc-star"),W("p2p")),ce(p1,W("p2p-webrtc-star")),ce(m1,W("p2p-webrtc-star"))),l1e=vt(ce(p1,W("p2p-websocket-star"),W("p2p")),ce(m1,W("p2p-websocket-star"),W("p2p")),ce(p1,W("p2p-websocket-star")),ce(m1,W("p2p-websocket-star"))),Bv=vt(ce(d8,W("p2p-webrtc-direct"),W("p2p")),ce(f8,W("p2p-webrtc-direct"),W("p2p")),ce(d8,W("p2p-webrtc-direct")),ce(f8,W("p2p-webrtc-direct"))),Qs=vt(l8,u8,d8,f8,Ov,Bv,Ac,NB,LB,js,Nv,Lv),u1e=vt(ce(Qs,W("p2p-stardust"),W("p2p")),ce(Qs,W("p2p-stardust"))),zo=vt(ce(Qs,W("p2p")),Ov,Bv,Nv,Lv,W("p2p")),Dv=vt(ce(zo,W("p2p-circuit"),zo),ce(zo,W("p2p-circuit")),ce(W("p2p-circuit"),zo),ce(Qs,W("p2p-circuit")),ce(W("p2p-circuit"),Qs),W("p2p-circuit")),Mv=()=>vt(ce(Dv,Mv),Dv),Xs=Mv(),Fv=vt(ce(Xs,zo,Xs),ce(zo,Xs),ce(Xs,zo),Xs,zo);var d1e=vt(ce(Xs,W("webrtc"),W("p2p")),ce(Xs,W("webrtc")),ce(Qs,W("webrtc"),W("p2p")),ce(Qs,W("webrtc")),W("webrtc"));function Uv(r){function e(t){let n;try{n=K(t)}catch{return!1}let i=r(n.protoNames());return i===null?!1:i===!0||i===!1?i:i.length===0}return e}function ce(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(i=>(n=typeof i=="function"?i().partialMatch(t):i.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:Uv(e),partialMatch:e}}function vt(...r){function e(n){let i=null;return r.some(o=>{let s=typeof o=="function"?o().partialMatch(n):o.partialMatch(n);return s!=null?(i=s,!0):!1}),i}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:Uv(e),partialMatch:e}}function W(r){let e=r;function t(i){let o;try{o=K(i)}catch{return!1}let s=o.protoNames();return s.length===1&&s[0]===e}function n(i){return i.length===0?null:i[0]===e?i.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var BB="bootstrap",MB=50,FB=1e3,h8=class extends be{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??FB,this.list=[];for(let n of t.list){if(!Fv.matches(n)){this.log.error("Invalid multiaddr");continue}let i=K(n),o=i.getPeerId();if(o==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:Ne(o),multiaddrs:[i]};this.list.push(s)}this._init=t}[os]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Pe]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??BB]:{value:this._init.tagValue??MB,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function Hv(r){return e=>new h8(e,r)}var Tu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={publicKey:le(0),payloadType:le(0),payload:le(0),signature:le(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.publicKey=t.bytes();break}case 2:{o.payloadType=t.bytes();break}case 3:{o.payload=t.bytes();break}case 5:{o.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Tu||(Tu={}));var w1=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Xr=class r{static createFromProtobuf=async e=>{let t=Tu.decode(e),n=wt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,i=e.codec,o=e.marshal(),s=zv(n,i,o),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:i,payload:o,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new w1("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:i,signature:o}=e;this.publicKey=t,this.payloadType=n,this.payload=i,this.signature=o}marshal(){return this.marshaled==null&&(this.marshaled=Tu.encode({publicKey:Ot(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return J(this.marshal(),e.marshal())}async validate(e){let t=zv(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},zv=(r,e,t)=>{let n=C(r),i=Ze(n.byteLength),o=Ze(e.length),s=Ze(t.length);return new ee(i,n,o,e,s,t)};function $v(r,e){let t=(n,i)=>n.toString().localeCompare(i.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,i)=>e[i].equals(n)))}var Vv="libp2p-peer-record",qv=Uint8Array.from([3,1]);var Iu;(function(r){let e;(function(n){let i;n.codec=()=>(i==null&&(i=ne((o,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),o.multiaddr!=null&&o.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(o.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(o,s,a={})=>{let c={multiaddr:le(0)},l=s==null?o.len:o.pos+s;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.multiaddr=o.bytes();break}default:{o.skipType(u&7);break}}}return c})),i),n.encode=o=>re(o,n.codec()),n.decode=(o,s)=>te(o,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((n,i,o={})=>{if(o.lengthDelimited!==!1&&i.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(i.uint32(10),i.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(i.uint32(16),i.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)i.uint32(26),r.AddressInfo.codec().encode(s,i);o.lengthDelimited!==!1&&i.ldelim()},(n,i,o={})=>{let s={peerId:le(0),seq:0n,addresses:[]},a=i==null?n.len:n.pos+i;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(o.limits?.addresses!=null&&s.addresses.length===o.limits.addresses)throw new Ve('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:o.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>re(n,r.codec()),r.decode=(n,i)=>te(n,r.codec(),i)})(Iu||(Iu={}));var vr=class r{static createFromProtobuf=e=>{let t=Iu.decode(e),n=Tt(pe(t.peerId)),i=(t.addresses??[]).map(s=>K(s.multiaddr)),o=t.seq;return new r({peerId:n,multiaddrs:i,seqNumber:o})};static DOMAIN=Vv;static CODEC=qv;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:i}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=i??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Iu.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||!$v(this.multiaddrs,e.multiaddrs))}};var p8=1e3,Kv=60*p8,Gv=290;var q1e=2*60*Kv,Wv=1,x1=2e3,Yv=100;var _u=`${ro}-circuit-relay`,K1e=`${ro}-circuit-relay-source`,G1e=2*Kv,W1e=BigInt(1<<17),Zs="/libp2p/circuit/relay/0.2.0/hop",m8="/libp2p/circuit/relay/0.2.0/stop",Y1e=30*p8,X1e=30*p8,g8=300,Xv=4096,jv=.001;var $o;(function(r){let e;(function(i){i.RESERVE="RESERVE",i.CONNECT="CONNECT",i.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(i){i[i.RESERVE=0]="RESERVE",i[i.CONNECT=1]="CONNECT",i[i.STATUS=2]="STATUS"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{s.lengthDelimited!==!1&&o.fork(),i.type!=null&&(o.uint32(8),r.Type.codec().encode(i.type,o)),i.peer!=null&&(o.uint32(18),Tc.codec().encode(i.peer,o)),i.reservation!=null&&(o.uint32(26),b1.codec().encode(i.reservation,o)),i.limit!=null&&(o.uint32(34),Ic.codec().encode(i.limit,o)),i.status!=null&&(o.uint32(40),Qt.codec().encode(i.status,o)),s.lengthDelimited!==!1&&o.ldelim()},(i,o,s={})=>{let a={},c=o==null?i.len:i.pos+o;for(;i.pos<c;){let l=i.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(i);break}case 2:{a.peer=Tc.codec().decode(i,i.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=b1.codec().decode(i,i.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=Ic.codec().decode(i,i.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=Qt.codec().decode(i);break}default:{i.skipType(l&7);break}}}return a})),n),r.encode=i=>re(i,r.codec()),r.decode=(i,o)=>te(i,r.codec(),o)})($o||($o={}));var li;(function(r){let e;(function(i){i.CONNECT="CONNECT",i.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(i){i[i.CONNECT=0]="CONNECT",i[i.STATUS=1]="STATUS"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{s.lengthDelimited!==!1&&o.fork(),i.type!=null&&(o.uint32(8),r.Type.codec().encode(i.type,o)),i.peer!=null&&(o.uint32(18),Tc.codec().encode(i.peer,o)),i.limit!=null&&(o.uint32(26),Ic.codec().encode(i.limit,o)),i.status!=null&&(o.uint32(32),Qt.codec().encode(i.status,o)),s.lengthDelimited!==!1&&o.ldelim()},(i,o,s={})=>{let a={},c=o==null?i.len:i.pos+o;for(;i.pos<c;){let l=i.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(i);break}case 2:{a.peer=Tc.codec().decode(i,i.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=Ic.codec().decode(i,i.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=Qt.codec().decode(i);break}default:{i.skipType(l&7);break}}}return a})),n),r.encode=i=>re(i,r.codec()),r.decode=(i,o)=>te(i,r.codec(),o)})(li||(li={}));var Tc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let o of t.addrs)n.uint32(18),n.bytes(o);i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={id:le(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.id=t.bytes();break}case 2:{if(i.limits?.addrs!=null&&o.addrs.length===i.limits.addrs)throw new Ve('Decode error - map field "addrs" had too many elements');o.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Tc||(Tc={}));var b1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let o of t.addrs)n.uint32(18),n.bytes(o);t.voucher!=null&&(n.uint32(26),E1.codec().encode(t.voucher,n)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.expire=t.uint64();break}case 2:{if(i.limits?.addrs!=null&&o.addrs.length===i.limits.addrs)throw new Ve('Decode error - map field "addrs" had too many elements');o.addrs.push(t.bytes());break}case 3:{o.voucher=E1.codec().decode(t,t.uint32(),{limits:i.limits?.voucher});break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(b1||(b1={}));var Ic;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.duration=t.uint32();break}case 2:{o.data=t.uint64();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ic||(Ic={}));var Qt;(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"})(Qt||(Qt={}));var y8;(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"})(y8||(y8={}));(function(r){r.codec=()=>Ye(y8)})(Qt||(Qt={}));var v1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={relay:le(0),peer:le(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.relay=t.bytes();break}case 2:{o.peer=t.bytes();break}case 3:{o.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(v1||(v1={}));var E1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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),v1.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={publicKey:le(0),payloadType:le(0),signature:le(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.publicKey=t.bytes();break}case 2:{o.payloadType=t.bytes();break}case 3:{o.payload=v1.codec().decode(t,t.uint32(),{limits:i.limits?.payload});break}case 5:{o.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(E1||(E1={}));var ku=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},S1=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},A1=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function w8(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Cu=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}},T1=Ke(Ee(Ih.matchers[0],me("p2p-circuit"))),I1=Ke(me("p2p-circuit"));function x8(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:i,onDataWrite:o}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),f(!0)};let u=e.abort.bind(e);e.abort=p=>{u(p),f(!0)};let d=e.sink.bind(e);e.sink=async p=>{try{await d(Re(p,m=>Os(m,g=>o?.(g))))}catch(m){m.type!=="aborted"&&s.error("%s error in sink",t,m)}finally{c=!0,f()}};let h={log:s,sink:e.sink,source:async function*(){try{for await(let p of e.source)i?.(p),yield p}finally{a=!0,f()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function f(p){p===!0&&(a=!0,c=!0),a&&c&&h.timeline.close==null&&(h.timeline.close=Date.now())}return h}var _1=class extends be{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Zs,{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.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(Zs)],orders:[()=>Math.random()<.5?1:-1,(n,i)=>{let o=Qv(n),s=Qv(i);return o>s?-1:s>o?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 Vt({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(i=>i.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(async()=>{let i=de([this.discoveryController.signal,AbortSignal.timeout(5e3)]);try{await this.connectionManager.openConnection(n.id,{signal:i})}finally{i.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(i=>{this.log.error("error opening connection to random peer %p",n.id,i)})}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)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function Qv(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(U(e)).getTime()}var b8=class extends be{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??x1,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(I1.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(T1.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),i=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(i.remotePeer)){this.log("making reservation on peer %p",i.remotePeer);let o=await this.reservationStore.addRelay(i.remotePeer,"configured");this.addedRelay(o)}}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=>K(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function Zv(r){return new b8(r)}var Jv="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var eE=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=Jv[t[r]&63];return e};var UB=60*1e3*10,HB=60*1e3*5,zB=30*1e3,k1=class extends be{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 Mt,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??Yv,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??x1,this.started=!1,this.relayFilter=_r(100),this.reserveQueue=new Vt({concurrency:t?.reservationConcurrency??Wv,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(o=>o.connection===n.detail.id)!=null&&this.#r(n.detail.remotePeer).catch(o=>{this.log("could not remove relay %p - %e",n.detail,o)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(_u)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[_u]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#n()}).catch(e=>{this.log.error(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=eE();return this.pendingReservations.push(e),this.#n(),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 A1("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 i=Date.now();try{let o=this.reservations.get(e);if(o!=null){let p=this.connectionManager.getConnections(e),m=!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(o.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),m=!0),m&&w8(o.reservation.expire)>UB)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:o};await this.#r(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new ku("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(Rr.matches(a.remoteAddr))throw new S1("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=w8(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-HB,zB),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.#r(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},u),h;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new ku("Made reservation on relay but did not need any more discovered relays");h={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else h={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,h),await this.peerStore.merge(e,{tags:{[_u]:{value:1,ttl:l}}}),this.#n();let f={relay:e,details:h};return this.safeDispatchEvent("relay:created-reservation",{detail:f}),f}catch(o){throw t==="discovered"&&o.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-i,o),(o.name==="DialError"||o.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#r(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),o}},{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(Zs,t),o=rt(n).pb($o);this.log.trace("send RESERVE to %p",e.remotePeer),await o.write({type:$o.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await o.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %o",s),s.status===Qt.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=K(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=K(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>K(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#r(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:{[_u]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#n())}#n(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=_r(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var $B=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(K)}catch{return!1}return!0},tE={maxInboundStopStreams:g8,maxOutboundStopStreams:g8,stopTimeout:3e4},C1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??tE.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??tE.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new _1(e,{filter:t.discoveryFilter??M3(Xv,jv)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(i=>{i.name!=="HadEnoughRelaysError"&&i.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p",n.detail,i)})}),this.reservationStore=new k1(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}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Pe]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[zr](){return this.discovery!=null?["@libp2p/identify"]:[]}[no]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,await this.registrar.handle(m8,e=>{let t=this.upgrader.createInboundAbortSignal(this.shutdownController.signal);this.onStop(e,t).catch(n=>{this.log.error("error while handling STOP protocol",n),e.stream.abort(n)}).finally(()=>{t.clear()})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await $t(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await tr(this.discovery,this.reservationStore),await this.registrar.unhandle(m8),this.started=!1}async dial(e,t){if(e.protoCodes().filter(f=>f===Gv).length!==1){let f="Invalid circuit relay address";throw this.log.error(f,e),new bi(f)}let n=e.toString().split("/p2p-circuit"),i=K(n[0]),o=K(n[n.length-1]),s=i.getPeerId(),a=o.getPeerId();if(s==null||a==null){let f=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${f}`),new bi(`C${f}`)}let c=Ne(s),l=Ne(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[i]}),t.onProgress?.(new M("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new M("circuit-relay:reuse-connection"));let h;try{t.onProgress?.(new M("circuit-relay:open-hop-stream")),h=await d.newStream(Zs,t);let f=rt(h),p=f.pb($o);t.onProgress?.(new M("circuit-relay:write-connect-message")),await p.write({type:$o.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[K(o).bytes]}},t),t.onProgress?.(new M("circuit-relay:read-connect-response"));let m=await p.read(t);if(m.status!==Qt.OK)throw new he(`failed to connect via relay with status ${m?.status?.toString()??"undefined"}`);let g=new Cu(m.limit),y=x8({stream:f.unwrap(),remoteAddr:e,localAddr:i.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:g.onData,onDataWrite:g.onData});return this.log("new outbound relayed connection %a",y.remoteAddr),await this.upgrader.upgradeOutbound(y,{...t,limits:g.getLimits()})}catch(f){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,f),h?.abort(f),f}}createListener(e){return Zv({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>T1.exactMatch(t)||I1.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Rr.exactMatch(t))}async onStop({connection:e,stream:t},n){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let i=rt(t).pb(li),o=await i.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,o.type),o?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(o.type!==li.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!$B(o)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.MALFORMED_MESSAGE},{signal:n}),await t.close({signal:n});return}let s=Tt(pe(o.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.PERMISSION_DENIED},{signal:n}),await t.close({signal:n});return}this.log.trace("sending success response to %p",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.OK},{signal:n});let a=new Cu(o.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=x8({stream:i.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function v8(r={}){return e=>new C1(e,r)}var rE=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},VB=new WeakMap;function qB({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:i}={})=>{if(i?.aborted)return Promise.reject(rE());let o,s,a,c=r??clearTimeout,l=()=>{c(o),a(rE())},u=()=>{i&&i.removeEventListener("abort",l)},d=new Promise((h,f)=>{s=()=>{u(),h(n)},a=f,o=(e??setTimeout)(s,t)});return i&&i.addEventListener("abort",l,{once:!0}),VB.set(d,()=>{c(o),o=null,s()}),d}}var KB=qB(),P1=KB;var Vn;(function(r){let e;(function(i){i.UNUSED="UNUSED",i.CONNECT="CONNECT",i.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(i){i[i.UNUSED=0]="UNUSED",i[i.CONNECT=100]="CONNECT",i[i.SYNC=300]="SYNC"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{if(s.lengthDelimited!==!1&&o.fork(),i.type!=null&&(o.uint32(8),r.Type.codec().encode(i.type,o)),i.observedAddresses!=null)for(let a of i.observedAddresses)o.uint32(18),o.bytes(a);s.lengthDelimited!==!1&&o.ldelim()},(i,o,s={})=>{let a={observedAddresses:[]},c=o==null?i.len:i.pos+o;for(;i.pos<c;){let l=i.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(i);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new Ve('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(i.bytes());break}default:{i.skipType(l&7);break}}}return a})),n),r.encode=i=>re(i,r.codec()),r.decode=(i,o)=>te(i,r.codec(),o)})(Vn||(Vn={}));function E8(r,e){return Rr.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:nu.matches(r)?!0:ox.matches(r)?br(r.toOptions().host)===!1:!1}var nE=1024*4,iE=100,R1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},D1=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??R1.timeout,this.retries=t.retries??R1.retries,this.maxInboundStreams=t.maxInboundStreams??R1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??R1.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[zr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Pu,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{Rr.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Pu,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Pu),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 i={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Pu],{signal:i.signal,runOnLimitedConnection:!0});let o=rt(t,{maxDataLength:nE}).pb(Vn);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await o.write({type:Vn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},i),this.log("B receiving connect from %p",e.remotePeer);let a=await o.read(i);if(a.type!==Vn.Type.CONNECT)throw this.log("A sent wrong message type"),new he("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 he("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await o.write({type:Vn.Type.SYNC,observedAddresses:[]},i),this.log("A waiting for half RTT"),await P1(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:i.signal,priority:iE,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(i);break}catch(o){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,o),t?.abort(o),n===this.retries)throw o}finally{t!=null&&await t.close(i)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(i=>{let o=i.multiaddr;return o.getPeerId()==null?o.encapsulate(`/p2p/${e.remotePeer}`):o}).filter(i=>E8(i,this.transportManager));if(n.length>0){let i=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let o=await this.connectionManager.openConnection(n,{signal:i,force:!0});if(Rr.exactMatch(o.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,o.remoteAddr),await e.close({signal:i}),!0}catch(o){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,o)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let i=rt(e,{maxDataLength:nE}).pb(Vn);this.log("A receiving connect");let o=await i.read(n);if(o.type!==Vn.Type.CONNECT)throw this.log("B sent wrong message type"),new he("DCUtR message type was incorrect");if(o.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new he("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(o.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new he("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await i.write({type:Vn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await i.read(n)).type!==Vn.Type.SYNC)throw new he("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:iE,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(i){this.log.error("incoming DCUtR from %p failed",t.remotePeer,i),e.abort(i)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let i=K(n);if(!E8(i,this.transportManager))continue;t.push(i)}catch{}return t}};var Pu="/libp2p/dcutr";function oE(r={}){return e=>new D1(e,r)}var sE="0.1.0",aE="id",cE="id/push",lE="1.0.0",uE="1.0.0";var Vo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.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 o of t.listenAddrs)n.uint32(18),n.bytes(o);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let o of t.protocols)n.uint32(26),n.string(o);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{o.protocolVersion=t.string();break}case 6:{o.agentVersion=t.string();break}case 1:{o.publicKey=t.bytes();break}case 2:{if(i.limits?.listenAddrs!=null&&o.listenAddrs.length===i.limits.listenAddrs)throw new Ve('Decode error - map field "listenAddrs" had too many elements');o.listenAddrs.push(t.bytes());break}case 4:{o.observedAddr=t.bytes();break}case 3:{if(i.limits?.protocols!=null&&o.protocols.length===i.limits.protocols)throw new Ve('Decode error - map field "protocols" had too many elements');o.protocols.push(t.string());break}case 8:{o.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Vo||(Vo={}));var Lr={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function dE(r){if(r!=null&&r.length>0)try{return K(r)}catch{}}function YB(r,e){return e??r.userAgent}async function N1(r,e,t,n,i){if(t("received identify from %p",n.remotePeer),i==null)throw new he("message was null or undefined");let o={};if(i.listenAddrs.length>0&&(o.addresses=i.listenAddrs.map(c=>({isCertified:!1,multiaddr:K(c)}))),i.protocols.length>0&&(o.protocols=i.protocols),i.publicKey!=null){let c=wt(i.publicKey);if(!oi(c).equals(n.remotePeer))throw new he("public key did not match remote PeerId");o.publicKey=c}let s;if(i.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=i.signedPeerRecord,l=await Xr.openAndCertify(c,vr.DOMAIN),u=vr.createFromProtobuf(l.payload),d=Kt(l.publicKey.toCID());if(!u.peerId.equals(d))throw new he("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new he("signing key does not match remote PeerId");let h;try{h=await r.get(u.peerId)}catch(f){if(f.name!=="NotFoundError")throw f}if(h!=null&&(o.metadata=h.metadata,h.peerRecordEnvelope!=null)){let f=await Xr.createFromProtobuf(h.peerRecordEnvelope),p=vr.createFromProtobuf(f.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=h.peerRecordEnvelope)}o.peerRecordEnvelope=c,o.addresses=u.multiaddrs.map(f=>({isCertified:!0,multiaddr:f})),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,o),await r.patch(n.remotePeer,o),i.agentVersion!=null||i.protocolVersion!=null){let c={};i.agentVersion!=null&&(c.AgentVersion=C(i.agentVersion)),i.protocolVersion!=null&&(c.ProtocolVersion=C(i.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:i.protocolVersion,agentVersion:i.agentVersion,publicKey:i.publicKey,listenAddrs:i.listenAddrs.map(c=>K(c)),observedAddr:i.observedAddr==null?void 0:K(i.observedAddr),protocols:i.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var _c=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??Lr.timeout,this.maxInboundStreams=t.maxInboundStreams??Lr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Lr.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??Lr.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??Lr.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??Lr.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??Lr.protocolPrefix}/${sE}`,agentVersion:YB(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:C(this.host.agentVersion),ProtocolVersion:C(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var L1=class extends _c{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??Lr.protocolPrefix}/${cE}/${uE}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??Lr.concurrency,(t.runOnSelfUpdate??Lr.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(i=>{this.log.error(i)})})}[Pe]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(se("p2p").code)),t=new vr({peerId:this.peerId,multiaddrs:e}),n=await Xr.seal(t,this.privateKey),i=this.registrar.getProtocols(),o=await this.peerStore.get(this.peerId),s=U(o.metadata.get("AgentVersion")??C(this.host.agentVersion)),a=U(o.metadata.get("ProtocolVersion")??C(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let h,f=AbortSignal.timeout(c.timeout);try{h=await u.newStream(c.protocol,{signal:f,runOnLimitedConnection:c.runOnLimitedConnection}),await rt(h,{maxDataLength:c.maxMessageSize}).pb(Vo).write({listenAddrs:e.map(m=>m.bytes),signedPeerRecord:n.marshal(),protocols:i,agentVersion:s,protocolVersion:a},{signal:f}),await h.close({signal:f})}catch(p){c.log.error("could not push identify update to peer",p),h?.abort(p)}})}await Lt(Yt(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let i={signal:AbortSignal.timeout(this.timeout)},s=await rt(n,{maxDataLength:this.maxMessageSize}).pb(Vo).read(i);await n.close(i),await N1(this.peerStore,this.events,this.log,t,s)}catch(i){this.log.error("received invalid message",i),n.abort(i);return}this.log.trace("handled push from %p",t.remotePeer)}};var XB=41,O1=class extends _c{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??Lr.protocolPrefix}/${aE}/${lE}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??Lr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let i=n.detail;this.identify(i).catch(o=>{o.name!==xi.name&&this.log.error("error during identify trigged by connection:open",o)})})}[Pe]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let i=AbortSignal.timeout(this.timeout);t={...t,signal:i}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let o=await rt(n,{maxDataLength:this.maxMessageSize}).pb(Vo).read(t);return await n.close(t),o}catch(i){throw n?.abort(i),i}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:i,protocols:o,observedAddr:s}=n;if(i==null)throw new he("public key was missing from identify message");let a=wt(i),c=Kt(a.toCID());if(!e.remotePeer.equals(c))throw new he("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new he("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,o),N1(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=dE(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),gn(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===XB&&!d1(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Us.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,i=AbortSignal.timeout(this.timeout);try{let o=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(se("p2p").code)),a=o.peerRecordEnvelope;if(s.length>0&&a==null){let u=new vr({peerId:this.peerId,multiaddrs:s});a=(await Xr.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;ix.matches(t.remoteAddr)||(c=void 0),await rt(n).pb(Vo).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Ot(this.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:o.protocols},{signal:i}),await n.close({signal:i})}catch(o){this.log.error("could not respond to identify request",o),n.abort(o)}}};function fE(r={}){return e=>new O1(e,r)}function hE(r={}){return e=>new L1(e,r)}var EE=ut(vE(),1),mt=EE.default;var SS=ut(RE(),1);var Pc={};ot(Pc,{create:()=>hM,derivedEmptyPasswordKey:()=>F1});var F1={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function hM(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,i=r?.digest??"SHA-256",o=r?.saltLength??16,s=r?.iterations??32767,a=Ir.get();t*=8;async function c(d,h){let f=a.getRandomValues(new Uint8Array(o)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof h=="string"&&(h=C(h));let g;if(h.length===0){g=await a.subtle.importKey("jwk",F1,{name:"AES-GCM"},!0,["encrypt"]);try{let w={name:"PBKDF2",salt:f,iterations:s,hash:{name:i}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["encrypt"])}catch{g=await a.subtle.importKey("jwk",F1,{name:"AES-GCM"},!0,["encrypt"])}}else{let w={name:"PBKDF2",salt:f,iterations:s,hash:{name:i}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(m,g,d);return ge([f,m.iv,new Uint8Array(y)])}async function l(d,h){let f=d.subarray(0,o),p=d.subarray(o,o+n),m=d.subarray(o+n),g={name:e,iv:p};typeof h=="string"&&(h=C(h));let y;if(h.length===0)try{let x={name:"PBKDF2",salt:f,iterations:s,hash:{name:i}},b=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(x,b,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",F1,{name:"AES-GCM"},!0,["decrypt"])}else{let x={name:"PBKDF2",salt:f,iterations:s,hash:{name:i}},b=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(x,b,{name:e,length:t},!0,["decrypt"])}let w=await a.subtle.decrypt(g,y,m);return new Uint8Array(w)}return{encrypt:c,decrypt:l}}var Ae=ut(DE());function Js(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 qo(r,e,t=-1){let n=t,i=r,o=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),o=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),o=n}let l=new Uint8Array(c);for(let u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[o-u-1]=Math.floor(i/d),i-=l[o-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function z1(...r){let e=0,t=0;for(let o of r)e+=o.length;let n=new ArrayBuffer(e),i=new Uint8Array(n);for(let o of r)i.set(o,t),t+=o.length;return i}function T8(){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=Js(t,8),i=new ArrayBuffer(this.valueHex.byteLength),o=new Uint8Array(i);for(let a=0;a<this.valueHex.byteLength;a++)o[a]=r[a];return o[0]&=127,Js(o,8)-n}function NE(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=qo(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let i=qo(e,8,n),o=new Uint8Array(i);if(o[0]&128){let s=i.slice(0),a=new Uint8Array(s);i=new ArrayBuffer(i.byteLength+1),o=new Uint8Array(i);for(let c=0;c<s.byteLength;c++)o[c+1]=a[c];o[0]=0}return i}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function LE(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let i=0;i<t.length;i++)if(t[i]!==n[i])return!1;return!0}function Or(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,i=new Array(n);for(let s=0;s<n;s++)i[s]="0";return i.join("").concat(t)}var g2e=Math.log(2);function $1(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function I8(r){let e=0,t=0;for(let i=0;i<r.length;i++){let o=r[i];e+=o.byteLength}let n=new Uint8Array(e);for(let i=0;i<r.length;i++){let o=r[i];n.set(new Uint8Array(o),t),t+=o.byteLength}return n.buffer}function Yi(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 Du=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return I8(this.items)}},Ru=[new Uint8Array([1])],OE="0123456789";var Dc="",qn=new ArrayBuffer(0),_8=new Uint8Array(0),Nu="EndOfContent",ME="OCTET STRING",FE="BIT STRING";function Xi(r){var e;return e=class extends r{constructor(...n){var i;super(...n);let o=n[0]||{};this.isHexOnly=(i=o.isHexOnly)!==null&&i!==void 0?i:!1,this.valueHexView=o.valueHex?Ae.BufferSourceConverter.toUint8Array(o.valueHex):_8}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,i,o){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Yi(this,s,i,o))return-1;let a=i+o;return this.valueHexView=s.subarray(i,a),this.valueHexView.length?(this.blockLength=o,a):(this.warnings.push("Zero buffer length"),i)}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",qn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:Ae.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var qi=class{constructor({blockLength:e=0,error:t=Dc,warnings:n=[],valueBeforeDecode:i=_8}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Ae.BufferSourceConverter.toUint8Array(i)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Ae.Convert.ToHex(this.valueBeforeDecodeView)}}};qi.NAME="baseBlock";var ur=class extends qi{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'")}};ur.NAME="valueBlock";var V1=class extends Xi(qi){constructor({idBlock:e={}}={}){var t,n,i,o;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?Ae.BufferSourceConverter.toUint8Array(e.valueHex):_8,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(i=e.tagNumber)!==null&&i!==void 0?i:-1,this.isConstructed=(o=e.isConstructed)!==null&&o!==void 0?o:!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",qn}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let i=new Uint8Array(1);if(!e){let o=this.tagNumber;o&=31,t|=o,i[0]=t}return i.buffer}if(!this.isHexOnly){let i=qo(this.tagNumber,7),o=new Uint8Array(i),s=i.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=o[c]|128;a[s]=o[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let i=this.valueHexView;for(let o=0;o<i.length-1;o++)n[o+1]=i[o]|128;n[this.valueHexView.byteLength]=i[i.length-1]}return n.buffer}fromBER(e,t,n){let i=Ae.BufferSourceConverter.toUint8Array(e);if(!Yi(this,i,t,n))return-1;let o=i.subarray(t,t+n);if(o.length===0)return this.error="Zero buffer length",-1;switch(o[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=(o[0]&32)===32,this.isHexOnly=!1;let a=o[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),u=255;for(;o[c]&128;){if(l[c-1]=o[c]&127,c++,c>=o.length)return this.error="End of input reached before message was fully decoded",-1;if(c===u){u+=255;let h=new Uint8Array(u);for(let f=0;f<l.length;f++)h[f]=l[f];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=o[c]&127;let d=new Uint8Array(c);for(let h=0;h<c;h++)d[h]=l[h];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=Js(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}}};V1.NAME="identificationBlock";var q1=class extends qi{constructor({lenBlock:e={}}={}){var t,n,i;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=(i=e.length)!==null&&i!==void 0?i:0}fromBER(e,t,n){let i=Ae.BufferSourceConverter.toUint8Array(e);if(!Yi(this,i,t,n))return-1;let o=i.subarray(t,t+n);if(o.length===0)return this.error="Zero buffer length",-1;if(o[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=o[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(o[0]&128),this.longFormUsed===!1)return this.length=o[0],this.blockLength=1,t+this.blockLength;let s=o[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>o.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=i.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=Js(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 i=qo(this.length,8);if(i.byteLength>127)return this.error="Too big length",qn;if(t=new ArrayBuffer(i.byteLength+1),e)return t;let o=new Uint8Array(i);n=new Uint8Array(t),n[0]=i.byteLength|128;for(let s=0;s<i.byteLength;s++)n[s+1]=o[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}}};q1.NAME="lengthBlock";var X={},Zt=class extends qi{constructor({name:e=Dc,optional:t=!1,primitiveSchema:n,...i}={},o){super(i),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new V1(i),this.lenBlock=new q1(i),this.valueBlock=o?new o(i):new ur(i)}fromBER(e,t,n){let i=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return i===-1?(this.error=this.valueBlock.error,i):(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),i)}toBER(e,t){let n=t||new Du;t||UE(this);let i=this.idBlock.toBER(e);if(n.write(i),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let o=this.valueBlock.toBER(e);this.lenBlock.length=o.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(o)}return t?qn: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():Ae.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${Ae.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return LE(t,n)}};Zt.NAME="BaseBlock";function UE(r){if(r instanceof X.Constructed)for(let e of r.valueBlock.value)UE(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var K1=class extends Zt{constructor({value:e=Dc,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let i=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return i===-1?(this.error=this.valueBlock.error,i):(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),i)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};K1.NAME="BaseStringBlock";var G1=class extends Xi(ur){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};G1.NAME="PrimitiveValueBlock";var HE,W1=class extends Zt{constructor(e={}){super(e,G1),this.idBlock.isConstructed=!1}};HE=W1;X.Primitive=HE;W1.NAME="PRIMITIVE";function EM(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 _0(r,e=0,t=r.length){let n=e,i=new Zt({},ur),o=new qi;if(!Yi(o,r,e,t))return i.error=o.error,{offset:-1,result:i};if(!r.subarray(e,e+t).length)return i.error="Zero buffer length",{offset:-1,result:i};let a=i.idBlock.fromBER(r,e,t);if(i.idBlock.warnings.length&&i.warnings.concat(i.idBlock.warnings),a===-1)return i.error=i.idBlock.error,{offset:-1,result:i};if(e=a,t-=i.idBlock.blockLength,a=i.lenBlock.fromBER(r,e,t),i.lenBlock.warnings.length&&i.warnings.concat(i.lenBlock.warnings),a===-1)return i.error=i.lenBlock.error,{offset:-1,result:i};if(e=a,t-=i.lenBlock.blockLength,!i.idBlock.isConstructed&&i.lenBlock.isIndefiniteForm)return i.error="Indefinite length form used for primitive encoding form",{offset:-1,result:i};let c=Zt;switch(i.idBlock.tagClass){case 1:if(i.idBlock.tagNumber>=37&&i.idBlock.isHexOnly===!1)return i.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:i};switch(i.idBlock.tagNumber){case 0:if(i.idBlock.isConstructed&&i.lenBlock.length>0)return i.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:i};c=X.EndOfContent;break;case 1:c=X.Boolean;break;case 2:c=X.Integer;break;case 3:c=X.BitString;break;case 4:c=X.OctetString;break;case 5:c=X.Null;break;case 6:c=X.ObjectIdentifier;break;case 10:c=X.Enumerated;break;case 12:c=X.Utf8String;break;case 13:c=X.RelativeObjectIdentifier;break;case 14:c=X.TIME;break;case 15:return i.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:i};case 16:c=X.Sequence;break;case 17:c=X.Set;break;case 18:c=X.NumericString;break;case 19:c=X.PrintableString;break;case 20:c=X.TeletexString;break;case 21:c=X.VideotexString;break;case 22:c=X.IA5String;break;case 23:c=X.UTCTime;break;case 24:c=X.GeneralizedTime;break;case 25:c=X.GraphicString;break;case 26:c=X.VisibleString;break;case 27:c=X.GeneralString;break;case 28:c=X.UniversalString;break;case 29:c=X.CharacterString;break;case 30:c=X.BmpString;break;case 31:c=X.DATE;break;case 32:c=X.TimeOfDay;break;case 33:c=X.DateTime;break;case 34:c=X.Duration;break;default:{let l=i.idBlock.isConstructed?new X.Constructed:new X.Primitive;l.idBlock=i.idBlock,l.lenBlock=i.lenBlock,l.warnings=i.warnings,i=l}}break;case 2:case 3:case 4:default:c=i.idBlock.isConstructed?X.Constructed:X.Primitive}return i=EM(i,c),a=i.fromBER(r,e,i.lenBlock.isIndefiniteForm?t:i.lenBlock.length),i.valueBeforeDecodeView=r.subarray(n,n+i.blockLength),{offset:a,result:i}}function k0(r){if(!r.byteLength){let e=new Zt({},ur);return e.error="Input buffer has zero length",{offset:-1,result:e}}return _0(Ae.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function SM(r,e){return r?1:e}var ui=class extends ur{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let i=Ae.BufferSourceConverter.toUint8Array(e);if(!Yi(this,i,t,n))return-1;if(this.valueBeforeDecodeView=i.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let o=t;for(;SM(this.isIndefiniteForm,n)>0;){let s=_0(i,o,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(o=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===Nu)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Nu?this.value.pop():this.warnings.push("No EndOfContent block encoded")),o}toBER(e,t){let n=t||new Du;for(let i=0;i<this.value.length;i++)this.value[i].toBER(e,n);return t?qn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};ui.NAME="ConstructedValueBlock";var zE,Ko=class extends Zt{constructor(e={}){super(e,ui),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let i=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return i===-1?(this.error=this.valueBlock.error,i):(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),i)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
|
|
14
|
+
`.replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),RO=new RegExp(`(?:^${zn}$)|(?:^${Kp}$)`),DO=new RegExp(`^${zn}$`),NO=new RegExp(`^${Kp}$`),S6=r=>r&&r.exact?RO:new RegExp(`(?:${Fo(r)}${zn}${Fo(r)})|(?:${Fo(r)}${Kp}${Fo(r)})`,"g");S6.v4=r=>r&&r.exact?DO:new RegExp(`${Fo(r)}${zn}${Fo(r)}`,"g");S6.v6=r=>r&&r.exact?NO:new RegExp(`${Fo(r)}${Kp}${Fo(r)}`,"g");var A6=S6;function T6(r){let e=(...t)=>r(...t);return Object.defineProperty(e,"name",{value:`functionTimeout(${r.name||"<anonymous>"})`,configurable:!0}),e}function Lb(){return!1}var{toString:LO}=Object.prototype;function I6(r){return LO.call(r)==="[object RegExp]"}var Ob={global:"g",ignoreCase:"i",multiline:"m",dotAll:"s",sticky:"y",unicode:"u"};function _6(r,e={}){if(!I6(r))throw new TypeError("Expected a RegExp instance");let t=Object.keys(Ob).map(i=>(typeof e[i]=="boolean"?e[i]:r[i])?Ob[i]:"").join(""),n=new RegExp(e.source||r.source,t);return n.lastIndex=typeof e.lastIndex=="number"?e.lastIndex:r.lastIndex,n}function k6(r,e,{timeout:t}={}){try{return T6(()=>_6(r).test(e),{timeout:t})()}catch(n){if(Lb(n))return!1;throw n}}var OO=15,BO=45,Bb={timeout:400};function C6(r){return r.length>BO?!1:k6(A6.v6({exact:!0}),r,Bb)}function Mb(r){return r.length>OO?!1:k6(A6.v4({exact:!0}),r,Bb)}var Fb={http:"80",https:"443",ws:"80",wss:"443"},MO=["http","https","ws","wss"];function Gp(r,e){e=e??{};let t=e.defaultDnsType??"dns4",{scheme:n,hostname:i,port:o}=FO(r),a="/"+[UO(i,t),HO(o,n),zO(n)].filter(c=>!!c).reduce((c,l)=>c.concat(l),[]).join("/");return K(a)}function FO(r){let[e]=r.split(":");MO.includes(e)||(r="http"+r.substring(e.length));let{protocol:t,hostname:n,port:i}=new URL(r);if(i==null||i===""){let o=$O(e);o!=null&&(i=o),o==null&&t==="http:"&&(i="80")}return{scheme:e,hostname:n,port:i}}function UO(r,e){if(!(r==null||r==="")){if(Mb(r))return["ip4",r];if(C6(r))return["ip6",r];if(r[0]==="["){let t=r.substring(1,r.length-1);if(C6(t))return["ip6",t]}return[e,r]}}function HO(r,e){if(!(r==null||r===""))return e==="udp"?["udp",r]:["tcp",r]}function zO(r){if(r.match(/^tcp$|^udp$/)==null)return[r]}function $O(r){if(!(r==null||r===""||Fb[r]==null))return Fb[r]}var VO=["https://trustless-gateway.link","https://4everland.io"],qO=2336;function KO(r){return r=r.toString(),{id:Kt(B.createV1(qO,At.digest(C(r)))),multiaddrs:[Gp(r)]}}var P6=class{gateways;constructor(e={}){this.gateways=(e.gateways??VO).map(t=>KO(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function R6(r={}){return new P6(r)}var D6=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)}};function N6(r){return new D6(r)}function L6(){return{filterProtocols:["unknown","transport-bitswap","transport-ipfs-gateway-http"],filterAddrs:["https","webtransport","webrtc","webrtc-direct","wss","tls"]}}var GO=["https://trustless-gateway.link","https://4everland.io"],WO=2336;function YO(r){return r=r.toString(),{id:Kt(B.createV1(WO,At.digest(C(r)))),multiaddrs:[Gp(r)]}}var O6=class{gateways;constructor(e={}){this.gateways=(e.gateways??GO).map(t=>YO(t))}async*findProviders(e,t){yield*this.gateways.toSorted(()=>Math.random()>.5?1:-1).map(n=>({...n,protocols:["transport-ipfs-gateway-http"]}))}};function B6(r={}){return new O6(r)}var M6=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)}};function F6(r){return new M6(r)}var xu=class extends Ni{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(kt.encode(e.multihash.bytes),t),e}get(e){let t=this.data.get(kt.encode(e.multihash.bytes));if(t==null)throw new hn;return t}has(e){return this.data.has(kt.encode(e.multihash.bytes))}async delete(e){this.data.delete(kt.encode(e.multihash.bytes))}async*getAll(){for(let[e,t]of this.data.entries())yield{cid:B.createV1(We,pe(kt.decode(e))),block:t}}};var Jue=we("blockstore:core:tiered");var zb="SHARDING";function jO(r){return r[Symbol.asyncIterator]!=null}function QO(r,e){return jO(r)?async function*(){yield*(await Fi(r)).sort(e)}():function*(){yield*Fi(r).sort(e)}()}var Wp=QO;var Hi=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:i}of e)await this.put(n,i,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,i){e.push({key:n,value:i})},delete(n){t.push(n)},commit:async n=>{await Lt(this.putMany(e,n)),e=[],await Lt(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 i=e.prefix;n=Wr(n,o=>o.key.toString().startsWith(i))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((i,o)=>Wr(i,o),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((i,o)=>Wp(i,o),n)),e.offset!=null){let i=0,o=e.offset;n=Wr(n,()=>i++>=o)}return e.limit!=null&&(n=ao(n,e.limit)),n}queryKeys(e,t){let n=this._allKeys(e,t);if(e.prefix!=null){let i=e.prefix;n=Wr(n,o=>o.toString().startsWith(i))}if(Array.isArray(e.filters)&&(n=e.filters.reduce((i,o)=>Wr(i,o),n)),Array.isArray(e.orders)&&(n=e.orders.reduce((i,o)=>Wp(i,o),n)),e.offset!=null){let i=e.offset,o=0;n=Wr(n,()=>o++>=i)}return e.limit!=null&&(n=ao(n,e.limit)),n}};var Ws=class extends Hi{data;constructor(){super(),this.data=new Map}put(e,t){return this.data.set(e.toString(),t),e}get(e){let t=this.data.get(e.toString());if(t==null)throw new hn;return t}has(e){return this.data.has(e.toString())}delete(e){this.data.delete(e.toString())}*_all(){for(let[e,t]of this.data.entries())yield{key:new Fe(e),value:t}}*_allKeys(){for(let e of this.data.keys())yield new Fe(e)}};var Rde=new Fe(zb);var Kde=we("datastore:core:tiered");var Yp=class extends fh{libp2p;constructor(e){super({...e,components:{libp2p:e.libp2p}}),this.libp2p=e.libp2p}async start(){await super.start(),await this.libp2p.start()}async stop(){await super.stop(),await this.libp2p.stop()}};function U6(){let r=Z(),e=!1;return{sink:async t=>{if(e)throw new Error("already piped");e=!0,r.resolve(t)},source:async function*(){yield*await r.promise}()}}function Vb(){let r=U6(),e=U6();return[{source:r.source,sink:e.sink},{source:e.source,sink:r.sink}]}var gc=!!globalThis.process?.env?.DUMP_SESSION_KEYS;function Xp(r){if(!Number.isSafeInteger(r)||r<0)throw new Error("positive integer expected, got "+r)}function H6(r){return r instanceof Uint8Array||ArrayBuffer.isView(r)&&r.constructor.name==="Uint8Array"}function lr(r,...e){if(!H6(r))throw new Error("Uint8Array expected");if(e.length>0&&!e.includes(r.length))throw new Error("Uint8Array expected of length "+e+", got length="+r.length)}function z6(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 qb(r,e){lr(r);let t=e.outputLen;if(r.length<t)throw new Error("digestInto() expects output buffer of length at least "+t)}function $6(r){if(typeof r!="boolean")throw new Error(`boolean expected, not ${r}`)}var zi=r=>new Uint32Array(r.buffer,r.byteOffset,Math.floor(r.byteLength/4)),Kb=r=>new DataView(r.buffer,r.byteOffset,r.byteLength),ZO=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;if(!ZO)throw new Error("Non little-endian hardware is not supported");function JO(r){if(typeof r!="string")throw new Error("string expected");return new Uint8Array(new TextEncoder().encode(r))}function jp(r){if(typeof r=="string")r=JO(r);else if(H6(r))r=Qp(r);else throw new Error("Uint8Array expected, got "+typeof r);return r}function Gb(r,e){if(e==null||typeof e!="object")throw new Error("options must be defined");return Object.assign(r,e)}function Wb(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 V6=(r,e)=>{function t(n,...i){if(lr(n),r.nonceLength!==void 0){let u=i[0];if(!u)throw new Error("nonce / iv required");r.varSizeNonce?lr(u):lr(u,r.nonceLength)}let o=r.tagLength;o&&i[1]!==void 0&&lr(i[1]);let s=e(n,...i),a=(u,d)=>{if(d!==void 0){if(u!==2)throw new Error("cipher output not supported");lr(d)}},c=!1;return{encrypt(u,d){if(c)throw new Error("cannot encrypt() twice with same key + nonce");return c=!0,lr(u),a(s.encrypt.length,d),s.encrypt(u,d)},decrypt(u,d){if(lr(u),o&&u.length<o)throw new Error("invalid ciphertext length: smaller than tagLength="+o);return a(s.decrypt.length,d),s.decrypt(u,d)}}}return Object.assign(t,r),t};function q6(r,e,t=!0){if(e===void 0)return new Uint8Array(r);if(e.length!==r)throw new Error("invalid output length, expected "+r+", got: "+e.length);if(t&&!eB(e))throw new Error("invalid output, must be aligned");return e}function K6(r,e,t,n){if(typeof r.setBigUint64=="function")return r.setBigUint64(e,t,n);let i=BigInt(32),o=BigInt(4294967295),s=Number(t>>i&o),a=Number(t&o),c=n?4:0,l=n?0:4;r.setUint32(e+c,s,n),r.setUint32(e+l,a,n)}function eB(r){return r.byteOffset%4===0}function Qp(r){return Uint8Array.from(r)}function $i(...r){for(let e=0;e<r.length;e++)r[e].fill(0)}var Xb=r=>Uint8Array.from(r.split("").map(e=>e.charCodeAt(0))),tB=Xb("expand 16-byte k"),rB=Xb("expand 32-byte k"),nB=zi(tB),iB=zi(rB);function j(r,e){return r<<e|r>>>32-e}function G6(r){return r.byteOffset%4===0}var Zp=64,oB=16,jb=2**32-1,Yb=new Uint32Array;function sB(r,e,t,n,i,o,s,a){let c=i.length,l=new Uint8Array(Zp),u=zi(l),d=G6(i)&&G6(o),h=d?zi(i):Yb,f=d?zi(o):Yb;for(let p=0;p<c;s++){if(r(e,t,n,u,s,a),s>=jb)throw new Error("arx: counter overflow");let m=Math.min(Zp,c-p);if(d&&m===Zp){let g=p/4;if(p%4!==0)throw new Error("arx: invalid block position");for(let y=0,w;y<oB;y++)w=g+y,f[w]=h[w]^u[y];p+=Zp;continue}for(let g=0,y;g<m;g++)y=p+g,o[y]=i[y]^l[g];p+=m}}function W6(r,e){let{allowShortKeys:t,extendNonceFn:n,counterLength:i,counterRight:o,rounds:s}=Gb({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},e);if(typeof r!="function")throw new Error("core must be a function");return Xp(i),Xp(s),$6(o),$6(t),(a,c,l,u,d=0)=>{lr(a),lr(c),lr(l);let h=l.length;if(u===void 0&&(u=new Uint8Array(h)),lr(u),Xp(d),d<0||d>=jb)throw new Error("arx: counter overflow");if(u.length<h)throw new Error(`arx: output (${u.length}) is shorter than data (${h})`);let f=[],p=a.length,m,g;if(p===32)f.push(m=Qp(a)),g=iB;else if(p===16&&t)m=new Uint8Array(32),m.set(a),m.set(a,16),g=nB,f.push(m);else throw new Error(`arx: invalid 32-byte key, got length=${p}`);G6(c)||f.push(c=Qp(c));let y=zi(m);if(n){if(c.length!==24)throw new Error("arx: extended nonce must be 24 bytes");n(g,y,zi(c.subarray(0,16)),y),c=c.subarray(16)}let w=16-i;if(w!==c.length)throw new Error(`arx: nonce must be ${w} or 16 bytes`);if(w!==12){let b=new Uint8Array(12);b.set(c,o?0:12-c.length),c=b,f.push(c)}let x=zi(c);return sB(r,g,y,x,l,u,d,s),$i(...f),u}}var jt=(r,e)=>r[e++]&255|(r[e++]&255)<<8,Y6=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=jp(e),lr(e,32);let t=jt(e,0),n=jt(e,2),i=jt(e,4),o=jt(e,6),s=jt(e,8),a=jt(e,10),c=jt(e,12),l=jt(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|i<<6)&7939,this.r[3]=(i>>>7|o<<9)&8191,this.r[4]=(o>>>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]=jt(e,16+2*u)}process(e,t,n=!1){let i=n?0:2048,{h:o,r:s}=this,a=s[0],c=s[1],l=s[2],u=s[3],d=s[4],h=s[5],f=s[6],p=s[7],m=s[8],g=s[9],y=jt(e,t+0),w=jt(e,t+2),x=jt(e,t+4),b=jt(e,t+6),A=jt(e,t+8),k=jt(e,t+10),E=jt(e,t+12),S=jt(e,t+14),T=o[0]+(y&8191),$=o[1]+((y>>>13|w<<3)&8191),R=o[2]+((w>>>10|x<<6)&8191),H=o[3]+((x>>>7|b<<9)&8191),F=o[4]+((b>>>4|A<<12)&8191),N=o[5]+(A>>>1&8191),L=o[6]+((A>>>14|k<<2)&8191),_=o[7]+((k>>>11|E<<5)&8191),I=o[8]+((E>>>8|S<<8)&8191),D=o[9]+(S>>>5|i),P=0,q=P+T*a+$*(5*g)+R*(5*m)+H*(5*p)+F*(5*f);P=q>>>13,q&=8191,q+=N*(5*h)+L*(5*d)+_*(5*u)+I*(5*l)+D*(5*c),P+=q>>>13,q&=8191;let G=P+T*c+$*a+R*(5*g)+H*(5*m)+F*(5*p);P=G>>>13,G&=8191,G+=N*(5*f)+L*(5*h)+_*(5*d)+I*(5*u)+D*(5*l),P+=G>>>13,G&=8191;let Y=P+T*l+$*c+R*a+H*(5*g)+F*(5*m);P=Y>>>13,Y&=8191,Y+=N*(5*p)+L*(5*f)+_*(5*h)+I*(5*d)+D*(5*u),P+=Y>>>13,Y&=8191;let ie=P+T*u+$*l+R*c+H*a+F*(5*g);P=ie>>>13,ie&=8191,ie+=N*(5*m)+L*(5*p)+_*(5*f)+I*(5*h)+D*(5*d),P+=ie>>>13,ie&=8191;let oe=P+T*d+$*u+R*l+H*c+F*a;P=oe>>>13,oe&=8191,oe+=N*(5*g)+L*(5*m)+_*(5*p)+I*(5*f)+D*(5*h),P+=oe>>>13,oe&=8191;let ue=P+T*h+$*d+R*u+H*l+F*c;P=ue>>>13,ue&=8191,ue+=N*a+L*(5*g)+_*(5*m)+I*(5*p)+D*(5*f),P+=ue>>>13,ue&=8191;let xe=P+T*f+$*h+R*d+H*u+F*l;P=xe>>>13,xe&=8191,xe+=N*c+L*a+_*(5*g)+I*(5*m)+D*(5*p),P+=xe>>>13,xe&=8191;let Ue=P+T*p+$*f+R*h+H*d+F*u;P=Ue>>>13,Ue&=8191,Ue+=N*l+L*c+_*a+I*(5*g)+D*(5*m),P+=Ue>>>13,Ue&=8191;let He=P+T*m+$*p+R*f+H*h+F*d;P=He>>>13,He&=8191,He+=N*u+L*l+_*c+I*a+D*(5*g),P+=He>>>13,He&=8191;let Ge=P+T*g+$*m+R*p+H*f+F*h;P=Ge>>>13,Ge&=8191,Ge+=N*d+L*u+_*l+I*c+D*a,P+=Ge>>>13,Ge&=8191,P=(P<<2)+P|0,P=P+q|0,q=P&8191,P=P>>>13,G+=P,o[0]=q,o[1]=G,o[2]=Y,o[3]=ie,o[4]=oe,o[5]=ue,o[6]=xe,o[7]=Ue,o[8]=He,o[9]=Ge}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),i=e[1]>>>13;e[1]&=8191;for(let a=2;a<10;a++)e[a]+=i,i=e[a]>>>13,e[a]&=8191;e[0]+=i*5,i=e[0]>>>13,e[0]&=8191,e[1]+=i,i=e[1]>>>13,e[1]&=8191,e[2]+=i,n[0]=e[0]+5,i=n[0]>>>13,n[0]&=8191;for(let a=1;a<10;a++)n[a]=e[a]+i,i=n[a]>>>13,n[a]&=8191;n[9]-=8192;let o=(i^1)-1;for(let a=0;a<10;a++)n[a]&=o;o=~o;for(let a=0;a<10;a++)e[a]=e[a]&o|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;$i(n)}update(e){z6(this);let{buffer:t,blockLen:n}=this;e=jp(e);let i=e.length;for(let o=0;o<i;){let s=Math.min(n-this.pos,i-o);if(s===n){for(;n<=i-o;o+=n)this.process(e,o);continue}t.set(e.subarray(o,o+s),this.pos),this.pos+=s,o+=s,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){$i(this.h,this.r,this.buffer,this.pad)}digestInto(e){z6(this),qb(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:i}=this;if(i){for(t[i++]=1;i<16;i++)t[i]=0;this.process(t,0,!0)}this.finalize();let o=0;for(let s=0;s<8;s++)e[o++]=n[s]>>>0,e[o++]=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 aB(r){let e=(n,i)=>r(i).update(jp(n)).digest(),t=r(new Uint8Array(32));return e.outputLen=t.outputLen,e.blockLen=t.blockLen,e.create=n=>r(n),e}var Qb=aB(r=>new Y6(r));function ev(r,e,t,n,i,o=20){let s=r[0],a=r[1],c=r[2],l=r[3],u=e[0],d=e[1],h=e[2],f=e[3],p=e[4],m=e[5],g=e[6],y=e[7],w=i,x=t[0],b=t[1],A=t[2],k=s,E=a,S=c,T=l,$=u,R=d,H=h,F=f,N=p,L=m,_=g,I=y,D=w,P=x,q=b,G=A;for(let ie=0;ie<o;ie+=2)k=k+$|0,D=j(D^k,16),N=N+D|0,$=j($^N,12),k=k+$|0,D=j(D^k,8),N=N+D|0,$=j($^N,7),E=E+R|0,P=j(P^E,16),L=L+P|0,R=j(R^L,12),E=E+R|0,P=j(P^E,8),L=L+P|0,R=j(R^L,7),S=S+H|0,q=j(q^S,16),_=_+q|0,H=j(H^_,12),S=S+H|0,q=j(q^S,8),_=_+q|0,H=j(H^_,7),T=T+F|0,G=j(G^T,16),I=I+G|0,F=j(F^I,12),T=T+F|0,G=j(G^T,8),I=I+G|0,F=j(F^I,7),k=k+R|0,G=j(G^k,16),_=_+G|0,R=j(R^_,12),k=k+R|0,G=j(G^k,8),_=_+G|0,R=j(R^_,7),E=E+H|0,D=j(D^E,16),I=I+D|0,H=j(H^I,12),E=E+H|0,D=j(D^E,8),I=I+D|0,H=j(H^I,7),S=S+F|0,P=j(P^S,16),N=N+P|0,F=j(F^N,12),S=S+F|0,P=j(P^S,8),N=N+P|0,F=j(F^N,7),T=T+$|0,q=j(q^T,16),L=L+q|0,$=j($^L,12),T=T+$|0,q=j(q^T,8),L=L+q|0,$=j($^L,7);let Y=0;n[Y++]=s+k|0,n[Y++]=a+E|0,n[Y++]=c+S|0,n[Y++]=l+T|0,n[Y++]=u+$|0,n[Y++]=d+R|0,n[Y++]=h+H|0,n[Y++]=f+F|0,n[Y++]=p+N|0,n[Y++]=m+L|0,n[Y++]=g+_|0,n[Y++]=y+I|0,n[Y++]=w+D|0,n[Y++]=x+P|0,n[Y++]=b+q|0,n[Y++]=A+G|0}function cB(r,e,t,n){let i=r[0],o=r[1],s=r[2],a=r[3],c=e[0],l=e[1],u=e[2],d=e[3],h=e[4],f=e[5],p=e[6],m=e[7],g=t[0],y=t[1],w=t[2],x=t[3];for(let A=0;A<20;A+=2)i=i+c|0,g=j(g^i,16),h=h+g|0,c=j(c^h,12),i=i+c|0,g=j(g^i,8),h=h+g|0,c=j(c^h,7),o=o+l|0,y=j(y^o,16),f=f+y|0,l=j(l^f,12),o=o+l|0,y=j(y^o,8),f=f+y|0,l=j(l^f,7),s=s+u|0,w=j(w^s,16),p=p+w|0,u=j(u^p,12),s=s+u|0,w=j(w^s,8),p=p+w|0,u=j(u^p,7),a=a+d|0,x=j(x^a,16),m=m+x|0,d=j(d^m,12),a=a+d|0,x=j(x^a,8),m=m+x|0,d=j(d^m,7),i=i+l|0,x=j(x^i,16),p=p+x|0,l=j(l^p,12),i=i+l|0,x=j(x^i,8),p=p+x|0,l=j(l^p,7),o=o+u|0,g=j(g^o,16),m=m+g|0,u=j(u^m,12),o=o+u|0,g=j(g^o,8),m=m+g|0,u=j(u^m,7),s=s+d|0,y=j(y^s,16),h=h+y|0,d=j(d^h,12),s=s+d|0,y=j(y^s,8),h=h+y|0,d=j(d^h,7),a=a+c|0,w=j(w^a,16),f=f+w|0,c=j(c^f,12),a=a+c|0,w=j(w^a,8),f=f+w|0,c=j(c^f,7);let b=0;n[b++]=i,n[b++]=o,n[b++]=s,n[b++]=a,n[b++]=g,n[b++]=y,n[b++]=w,n[b++]=x}var lB=W6(ev,{counterRight:!1,counterLength:4,allowShortKeys:!1}),uB=W6(ev,{counterRight:!1,counterLength:8,extendNonceFn:cB,allowShortKeys:!1});var dB=new Uint8Array(16),Zb=(r,e)=>{r.update(e);let t=e.length%16;t&&r.update(dB.subarray(t))},fB=new Uint8Array(32);function Jb(r,e,t,n,i){let o=r(e,t,fB),s=Qb.create(o);i&&Zb(s,i),Zb(s,n);let a=new Uint8Array(16),c=Kb(a);K6(c,0,BigInt(i?i.length:0),!0),K6(c,8,BigInt(n.length),!0),s.update(a);let l=s.digest();return $i(o,a),l}var tv=r=>(e,t,n)=>({encrypt(o,s){let a=o.length;s=q6(a+16,s,!1),s.set(o);let c=s.subarray(0,-16);r(e,t,c,c,1);let l=Jb(r,e,t,c,n);return s.set(l,a),$i(l),s},decrypt(o,s){s=q6(o.length-16,s,!1);let a=o.subarray(0,-16),c=o.subarray(-16),l=Jb(r,e,t,a,n);if(!Wb(c,l))throw new Error("invalid tag");return s.set(o.subarray(0,-16)),r(e,t,s,s,1),$i(l),s}}),X6=V6({blockSize:64,nonceLength:12,tagLength:16},tv(lB)),Cfe=V6({blockSize:64,nonceLength:24,tagLength:16},tv(uB));function nv(r,e,t){return ys(r),t===void 0&&(t=new Uint8Array(r.outputLen)),vo(r,_n(t),_n(e))}var j6=new Uint8Array([0]),rv=new Uint8Array;function iv(r,e,t,n=32){if(ys(r),uo(n),n>255*r.outputLen)throw new Error("Length should be <= 255*HashLen");let i=Math.ceil(n/r.outputLen);t===void 0&&(t=rv);let o=new Uint8Array(i*r.outputLen),s=vo.create(r,e),a=s._cloneInto(),c=new Uint8Array(s.outputLen);for(let l=0;l<i;l++)j6[0]=l+1,a.update(l===0?rv:c).update(t).update(j6).digestInto(c),o.set(c,r.outputLen*l),s._cloneInto(a);return s.destroy(),a.destroy(),c.fill(0),j6.fill(0),o.slice(0,n)}var Q6={hashSHA256(r){return cn(r.subarray())},getHKDF(r,e){let t=nv(cn,e,r),i=iv(cn,t,void 0,96),o=i.subarray(0,32),s=i.subarray(32,64),a=i.subarray(64,96);return[o,s,a]},generateX25519KeyPair(){let r=vl.utils.randomPrivateKey();return{publicKey:vl.getPublicKey(r),privateKey:r}},generateX25519KeyPairFromSeed(r){return{publicKey:vl.getPublicKey(r),privateKey:r}},generateX25519SharedKey(r,e){return vl.getSharedSecret(r.subarray(),e.subarray())},chaCha20Poly1305Encrypt(r,e,t,n){return X6(n,e,t).encrypt(r.subarray())},chaCha20Poly1305Decrypt(r,e,t,n,i){return X6(n,e,t).decrypt(r.subarray(),i)}};var ov=Q6;function sv(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 yc=r=>{let e=at(2);return e[0]=r>>8,e[1]=r,e};yc.bytes=2;var bu=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)};bu.bytes=2;function av(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 Z6(r,e){!e.enabled||!gc||(r?(e(`LOCAL_STATIC_PUBLIC_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_STATIC_PRIVATE_KEY ${U(r.privateKey,"hex")}`)):e("Missing local static keys."))}function J6(r,e){!e.enabled||!gc||(r?(e(`LOCAL_PUBLIC_EPHEMERAL_KEY ${U(r.publicKey,"hex")}`),e(`LOCAL_PRIVATE_EPHEMERAL_KEY ${U(r.privateKey,"hex")}`)):e("Missing local ephemeral keys."))}function cv(r,e){!e.enabled||!gc||e(r?`REMOTE_STATIC_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote static public key.")}function e8(r,e){!e.enabled||!gc||e(r?`REMOTE_EPHEMERAL_PUBLIC_KEY ${U(r.subarray(),"hex")}`:"Missing remote ephemeral keys.")}function t8(r,e,t){!t.enabled||!gc||(t(`CIPHER_STATE_1 ${r.n.getUint64()} ${r.k&&U(r.k,"hex")}`),t(`CIPHER_STATE_2 ${e.n.getUint64()} ${e.k&&U(e.k,"hex")}`))}var wc=class r extends Error{code;constructor(e="Invalid crypto exchange"){super(e),this.code=r.code}static code="ERR_INVALID_CRYPTO_EXCHANGE"};var hB=0,pB=4294967295,mB="Cipherstate has reached maximum n, a new handshake must be performed",Jp=class{n;bytes;view;constructor(e=hB){this.n=e,this.bytes=le(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>pB)throw new Error(mB)}};var Ys=le(0),xc=class{k;n;crypto;constructor(e,t=void 0,n=0){this.crypto=e,this.k=t,this.n=new Jp(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 i=this.crypto.decrypt(t,this.n.getBytes(),e,this.k,n);return this.n.increment(),i}},r8=class{cs;ck;h;crypto;constructor(e,t){this.crypto=e;let n=C(t,"utf-8");this.h=gB(e,n),this.ck=this.h,this.cs=new xc(e)}mixKey(e){let[t,n]=this.crypto.hkdf(this.ck,e);this.ck=t,this.cs=new xc(this.crypto,n)}mixHash(e){this.h=this.crypto.hash(new ee(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,Ys);return[new xc(this.crypto,e),new xc(this.crypto,t)]}},n8=class{ss;s;e;rs;re;initiator;crypto;constructor(e){let{crypto:t,protocolName:n,prologue:i,initiator:o,s,e:a,rs:c,re:l}=e;this.crypto=t,this.ss=new r8(t,n),this.ss.mixHash(i),this.initiator=o,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 i=e.sublist(t,t+n);return this.rs=this.ss.decryptAndHash(i),n}readEE(){this.writeEE()}readES(){this.writeES()}readSE(){this.writeSE()}},vu=class extends n8{writeMessageA(e){return new ee(this.writeE(),this.ss.encryptAndHash(e))}writeMessageB(e){let t=this.writeE();this.writeEE();let n=this.writeS();return this.writeES(),new ee(t,n,this.ss.encryptAndHash(e))}writeMessageC(e){let t=this.writeS();return this.writeSE(),new ee(t,this.ss.encryptAndHash(e))}readMessageA(e){try{return this.readE(e),this.ss.decryptAndHash(e.sublist(32))}catch(t){throw new wc(`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 wc(`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 wc(`handshake stage 2 validation fail: ${t.message}`)}}};function gB(r,e){if(e.length<=32){let t=le(32);return t.set(e),t}else return r.hash(e)}var e1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.webtransportCerthashes!=null)for(let o of t.webtransportCerthashes)n.uint32(10),n.bytes(o);if(t.streamMuxers!=null)for(let o of t.streamMuxers)n.uint32(18),n.string(o);i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={webtransportCerthashes:[],streamMuxers:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{if(i.limits?.webtransportCerthashes!=null&&o.webtransportCerthashes.length===i.limits.webtransportCerthashes)throw new Ve('Decode error - map field "webtransportCerthashes" had too many elements');o.webtransportCerthashes.push(t.bytes());break}case 2:{if(i.limits?.streamMuxers!=null&&o.streamMuxers.length===i.limits.streamMuxers)throw new Ve('Decode error - map field "streamMuxers" had too many elements');o.streamMuxers.push(t.string());break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(e1||(e1={}));var Eu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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),e1.codec().encode(t.extensions,n)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={identityKey:le(0),identitySig:le(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.identityKey=t.bytes();break}case 2:{o.identitySig=t.bytes();break}case 4:{o.extensions=e1.codec().decode(t,t.uint32(),{limits:i.limits?.extensions});break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Eu||(Eu={}));async function i8(r,e,t){let n=await r.sign(lv(e));return Eu.encode({identityKey:Ot(r.publicKey),identitySig:n,extensions:t})}async function o8(r,e,t){try{let n=Eu.decode(r),i=wt(n.identityKey);if(t?.equals(i)===!1)throw new Error(`Payload identity key ${i} does not match expected remote identity key ${t}`);if(!e)throw new Error("Remote static does not exist");let o=lv(e);if(!await i.verify(o,n.identitySig))throw new Error("Invalid payload signature");return n}catch(n){throw new kd(n.message)}}function lv(r){let e=C("noise-libp2p-static-key:");return r instanceof Uint8Array?ge([e,r],e.length+r.length):(r.prepend(e),r)}async function uv(r,e){let{log:t,connection:n,crypto:i,privateKey:o,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await i8(o,a.publicKey,l),d=new vu({crypto:i,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!0,prologue:s,s:a});Z6(d.s,t),t.trace("Stage 0 - Initiator starting to send first message."),await n.write(d.writeMessageA(Ys),e),t.trace("Stage 0 - Initiator finished sending first message."),J6(d.e,t),t.trace("Stage 1 - Initiator waiting to receive first message from responder...");let h=d.readMessageB(await n.read(e));t.trace("Stage 1 - Initiator received the message."),e8(d.re,t),cv(d.rs,t),t.trace("Initiator going to check remote's signature...");let f=await o8(h,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,m]=d.ss.split();return t8(p,m,t),{payload:f,encrypt:g=>p.encryptWithAd(Ys,g),decrypt:(g,y)=>m.decryptWithAd(Ys,g,y)}}async function dv(r,e){let{log:t,connection:n,crypto:i,privateKey:o,prologue:s,s:a,remoteIdentityKey:c,extensions:l}=r,u=await i8(o,a.publicKey,l),d=new vu({crypto:i,protocolName:"Noise_XX_25519_ChaChaPoly_SHA256",initiator:!1,prologue:s,s:a});Z6(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."),e8(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."),J6(d.e,t),t.trace("Stage 2 - Responder waiting for third handshake message...");let h=d.readMessageC(await n.read(e));t.trace("Stage 2 - Responder received the message, finished handshake.");let f=await o8(h,d.rs,c),[p,m]=d.ss.split();return t8(p,m,t),{payload:f,encrypt:g=>m.encryptWithAd(Ys,g),decrypt:(g,y)=>p.decryptWithAd(Ys,g,y)}}var hv=16;function pv(r,e){return async function*(t){for await(let n of t)for(let i=0;i<n.length;i+=65519){let o=i+65519;o>n.length&&(o=n.length);let s;n instanceof Uint8Array?s=r.encrypt(n.subarray(i,o)):s=r.encrypt(n.sublist(i,o)),e?.encryptedPackets.increment(),yield new ee(yc(s.byteLength),s)}}}function mv(r,e){return async function*(t){for await(let n of t)for(let i=0;i<n.length;i+=65535){let o=i+65535;if(o>n.length&&(o=n.length),o-hv<i)throw new Error("Invalid chunk");let s=n.sublist(i,o),a=n.subarray(i,o-hv);try{let c=r.decrypt(s,a);e?.decryptedPackets.increment(),yield c}catch(c){throw e?.decryptErrors.increment(),c}}}}var t1=class{protocol="/noise";crypto;prologue;staticKey;extensions;metrics;components;constructor(e,t={}){let{staticNoiseKey:n,extensions:i,crypto:o,prologueBytes:s}=t,{metrics:a}=e;this.components=e;let c=o??ov;this.crypto=sv(c),this.extensions={webtransportCerthashes:[],...i},this.metrics=a?av(a):void 0,n?this.staticKey=c.generateX25519KeyPairFromSeed(n):this.staticKey=c.generateX25519KeyPair(),this.prologue=s??le(0)}[Symbol.toStringTag]="@chainsafe/libp2p-noise";[Pe]=["@libp2p/connection-encryption","@chainsafe/libp2p-noise"];async secureOutbound(e,t){let n=ci(e,{lengthEncoder:yc,lengthDecoder:bu,maxDataLength:65535}),i=await this.performHandshakeInitiator(n,this.components.privateKey,t?.remotePeer?.publicKey,t),o=await this.createSecureConnection(n,i);e.source=o.source,e.sink=o.sink;let s=wt(i.payload.identityKey);return{conn:e,remoteExtensions:i.payload.extensions,remotePeer:oi(s),streamMuxer:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}getStreamMuxer(e){if(e==null)return;let t=this.components.upgrader.getStreamMuxers();if(t!=null)for(let n of e){let i=t.get(n);if(i!=null)return i}if(e.length)throw new Cd("Early muxer negotiation was requested but the initiator and responder had no common muxers")}async secureInbound(e,t){let n=ci(e,{lengthEncoder:yc,lengthDecoder:bu,maxDataLength:65535}),i=await this.performHandshakeResponder(n,this.components.privateKey,t?.remotePeer?.publicKey,t),o=await this.createSecureConnection(n,i);e.source=o.source,e.sink=o.sink;let s=wt(i.payload.identityKey);return{conn:e,remoteExtensions:i.payload.extensions,remotePeer:oi(s),streamMuxer:this.getStreamMuxer(i.payload.extensions?.streamMuxers)}}async performHandshakeInitiator(e,t,n,i){let o;try{o=await uv({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async performHandshakeResponder(e,t,n,i){let o;try{o=await dv({connection:e,privateKey:t,remoteIdentityKey:n,log:this.components.logger.forComponent("libp2p:noise:xxhandshake"),crypto:this.crypto,prologue:this.prologue,s:this.staticKey,extensions:{streamMuxers:[...this.components.upgrader.getStreamMuxers().keys()],webtransportCerthashes:[],...this.extensions}},i),this.metrics?.xxHandshakeSuccesses.increment()}catch(s){throw this.metrics?.xxHandshakeErrors.increment(),s}return o}async createSecureConnection(e,t){let[n,i]=Vb(),o=e.unwrap();return await Re(n,pv(t,this.metrics),o,s=>An(s,{lengthDecoder:bu}),mv(t,this.metrics),n),i}};function r1(r={}){return e=>new t1(e,r)}function bc(r){if(r!=null){if(typeof r[Symbol.iterator]=="function")return r[Symbol.iterator]();if(typeof r[Symbol.asyncIterator]=="function")return r[Symbol.asyncIterator]();if(typeof r.next=="function")return r}throw new Error("argument is not an iterator or iterable")}var $n=class extends Error{static name="InvalidFrameError";constructor(e="The frame was invalid"){super(e),this.name="InvalidFrameError"}},vc=class extends Error{static name="UnrequestedPingError";constructor(e="Unrequested ping error"){super(e),this.name="UnrequestedPingError"}},Ec=class extends Error{static name="NotMatchingPingError";constructor(e="Unrequested ping error"){super(e),this.name="NotMatchingPingError"}},n1=class extends Error{static name="InvalidStateError";constructor(e="Invalid state"){super(e),this.name="InvalidStateError"}},i1=class extends Error{static name="StreamAlreadyExistsError";constructor(e="Strean already exists"){super(e),this.name="StreamAlreadyExistsError"}},o1=class extends Error{static name="DecodeInvalidVersionError";constructor(e="Decode invalid version"){super(e),this.name="DecodeInvalidVersionError"}},s1=class extends Error{static name="BothClientsError";constructor(e="Both clients"){super(e),this.name="BothClientsError"}},Sc=class extends Error{static name="ReceiveWindowExceededError";constructor(e="Receive window exceeded"){super(e),this.name="ReceiveWindowExceededError"}};var gv=new Set([$n.name,vc.name,Ec.name,i1.name,o1.name,s1.name,Sc.name]),Au=256*1024,yv=16*1024*1024;var wv={enableKeepAlive:!0,keepAliveInterval:3e4,maxInboundStreams:1e3,maxOutboundStreams:1e3,initialStreamWindowSize:Au,maxStreamWindowSize:yv,maxMessageSize:64*1024};function xv(r){if(r.keepAliveInterval<=0)throw new O("keep-alive interval must be positive");if(r.maxInboundStreams<0)throw new O("max inbound streams must be larger or equal 0");if(r.maxOutboundStreams<0)throw new O("max outbound streams must be larger or equal 0");if(r.initialStreamWindowSize<Au)throw new O("InitialStreamWindowSize must be larger or equal 256 kB");if(r.maxStreamWindowSize<r.initialStreamWindowSize)throw new O("MaxStreamWindowSize must be larger than the InitialStreamWindowSize");if(r.maxStreamWindowSize>2**32-1)throw new O("MaxStreamWindowSize must be less than equal MAX_UINT32");if(r.maxMessageSize<1024)throw new O("MaxMessageSize must be greater than a kilobyte")}var pt;(function(r){r[r.Data=0]="Data",r[r.WindowUpdate=1]="WindowUpdate",r[r.Ping=2]="Ping",r[r.GoAway=3]="GoAway"})(pt||(pt={}));var nt;(function(r){r[r.SYN=1]="SYN",r[r.ACK=2]="ACK",r[r.FIN=4]="FIN",r[r.RST=8]="RST"})(nt||(nt={}));var Xhe=Object.values(nt).filter(r=>typeof r!="string"),bv=0,pn;(function(r){r[r.NormalTermination=0]="NormalTermination",r[r.ProtocolError=1]="ProtocolError",r[r.InternalError=2]="InternalError"})(pn||(pn={}));var Uo=12;var vv=2**24;function yB(r){if(r[0]!==bv)throw new $n("Invalid frame version");return{type:r[1],flag:(r[2]<<8)+r[3],streamID:r[4]*vv+(r[5]<<16)+(r[6]<<8)+r[7],length:r[8]*vv+(r[9]<<16)+(r[10]<<8)+r[11]}}var a1=class{source;buffer;frameInProgress;constructor(e){this.source=wB(e),this.buffer=new ee,this.frameInProgress=!1}async*emitFrames(){for await(let e of this.source)for(this.buffer.append(e);;){let t=this.readHeader();if(t===void 0)break;let{type:n,length:i}=t;n===pt.Data?(this.frameInProgress=!0,yield{header:t,readData:this.readBytes.bind(this,i)}):yield{header:t}}}readHeader(){if(this.frameInProgress)throw new n1("decoding frame already in progress");if(this.buffer.length<Uo)return;let e=yB(this.buffer.subarray(0,Uo));return this.buffer.consume(Uo),e}async readBytes(e){if(this.buffer.length<e){for await(let n of this.source)if(this.buffer.append(n),this.buffer.length>=e)break}let t=this.buffer.sublist(0,e);return this.buffer.consume(e),this.frameInProgress=!1,t}};function wB(r){if(r[Symbol.iterator]!==void 0){let e=r[Symbol.iterator]();return e.return=void 0,{[Symbol.iterator](){return e}}}else if(r[Symbol.asyncIterator]!==void 0){let e=r[Symbol.asyncIterator]();return e.return=void 0,{[Symbol.asyncIterator](){return e}}}else throw new Error("a source must be either an iterable or an async iterable")}function s8(r){let e=new Uint8Array(Uo);return e[1]=r.type,e[2]=r.flag>>>8,e[3]=r.flag,e[4]=r.streamID>>>24,e[5]=r.streamID>>>16,e[6]=r.streamID>>>8,e[7]=r.streamID,e[8]=r.length>>>24,e[9]=r.length>>>16,e[10]=r.length>>>8,e[11]=r.length,e}function Ev(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}function c1(r,e){let t=bc(r).return?.();Ev(t)&&t.catch(n=>{e.error("could not cause iterator to return",n)})}var xB=5e3;function a8(r){return r==null?!1:typeof r.then=="function"&&typeof r.catch=="function"&&typeof r.finally=="function"}var Ho=class{id;direction;timeline;protocol;metadata;source;status;readStatus;writeStatus;log;sinkController;sinkEnd;closed;endErr;streamSource;onEnd;onCloseRead;onCloseWrite;onReset;onAbort;sendCloseWriteTimeout;sendingData;constructor(e){this.sinkController=new AbortController,this.sinkEnd=Z(),this.closed=Z(),this.log=e.log,this.status="open",this.readStatus="ready",this.writeStatus="ready",this.id=e.id,this.metadata=e.metadata??{},this.direction=e.direction,this.timeline={open:Date.now()},this.sendCloseWriteTimeout=e.sendCloseWriteTimeout??xB,this.onEnd=e.onEnd,this.onCloseRead=e?.onCloseRead,this.onCloseWrite=e?.onCloseWrite,this.onReset=e?.onReset,this.onAbort=e?.onAbort,this.source=this.streamSource=rr({onEnd:t=>{t!=null?this.log.trace("source ended with error",t):this.log.trace("source ended"),this.onSourceEnd(t)}}),this.sink=this.sink.bind(this)}async sink(e){if(this.writeStatus!=="ready")throw new as(`writable end state is "${this.writeStatus}" not "ready"`);try{this.writeStatus="writing";let t={signal:this.sinkController.signal};if(this.direction==="outbound"){let i=this.sendNewStream(t);a8(i)&&await i}let n=()=>{c1(e,this.log)};try{this.sinkController.signal.addEventListener("abort",n),this.log.trace("sink reading from source");for await(let i of e){i=i instanceof Uint8Array?new ee(i):i;let o=this.sendData(i,t);a8(o)&&(this.sendingData=Z(),await o,this.sendingData.resolve(),this.sendingData=void 0)}}finally{this.sinkController.signal.removeEventListener("abort",n)}this.log.trace('sink finished reading from source, write status is "%s"',this.writeStatus),this.writeStatus==="writing"&&(this.writeStatus="closing",this.log.trace("send close write to remote"),await this.sendCloseWrite({signal:AbortSignal.timeout(this.sendCloseWriteTimeout)}),this.writeStatus="closed"),this.onSinkEnd()}catch(t){throw this.log.trace("sink ended with error, calling abort with error",t),this.abort(t),t}finally{this.log.trace("resolve sink end"),this.sinkEnd.resolve()}}onSourceEnd(e){this.timeline.closeRead==null&&(this.timeline.closeRead=Date.now(),this.readStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseRead?.(),this.timeline.closeWrite!=null?(this.log.trace("source and sink ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("source ended, waiting for sink to end"))}onSinkEnd(e){this.timeline.closeWrite==null&&(this.timeline.closeWrite=Date.now(),this.writeStatus="closed",e!=null&&this.endErr==null&&(this.endErr=e),this.onCloseWrite?.(),this.timeline.closeRead!=null?(this.log.trace("sink and source ended"),this.timeline.close=Date.now(),this.status!=="aborted"&&this.status!=="reset"&&(this.status="closed"),this.onEnd!=null&&this.onEnd(this.endErr),this.closed.resolve()):this.log.trace("sink ended, waiting for source to end"))}async close(e){this.status==="open"&&(this.log.trace("closing gracefully"),this.status="closing",await st(Promise.all([this.closeWrite(e),this.closeRead(e),this.closed.promise]),e?.signal),this.status="closed",this.log.trace("closed gracefully"))}async closeRead(e={}){if(this.readStatus==="closing"||this.readStatus==="closed")return;this.log.trace('closing readable end of stream with starting read status "%s"',this.readStatus);let t=this.readStatus;this.readStatus="closing",this.status!=="reset"&&this.status!=="aborted"&&this.timeline.closeRead==null&&(this.log.trace("send close read to remote"),await this.sendCloseRead(e)),t==="ready"&&(this.log.trace("ending internal source queue with %d queued bytes",this.streamSource.readableLength),this.streamSource.end()),this.log.trace("closed readable end of stream")}async closeWrite(e={}){this.writeStatus==="closing"||this.writeStatus==="closed"||(this.log.trace('closing writable end of stream with starting write status "%s"',this.writeStatus),this.writeStatus==="ready"&&(this.log.trace("sink was never sunk, sink an empty array"),await st(this.sink([]),e.signal)),this.writeStatus==="writing"&&(this.sendingData!=null&&await st(this.sendingData.promise,e.signal),this.log.trace("aborting source passed to .sink"),this.sinkController.abort(),await st(this.sinkEnd.promise,e.signal)),this.writeStatus="closed",this.log.trace("closed writable end of stream"))}abort(e){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;this.log("abort with error",e),this.log("try to send reset to remote");let t=this.sendReset();a8(t)&&t.catch(n=>{this.log.error("error sending reset message",n)}),this.status="aborted",this.timeline.abort=Date.now(),this._closeSinkAndSource(e),this.onAbort?.(e)}reset(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset")return;let e=new Rd("stream reset");this.status="reset",this.timeline.reset=Date.now(),this._closeSinkAndSource(e),this.onReset?.()}_closeSinkAndSource(e){this._closeSink(e),this._closeSource(e)}_closeSink(e){this.writeStatus==="writing"&&(this.log.trace("end sink source"),this.sinkController.abort()),this.onSinkEnd(e)}_closeSource(e){this.readStatus!=="closing"&&this.readStatus!=="closed"&&(this.log.trace("ending source with %d bytes to be read by consumer",this.streamSource.readableLength),this.readStatus="closing",this.streamSource.end(e))}remoteCloseWrite(){if(this.readStatus==="closing"||this.readStatus==="closed"){this.log("received remote close write but local source is already closed");return}this.log.trace("remote close write"),this._closeSource()}remoteCloseRead(){if(this.writeStatus==="closing"||this.writeStatus==="closed"){this.log("received remote close read but local sink is already closed");return}this.log.trace("remote close read"),this._closeSink()}destroy(){if(this.status==="closed"||this.status==="aborted"||this.status==="reset"){this.log("received destroy but we are already closed");return}this.log.trace("stream destroyed"),this._closeSinkAndSource()}sourcePush(e){this.streamSource.push(e)}sourceReadableLength(){return this.streamSource.readableLength}};var mn;(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"})(mn||(mn={}));var l1=class extends Ho{name;state;config;_id;sendWindowCapacity;sendWindowCapacityUpdate;recvWindow;recvWindowCapacity;epochStart;getRTT;sendFrame;constructor(e){super({...e,onEnd:t=>{this.state=mn.Finished,e.onEnd?.(t)}}),this.config=e.config,this._id=parseInt(e.id,10),this.name=e.name,this.state=e.state,this.sendWindowCapacity=Au,this.recvWindow=this.config.initialStreamWindowSize,this.recvWindowCapacity=this.recvWindow,this.epochStart=Date.now(),this.getRTT=e.getRTT,this.sendFrame=e.sendFrame,this.source=Os(this.source,()=>{this.sendWindowUpdate()})}async sendNewStream(){}async sendData(e,t={}){for(e=e.sublist();e.byteLength!==0;){if(this.sendWindowCapacity===0&&(this.log?.trace("wait for send window capacity, status %s",this.status),await this.waitForSendWindowCapacity(t),this.status==="closed"||this.status==="aborted"||this.status==="reset")){this.log?.trace("%s while waiting for send window capacity",this.status);return}let n=Math.min(this.sendWindowCapacity,this.config.maxMessageSize-Uo,e.length),i=this.getSendFlags();this.sendFrame({type:pt.Data,flag:i,streamID:this._id,length:n},e.sublist(0,n)),this.sendWindowCapacity-=n,e.consume(n)}}async sendReset(){this.sendFrame({type:pt.WindowUpdate,flag:nt.RST,streamID:this._id,length:0})}async sendCloseWrite(){let e=this.getSendFlags()|nt.FIN;this.sendFrame({type:pt.WindowUpdate,flag:e,streamID:this._id,length:0})}async sendCloseRead(){}async waitForSendWindowCapacity(e={}){if(this.sendWindowCapacity>0)return;let t,n,i=()=>{this.status==="open"||this.status==="closing"?n(new zt("Stream aborted")):t()};e.signal?.addEventListener("abort",i);try{await new Promise((o,s)=>{this.sendWindowCapacityUpdate=()=>{o()},n=s,t=o})}finally{e.signal?.removeEventListener("abort",i)}}handleWindowUpdate(e){this.log?.trace("stream received window update id=%s",this._id),this.processFlags(e.flag);let t=this.sendWindowCapacity;this.sendWindowCapacity+=e.length,t===0&&e.length>0&&this.sendWindowCapacityUpdate?.()}async handleData(e,t){if(this.log?.trace("stream received data id=%s",this._id),this.processFlags(e.flag),this.recvWindowCapacity<e.length)throw new Sc("Receive window exceeded");let n=await t();this.recvWindowCapacity-=e.length,this.sourcePush(n)}processFlags(e){(e&nt.ACK)===nt.ACK&&this.state===mn.SYNSent&&(this.state=mn.Established),(e&nt.FIN)===nt.FIN&&this.remoteCloseWrite(),(e&nt.RST)===nt.RST&&this.reset()}getSendFlags(){switch(this.state){case mn.Init:return this.state=mn.SYNSent,nt.SYN;case mn.SYNReceived:return this.state=mn.Established,nt.ACK;default:return 0}}sendWindowUpdate(){let e=this.getSendFlags(),t=Date.now(),n=this.getRTT();if(e===0&&n>-1&&t-this.epochStart<n*4&&(this.recvWindow=Math.min(this.recvWindow*2,this.config.maxStreamWindowSize)),this.recvWindowCapacity>=this.recvWindow&&e===0)return;let i=this.recvWindow-this.recvWindowCapacity;this.recvWindowCapacity=this.recvWindow,this.epochStart=t,this.sendFrame({type:pt.WindowUpdate,flag:e,streamID:this._id,length:i})}};var Sv="/yamux/1.0.0",bB=500,u1=class{protocol=Sv;_components;_init;constructor(e,t={}){this._components=e,this._init=t}[Symbol.toStringTag]="@chainsafe/libp2p-yamux";[Pe]=["@libp2p/stream-multiplexing"];createStreamMuxer(e){return new c8(this._components,{...this._init,...e})}},c8=class{protocol=Sv;source;sink;config;log;logger;closeController;nextStreamID;_streams;nextPingID;activePing;rtt;client;localGoAway;remoteGoAway;numInboundStreams;numOutboundStreams;onIncomingStream;onStreamEnd;constructor(e,t){this.client=t.direction==="outbound",this.config={...wv,...t},this.logger=e.logger,this.log=this.logger.forComponent("libp2p:yamux"),xv(this.config),this.closeController=new AbortController,this.closeController.signal,this.onIncomingStream=t.onIncomingStream,this.onStreamEnd=t.onStreamEnd,this._streams=new Map,this.source=rr({onEnd:()=>{this.log?.trace("muxer source ended"),this._streams.forEach(n=>{n.destroy()})}}),this.sink=async n=>{let i=()=>{let a=bc(n);if(a.return!=null){let c=a.return();vB(c)&&c.catch(l=>{this.log?.("could not cause sink source to return",l)})}},o,s;try{let a=new a1(n);try{this.closeController.signal.addEventListener("abort",i);for await(let c of a.emitFrames())await this.handleFrame(c.header,c.readData)}finally{this.closeController.signal.removeEventListener("abort",i)}o=pn.NormalTermination}catch(a){gv.has(a.name)?(this.log?.error("protocol error in sink",a),o=pn.ProtocolError):(this.log?.error("internal error in sink",a),o=pn.InternalError),s=a}this.log?.trace("muxer sink ended"),s!=null?this.abort(s,o):await this.close({reason:o})},this.numInboundStreams=0,this.numOutboundStreams=0,this.nextStreamID=this.client?1:2,this.nextPingID=0,this.rtt=-1,this.log?.trace("muxer created"),this.config.enableKeepAlive&&this.keepAliveLoop().catch(n=>this.log?.error("keepalive error: %s",n)),this.ping().catch(n=>this.log?.error("ping error: %s",n))}get streams(){return Array.from(this._streams.values())}newStream(e){if(this.remoteGoAway!==void 0)throw new Jn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Jn("Muxer closed locally");let t=this.nextStreamID;if(this.nextStreamID+=2,this.numOutboundStreams>=this.config.maxOutboundStreams)throw new so("max outbound streams exceeded");this.log?.trace("new outgoing stream id=%s",t);let n=this._newStream(t,e,mn.Init,"outbound");return this._streams.set(t,n),this.numOutboundStreams++,n.sendWindowUpdate(),n}async ping(){if(this.remoteGoAway!==void 0)throw new Jn("Muxer closed remotely");if(this.localGoAway!==void 0)throw new Jn("Muxer closed locally");if(this.activePing===void 0){let e=()=>{};this.activePing={id:this.nextPingID++,promise:new Promise((i,o)=>{let s=()=>{o(new Jn("Muxer closed locally"))};this.closeController.signal.addEventListener("abort",s,{once:!0}),e=()=>{this.closeController.signal.removeEventListener("abort",s),i()}}),resolve:e};let t=Date.now();this.sendPing(this.activePing.id);try{await this.activePing.promise}finally{delete this.activePing}let n=Date.now();this.rtt=n-t}else await this.activePing.promise;return this.rtt}getRTT(){return this.rtt}async close(e={}){if(this.closeController.signal.aborted)return;let t=e?.reason??pn.NormalTermination;if(this.log?.trace("muxer close reason=%s",t),e.signal==null){let n=AbortSignal.timeout(bB);e={...e,signal:n}}try{await Promise.all([...this._streams.values()].map(async n=>n.close(e))),this.sendGoAway(t),this._closeMuxer()}catch(n){this.abort(n)}}abort(e,t){if(!this.closeController.signal.aborted){t=t??pn.InternalError,this.log?.error("muxer abort reason=%s error=%s",t,e);for(let n of this._streams.values())n.abort(e);this.sendGoAway(t),this._closeMuxer()}}isClosed(){return this.closeController.signal.aborted}_closeMuxer(){this.closeController.abort(),this.source.end()}_newStream(e,t,n,i){if(this._streams.get(e)!=null)throw new O("Stream already exists with that id");let o=new l1({id:e.toString(),name:t,state:n,direction:i,sendFrame:this.sendFrame.bind(this),onEnd:()=>{this.closeStream(e),this.onStreamEnd?.(o)},log:this.logger.forComponent(`libp2p:yamux:${i}:${e}`),config:this.config,getRTT:this.getRTT.bind(this)});return o}closeStream(e){this.client===(e%2===0)?this.numInboundStreams--:this.numOutboundStreams--,this._streams.delete(e)}async keepAliveLoop(){let e=new Promise((t,n)=>{this.closeController.signal.addEventListener("abort",n,{once:!0})});for(this.log?.trace("muxer keepalive enabled interval=%s",this.config.keepAliveInterval);;){let t;try{await Promise.race([e,new Promise(n=>{t=setTimeout(n,this.config.keepAliveInterval)})]),this.ping().catch(n=>this.log?.error("ping error: %s",n))}catch{clearInterval(t);return}}}async handleFrame(e,t){let{streamID:n,type:i,length:o}=e;if(this.log?.trace("received frame %o",e),n===0)switch(i){case pt.Ping:{this.handlePing(e);return}case pt.GoAway:{this.handleGoAway(o);return}default:throw new $n("Invalid frame type")}else switch(e.type){case pt.Data:case pt.WindowUpdate:{await this.handleStreamMessage(e,t);return}default:throw new $n("Invalid frame type")}}handlePing(e){if(e.flag===nt.SYN)this.log?.trace("received ping request pingId=%s",e.length),this.sendPing(e.length,nt.ACK);else if(e.flag===nt.ACK)this.log?.trace("received ping response pingId=%s",e.length),this.handlePingResponse(e.length);else throw new $n("Invalid frame flag")}handlePingResponse(e){if(this.activePing===void 0)throw new vc("ping not requested");if(this.activePing.id!==e)throw new Ec("ping doesn't match our id");this.activePing.resolve()}handleGoAway(e){this.log?.trace("received GoAway reason=%s",pn[e]??"unknown"),this.remoteGoAway=e;for(let t of this._streams.values())t.reset();this._closeMuxer()}async handleStreamMessage(e,t){let{streamID:n,flag:i,type:o}=e;(i&nt.SYN)===nt.SYN&&this.incomingStream(n);let s=this._streams.get(n);if(s===void 0){if(o===pt.Data){if(this.log?.("discarding data for stream id=%s",n),t===void 0)throw new Error("unreachable");await t()}else this.log?.trace("frame for missing stream id=%s",n);return}switch(o){case pt.WindowUpdate:{s.handleWindowUpdate(e);return}case pt.Data:{if(t===void 0)throw new Error("unreachable");await s.handleData(e,t);return}default:throw new Error("unreachable")}}incomingStream(e){if(this.client!==(e%2===0))throw new O("Both endpoints are clients");if(this._streams.has(e))return;if(this.log?.trace("new incoming stream id=%s",e),this.localGoAway!==void 0){this.sendFrame({type:pt.WindowUpdate,flag:nt.RST,streamID:e,length:0});return}if(this.numInboundStreams>=this.config.maxInboundStreams){this.log?.("maxIncomingStreams exceeded, forcing stream reset"),this.sendFrame({type:pt.WindowUpdate,flag:nt.RST,streamID:e,length:0});return}let t=this._newStream(e,void 0,mn.SYNReceived,"inbound");this.numInboundStreams++,this._streams.set(e,t),this.onIncomingStream?.(t)}sendFrame(e,t){if(this.log?.trace("sending frame %o",e),e.type===pt.Data){if(t===void 0)throw new $n("Invalid frame");this.source.push(new ee(s8(e),t))}else this.source.push(s8(e))}sendPing(e,t=nt.SYN){t===nt.SYN?this.log?.trace("sending ping request pingId=%s",e):this.log?.trace("sending ping response pingId=%s",e),this.sendFrame({type:pt.Ping,flag:t,streamID:0,length:e})}sendGoAway(e=pn.NormalTermination){this.log?.("sending GoAway reason=%s",pn[e]),this.localGoAway=e,this.sendFrame({type:pt.GoAway,flag:0,streamID:0,length:e})}};function vB(r){return r!=null&&typeof r.then=="function"}function Av(r={}){return e=>new u1(e,r)}var EB=41;function d1(r){try{let[[e,t]]=r.stringTuples();if(t==null)return!1;if(e===EB)return wx("2000::/3",t)}catch{}return!1}function f1(r){try{let[[e]]=r.stringTuples();return e===4||e===41}catch{}return!1}function gn(r){try{if(!f1(r))return!1;let[[,e]]=r.stringTuples();return e==null?!1:br(e)??!1}catch{}return!0}function Tv(r,e,t){let n,i;function o(){let a={signal:i.signal};if(t?.timeout!=null){let c=de([i.signal,AbortSignal.timeout(t.timeout)]);a.signal=c}Promise.resolve().then(async()=>{await r(a)}).catch(()=>{}).finally(()=>{i.signal.aborted||(n=setTimeout(o,e))})}let s=!1;return{setInterval:a=>{e=a,n!=null&&(clearTimeout(n),n=setTimeout(o,e))},setTimeout:a=>{t==null&&(t={}),t.timeout=a},start:()=>{s||(s=!0,i=new AbortController,i.signal,t?.runImmediately===!0?queueMicrotask(()=>{o()}):n=setTimeout(o,e))},stop:()=>{clearTimeout(n),i?.abort(),s=!1}}}var Iv="libp2p",_v="autonat",kv="1.0.0";var Qe;(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=()=>Ye(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 i;(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"})(i||(i={})),function(l){l.codec=()=>Ye(i)}(n=r.ResponseStatus||(r.ResponseStatus={}));let o;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,h,f={})=>{if(f.lengthDelimited!==!1&&h.fork(),d.id!=null&&(h.uint32(10),h.bytes(d.id)),d.addrs!=null)for(let p of d.addrs)h.uint32(18),h.bytes(p);f.lengthDelimited!==!1&&h.ldelim()},(d,h,f={})=>{let p={addrs:[]},m=h==null?d.len:d.pos+h;for(;d.pos<m;){let g=d.uint32();switch(g>>>3){case 1:{p.id=d.bytes();break}case 2:{if(f.limits?.addrs!=null&&p.addrs.length===f.limits.addrs)throw new Ve('Decode error - map field "addrs" had too many elements');p.addrs.push(d.bytes());break}default:{d.skipType(g&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,h)=>te(d,l.codec(),h)})(o=r.PeerInfo||(r.PeerInfo={}));let s;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,h,f={})=>{f.lengthDelimited!==!1&&h.fork(),d.peer!=null&&(h.uint32(10),r.PeerInfo.codec().encode(d.peer,h)),f.lengthDelimited!==!1&&h.ldelim()},(d,h,f={})=>{let p={},m=h==null?d.len:d.pos+h;for(;d.pos<m;){let g=d.uint32();switch(g>>>3){case 1:{p.peer=r.PeerInfo.codec().decode(d,d.uint32(),{limits:f.limits?.peer});break}default:{d.skipType(g&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,h)=>te(d,l.codec(),h)})(s=r.Dial||(r.Dial={}));let a;(function(l){let u;l.codec=()=>(u==null&&(u=ne((d,h,f={})=>{f.lengthDelimited!==!1&&h.fork(),d.status!=null&&(h.uint32(8),r.ResponseStatus.codec().encode(d.status,h)),d.statusText!=null&&(h.uint32(18),h.string(d.statusText)),d.addr!=null&&(h.uint32(26),h.bytes(d.addr)),f.lengthDelimited!==!1&&h.ldelim()},(d,h,f={})=>{let p={},m=h==null?d.len:d.pos+h;for(;d.pos<m;){let g=d.uint32();switch(g>>>3){case 1:{p.status=r.ResponseStatus.codec().decode(d);break}case 2:{p.statusText=d.string();break}case 3:{p.addr=d.bytes();break}default:{d.skipType(g&7);break}}}return p})),u),l.encode=d=>re(d,l.codec()),l.decode=(d,h)=>te(d,l.codec(),h)})(a=r.DialResponse||(r.DialResponse={}));let c;r.codec=()=>(c==null&&(c=ne((l,u,d={})=>{d.lengthDelimited!==!1&&u.fork(),l.type!=null&&(u.uint32(8),r.MessageType.codec().encode(l.type,u)),l.dial!=null&&(u.uint32(18),r.Dial.codec().encode(l.dial,u)),l.dialResponse!=null&&(u.uint32(26),r.DialResponse.codec().encode(l.dialResponse,u)),d.lengthDelimited!==!1&&u.ldelim()},(l,u,d={})=>{let h={},f=u==null?l.len:l.pos+u;for(;l.pos<f;){let p=l.uint32();switch(p>>>3){case 1:{h.type=r.MessageType.codec().decode(l);break}case 2:{h.dial=r.Dial.codec().decode(l,l.uint32(),{limits:d.limits?.dial});break}case 3:{h.dialResponse=r.DialResponse.codec().decode(l,l.uint32(),{limits:d.limits?.dialResponse});break}default:{l.skipType(p&7);break}}}return h})),c),r.encode=l=>re(l,r.codec()),r.decode=(l,u)=>te(l,r.codec(),u)})(Qe||(Qe={}));var kB=4,CB=8,h1=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??Iv}/${_v}/${kv}`,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=new Map,this.findPeers=Tv(this.findRandomPeers.bind(this),6e4),this.addressFilter=_r(1024)}[Symbol.toStringTag]="@libp2p/autonat";[Pe]=["@libp2p/autonat"];get[zr](){return["@libp2p/identify"]}isStarted(){return this.started}async start(){this.started||(await this.components.registrar.handle(this.protocol,e=>{this.handleIncomingAutonatStream(e).catch(t=>{this.log.error("error handling incoming autonat stream - %e",t)})},{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=de([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(i=>i.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){let t=AbortSignal.timeout(this.timeout);let n=rt(e.stream,{maxDataLength:this.maxMessageSize}).pb(Qe);try{let i=await n.read({signal:t}),o=await this.handleAutonatMessage(i,e.connection,{signal:t});await n.write(o,{signal:t}),await n.unwrap().unwrap().close({signal:t})}catch(i){this.log.error("error handling incoming autonat stream - %e",i),e.stream.abort(i)}}async handleAutonatMessage(e,t,n){let i=this.components.addressManager.getAddresses().map(d=>d.toOptions().host),o=e.dial;if(o==null)return this.log.error("dial was missing from message"),{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.E_BAD_REQUEST,statusText:"No Dial message found in message"}};let s,a=o.peer;if(a?.id==null)return this.log.error("PeerId missing from message"),{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.E_BAD_REQUEST,statusText:"missing peer info"}};try{let d=pe(a.id);s=Tt(d)}catch(d){return this.log.error("invalid PeerId - %e",d),{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.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:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.E_BAD_REQUEST,statusText:"peer id mismatch"}};let c=a.addrs.map(d=>K(d)).filter(d=>{let h=d.toOptions();return gn(d)?!1:h.host!==t.remoteAddr.toOptions().host?(this.log.trace("not dialing %a - target host did not match remote host %a",d,t.remoteAddr),!1):i.includes(h.host)?!1:this.components.transportManager.dialTransportForMultiaddr(d)==null?(this.log.trace("not dialing %a - transport unsupported",d),!1):!0}).map(d=>(d.getPeerId()==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:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.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 await(let d of c){let h;u=d;try{if(h=await this.components.connectionManager.openConnection(d,n),!h.remoteAddr.equals(d))throw this.log.error("tried to dial %a but dialed %a",d,h.remoteAddr),new Error("Unexpected remote address");return this.log("successfully dialed %p via %a",s,d),{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.OK,addr:h.remoteAddr.decapsulateCode(se("p2p").code).bytes}}}catch(f){this.log.error("could not dial %p - %e",s,f),l=f.message}finally{h!=null&&await h.close()}}return{type:Qe.MessageType.DIAL_RESPONSE,dialResponse:{status:Qe.ResponseStatus.E_DIAL_ERROR,statusText:l,addr:u.bytes}}}getFirstUnverifiedMultiaddr(e,t){let n=this.components.addressManager.getAddressesWithMetadata().sort((i,o)=>i.type==="observed"&&o.type!=="observed"?1:o.type==="observed"&&i.type!=="observed"?-1:0).filter(i=>!(!(i.expires<Date.now())||i.multiaddr.toOptions().family===6&&(!t||!d1(i.multiaddr))||gn(i.multiaddr)));for(let i of n){let o=i.multiaddr.toString(),s=this.dialResults.get(o);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=i.expires<Date.now();if(a&&this.addressFilter.remove?.(o),this.addressFilter.has(o))continue;this.addressFilter.add(o),this.log.trace("creating dial result %s %s",a?"to revalidate":"for",o),s={multiaddr:i.multiaddr,success:0,failure:0,networkSegments:[],verifyingPeers:D3(),queue:new Vt({concurrency:3,maxSize:50}),type:i.type,lastVerified:i.lastVerified},this.dialResults.set(o,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})=>s.toOptions().family===6),i=this.getNetworkSegment(e.remoteAddr),o=this.getFirstUnverifiedMultiaddr(i,n);if(o==null){this.log.trace("no unverified public addresses found for peer %p to verify, not requesting verification",e.remotePeer);return}if(!this.hasConnectionCapacity()){o.lastVerified!=null?(this.log("automatically re-verifying %a because we are too close to the connection limit",o.multiaddr),this.confirmAddress(o)):this.log("skipping verifying %a because we are too close to the connection limit",o.multiaddr);return}o.queue.add(async s=>{await this.askPeerToVerify(e,i,s)},{peerId:e.remotePeer,multiaddr:o.multiaddr}).catch(s=>{o?.result==null&&this.log.error("error from %p verifying address %a - %e",e.remotePeer,o?.multiaddr,s)})}async askPeerToVerify(e,t,n){let i=this.dialResults.get(n.multiaddr.toString());if(i==null){this.log("%a was verified while %p was queued",n.multiaddr,e.remotePeer);return}let o=AbortSignal.timeout(this.timeout);this.log.trace("asking %p to verify multiaddr %s",e.remotePeer,n.multiaddr);let s=await e.newStream(this.protocol,{signal:o});try{let a=rt(s).pb(Qe),[,c]=await Promise.all([a.write({type:Qe.MessageType.DIAL,dial:{peer:{id:this.components.peerId.toMultihash().bytes,addrs:[n.multiaddr.bytes]}}},{signal:o}),a.read({signal:o})]);if(c.type!==Qe.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!==Qe.ResponseStatus.OK&&l!==Qe.ResponseStatus.E_DIAL_ERROR)return;if(i=this.dialResults.get(n.multiaddr.toString()),i==null){this.log.trace("peer reported %a as %s but there is no result object",n.multiaddr,c.dialResponse.status);return}if(i.networkSegments.includes(t)){this.log.trace("%a results included network segment %s",n.multiaddr,t);return}if(i.result!=null){this.log.trace("already resolved result for %a, ignoring response from",n.multiaddr,e.remotePeer);return}if(i.verifyingPeers.has(e.remotePeer)){this.log.trace("peer %p has already verified %a, ignoring response",e.remotePeer,n.multiaddr);return}if(i.verifyingPeers.add(e.remotePeer),i.networkSegments.push(t),l===Qe.ResponseStatus.OK){if(i.success++,i.type!=="observed"){this.confirmAddress(i);return}}else l===Qe.ResponseStatus.E_DIAL_ERROR&&i.failure++;this.log("%a success %d failure %d",i.multiaddr,i.success,i.failure),i.success===kB&&this.confirmAddress(i),i.failure===CB&&this.unconfirmAddress(i)}finally{try{await s.close({signal:o})}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=e.toOptions();return t.family===4?t.host.split(".")[0].padStart(3,"0"):t.host.split(":")[0].padStart(4,"0")}};function Cv(r={}){return e=>new h1(e,r)}var PB=W("dns4"),RB=W("dns6"),DB=W("dnsaddr"),js=vt(W("dns"),DB,PB,RB),g1=vt(W("ip4"),W("ip6")),Ac=vt(ce(g1,W("tcp")),ce(js,W("tcp"))),y1=ce(g1,W("udp")),NB=ce(y1,W("utp")),LB=ce(y1,W("quic")),OB=ce(y1,W("quic-v1")),l8=vt(ce(Ac,W("ws")),ce(js,W("ws"))),p1=vt(ce(l8,W("p2p")),l8),u8=vt(ce(Ac,W("wss")),ce(js,W("wss")),ce(Ac,W("tls"),W("ws")),ce(js,W("tls"),W("ws"))),m1=vt(ce(u8,W("p2p")),u8),d8=vt(ce(Ac,W("http")),ce(g1,W("http")),ce(js,W("http"))),f8=vt(ce(Ac,W("https")),ce(g1,W("https")),ce(js,W("https"))),Pv=ce(y1,W("webrtc-direct"),W("certhash")),Nv=vt(ce(Pv,W("p2p")),Pv),Rv=ce(OB,W("webtransport"),W("certhash"),W("certhash")),Lv=vt(ce(Rv,W("p2p")),Rv),Ov=vt(ce(p1,W("p2p-webrtc-star"),W("p2p")),ce(m1,W("p2p-webrtc-star"),W("p2p")),ce(p1,W("p2p-webrtc-star")),ce(m1,W("p2p-webrtc-star"))),d1e=vt(ce(p1,W("p2p-websocket-star"),W("p2p")),ce(m1,W("p2p-websocket-star"),W("p2p")),ce(p1,W("p2p-websocket-star")),ce(m1,W("p2p-websocket-star"))),Bv=vt(ce(d8,W("p2p-webrtc-direct"),W("p2p")),ce(f8,W("p2p-webrtc-direct"),W("p2p")),ce(d8,W("p2p-webrtc-direct")),ce(f8,W("p2p-webrtc-direct"))),Qs=vt(l8,u8,d8,f8,Ov,Bv,Ac,NB,LB,js,Nv,Lv),f1e=vt(ce(Qs,W("p2p-stardust"),W("p2p")),ce(Qs,W("p2p-stardust"))),zo=vt(ce(Qs,W("p2p")),Ov,Bv,Nv,Lv,W("p2p")),Dv=vt(ce(zo,W("p2p-circuit"),zo),ce(zo,W("p2p-circuit")),ce(W("p2p-circuit"),zo),ce(Qs,W("p2p-circuit")),ce(W("p2p-circuit"),Qs),W("p2p-circuit")),Mv=()=>vt(ce(Dv,Mv),Dv),Xs=Mv(),Fv=vt(ce(Xs,zo,Xs),ce(zo,Xs),ce(Xs,zo),Xs,zo);var h1e=vt(ce(Xs,W("webrtc"),W("p2p")),ce(Xs,W("webrtc")),ce(Qs,W("webrtc"),W("p2p")),ce(Qs,W("webrtc")),W("webrtc"));function Uv(r){function e(t){let n;try{n=K(t)}catch{return!1}let i=r(n.protoNames());return i===null?!1:i===!0||i===!1?i:i.length===0}return e}function ce(...r){function e(t){if(t.length<r.length)return null;let n=t;return r.some(i=>(n=typeof i=="function"?i().partialMatch(t):i.partialMatch(t),Array.isArray(n)&&(t=n),n===null)),n}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:Uv(e),partialMatch:e}}function vt(...r){function e(n){let i=null;return r.some(o=>{let s=typeof o=="function"?o().partialMatch(n):o.partialMatch(n);return s!=null?(i=s,!0):!1}),i}return{toString:function(){return"{ "+r.join(" ")+" }"},input:r,matches:Uv(e),partialMatch:e}}function W(r){let e=r;function t(i){let o;try{o=K(i)}catch{return!1}let s=o.protoNames();return s.length===1&&s[0]===e}function n(i){return i.length===0?null:i[0]===e?i.slice(1):null}return{toString:function(){return e},matches:t,partialMatch:n}}var BB="bootstrap",MB=50,FB=1e3,h8=class extends be{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??FB,this.list=[];for(let n of t.list){if(!Fv.matches(n)){this.log.error("Invalid multiaddr");continue}let i=K(n),o=i.getPeerId();if(o==null){this.log.error("Invalid bootstrap multiaddr without peer id");continue}let s={id:Ne(o),multiaddrs:[i]};this.list.push(s)}this._init=t}[os]=this;[Symbol.toStringTag]="@libp2p/bootstrap";[Pe]=["@libp2p/peer-discovery"];isStarted(){return!!this.timer}start(){this.isStarted()||(this.log("Starting bootstrap node discovery, discovering peers after %s ms",this.timeout),this.timer=setTimeout(()=>{this._discoverBootstrapPeers().catch(e=>{this.log.error(e)})},this.timeout))}async _discoverBootstrapPeers(){if(this.timer!=null)for(let e of this.list){if(await this.components.peerStore.merge(e.id,{tags:{[this._init.tagName??BB]:{value:this._init.tagValue??MB,ttl:this._init.tagTTL}},multiaddrs:e.multiaddrs}),this.timer==null)return;this.safeDispatchEvent("peer",{detail:e}),this.components.connectionManager.openConnection(e.id).catch(t=>{this.log.error("could not dial bootstrap peer %p",e.id,t)})}}stop(){this.timer!=null&&clearTimeout(this.timer),this.timer=void 0}};function Hv(r){return e=>new h8(e,r)}var Tu;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={publicKey:le(0),payloadType:le(0),payload:le(0),signature:le(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.publicKey=t.bytes();break}case 2:{o.payloadType=t.bytes();break}case 3:{o.payload=t.bytes();break}case 5:{o.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Tu||(Tu={}));var w1=class extends Error{constructor(e="Invalid signature"){super(e),this.name="InvalidSignatureError"}};var Xr=class r{static createFromProtobuf=async e=>{let t=Tu.decode(e),n=wt(t.publicKey);return new r({publicKey:n,payloadType:t.payloadType,payload:t.payload,signature:t.signature})};static seal=async(e,t)=>{if(t==null)throw new Error("Missing private key");let n=e.domain,i=e.codec,o=e.marshal(),s=zv(n,i,o),a=await t.sign(s.subarray());return new r({publicKey:t.publicKey,payloadType:i,payload:o,signature:a})};static openAndCertify=async(e,t)=>{let n=await r.createFromProtobuf(e);if(!await n.validate(t))throw new w1("Envelope signature is not valid for the given domain");return n};publicKey;payloadType;payload;signature;marshaled;constructor(e){let{publicKey:t,payloadType:n,payload:i,signature:o}=e;this.publicKey=t,this.payloadType=n,this.payload=i,this.signature=o}marshal(){return this.marshaled==null&&(this.marshaled=Tu.encode({publicKey:Ot(this.publicKey),payloadType:this.payloadType,payload:this.payload.subarray(),signature:this.signature})),this.marshaled}equals(e){return J(this.marshal(),e.marshal())}async validate(e){let t=zv(e,this.payloadType,this.payload);return this.publicKey.verify(t.subarray(),this.signature)}},zv=(r,e,t)=>{let n=C(r),i=Ze(n.byteLength),o=Ze(e.length),s=Ze(t.length);return new ee(i,n,o,e,s,t)};function $v(r,e){let t=(n,i)=>n.toString().localeCompare(i.toString());return r.length!==e.length?!1:(e.sort(t),r.sort(t).every((n,i)=>e[i].equals(n)))}var Vv="libp2p-peer-record",qv=Uint8Array.from([3,1]);var Iu;(function(r){let e;(function(n){let i;n.codec=()=>(i==null&&(i=ne((o,s,a={})=>{a.lengthDelimited!==!1&&s.fork(),o.multiaddr!=null&&o.multiaddr.byteLength>0&&(s.uint32(10),s.bytes(o.multiaddr)),a.lengthDelimited!==!1&&s.ldelim()},(o,s,a={})=>{let c={multiaddr:le(0)},l=s==null?o.len:o.pos+s;for(;o.pos<l;){let u=o.uint32();switch(u>>>3){case 1:{c.multiaddr=o.bytes();break}default:{o.skipType(u&7);break}}}return c})),i),n.encode=o=>re(o,n.codec()),n.decode=(o,s)=>te(o,n.codec(),s)})(e=r.AddressInfo||(r.AddressInfo={}));let t;r.codec=()=>(t==null&&(t=ne((n,i,o={})=>{if(o.lengthDelimited!==!1&&i.fork(),n.peerId!=null&&n.peerId.byteLength>0&&(i.uint32(10),i.bytes(n.peerId)),n.seq!=null&&n.seq!==0n&&(i.uint32(16),i.uint64(n.seq)),n.addresses!=null)for(let s of n.addresses)i.uint32(26),r.AddressInfo.codec().encode(s,i);o.lengthDelimited!==!1&&i.ldelim()},(n,i,o={})=>{let s={peerId:le(0),seq:0n,addresses:[]},a=i==null?n.len:n.pos+i;for(;n.pos<a;){let c=n.uint32();switch(c>>>3){case 1:{s.peerId=n.bytes();break}case 2:{s.seq=n.uint64();break}case 3:{if(o.limits?.addresses!=null&&s.addresses.length===o.limits.addresses)throw new Ve('Decode error - map field "addresses" had too many elements');s.addresses.push(r.AddressInfo.codec().decode(n,n.uint32(),{limits:o.limits?.addresses$}));break}default:{n.skipType(c&7);break}}}return s})),t),r.encode=n=>re(n,r.codec()),r.decode=(n,i)=>te(n,r.codec(),i)})(Iu||(Iu={}));var vr=class r{static createFromProtobuf=e=>{let t=Iu.decode(e),n=Tt(pe(t.peerId)),i=(t.addresses??[]).map(s=>K(s.multiaddr)),o=t.seq;return new r({peerId:n,multiaddrs:i,seqNumber:o})};static DOMAIN=Vv;static CODEC=qv;peerId;multiaddrs;seqNumber;domain=r.DOMAIN;codec=r.CODEC;marshaled;constructor(e){let{peerId:t,multiaddrs:n,seqNumber:i}=e;this.peerId=t,this.multiaddrs=n??[],this.seqNumber=i??BigInt(Date.now())}marshal(){return this.marshaled==null&&(this.marshaled=Iu.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||!$v(this.multiaddrs,e.multiaddrs))}};var p8=1e3,Kv=60*p8,Gv=290;var G1e=2*60*Kv,Wv=1,x1=2e3,Yv=100;var _u=`${ro}-circuit-relay`,W1e=`${ro}-circuit-relay-source`,Y1e=2*Kv,X1e=BigInt(1<<17),Zs="/libp2p/circuit/relay/0.2.0/hop",m8="/libp2p/circuit/relay/0.2.0/stop",j1e=30*p8,Q1e=30*p8,g8=300,Xv=4096,jv=.001;var $o;(function(r){let e;(function(i){i.RESERVE="RESERVE",i.CONNECT="CONNECT",i.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(i){i[i.RESERVE=0]="RESERVE",i[i.CONNECT=1]="CONNECT",i[i.STATUS=2]="STATUS"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{s.lengthDelimited!==!1&&o.fork(),i.type!=null&&(o.uint32(8),r.Type.codec().encode(i.type,o)),i.peer!=null&&(o.uint32(18),Tc.codec().encode(i.peer,o)),i.reservation!=null&&(o.uint32(26),b1.codec().encode(i.reservation,o)),i.limit!=null&&(o.uint32(34),Ic.codec().encode(i.limit,o)),i.status!=null&&(o.uint32(40),Qt.codec().encode(i.status,o)),s.lengthDelimited!==!1&&o.ldelim()},(i,o,s={})=>{let a={},c=o==null?i.len:i.pos+o;for(;i.pos<c;){let l=i.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(i);break}case 2:{a.peer=Tc.codec().decode(i,i.uint32(),{limits:s.limits?.peer});break}case 3:{a.reservation=b1.codec().decode(i,i.uint32(),{limits:s.limits?.reservation});break}case 4:{a.limit=Ic.codec().decode(i,i.uint32(),{limits:s.limits?.limit});break}case 5:{a.status=Qt.codec().decode(i);break}default:{i.skipType(l&7);break}}}return a})),n),r.encode=i=>re(i,r.codec()),r.decode=(i,o)=>te(i,r.codec(),o)})($o||($o={}));var li;(function(r){let e;(function(i){i.CONNECT="CONNECT",i.STATUS="STATUS"})(e=r.Type||(r.Type={}));let t;(function(i){i[i.CONNECT=0]="CONNECT",i[i.STATUS=1]="STATUS"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{s.lengthDelimited!==!1&&o.fork(),i.type!=null&&(o.uint32(8),r.Type.codec().encode(i.type,o)),i.peer!=null&&(o.uint32(18),Tc.codec().encode(i.peer,o)),i.limit!=null&&(o.uint32(26),Ic.codec().encode(i.limit,o)),i.status!=null&&(o.uint32(32),Qt.codec().encode(i.status,o)),s.lengthDelimited!==!1&&o.ldelim()},(i,o,s={})=>{let a={},c=o==null?i.len:i.pos+o;for(;i.pos<c;){let l=i.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(i);break}case 2:{a.peer=Tc.codec().decode(i,i.uint32(),{limits:s.limits?.peer});break}case 3:{a.limit=Ic.codec().decode(i,i.uint32(),{limits:s.limits?.limit});break}case 4:{a.status=Qt.codec().decode(i);break}default:{i.skipType(l&7);break}}}return a})),n),r.encode=i=>re(i,r.codec()),r.decode=(i,o)=>te(i,r.codec(),o)})(li||(li={}));var Tc;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.id!=null&&t.id.byteLength>0&&(n.uint32(10),n.bytes(t.id)),t.addrs!=null)for(let o of t.addrs)n.uint32(18),n.bytes(o);i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={id:le(0),addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.id=t.bytes();break}case 2:{if(i.limits?.addrs!=null&&o.addrs.length===i.limits.addrs)throw new Ve('Decode error - map field "addrs" had too many elements');o.addrs.push(t.bytes());break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Tc||(Tc={}));var b1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.lengthDelimited!==!1&&n.fork(),t.expire!=null&&t.expire!==0n&&(n.uint32(8),n.uint64(t.expire)),t.addrs!=null)for(let o of t.addrs)n.uint32(18),n.bytes(o);t.voucher!=null&&(n.uint32(26),E1.codec().encode(t.voucher,n)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={expire:0n,addrs:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.expire=t.uint64();break}case 2:{if(i.limits?.addrs!=null&&o.addrs.length===i.limits.addrs)throw new Ve('Decode error - map field "addrs" had too many elements');o.addrs.push(t.bytes());break}case 3:{o.voucher=E1.codec().decode(t,t.uint32(),{limits:i.limits?.voucher});break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(b1||(b1={}));var Ic;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.duration!=null&&(n.uint32(8),n.uint32(t.duration)),t.data!=null&&(n.uint32(16),n.uint64(t.data)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.duration=t.uint32();break}case 2:{o.data=t.uint64();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Ic||(Ic={}));var Qt;(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"})(Qt||(Qt={}));var y8;(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"})(y8||(y8={}));(function(r){r.codec=()=>Ye(y8)})(Qt||(Qt={}));var v1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={relay:le(0),peer:le(0),expiration:0n},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.relay=t.bytes();break}case 2:{o.peer=t.bytes();break}case 3:{o.expiration=t.uint64();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(v1||(v1={}));var E1;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.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),v1.codec().encode(t.payload,n)),t.signature!=null&&t.signature.byteLength>0&&(n.uint32(42),n.bytes(t.signature)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={publicKey:le(0),payloadType:le(0),signature:le(0)},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 1:{o.publicKey=t.bytes();break}case 2:{o.payloadType=t.bytes();break}case 3:{o.payload=v1.codec().decode(t,t.uint32(),{limits:i.limits?.payload});break}case 5:{o.signature=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(E1||(E1={}));var ku=class extends Error{static name="HadEnoughRelaysError";name="HadEnoughRelaysError"},S1=class extends Error{static name="DoubleRelayError";name="DoubleRelayError"},A1=class extends Error{static name="RelayQueueFullError";name="RelayQueueFullError"};function w8(r){let e=r*BigInt(1e3),t=new Date().getTime();return Number(e-BigInt(t))}var Cu=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}},T1=Ke(Ee(Ih.matchers[0],me("p2p-circuit"))),I1=Ke(me("p2p-circuit"));function x8(r){let{stream:e,remoteAddr:t,logger:n,onDataRead:i,onDataWrite:o}=r,s=n.forComponent("libp2p:stream:converter"),a=!1,c=!1,l=e.close.bind(e);e.close=async p=>{await l(p),f(!0)};let u=e.abort.bind(e);e.abort=p=>{u(p),f(!0)};let d=e.sink.bind(e);e.sink=async p=>{try{await d(Re(p,m=>Os(m,g=>o?.(g))))}catch(m){m.type!=="aborted"&&s.error("%s error in sink",t,m)}finally{c=!0,f()}};let h={log:s,sink:e.sink,source:async function*(){try{for await(let p of e.source)i?.(p),yield p}finally{a=!0,f()}}(),remoteAddr:t,timeline:{open:Date.now(),close:void 0},close:e.close,abort:e.abort};function f(p){p===!0&&(a=!0,c=!0),a&&c&&h.timeline.close==null&&(h.timeline.close=Date.now())}return h}var _1=class extends be{peerStore;registrar;connectionManager;randomWalk;started;running;topologyId;log;discoveryController;filter;queue;constructor(e,t={}){super(),this.log=e.logger.forComponent("libp2p:circuit-relay:discover-relays"),this.started=!1,this.running=!1,this.peerStore=e.peerStore,this.registrar=e.registrar,this.connectionManager=e.connectionManager,this.randomWalk=e.randomWalk,this.filter=t.filter,this.discoveryController=new AbortController,this.discoveryController.signal}isStarted(){return this.started}async start(){this.topologyId=await this.registrar.register(Zs,{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.registrar.unregister(this.topologyId),this.discoveryController?.abort(),this.started=!1}startDiscovery(){this.running||(this.log("start discovery"),this.running=!0,this.discoveryController=new AbortController,this.discoveryController.signal,Promise.resolve().then(async()=>{this.log("searching peer store for relays");let e=await this.peerStore.all({filters:[n=>n.protocols.includes(Zs)],orders:[()=>Math.random()<.5?1:-1,(n,i)=>{let o=Qv(n),s=Qv(i);return o>s?-1:s>o?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 Vt({concurrency:5});this.log("start random walk");for await(let n of this.randomWalk.walk({signal:this.discoveryController.signal})){if(this.log.trace("found random peer %p",n.id),t.has(n.id)){this.log.trace("random peer %p was already in queue",n.id);continue}if(this.connectionManager.getConnections(n.id)?.length>0){this.log.trace("random peer %p was already connected",n.id);continue}if(!await this.connectionManager.isDialable(n.multiaddrs)){this.log.trace("random peer %p was not dialable",n.id,n.multiaddrs.map(i=>i.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(async()=>{let i=de([this.discoveryController.signal,AbortSignal.timeout(5e3)]);try{await this.connectionManager.openConnection(n.id,{signal:i})}finally{i.clear()}},{peerId:n.id,signal:this.discoveryController.signal}).catch(i=>{this.log.error("error opening connection to random peer %p",n.id,i)})}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)}))}stopDiscovery(){this.log("stop discovery"),this.running=!1,this.discoveryController?.abort()}};function Qv(r){let e=r.metadata.get("last-dial-success");return e==null?0:new Date(U(e)).getTime()}var b8=class extends be{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??x1,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(I1.exactMatch(e))this.log("searching for circuit relay servers"),this.reservationId=this.reservationStore.reserveRelay();else if(T1.exactMatch(e)){this.log("listen on specific relay server %a",e);let t=AbortSignal.timeout(this.listenTimeout);let n=e.decapsulate("/p2p-circuit"),i=await this.connectionManager.openConnection(n,{signal:t});if(!this.reservationStore.hasReservation(i.remotePeer)){this.log("making reservation on peer %p",i.remotePeer);let o=await this.reservationStore.addRelay(i.remotePeer,"configured");this.addedRelay(o)}}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=>K(t).encapsulate("/p2p-circuit")),this.listeningAddrs.forEach(t=>{this.addressManager.confirmObservedAddr(t,{type:"transport"})}),queueMicrotask(()=>{this.safeDispatchEvent("listening")})}};function Zv(r){return new b8(r)}var Jv="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var eE=(r=21)=>{let e="",t=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=Jv[t[r]&63];return e};var UB=60*1e3*10,HB=60*1e3*5,zB=30*1e3,k1=class extends be{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 Mt,this.pendingReservations=[],this.maxReservationQueueLength=t?.maxReservationQueueLength??Yv,this.reservationCompletionTimeout=t?.reservationCompletionTimeout??x1,this.started=!1,this.relayFilter=_r(100),this.reserveQueue=new Vt({concurrency:t?.reservationConcurrency??Wv,metricName:"libp2p_relay_reservation_queue",metrics:e.metrics}),this.events.addEventListener("connection:close",n=>{[...this.reservations.values()].find(o=>o.connection===n.detail.id)!=null&&this.#r(n.detail.remotePeer).catch(o=>{this.log("could not remove relay %p - %e",n.detail,o)})})}isStarted(){return this.started}start(){this.started=!0}afterStart(){Promise.resolve().then(async()=>{let e=await this.peerStore.all({filters:[t=>t.tags.has(_u)]});this.log("removing tag from %d old relays",e.length),await Promise.all(e.map(async t=>{await this.peerStore.merge(t.id,{tags:{[_u]:void 0}})})),this.log("redialing %d old relays",e.length),await Promise.all(e.map(async t=>this.addRelay(t.id,"discovered"))),this.#n()}).catch(e=>{this.log.error(e)})}stop(){this.reserveQueue.clear(),this.reservations.forEach(({timeout:e})=>{clearTimeout(e)}),this.reservations.clear(),this.started=!1}reserveRelay(){let e=eE();return this.pendingReservations.push(e),this.#n(),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 A1("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 i=Date.now();try{let o=this.reservations.get(e);if(o!=null){let p=this.connectionManager.getConnections(e),m=!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(o.connection)&&(this.log("already have relay reservation with %p and the original connection is still open",e),m=!0),m&&w8(o.reservation.expire)>UB)return this.log("already have relay reservation with %p but we are still connected and it does not expire soon",e),{relay:e,details:o};await this.#r(e)}if(t==="discovered"&&this.pendingReservations.length===0)throw new ku("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(Rr.matches(a.remoteAddr))throw new S1("not creating reservation over relayed connection");let c=await this.#e(a,{signal:s}),l=w8(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-HB,zB),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.#r(e)}).catch(p=>{this.log.error("could not remove expired reservation to relay %p - %e",e,p)})},u),h;if(t==="discovered"){let p=this.pendingReservations.pop();if(p==null)throw new ku("Made reservation on relay but did not need any more discovered relays");h={timeout:d,reservation:c,type:t,connection:a.id,id:p}}else h={timeout:d,reservation:c,type:t,connection:a.id};this.reservations.set(e,h),await this.peerStore.merge(e,{tags:{[_u]:{value:1,ttl:l}}}),this.#n();let f={relay:e,details:h};return this.safeDispatchEvent("relay:created-reservation",{detail:f}),f}catch(o){throw t==="discovered"&&o.name==="HadEnoughRelaysError"||this.log.error("could not reserve slot on %p after %dms - %e",e,Date.now()-i,o),(o.name==="DialError"||o.name==="UnsupportedProtocolError")&&this.relayFilter.add(e.toMultihash().bytes),this.#r(e).catch(s=>{this.log.error("could not remove reservation on %p after reserving slot failed - %e",e,s)}),o}},{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(Zs,t),o=rt(n).pb($o);this.log.trace("send RESERVE to %p",e.remotePeer),await o.write({type:$o.Type.RESERVE},t);let s;try{this.log.trace("reading response from %p",e.remotePeer),s=await o.read(t)}catch(c){throw n.abort(c),c}finally{n.status!=="closed"&&await n.close(t)}if(this.log.trace("read response %o",s),s.status===Qt.OK&&s.reservation!=null){let c=new Set;c.add(e.remoteAddr.toString());for(let l of s.reservation.addrs){let u=K(l);u.getPeerId()==null&&(u=u.encapsulate(`/p2p/${e.remotePeer}`)),u=K(u.toString().replace(`/p2p/${e.remotePeer}/p2p/${e.remotePeer}`,`/p2p/${e.remotePeer}`)),c.add(u.toString())}return s.reservation.addrs=[...c].map(l=>K(l).bytes),s.reservation}let a=`reservation failed with status ${s.status??"undefined"}`;throw this.log.error(a),new Error(a)}async#r(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:{[_u]:void 0}}),this.safeDispatchEvent("relay:removed",{detail:{relay:e,details:t}}),this.#n())}#n(){if(this.pendingReservations.length===0){this.log.trace("have discovered enough relays"),this.reserveQueue.clear(),this.safeDispatchEvent("relay:found-enough-relays");return}this.relayFilter=_r(100),this.log("not discovered enough relays %d/%d",this.reservations.size,this.pendingReservations.length),this.safeDispatchEvent("relay:not-enough-relays")}};var $B=r=>{if(r.peer==null)return!1;try{r.peer.addrs.forEach(K)}catch{return!1}return!0},tE={maxInboundStopStreams:g8,maxOutboundStopStreams:g8,stopTimeout:3e4},C1=class{discovery;registrar;peerStore;connectionManager;transportManager;peerId;upgrader;addressManager;connectionGater;reservationStore;logger;maxInboundStopStreams;maxOutboundStopStreams;started;log;shutdownController;constructor(e,t={}){this.log=e.logger.forComponent("libp2p:circuit-relay:transport"),this.registrar=e.registrar,this.peerStore=e.peerStore,this.connectionManager=e.connectionManager,this.transportManager=e.transportManager,this.logger=e.logger,this.peerId=e.peerId,this.upgrader=e.upgrader,this.addressManager=e.addressManager,this.connectionGater=e.connectionGater,this.maxInboundStopStreams=t.maxInboundStopStreams??tE.maxInboundStopStreams,this.maxOutboundStopStreams=t.maxOutboundStopStreams??tE.maxOutboundStopStreams,this.shutdownController=new AbortController,this.discovery=new _1(e,{filter:t.discoveryFilter??M3(Xv,jv)}),this.discovery.addEventListener("relay:discover",n=>{this.reservationStore.addRelay(n.detail,"discovered").catch(i=>{i.name!=="HadEnoughRelaysError"&&i.name!=="RelayQueueFullError"&&this.log.error("could not add discovered relay %p",n.detail,i)})}),this.reservationStore=new k1(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}[Symbol.toStringTag]="@libp2p/circuit-relay-v2-transport";[Pe]=["@libp2p/transport","@libp2p/circuit-relay-v2-transport"];get[zr](){return this.discovery!=null?["@libp2p/identify"]:[]}[no]=!0;isStarted(){return this.started}async start(){this.shutdownController=new AbortController,await this.registrar.handle(m8,e=>{let t=this.upgrader.createInboundAbortSignal(this.shutdownController.signal);this.onStop(e,t).catch(n=>{this.log.error("error while handling STOP protocol",n),e.stream.abort(n)}).finally(()=>{t.clear()})},{maxInboundStreams:this.maxInboundStopStreams,maxOutboundStreams:this.maxOutboundStopStreams,runOnLimitedConnection:!0}),await $t(this.discovery,this.reservationStore),this.started=!0}async stop(){this.shutdownController.abort(),await tr(this.discovery,this.reservationStore),await this.registrar.unhandle(m8),this.started=!1}async dial(e,t){if(e.protoCodes().filter(f=>f===Gv).length!==1){let f="Invalid circuit relay address";throw this.log.error(f,e),new bi(f)}let n=e.toString().split("/p2p-circuit"),i=K(n[0]),o=K(n[n.length-1]),s=i.getPeerId(),a=o.getPeerId();if(s==null||a==null){let f=`ircuit relay dial to ${e.toString()} failed as address did not have both relay and destination PeerIDs`;throw this.log.error(`c${f}`),new bi(`C${f}`)}let c=Ne(s),l=Ne(a),d=this.connectionManager.getConnections(c)[0];d==null?(await this.peerStore.merge(c,{multiaddrs:[i]}),t.onProgress?.(new M("circuit-relay:open-connection")),d=await this.connectionManager.openConnection(c,t)):t.onProgress?.(new M("circuit-relay:reuse-connection"));let h;try{t.onProgress?.(new M("circuit-relay:open-hop-stream")),h=await d.newStream(Zs,t);let f=rt(h),p=f.pb($o);t.onProgress?.(new M("circuit-relay:write-connect-message")),await p.write({type:$o.Type.CONNECT,peer:{id:l.toMultihash().bytes,addrs:[K(o).bytes]}},t),t.onProgress?.(new M("circuit-relay:read-connect-response"));let m=await p.read(t);if(m.status!==Qt.OK)throw new he(`failed to connect via relay with status ${m?.status?.toString()??"undefined"}`);let g=new Cu(m.limit),y=x8({stream:f.unwrap(),remoteAddr:e,localAddr:i.encapsulate(`/p2p-circuit/p2p/${this.peerId.toString()}`),logger:this.logger,onDataRead:g.onData,onDataWrite:g.onData});return this.log("new outbound relayed connection %a",y.remoteAddr),await this.upgrader.upgradeOutbound(y,{...t,limits:g.getLimits()})}catch(f){throw this.log.error("circuit relay dial to destination %p via relay %p failed",l,c,f),h?.abort(f),f}}createListener(e){return Zv({peerId:this.peerId,connectionManager:this.connectionManager,addressManager:this.addressManager,reservationStore:this.reservationStore,logger:this.logger})}listenFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>T1.exactMatch(t)||I1.exactMatch(t))}dialFilter(e){return e=Array.isArray(e)?e:[e],e.filter(t=>Rr.exactMatch(t))}async onStop({connection:e,stream:t},n){if(!this.reservationStore.hasReservation(e.remotePeer))try{this.log("dialed via relay we did not have a reservation on, start listening on that relay address"),await this.transportManager.listen([e.remoteAddr.encapsulate("/p2p-circuit")])}catch(d){this.log.error("failed to listen on a relay peer we were dialed via but did not have a reservation on",d)}let i=rt(t).pb(li),o=await i.read({signal:n});if(this.log("new circuit relay v2 stop stream from %p with type %s",e.remotePeer,o.type),o?.type===void 0){this.log.error("type was missing from circuit v2 stop protocol request from %s",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.MALFORMED_MESSAGE},{signal:n}),await t.close();return}if(o.type!==li.Type.CONNECT){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.UNEXPECTED_MESSAGE},{signal:n}),await t.close();return}if(!$B(o)){this.log.error("invalid stop connect request via peer %p",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.MALFORMED_MESSAGE},{signal:n}),await t.close({signal:n});return}let s=Tt(pe(o.peer.id));if(await this.connectionGater.denyInboundRelayedConnection?.(e.remotePeer,s)===!0){this.log.error("connection gater denied inbound relayed connection from %p",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.PERMISSION_DENIED},{signal:n}),await t.close({signal:n});return}this.log.trace("sending success response to %p",e.remotePeer),await i.write({type:li.Type.STATUS,status:Qt.OK},{signal:n});let a=new Cu(o.limit),c=e.remoteAddr.encapsulate(`/p2p-circuit/p2p/${s.toString()}`),l=this.addressManager.getAddresses()[0],u=x8({stream:i.unwrap().unwrap(),remoteAddr:c,localAddr:l,logger:this.logger,onDataRead:a.onData,onDataWrite:a.onData});this.log("new inbound relayed connection %a",u.remoteAddr),await this.upgrader.upgradeInbound(u,{limits:a.getLimits(),signal:n}),this.log("%s connection %a upgraded","inbound",u.remoteAddr)}};function v8(r={}){return e=>new C1(e,r)}var rE=()=>{let r=new Error("Delay aborted");return r.name="AbortError",r},VB=new WeakMap;function qB({clearTimeout:r,setTimeout:e}={}){return(t,{value:n,signal:i}={})=>{if(i?.aborted)return Promise.reject(rE());let o,s,a,c=r??clearTimeout,l=()=>{c(o),a(rE())},u=()=>{i&&i.removeEventListener("abort",l)},d=new Promise((h,f)=>{s=()=>{u(),h(n)},a=f,o=(e??setTimeout)(s,t)});return i&&i.addEventListener("abort",l,{once:!0}),VB.set(d,()=>{c(o),o=null,s()}),d}}var KB=qB(),P1=KB;var Vn;(function(r){let e;(function(i){i.UNUSED="UNUSED",i.CONNECT="CONNECT",i.SYNC="SYNC"})(e=r.Type||(r.Type={}));let t;(function(i){i[i.UNUSED=0]="UNUSED",i[i.CONNECT=100]="CONNECT",i[i.SYNC=300]="SYNC"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.Type||(r.Type={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{if(s.lengthDelimited!==!1&&o.fork(),i.type!=null&&(o.uint32(8),r.Type.codec().encode(i.type,o)),i.observedAddresses!=null)for(let a of i.observedAddresses)o.uint32(18),o.bytes(a);s.lengthDelimited!==!1&&o.ldelim()},(i,o,s={})=>{let a={observedAddresses:[]},c=o==null?i.len:i.pos+o;for(;i.pos<c;){let l=i.uint32();switch(l>>>3){case 1:{a.type=r.Type.codec().decode(i);break}case 2:{if(s.limits?.observedAddresses!=null&&a.observedAddresses.length===s.limits.observedAddresses)throw new Ve('Decode error - map field "observedAddresses" had too many elements');a.observedAddresses.push(i.bytes());break}default:{i.skipType(l&7);break}}}return a})),n),r.encode=i=>re(i,r.codec()),r.decode=(i,o)=>te(i,r.codec(),o)})(Vn||(Vn={}));function E8(r,e){return Rr.matches(r)||e.dialTransportForMultiaddr(r)==null?!1:nu.matches(r)?!0:ox.matches(r)?br(r.toOptions().host)===!1:!1}var nE=1024*4,iE=100,R1={timeout:5e3,retries:3,maxInboundStreams:1,maxOutboundStreams:1},D1=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??R1.timeout,this.retries=t.retries??R1.retries,this.maxInboundStreams=t.maxInboundStreams??R1.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??R1.maxOutboundStreams}[Symbol.toStringTag]="@libp2p/dcutr";[zr]=["@libp2p/identify"];isStarted(){return this.started}async start(){this.started||(this.topologyId=await this.registrar.register(Pu,{notifyOnLimitedConnection:!0,onConnect:(e,t)=>{Rr.exactMatch(t.remoteAddr)&&t.direction==="inbound"&&this.upgradeInbound(t).catch(n=>{this.log.error("error during outgoing DCUtR attempt",n)})}}),await this.registrar.handle(Pu,e=>{this.handleIncomingUpgrade(e.stream,e.connection).catch(t=>{this.log.error("error during incoming DCUtR attempt",t),e.stream.abort(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:!0}),this.started=!0)}async stop(){await this.registrar.unhandle(Pu),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 i={signal:AbortSignal.timeout(this.timeout)};try{t=await e.newStream([Pu],{signal:i.signal,runOnLimitedConnection:!0});let o=rt(t,{maxDataLength:nE}).pb(Vn);this.log("B sending connect to %p",e.remotePeer);let s=Date.now();await o.write({type:Vn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(d=>d.bytes)},i),this.log("B receiving connect from %p",e.remotePeer);let a=await o.read(i);if(a.type!==Vn.Type.CONNECT)throw this.log("A sent wrong message type"),new he("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 he("DCUtR connect message had no multiaddrs");let l=Date.now()-s;this.log("A sending sync, rtt %dms",l),await o.write({type:Vn.Type.SYNC,observedAddresses:[]},i),this.log("A waiting for half RTT"),await P1(l/2),this.log("B dialing",c);let u=await this.connectionManager.openConnection(c,{signal:i.signal,priority:iE,force:!0,initiator:!1});this.log("DCUtR to %p succeeded to address %a, closing relayed connection",e.remotePeer,u.remoteAddr),await e.close(i);break}catch(o){if(this.log.error("error while attempting DCUtR on attempt %d of %d",n+1,this.retries,o),t?.abort(o),n===this.retries)throw o}finally{t!=null&&await t.close(i)}}}async attemptUnilateralConnectionUpgrade(e){let n=(await this.peerStore.get(e.remotePeer)).addresses.map(i=>{let o=i.multiaddr;return o.getPeerId()==null?o.encapsulate(`/p2p/${e.remotePeer}`):o}).filter(i=>E8(i,this.transportManager));if(n.length>0){let i=AbortSignal.timeout(this.timeout);try{this.log("attempting unilateral connection upgrade to %a",n);let o=await this.connectionManager.openConnection(n,{signal:i,force:!0});if(Rr.exactMatch(o.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,o.remoteAddr),await e.close({signal:i}),!0}catch(o){this.log.error("unilateral connection upgrade to %p on addresses %a failed",e.remotePeer,n,o)}}else this.log("peer %p has no public addresses, not attempting unilateral connection upgrade",e.remotePeer);return!1}async handleIncomingUpgrade(e,t){let n={signal:AbortSignal.timeout(this.timeout)};try{let i=rt(e,{maxDataLength:nE}).pb(Vn);this.log("A receiving connect");let o=await i.read(n);if(o.type!==Vn.Type.CONNECT)throw this.log("B sent wrong message type"),new he("DCUtR message type was incorrect");if(o.observedAddresses.length===0)throw this.log("B sent no multiaddrs"),new he("DCUtR connect message had no multiaddrs");let s=this.getDialableMultiaddrs(o.observedAddresses);if(s.length===0)throw this.log("B had no dialable multiaddrs"),new he("DCUtR connect message had no dialable multiaddrs");if(this.log("A sending connect"),await i.write({type:Vn.Type.CONNECT,observedAddresses:this.addressManager.getAddresses().map(l=>l.bytes)}),this.log("A receiving sync"),(await i.read(n)).type!==Vn.Type.SYNC)throw new he("DCUtR message type was incorrect");this.log("A dialing",s);let c=await this.connectionManager.openConnection(s,{signal:n.signal,priority:iE,force:!0});this.log("DCUtR to %p succeeded via %a, closing relayed connection",t.remotePeer,c.remoteAddr),await t.close(n)}catch(i){this.log.error("incoming DCUtR from %p failed",t.remotePeer,i),e.abort(i)}finally{await e.close(n)}}getDialableMultiaddrs(e){let t=[];for(let n of e)if(!(n==null||n.length===0))try{let i=K(n);if(!E8(i,this.transportManager))continue;t.push(i)}catch{}return t}};var Pu="/libp2p/dcutr";function oE(r={}){return e=>new D1(e,r)}var sE="0.1.0",aE="id",cE="id/push",lE="1.0.0",uE="1.0.0";var Vo;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{if(i.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 o of t.listenAddrs)n.uint32(18),n.bytes(o);if(t.observedAddr!=null&&(n.uint32(34),n.bytes(t.observedAddr)),t.protocols!=null)for(let o of t.protocols)n.uint32(26),n.string(o);t.signedPeerRecord!=null&&(n.uint32(66),n.bytes(t.signedPeerRecord)),i.lengthDelimited!==!1&&n.ldelim()},(t,n,i={})=>{let o={listenAddrs:[],protocols:[]},s=n==null?t.len:t.pos+n;for(;t.pos<s;){let a=t.uint32();switch(a>>>3){case 5:{o.protocolVersion=t.string();break}case 6:{o.agentVersion=t.string();break}case 1:{o.publicKey=t.bytes();break}case 2:{if(i.limits?.listenAddrs!=null&&o.listenAddrs.length===i.limits.listenAddrs)throw new Ve('Decode error - map field "listenAddrs" had too many elements');o.listenAddrs.push(t.bytes());break}case 4:{o.observedAddr=t.bytes();break}case 3:{if(i.limits?.protocols!=null&&o.protocols.length===i.limits.protocols)throw new Ve('Decode error - map field "protocols" had too many elements');o.protocols.push(t.string());break}case 8:{o.signedPeerRecord=t.bytes();break}default:{t.skipType(a&7);break}}}return o})),e),r.encode=t=>re(t,r.codec()),r.decode=(t,n)=>te(t,r.codec(),n)})(Vo||(Vo={}));var Lr={protocolPrefix:"ipfs",timeout:5e3,maxInboundStreams:1,maxOutboundStreams:1,maxObservedAddresses:10,maxMessageSize:8192,runOnConnectionOpen:!0,runOnSelfUpdate:!0,runOnLimitedConnection:!0,concurrency:32};function dE(r){if(r!=null&&r.length>0)try{return K(r)}catch{}}function YB(r,e){return e??r.userAgent}async function N1(r,e,t,n,i){if(t("received identify from %p",n.remotePeer),i==null)throw new he("message was null or undefined");let o={};if(i.listenAddrs.length>0&&(o.addresses=i.listenAddrs.map(c=>({isCertified:!1,multiaddr:K(c)}))),i.protocols.length>0&&(o.protocols=i.protocols),i.publicKey!=null){let c=wt(i.publicKey);if(!oi(c).equals(n.remotePeer))throw new he("public key did not match remote PeerId");o.publicKey=c}let s;if(i.signedPeerRecord!=null){t.trace("received signedPeerRecord from %p",n.remotePeer);let c=i.signedPeerRecord,l=await Xr.openAndCertify(c,vr.DOMAIN),u=vr.createFromProtobuf(l.payload),d=Kt(l.publicKey.toCID());if(!u.peerId.equals(d))throw new he("signing key does not match PeerId in the PeerRecord");if(!n.remotePeer.equals(u.peerId))throw new he("signing key does not match remote PeerId");let h;try{h=await r.get(u.peerId)}catch(f){if(f.name!=="NotFoundError")throw f}if(h!=null&&(o.metadata=h.metadata,h.peerRecordEnvelope!=null)){let f=await Xr.createFromProtobuf(h.peerRecordEnvelope),p=vr.createFromProtobuf(f.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=h.peerRecordEnvelope)}o.peerRecordEnvelope=c,o.addresses=u.multiaddrs.map(f=>({isCertified:!0,multiaddr:f})),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,o),await r.patch(n.remotePeer,o),i.agentVersion!=null||i.protocolVersion!=null){let c={};i.agentVersion!=null&&(c.AgentVersion=C(i.agentVersion)),i.protocolVersion!=null&&(c.ProtocolVersion=C(i.protocolVersion)),t.trace("merging %p metadata",n.remotePeer,c),await r.merge(n.remotePeer,{metadata:c})}let a={peerId:n.remotePeer,protocolVersion:i.protocolVersion,agentVersion:i.agentVersion,publicKey:i.publicKey,listenAddrs:i.listenAddrs.map(c=>K(c)),observedAddr:i.observedAddr==null?void 0:K(i.observedAddr),protocols:i.protocols,signedPeerRecord:s,connection:n};return e.safeDispatchEvent("peer:identify",{detail:a}),a}var _c=class{host;protocol;started;timeout;peerId;privateKey;peerStore;registrar;addressManager;maxInboundStreams;maxOutboundStreams;maxMessageSize;maxObservedAddresses;events;runOnLimitedConnection;log;constructor(e,t){this.protocol=t.protocol,this.started=!1,this.peerId=e.peerId,this.privateKey=e.privateKey,this.peerStore=e.peerStore,this.registrar=e.registrar,this.addressManager=e.addressManager,this.events=e.events,this.log=t.log,this.timeout=t.timeout??Lr.timeout,this.maxInboundStreams=t.maxInboundStreams??Lr.maxInboundStreams,this.maxOutboundStreams=t.maxOutboundStreams??Lr.maxOutboundStreams,this.maxMessageSize=t.maxMessageSize??Lr.maxMessageSize,this.maxObservedAddresses=t.maxObservedAddresses??Lr.maxObservedAddresses,this.runOnLimitedConnection=t.runOnLimitedConnection??Lr.runOnLimitedConnection,this.host={protocolVersion:`${t.protocolPrefix??Lr.protocolPrefix}/${sE}`,agentVersion:YB(e.nodeInfo,t.agentVersion)}}isStarted(){return this.started}async start(){this.started||(await this.peerStore.merge(this.peerId,{metadata:{AgentVersion:C(this.host.agentVersion),ProtocolVersion:C(this.host.protocolVersion)}}),await this.registrar.handle(this.protocol,e=>{this.handleProtocol(e).catch(t=>{this.log.error(t)})},{maxInboundStreams:this.maxInboundStreams,maxOutboundStreams:this.maxOutboundStreams,runOnLimitedConnection:this.runOnLimitedConnection}),this.started=!0)}async stop(){await this.registrar.unhandle(this.protocol),this.started=!1}};var L1=class extends _c{connectionManager;concurrency;constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??Lr.protocolPrefix}/${cE}/${uE}`,log:e.logger.forComponent("libp2p:identify-push")}),this.connectionManager=e.connectionManager,this.concurrency=t.concurrency??Lr.concurrency,(t.runOnSelfUpdate??Lr.runOnSelfUpdate)&&e.events.addEventListener("self:peer:update",n=>{this.push().catch(i=>{this.log.error(i)})})}[Pe]=["@libp2p/identify-push"];async push(){if(!this.isStarted())return;let e=this.addressManager.getAddresses().map(u=>u.decapsulateCode(se("p2p").code)),t=new vr({peerId:this.peerId,multiaddrs:e}),n=await Xr.seal(t,this.privateKey),i=this.registrar.getProtocols(),o=await this.peerStore.get(this.peerId),s=U(o.metadata.get("AgentVersion")??C(this.host.agentVersion)),a=U(o.metadata.get("ProtocolVersion")??C(this.host.protocolVersion)),c=this;async function*l(){for(let u of c.connectionManager.getConnections())(await c.peerStore.get(u.remotePeer)).protocols.includes(c.protocol)&&(yield async()=>{let h,f=AbortSignal.timeout(c.timeout);try{h=await u.newStream(c.protocol,{signal:f,runOnLimitedConnection:c.runOnLimitedConnection}),await rt(h,{maxDataLength:c.maxMessageSize}).pb(Vo).write({listenAddrs:e.map(m=>m.bytes),signedPeerRecord:n.marshal(),protocols:i,agentVersion:s,protocolVersion:a},{signal:f}),await h.close({signal:f})}catch(p){c.log.error("could not push identify update to peer",p),h?.abort(p)}})}await Lt(Yt(l(),{concurrency:this.concurrency}))}async handleProtocol(e){let{connection:t,stream:n}=e;try{if(this.peerId.equals(t.remotePeer))throw new Error("received push from ourselves?");let i={signal:AbortSignal.timeout(this.timeout)},s=await rt(n,{maxDataLength:this.maxMessageSize}).pb(Vo).read(i);await n.close(i),await N1(this.peerStore,this.events,this.log,t,s)}catch(i){this.log.error("received invalid message",i),n.abort(i);return}this.log.trace("handled push from %p",t.remotePeer)}};var XB=41,O1=class extends _c{constructor(e,t={}){super(e,{...t,protocol:`/${t.protocolPrefix??Lr.protocolPrefix}/${aE}/${lE}`,log:e.logger.forComponent("libp2p:identify")}),(t.runOnConnectionOpen??Lr.runOnConnectionOpen)&&e.events.addEventListener("connection:open",n=>{let i=n.detail;this.identify(i).catch(o=>{o.name!==xi.name&&this.log.error("error during identify trigged by connection:open",o)})})}[Pe]=["@libp2p/identify"];async _identify(e,t={}){let n;if(t.signal==null){let i=AbortSignal.timeout(this.timeout);t={...t,signal:i}}try{n=await e.newStream(this.protocol,{...t,runOnLimitedConnection:this.runOnLimitedConnection});let o=await rt(n,{maxDataLength:this.maxMessageSize}).pb(Vo).read(t);return await n.close(t),o}catch(i){throw n?.abort(i),i}}async identify(e,t={}){let n=await this._identify(e,t),{publicKey:i,protocols:o,observedAddr:s}=n;if(i==null)throw new he("public key was missing from identify message");let a=wt(i),c=Kt(a.toCID());if(!e.remotePeer.equals(c))throw new he("identified peer does not match the expected peer");if(this.peerId.equals(c))throw new he("identified peer is our own peer id?");return this.maybeAddObservedAddress(s),this.log("identify completed for peer %p and protocols %o",c,o),N1(this.peerStore,this.events,this.log,e,n)}maybeAddObservedAddress(e){let t=dE(e);if(t==null)return;if(this.log.trace("our observed address was %a",t),gn(t)){this.log.trace("our observed address was private");return}if(t.stringTuples()[0][0]===XB&&!d1(t)){this.log.trace("our observed address was IPv6 but not a global unicast address");return}Us.exactMatch(t)||(this.log.trace("storing the observed address"),this.addressManager.addObservedAddr(t))}async handleProtocol(e){let{connection:t,stream:n}=e,i=AbortSignal.timeout(this.timeout);try{let o=await this.peerStore.get(this.peerId),s=this.addressManager.getAddresses().map(u=>u.decapsulateCode(se("p2p").code)),a=o.peerRecordEnvelope;if(s.length>0&&a==null){let u=new vr({peerId:this.peerId,multiaddrs:s});a=(await Xr.seal(u,this.privateKey)).marshal().subarray()}let c=t.remoteAddr.bytes;ix.matches(t.remoteAddr)||(c=void 0),await rt(n).pb(Vo).write({protocolVersion:this.host.protocolVersion,agentVersion:this.host.agentVersion,publicKey:Ot(this.privateKey.publicKey),listenAddrs:s.map(u=>u.bytes),signedPeerRecord:a,observedAddr:c,protocols:o.protocols},{signal:i}),await n.close({signal:i})}catch(o){this.log.error("could not respond to identify request",o),n.abort(o)}}};function fE(r={}){return e=>new O1(e,r)}function hE(r={}){return e=>new L1(e,r)}var EE=ut(vE(),1),mt=EE.default;var SS=ut(RE(),1);var Pc={};ot(Pc,{create:()=>hM,derivedEmptyPasswordKey:()=>F1});var F1={alg:"A128GCM",ext:!0,k:"scm9jmO_4BJAgdwWGVulLg",key_ops:["encrypt","decrypt"],kty:"oct"};function hM(r){let e=r?.algorithm??"AES-GCM",t=r?.keyLength??16,n=r?.nonceLength??12,i=r?.digest??"SHA-256",o=r?.saltLength??16,s=r?.iterations??32767,a=Ir.get();t*=8;async function c(d,h){let f=a.getRandomValues(new Uint8Array(o)),p=a.getRandomValues(new Uint8Array(n)),m={name:e,iv:p};typeof h=="string"&&(h=C(h));let g;if(h.length===0){g=await a.subtle.importKey("jwk",F1,{name:"AES-GCM"},!0,["encrypt"]);try{let w={name:"PBKDF2",salt:f,iterations:s,hash:{name:i}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["encrypt"])}catch{g=await a.subtle.importKey("jwk",F1,{name:"AES-GCM"},!0,["encrypt"])}}else{let w={name:"PBKDF2",salt:f,iterations:s,hash:{name:i}},x=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);g=await a.subtle.deriveKey(w,x,{name:e,length:t},!0,["encrypt"])}let y=await a.subtle.encrypt(m,g,d);return ge([f,m.iv,new Uint8Array(y)])}async function l(d,h){let f=d.subarray(0,o),p=d.subarray(o,o+n),m=d.subarray(o+n),g={name:e,iv:p};typeof h=="string"&&(h=C(h));let y;if(h.length===0)try{let x={name:"PBKDF2",salt:f,iterations:s,hash:{name:i}},b=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(x,b,{name:e,length:t},!0,["decrypt"])}catch{y=await a.subtle.importKey("jwk",F1,{name:"AES-GCM"},!0,["decrypt"])}else{let x={name:"PBKDF2",salt:f,iterations:s,hash:{name:i}},b=await a.subtle.importKey("raw",h,{name:"PBKDF2"},!1,["deriveKey"]);y=await a.subtle.deriveKey(x,b,{name:e,length:t},!0,["decrypt"])}let w=await a.subtle.decrypt(g,y,m);return new Uint8Array(w)}return{encrypt:c,decrypt:l}}var Ae=ut(DE());function Js(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 qo(r,e,t=-1){let n=t,i=r,o=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),o=a;else{if(n<a)return new ArrayBuffer(0);c=new ArrayBuffer(n),o=n}let l=new Uint8Array(c);for(let u=a-1;u>=0;u--){let d=Math.pow(2,u*e);l[o-u-1]=Math.floor(i/d),i-=l[o-u-1]*d}return c}s*=Math.pow(2,e)}return new ArrayBuffer(0)}function z1(...r){let e=0,t=0;for(let o of r)e+=o.length;let n=new ArrayBuffer(e),i=new Uint8Array(n);for(let o of r)i.set(o,t),t+=o.length;return i}function T8(){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=Js(t,8),i=new ArrayBuffer(this.valueHex.byteLength),o=new Uint8Array(i);for(let a=0;a<this.valueHex.byteLength;a++)o[a]=r[a];return o[0]&=127,Js(o,8)-n}function NE(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=qo(s,8,n),c=new Uint8Array(a);return c[0]|=128,a}let i=qo(e,8,n),o=new Uint8Array(i);if(o[0]&128){let s=i.slice(0),a=new Uint8Array(s);i=new ArrayBuffer(i.byteLength+1),o=new Uint8Array(i);for(let c=0;c<s.byteLength;c++)o[c+1]=a[c];o[0]=0}return i}t*=Math.pow(2,8)}return new ArrayBuffer(0)}function LE(r,e){if(r.byteLength!==e.byteLength)return!1;let t=new Uint8Array(r),n=new Uint8Array(e);for(let i=0;i<t.length;i++)if(t[i]!==n[i])return!1;return!0}function Or(r,e){let t=r.toString(10);if(e<t.length)return"";let n=e-t.length,i=new Array(n);for(let s=0;s<n;s++)i[s]="0";return i.join("").concat(t)}var w2e=Math.log(2);function $1(){if(typeof BigInt>"u")throw new Error("BigInt is not defined. Your environment doesn't implement BigInt.")}function I8(r){let e=0,t=0;for(let i=0;i<r.length;i++){let o=r[i];e+=o.byteLength}let n=new Uint8Array(e);for(let i=0;i<r.length;i++){let o=r[i];n.set(new Uint8Array(o),t),t+=o.byteLength}return n.buffer}function Yi(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 Du=class{constructor(){this.items=[]}write(e){this.items.push(e)}final(){return I8(this.items)}},Ru=[new Uint8Array([1])],OE="0123456789";var Dc="",qn=new ArrayBuffer(0),_8=new Uint8Array(0),Nu="EndOfContent",ME="OCTET STRING",FE="BIT STRING";function Xi(r){var e;return e=class extends r{constructor(...n){var i;super(...n);let o=n[0]||{};this.isHexOnly=(i=o.isHexOnly)!==null&&i!==void 0?i:!1,this.valueHexView=o.valueHex?Ae.BufferSourceConverter.toUint8Array(o.valueHex):_8}get valueHex(){return this.valueHexView.slice().buffer}set valueHex(n){this.valueHexView=new Uint8Array(n)}fromBER(n,i,o){let s=n instanceof ArrayBuffer?new Uint8Array(n):n;if(!Yi(this,s,i,o))return-1;let a=i+o;return this.valueHexView=s.subarray(i,a),this.valueHexView.length?(this.blockLength=o,a):(this.warnings.push("Zero buffer length"),i)}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",qn)}toJSON(){return{...super.toJSON(),isHexOnly:this.isHexOnly,valueHex:Ae.Convert.ToHex(this.valueHexView)}}},e.NAME="hexBlock",e}var qi=class{constructor({blockLength:e=0,error:t=Dc,warnings:n=[],valueBeforeDecode:i=_8}={}){this.blockLength=e,this.error=t,this.warnings=n,this.valueBeforeDecodeView=Ae.BufferSourceConverter.toUint8Array(i)}static blockName(){return this.NAME}get valueBeforeDecode(){return this.valueBeforeDecodeView.slice().buffer}set valueBeforeDecode(e){this.valueBeforeDecodeView=new Uint8Array(e)}toJSON(){return{blockName:this.constructor.NAME,blockLength:this.blockLength,error:this.error,warnings:this.warnings,valueBeforeDecode:Ae.Convert.ToHex(this.valueBeforeDecodeView)}}};qi.NAME="baseBlock";var ur=class extends qi{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'")}};ur.NAME="valueBlock";var V1=class extends Xi(qi){constructor({idBlock:e={}}={}){var t,n,i,o;super(),e?(this.isHexOnly=(t=e.isHexOnly)!==null&&t!==void 0?t:!1,this.valueHexView=e.valueHex?Ae.BufferSourceConverter.toUint8Array(e.valueHex):_8,this.tagClass=(n=e.tagClass)!==null&&n!==void 0?n:-1,this.tagNumber=(i=e.tagNumber)!==null&&i!==void 0?i:-1,this.isConstructed=(o=e.isConstructed)!==null&&o!==void 0?o:!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",qn}if(this.isConstructed&&(t|=32),this.tagNumber<31&&!this.isHexOnly){let i=new Uint8Array(1);if(!e){let o=this.tagNumber;o&=31,t|=o,i[0]=t}return i.buffer}if(!this.isHexOnly){let i=qo(this.tagNumber,7),o=new Uint8Array(i),s=i.byteLength,a=new Uint8Array(s+1);if(a[0]=t|31,!e){for(let c=0;c<s-1;c++)a[c+1]=o[c]|128;a[s]=o[s-1]}return a.buffer}let n=new Uint8Array(this.valueHexView.byteLength+1);if(n[0]=t|31,!e){let i=this.valueHexView;for(let o=0;o<i.length-1;o++)n[o+1]=i[o]|128;n[this.valueHexView.byteLength]=i[i.length-1]}return n.buffer}fromBER(e,t,n){let i=Ae.BufferSourceConverter.toUint8Array(e);if(!Yi(this,i,t,n))return-1;let o=i.subarray(t,t+n);if(o.length===0)return this.error="Zero buffer length",-1;switch(o[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=(o[0]&32)===32,this.isHexOnly=!1;let a=o[0]&31;if(a!==31)this.tagNumber=a,this.blockLength=1;else{let c=1,l=this.valueHexView=new Uint8Array(255),u=255;for(;o[c]&128;){if(l[c-1]=o[c]&127,c++,c>=o.length)return this.error="End of input reached before message was fully decoded",-1;if(c===u){u+=255;let h=new Uint8Array(u);for(let f=0;f<l.length;f++)h[f]=l[f];l=this.valueHexView=new Uint8Array(u)}}this.blockLength=c+1,l[c-1]=o[c]&127;let d=new Uint8Array(c);for(let h=0;h<c;h++)d[h]=l[h];l=this.valueHexView=new Uint8Array(c),l.set(d),this.blockLength<=9?this.tagNumber=Js(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}}};V1.NAME="identificationBlock";var q1=class extends qi{constructor({lenBlock:e={}}={}){var t,n,i;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=(i=e.length)!==null&&i!==void 0?i:0}fromBER(e,t,n){let i=Ae.BufferSourceConverter.toUint8Array(e);if(!Yi(this,i,t,n))return-1;let o=i.subarray(t,t+n);if(o.length===0)return this.error="Zero buffer length",-1;if(o[0]===255)return this.error="Length block 0xFF is reserved by standard",-1;if(this.isIndefiniteForm=o[0]===128,this.isIndefiniteForm)return this.blockLength=1,t+this.blockLength;if(this.longFormUsed=!!(o[0]&128),this.longFormUsed===!1)return this.length=o[0],this.blockLength=1,t+this.blockLength;let s=o[0]&127;if(s>8)return this.error="Too big integer",-1;if(s+1>o.length)return this.error="End of input reached before message was fully decoded",-1;let a=t+1,c=i.subarray(a,a+s);return c[s-1]===0&&this.warnings.push("Needlessly long encoded length"),this.length=Js(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 i=qo(this.length,8);if(i.byteLength>127)return this.error="Too big length",qn;if(t=new ArrayBuffer(i.byteLength+1),e)return t;let o=new Uint8Array(i);n=new Uint8Array(t),n[0]=i.byteLength|128;for(let s=0;s<i.byteLength;s++)n[s+1]=o[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}}};q1.NAME="lengthBlock";var X={},Zt=class extends qi{constructor({name:e=Dc,optional:t=!1,primitiveSchema:n,...i}={},o){super(i),this.name=e,this.optional=t,n&&(this.primitiveSchema=n),this.idBlock=new V1(i),this.lenBlock=new q1(i),this.valueBlock=o?new o(i):new ur(i)}fromBER(e,t,n){let i=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return i===-1?(this.error=this.valueBlock.error,i):(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),i)}toBER(e,t){let n=t||new Du;t||UE(this);let i=this.idBlock.toBER(e);if(n.write(i),this.lenBlock.isIndefiniteForm)n.write(new Uint8Array([128]).buffer),this.valueBlock.toBER(e,n),n.write(new ArrayBuffer(2));else{let o=this.valueBlock.toBER(e);this.lenBlock.length=o.byteLength;let s=this.lenBlock.toBER(e);n.write(s),n.write(o)}return t?qn: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():Ae.Convert.ToHex(this.toBER())}onAsciiEncoding(){return`${this.constructor.NAME} : ${Ae.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`}isEqual(e){if(this===e)return!0;if(!(e instanceof this.constructor))return!1;let t=this.toBER(),n=e.toBER();return LE(t,n)}};Zt.NAME="BaseBlock";function UE(r){if(r instanceof X.Constructed)for(let e of r.valueBlock.value)UE(e)&&(r.lenBlock.isIndefiniteForm=!0);return!!r.lenBlock.isIndefiniteForm}var K1=class extends Zt{constructor({value:e=Dc,...t}={},n){super(t,n),e&&this.fromString(e)}getValue(){return this.valueBlock.value}setValue(e){this.valueBlock.value=e}fromBER(e,t,n){let i=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return i===-1?(this.error=this.valueBlock.error,i):(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),i)}onAsciiEncoding(){return`${this.constructor.NAME} : '${this.valueBlock.value}'`}};K1.NAME="BaseStringBlock";var G1=class extends Xi(ur){constructor({isHexOnly:e=!0,...t}={}){super(t),this.isHexOnly=e}};G1.NAME="PrimitiveValueBlock";var HE,W1=class extends Zt{constructor(e={}){super(e,G1),this.idBlock.isConstructed=!1}};HE=W1;X.Primitive=HE;W1.NAME="PRIMITIVE";function EM(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 _0(r,e=0,t=r.length){let n=e,i=new Zt({},ur),o=new qi;if(!Yi(o,r,e,t))return i.error=o.error,{offset:-1,result:i};if(!r.subarray(e,e+t).length)return i.error="Zero buffer length",{offset:-1,result:i};let a=i.idBlock.fromBER(r,e,t);if(i.idBlock.warnings.length&&i.warnings.concat(i.idBlock.warnings),a===-1)return i.error=i.idBlock.error,{offset:-1,result:i};if(e=a,t-=i.idBlock.blockLength,a=i.lenBlock.fromBER(r,e,t),i.lenBlock.warnings.length&&i.warnings.concat(i.lenBlock.warnings),a===-1)return i.error=i.lenBlock.error,{offset:-1,result:i};if(e=a,t-=i.lenBlock.blockLength,!i.idBlock.isConstructed&&i.lenBlock.isIndefiniteForm)return i.error="Indefinite length form used for primitive encoding form",{offset:-1,result:i};let c=Zt;switch(i.idBlock.tagClass){case 1:if(i.idBlock.tagNumber>=37&&i.idBlock.isHexOnly===!1)return i.error="UNIVERSAL 37 and upper tags are reserved by ASN.1 standard",{offset:-1,result:i};switch(i.idBlock.tagNumber){case 0:if(i.idBlock.isConstructed&&i.lenBlock.length>0)return i.error="Type [UNIVERSAL 0] is reserved",{offset:-1,result:i};c=X.EndOfContent;break;case 1:c=X.Boolean;break;case 2:c=X.Integer;break;case 3:c=X.BitString;break;case 4:c=X.OctetString;break;case 5:c=X.Null;break;case 6:c=X.ObjectIdentifier;break;case 10:c=X.Enumerated;break;case 12:c=X.Utf8String;break;case 13:c=X.RelativeObjectIdentifier;break;case 14:c=X.TIME;break;case 15:return i.error="[UNIVERSAL 15] is reserved by ASN.1 standard",{offset:-1,result:i};case 16:c=X.Sequence;break;case 17:c=X.Set;break;case 18:c=X.NumericString;break;case 19:c=X.PrintableString;break;case 20:c=X.TeletexString;break;case 21:c=X.VideotexString;break;case 22:c=X.IA5String;break;case 23:c=X.UTCTime;break;case 24:c=X.GeneralizedTime;break;case 25:c=X.GraphicString;break;case 26:c=X.VisibleString;break;case 27:c=X.GeneralString;break;case 28:c=X.UniversalString;break;case 29:c=X.CharacterString;break;case 30:c=X.BmpString;break;case 31:c=X.DATE;break;case 32:c=X.TimeOfDay;break;case 33:c=X.DateTime;break;case 34:c=X.Duration;break;default:{let l=i.idBlock.isConstructed?new X.Constructed:new X.Primitive;l.idBlock=i.idBlock,l.lenBlock=i.lenBlock,l.warnings=i.warnings,i=l}}break;case 2:case 3:case 4:default:c=i.idBlock.isConstructed?X.Constructed:X.Primitive}return i=EM(i,c),a=i.fromBER(r,e,i.lenBlock.isIndefiniteForm?t:i.lenBlock.length),i.valueBeforeDecodeView=r.subarray(n,n+i.blockLength),{offset:a,result:i}}function k0(r){if(!r.byteLength){let e=new Zt({},ur);return e.error="Input buffer has zero length",{offset:-1,result:e}}return _0(Ae.BufferSourceConverter.toUint8Array(r).slice(),0,r.byteLength)}function SM(r,e){return r?1:e}var ui=class extends ur{constructor({value:e=[],isIndefiniteForm:t=!1,...n}={}){super(n),this.value=e,this.isIndefiniteForm=t}fromBER(e,t,n){let i=Ae.BufferSourceConverter.toUint8Array(e);if(!Yi(this,i,t,n))return-1;if(this.valueBeforeDecodeView=i.subarray(t,t+n),this.valueBeforeDecodeView.length===0)return this.warnings.push("Zero buffer length"),t;let o=t;for(;SM(this.isIndefiniteForm,n)>0;){let s=_0(i,o,n);if(s.offset===-1)return this.error=s.result.error,this.warnings.concat(s.result.warnings),-1;if(o=s.offset,this.blockLength+=s.result.blockLength,n-=s.result.blockLength,this.value.push(s.result),this.isIndefiniteForm&&s.result.constructor.NAME===Nu)break}return this.isIndefiniteForm&&(this.value[this.value.length-1].constructor.NAME===Nu?this.value.pop():this.warnings.push("No EndOfContent block encoded")),o}toBER(e,t){let n=t||new Du;for(let i=0;i<this.value.length;i++)this.value[i].toBER(e,n);return t?qn:n.final()}toJSON(){let e={...super.toJSON(),isIndefiniteForm:this.isIndefiniteForm,value:[]};for(let t of this.value)e.value.push(t.toJSON());return e}};ui.NAME="ConstructedValueBlock";var zE,Ko=class extends Zt{constructor(e={}){super(e,ui),this.idBlock.isConstructed=!0}fromBER(e,t,n){this.valueBlock.isIndefiniteForm=this.lenBlock.isIndefiniteForm;let i=this.valueBlock.fromBER(e,t,this.lenBlock.isIndefiniteForm?n:this.lenBlock.length);return i===-1?(this.error=this.valueBlock.error,i):(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),i)}onAsciiEncoding(){let e=[];for(let n of this.valueBlock.value)e.push(n.toString("ascii").split(`
|
|
15
15
|
`).map(i=>` ${i}`).join(`
|
|
16
16
|
`));let t=this.idBlock.tagClass===3?`[${this.idBlock.tagNumber}]`:this.constructor.NAME;return e.length?`${t} :
|
|
17
17
|
${e.join(`
|
|
@@ -72,11 +72,11 @@ ${[...t.errors.entries()].map(([o,s])=>`
|
|
|
72
72
|
`),t),t.log.trace('handle: responded with "%s" for "%s"',i,i),{stream:n.unwrap(),protocol:i};if(i==="ls"){let o=new ee(...e.map(s=>Sn.single(C(`${s}
|
|
73
73
|
`))),C(`
|
|
74
74
|
`));t.log.trace('handle: respond with "%s" for %s',e,i),await ca(n,o,t),t.log.trace('handle: responded with "%s" for %s',e,i);continue}t.log.trace('handle: respond with "na" for "%s"',i),await ca(n,C(`na
|
|
75
|
-
`),t),t.log('handle: responded with "na" for "%s"',i)}}var dU=500,S5=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:i,close:o,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=i,this._close=o,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[wy]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new Pd("the connection is being closed");if(this.status==="closed")throw new xa("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Ea("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(dU);e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function pT(r){return new S5(r)}function hU(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return b5}function pU(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??v5}function mT(r,e,t){let n=0;return t.streams.forEach(i=>{i.direction===e&&i.protocol===r&&n++}),n}var Um=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new vm(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=de([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,i=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Em("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",{...t,signal:i})}catch(o){throw this.metrics.errors?.increment({inbound:!0}),o}finally{i.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),i;n!=null&&(i=Ne(n),await this.shouldBlockConnection("denyOutboundConnection",i,e));let o="outbound";return t.initiator===!1&&(o="inbound"),await this._performUpgrade(e,o,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let i,o,s,a,c;this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(i=l,n?.skipEncryption!==!0){n?.onProgress?.(new M(`upgrader:encrypt-${t}-connection`)),{conn:i,remotePeer:o,protocol:c,streamMuxer:a}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...i};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",o,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new io(`${t} connection that skipped encryption must have a peer id`);let d=Ne(u);c="native",o=d}if(o.equals(this.components.peerId)){let u=new va("Can not dial self");throw e.abort(u),u}if(s=i,n?.muxerFactory!=null)a=n.muxerFactory;else if(a==null&&this.streamMuxers.size>0){n?.onProgress?.(new M(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...i},this.streamMuxers,n):this._multiplexOutbound({...l,...i},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",o,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:o,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:i,upgradedConn:o,remotePeer:s,muxerFactory:a,limits:c}=e,l,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{d!=null&&Promise.resolve().then(async()=>{let m=this.components.registrar.getProtocols(),g=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:y,protocol:w}=await Qu(p,m,{signal:g,log:p.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",w);let x=hU(w,this.components.registrar);if(mT(w,"inbound",d)===x){let A=new Ld(`Too many inbound protocol streams for protocol "${w}" - limit ${x}`);throw p.abort(A),A}p.source=y.source,p.sink=y.sink,p.protocol=w,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(s,{protocols:[w]}),this.components.metrics?.trackProtocolStream(p,d),this._onStream({connection:d,stream:p,protocol:w})}).catch(async m=>{d.log.error("error handling incoming stream id %s - %e",p.id,m),p.timeline.close==null&&await p.close()})}}),u=async(p,m={})=>{if(l==null)throw new oa("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",p);let g=await l.newStream();d.log.trace("started new stream %s for protocols %s",g.id,p);try{if(m.signal==null){g.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let A=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);m={...m,signal:A}}g.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:w}=await ju(g,p,{...m,log:g.log,yieldBytes:!0});g.log.trace("selected protocol %s",w);let x=pU(w,this.components.registrar,m),b=mT(w,"outbound",d);if(b>=x){let A=new so(`Too many outbound protocol streams for protocol "${w}" - ${b}/${x}`);throw g.abort(A),A}return await this.components.peerStore.merge(s,{protocols:[w]}),g.source=y.source,g.sink=y.sink,g.protocol=w,y.closeWrite!=null&&(g.closeWrite=y.closeWrite),y.closeRead!=null&&(g.closeRead=y.closeRead),y.close!=null&&(g.close=y.close),this.components.metrics?.trackProtocolStream(g,d),g}catch(y){throw d.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),g.timeline.close==null&&g.abort(y),y}},Promise.all([l.sink(o.source),o.sink(l.source)]).catch(p=>{d.log.error("error piping data through muxer - %e",p)}));let h=i.timeline;i.timeline=new Proxy(h,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&h.close==null&&(async()=>{try{d.status==="open"&&await d.close()}catch(m){d.log.error("error closing connection after timeline close %e",m)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(m=>{d.log.error("error thrown while dispatching connection:close event %e",m)}),Reflect.set(...p))}),i.timeline.upgraded=Date.now();let f=()=>{throw new oa("Connection is not multiplexed")};return d=pT({remoteAddr:i.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:i.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??f,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await i.close(p)},abort:p=>{i.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:d}),d.__maConnTimeline=h,d}_onStream(e){let{connection:t,stream:n,protocol:i}=e,{handler:o,options:s}=this.components.registrar.getHandler(i);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new Ea("Cannot open protocol stream on limited connection");o({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:i,protocol:o}=await Qu(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(o);if(s==null)throw new sa(`no crypto module found for ${o}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,o),{...await s.secureInbound(i,t),protocol:o}}catch(i){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,i),new sa(i.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:i,protocol:o}=await ju(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(o);if(s==null)throw new sa(`no crypto module found for ${o}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,o),{...await s.secureOutbound(i,t),protocol:o}}catch(i){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,i),new sa(i.message)}}async _multiplexOutbound(e,t,n){let i=Array.from(t.keys());e.log("outbound selecting muxer %s",i);try{e.log.trace("selecting stream muxer from %s",i);let{stream:o,protocol:s}=await ju(e,i,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:o,muxerFactory:a}}catch(o){throw e.log.error("error multiplexing outbound connection",o),new oa(String(o))}}async _multiplexInbound(e,t,n){let i=Array.from(t.keys());e.log("inbound handling muxers %s",i);try{let{stream:o,protocol:s}=await Qu(e,i,{...n,log:e.log}),a=t.get(s);return{stream:o,muxerFactory:a}}catch(o){throw e.log.error("error multiplexing inbound connection",o),new oa(String(o))}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};var Hm=class extends be{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new be,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??So(),this.log=this.logger.forComponent("libp2p"),this.services={};let i=e.nodeInfo?.name??J0,o=e.nodeInfo?.version??Z0,s=this.components=YA({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:i,version:o,userAgent:e.nodeInfo?.userAgent??em(i,o)},logger:this.logger,events:t,datastore:e.datastore??new Ws,connectionGater:jA(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",zA(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),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 Um(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??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new Fm(this.components,e.transportManager)),this.configureComponent("connectionManager",new Dm(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Nm(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Mm(this.components)),this.configureComponent("addressManager",new fm(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 Om(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 Lm(this.components,{routers:c})),this.configureComponent("randomWalk",new Bm(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",h=>{this.#e(h)})}),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[Qn]!=null&&(this.log("registering service %s for content routing",l),c.push(d[Qn])),d[Zn]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[Zn])),d[os]!=null&&(this.log("registering service %s for peer discovery",l),d[os].addEventListener?.("peer",h=>{this.#e(h)}))}XA(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")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new yr;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 O("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new O("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Po(e)&&(e=Ne(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=ge([C("/pk/"),e.toMultihash().bytes]),i=await this.contentRouting.get(n,t),o=wt(i);return await this.peerStore.patch(e,{publicKey:o}),o}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async i=>{await this.components.registrar.handle(i,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function zm(r={}){r.privateKey??=await vf("Ed25519");let e=new Hm({...await RA(r),peerId:ew(r.privateKey)});return r.start!==!1&&await e.start(),e}async function gT(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await J8(r.datastore,r.keychain));let t=Ku(e);return t.datastore=t.datastore??r.datastore,await zm({...t,...e,start:!1})}async function yT(r={}){let e=r.datastore??new Ws,t=r.blockstore??new xu,n;mU(r.libp2p)?n=r.libp2p:n=await gT({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let i=new Yp({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[cu(),Jl()],routers:r.routers??[F6(n),B6()],metrics:n.metrics});return r.start!==!1&&await i.start(),i}function mU(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}function wT(){let r=Ku();r.start=!1,r.addresses={listen:[]},r.transports=[Y0(),Q0()],r.peerDiscovery=[];let e={dcutr:r.services.dcutr,identify:r.services.identify,keychain:r.services.keychain,ping:r.services.ping};return{...r,start:!1,services:e}}var Uc=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,bT=new Set,A5=typeof process=="object"&&process?process:{},vT=(r,e,t,n)=>{typeof A5.emitWarning=="function"?A5.emitWarning(r,e,t,n):console.error(`[${t}] ${e}: ${r}`)},$m=globalThis.AbortController,xT=globalThis.AbortSignal;if(typeof $m>"u"){xT=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(n,i){this._onabort.push(i)}},$m=class{constructor(){e()}signal=new xT;abort(n){if(!this.signal.aborted){this.signal.reason=n,this.signal.aborted=!0;for(let i of this.signal._onabort)i(n);this.signal.onabort?.(n)}}};let r=A5.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{r&&(r=!1,vT("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}var gU=r=>!bT.has(r),Xwe=Symbol("type"),Xo=r=>r&&r===Math.floor(r)&&r>0&&isFinite(r),ET=r=>Xo(r)?r<=Math.pow(2,8)?Uint8Array:r<=Math.pow(2,16)?Uint16Array:r<=Math.pow(2,32)?Uint32Array:r<=Number.MAX_SAFE_INTEGER?Hc:null:null,Hc=class extends Array{constructor(e){super(e),this.fill(0)}},T5=class r{heap;length;static#e=!1;static create(e){let t=ET(e);if(!t)return[];r.#e=!0;let n=new r(e,t);return r.#e=!1,n}constructor(e,t){if(!r.#e)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new t(e),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}},Vm=class r{#e;#r;#n;#m;#u;#A;#y;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#a;#s;#c;#i;#t;#l;#w;#p;#d;#b;#f;#v;#E;#g;#x;#T;#h;#R;static unsafeExposeInternals(e){return{starts:e.#E,ttls:e.#g,sizes:e.#v,keyMap:e.#c,keyList:e.#i,valList:e.#t,next:e.#l,prev:e.#w,get head(){return e.#p},get tail(){return e.#d},free:e.#b,isBackgroundFetch:t=>e.#o(t),backgroundFetch:(t,n,i,o)=>e.#M(t,n,i,o),moveToTail:t=>e.#L(t),indexes:t=>e.#I(t),rindexes:t=>e.#_(t),isStale:t=>e.#S(t)}}get max(){return this.#e}get maxSize(){return this.#r}get calculatedSize(){return this.#s}get size(){return this.#a}get fetchMethod(){return this.#A}get memoMethod(){return this.#y}get dispose(){return this.#n}get onInsert(){return this.#m}get disposeAfter(){return this.#u}constructor(e){let{max:t=0,ttl:n,ttlResolution:i=1,ttlAutopurge:o,updateAgeOnGet:s,updateAgeOnHas:a,allowStale:c,dispose:l,onInsert:u,disposeAfter:d,noDisposeOnSet:h,noUpdateTTL:f,maxSize:p=0,maxEntrySize:m=0,sizeCalculation:g,fetchMethod:y,memoMethod:w,noDeleteOnFetchRejection:x,noDeleteOnStaleGet:b,allowStaleOnFetchRejection:A,allowStaleOnFetchAbort:k,ignoreFetchAbort:E}=e;if(t!==0&&!Xo(t))throw new TypeError("max option must be a nonnegative integer");let S=t?ET(t):Array;if(!S)throw new Error("invalid max value: "+t);if(this.#e=t,this.#r=p,this.maxEntrySize=m||this.#r,this.sizeCalculation=g,this.sizeCalculation){if(!this.#r&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(w!==void 0&&typeof w!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#y=w,y!==void 0&&typeof y!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#A=y,this.#T=!!y,this.#c=new Map,this.#i=new Array(t).fill(void 0),this.#t=new Array(t).fill(void 0),this.#l=new S(t),this.#w=new S(t),this.#p=0,this.#d=0,this.#b=T5.create(t),this.#a=0,this.#s=0,typeof l=="function"&&(this.#n=l),typeof u=="function"&&(this.#m=u),typeof d=="function"?(this.#u=d,this.#f=[]):(this.#u=void 0,this.#f=void 0),this.#x=!!this.#n,this.#R=!!this.#m,this.#h=!!this.#u,this.noDisposeOnSet=!!h,this.noUpdateTTL=!!f,this.noDeleteOnFetchRejection=!!x,this.allowStaleOnFetchRejection=!!A,this.allowStaleOnFetchAbort=!!k,this.ignoreFetchAbort=!!E,this.maxEntrySize!==0){if(this.#r!==0&&!Xo(this.#r))throw new TypeError("maxSize must be a positive integer if specified");if(!Xo(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#V()}if(this.allowStale=!!c,this.noDeleteOnStaleGet=!!b,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!a,this.ttlResolution=Xo(i)||i===0?i:1,this.ttlAutopurge=!!o,this.ttl=n||0,this.ttl){if(!Xo(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#C()}if(this.#e===0&&this.ttl===0&&this.#r===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#e&&!this.#r){let T="LRU_CACHE_UNBOUNDED";gU(T)&&(bT.add(T),vT("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",T,r))}}getRemainingTTL(e){return this.#c.has(e)?1/0:0}#C(){let e=new Hc(this.#e),t=new Hc(this.#e);this.#g=e,this.#E=t,this.#F=(o,s,a=Uc.now())=>{if(t[o]=s!==0?a:0,e[o]=s,s!==0&&this.ttlAutopurge){let c=setTimeout(()=>{this.#S(o)&&this.#k(this.#i[o],"expire")},s+1);c.unref&&c.unref()}},this.#D=o=>{t[o]=e[o]!==0?Uc.now():0},this.#P=(o,s)=>{if(e[s]){let a=e[s],c=t[s];if(!a||!c)return;o.ttl=a,o.start=c,o.now=n||i();let l=o.now-c;o.remainingTTL=a-l}};let n=0,i=()=>{let o=Uc.now();if(this.ttlResolution>0){n=o;let s=setTimeout(()=>n=0,this.ttlResolution);s.unref&&s.unref()}return o};this.getRemainingTTL=o=>{let s=this.#c.get(o);if(s===void 0)return 0;let a=e[s],c=t[s];if(!a||!c)return 1/0;let l=(n||i())-c;return a-l},this.#S=o=>{let s=t[o],a=e[o];return!!a&&!!s&&(n||i())-s>a}}#D=()=>{};#P=()=>{};#F=()=>{};#S=()=>!1;#V(){let e=new Hc(this.#e);this.#s=0,this.#v=e,this.#N=t=>{this.#s-=e[t],e[t]=0},this.#U=(t,n,i,o)=>{if(this.#o(n))return 0;if(!Xo(i))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(i=o(n,t),!Xo(i))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return i},this.#O=(t,n,i)=>{if(e[t]=n,this.#r){let o=this.#r-e[t];for(;this.#s>o;)this.#B(!0)}this.#s+=e[t],i&&(i.entrySize=n,i.totalCalculatedSize=this.#s)}}#N=e=>{};#O=(e,t,n)=>{};#U=(e,t,n,i)=>{if(n||i)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#I({allowStale:e=this.allowStale}={}){if(this.#a)for(let t=this.#d;!(!this.#H(t)||((e||!this.#S(t))&&(yield t),t===this.#p));)t=this.#w[t]}*#_({allowStale:e=this.allowStale}={}){if(this.#a)for(let t=this.#p;!(!this.#H(t)||((e||!this.#S(t))&&(yield t),t===this.#d));)t=this.#l[t]}#H(e){return e!==void 0&&this.#c.get(this.#i[e])===e}*entries(){for(let e of this.#I())this.#t[e]!==void 0&&this.#i[e]!==void 0&&!this.#o(this.#t[e])&&(yield[this.#i[e],this.#t[e]])}*rentries(){for(let e of this.#_())this.#t[e]!==void 0&&this.#i[e]!==void 0&&!this.#o(this.#t[e])&&(yield[this.#i[e],this.#t[e]])}*keys(){for(let e of this.#I()){let t=this.#i[e];t!==void 0&&!this.#o(this.#t[e])&&(yield t)}}*rkeys(){for(let e of this.#_()){let t=this.#i[e];t!==void 0&&!this.#o(this.#t[e])&&(yield t)}}*values(){for(let e of this.#I())this.#t[e]!==void 0&&!this.#o(this.#t[e])&&(yield this.#t[e])}*rvalues(){for(let e of this.#_())this.#t[e]!==void 0&&!this.#o(this.#t[e])&&(yield this.#t[e])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(e,t={}){for(let n of this.#I()){let i=this.#t[n],o=this.#o(i)?i.__staleWhileFetching:i;if(o!==void 0&&e(o,this.#i[n],this))return this.get(this.#i[n],t)}}forEach(e,t=this){for(let n of this.#I()){let i=this.#t[n],o=this.#o(i)?i.__staleWhileFetching:i;o!==void 0&&e.call(t,o,this.#i[n],this)}}rforEach(e,t=this){for(let n of this.#_()){let i=this.#t[n],o=this.#o(i)?i.__staleWhileFetching:i;o!==void 0&&e.call(t,o,this.#i[n],this)}}purgeStale(){let e=!1;for(let t of this.#_({allowStale:!0}))this.#S(t)&&(this.#k(this.#i[t],"expire"),e=!0);return e}info(e){let t=this.#c.get(e);if(t===void 0)return;let n=this.#t[t],i=this.#o(n)?n.__staleWhileFetching:n;if(i===void 0)return;let o={value:i};if(this.#g&&this.#E){let s=this.#g[t],a=this.#E[t];if(s&&a){let c=s-(Uc.now()-a);o.ttl=c,o.start=Date.now()}}return this.#v&&(o.size=this.#v[t]),o}dump(){let e=[];for(let t of this.#I({allowStale:!0})){let n=this.#i[t],i=this.#t[t],o=this.#o(i)?i.__staleWhileFetching:i;if(o===void 0||n===void 0)continue;let s={value:o};if(this.#g&&this.#E){s.ttl=this.#g[t];let a=Uc.now()-this.#E[t];s.start=Math.floor(Date.now()-a)}this.#v&&(s.size=this.#v[t]),e.unshift([n,s])}return e}load(e){this.clear();for(let[t,n]of e){if(n.start){let i=Date.now()-n.start;n.start=Uc.now()-i}this.set(t,n.value,n)}}set(e,t,n={}){if(t===void 0)return this.delete(e),this;let{ttl:i=this.ttl,start:o,noDisposeOnSet:s=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:c}=n,{noUpdateTTL:l=this.noUpdateTTL}=n,u=this.#U(e,t,n.size||0,a);if(this.maxEntrySize&&u>this.maxEntrySize)return c&&(c.set="miss",c.maxEntrySizeExceeded=!0),this.#k(e,"set"),this;let d=this.#a===0?void 0:this.#c.get(e);if(d===void 0)d=this.#a===0?this.#d:this.#b.length!==0?this.#b.pop():this.#a===this.#e?this.#B(!1):this.#a,this.#i[d]=e,this.#t[d]=t,this.#c.set(e,d),this.#l[this.#d]=d,this.#w[d]=this.#d,this.#d=d,this.#a++,this.#O(d,u,c),c&&(c.set="add"),l=!1,this.#R&&this.#m?.(t,e,"add");else{this.#L(d);let h=this.#t[d];if(t!==h){if(this.#T&&this.#o(h)){h.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:f}=h;f!==void 0&&!s&&(this.#x&&this.#n?.(f,e,"set"),this.#h&&this.#f?.push([f,e,"set"]))}else s||(this.#x&&this.#n?.(h,e,"set"),this.#h&&this.#f?.push([h,e,"set"]));if(this.#N(d),this.#O(d,u,c),this.#t[d]=t,c){c.set="replace";let f=h&&this.#o(h)?h.__staleWhileFetching:h;f!==void 0&&(c.oldValue=f)}}else c&&(c.set="update");this.#R&&this.onInsert?.(t,e,t===h?"update":"replace")}if(i!==0&&!this.#g&&this.#C(),this.#g&&(l||this.#F(d,i,o),c&&this.#P(c,d)),!s&&this.#h&&this.#f){let h=this.#f,f;for(;f=h?.shift();)this.#u?.(...f)}return this}pop(){try{for(;this.#a;){let e=this.#t[this.#p];if(this.#B(!0),this.#o(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#h&&this.#f){let e=this.#f,t;for(;t=e?.shift();)this.#u?.(...t)}}}#B(e){let t=this.#p,n=this.#i[t],i=this.#t[t];return this.#T&&this.#o(i)?i.__abortController.abort(new Error("evicted")):(this.#x||this.#h)&&(this.#x&&this.#n?.(i,n,"evict"),this.#h&&this.#f?.push([i,n,"evict"])),this.#N(t),e&&(this.#i[t]=void 0,this.#t[t]=void 0,this.#b.push(t)),this.#a===1?(this.#p=this.#d=0,this.#b.length=0):this.#p=this.#l[t],this.#c.delete(n),this.#a--,t}has(e,t={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:i}=t,o=this.#c.get(e);if(o!==void 0){let s=this.#t[o];if(this.#o(s)&&s.__staleWhileFetching===void 0)return!1;if(this.#S(o))i&&(i.has="stale",this.#P(i,o));else return n&&this.#D(o),i&&(i.has="hit",this.#P(i,o)),!0}else i&&(i.has="miss");return!1}peek(e,t={}){let{allowStale:n=this.allowStale}=t,i=this.#c.get(e);if(i===void 0||!n&&this.#S(i))return;let o=this.#t[i];return this.#o(o)?o.__staleWhileFetching:o}#M(e,t,n,i){let o=t===void 0?void 0:this.#t[t];if(this.#o(o))return o;let s=new $m,{signal:a}=n;a?.addEventListener("abort",()=>s.abort(a.reason),{signal:s.signal});let c={signal:s.signal,options:n,context:i},l=(m,g=!1)=>{let{aborted:y}=s.signal,w=n.ignoreFetchAbort&&m!==void 0;if(n.status&&(y&&!g?(n.status.fetchAborted=!0,n.status.fetchError=s.signal.reason,w&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),y&&!w&&!g)return d(s.signal.reason);let x=f;return this.#t[t]===f&&(m===void 0?x.__staleWhileFetching?this.#t[t]=x.__staleWhileFetching:this.#k(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.set(e,m,c.options))),m},u=m=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=m),d(m)),d=m=>{let{aborted:g}=s.signal,y=g&&n.allowStaleOnFetchAbort,w=y||n.allowStaleOnFetchRejection,x=w||n.noDeleteOnFetchRejection,b=f;if(this.#t[t]===f&&(!x||b.__staleWhileFetching===void 0?this.#k(e,"fetch"):y||(this.#t[t]=b.__staleWhileFetching)),w)return n.status&&b.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),b.__staleWhileFetching;if(b.__returned===b)throw m},h=(m,g)=>{let y=this.#A?.(e,o,c);y&&y instanceof Promise&&y.then(w=>m(w===void 0?void 0:w),g),s.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(m(void 0),n.allowStaleOnFetchAbort&&(m=w=>l(w,!0)))})};n.status&&(n.status.fetchDispatched=!0);let f=new Promise(h).then(l,u),p=Object.assign(f,{__abortController:s,__staleWhileFetching:o,__returned:void 0});return t===void 0?(this.set(e,p,{...c.options,status:void 0}),t=this.#c.get(e)):this.#t[t]=p,p}#o(e){if(!this.#T)return!1;let t=e;return!!t&&t instanceof Promise&&t.hasOwnProperty("__staleWhileFetching")&&t.__abortController instanceof $m}async fetch(e,t={}){let{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:s=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:c=0,sizeCalculation:l=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:h=this.allowStaleOnFetchRejection,ignoreFetchAbort:f=this.ignoreFetchAbort,allowStaleOnFetchAbort:p=this.allowStaleOnFetchAbort,context:m,forceRefresh:g=!1,status:y,signal:w}=t;if(!this.#T)return y&&(y.fetch="get"),this.get(e,{allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:o,status:y});let x={allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:o,ttl:s,noDisposeOnSet:a,size:c,sizeCalculation:l,noUpdateTTL:u,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:h,allowStaleOnFetchAbort:p,ignoreFetchAbort:f,status:y,signal:w},b=this.#c.get(e);if(b===void 0){y&&(y.fetch="miss");let A=this.#M(e,b,x,m);return A.__returned=A}else{let A=this.#t[b];if(this.#o(A)){let $=n&&A.__staleWhileFetching!==void 0;return y&&(y.fetch="inflight",$&&(y.returnedStale=!0)),$?A.__staleWhileFetching:A.__returned=A}let k=this.#S(b);if(!g&&!k)return y&&(y.fetch="hit"),this.#L(b),i&&this.#D(b),y&&this.#P(y,b),A;let E=this.#M(e,b,x,m),T=E.__staleWhileFetching!==void 0&&n;return y&&(y.fetch=k?"stale":"refresh",T&&k&&(y.returnedStale=!0)),T?E.__staleWhileFetching:E.__returned=E}}async forceFetch(e,t={}){let n=await this.fetch(e,t);if(n===void 0)throw new Error("fetch() returned undefined");return n}memo(e,t={}){let n=this.#y;if(!n)throw new Error("no memoMethod provided to constructor");let{context:i,forceRefresh:o,...s}=t,a=this.get(e,s);if(!o&&a!==void 0)return a;let c=n(e,a,{options:s,context:i});return this.set(e,c,s),c}get(e,t={}){let{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:s}=t,a=this.#c.get(e);if(a!==void 0){let c=this.#t[a],l=this.#o(c);return s&&this.#P(s,a),this.#S(a)?(s&&(s.get="stale"),l?(s&&n&&c.__staleWhileFetching!==void 0&&(s.returnedStale=!0),n?c.__staleWhileFetching:void 0):(o||this.#k(e,"expire"),s&&n&&(s.returnedStale=!0),n?c:void 0)):(s&&(s.get="hit"),l?c.__staleWhileFetching:(this.#L(a),i&&this.#D(a),c))}else s&&(s.get="miss")}#z(e,t){this.#w[t]=e,this.#l[e]=t}#L(e){e!==this.#d&&(e===this.#p?this.#p=this.#l[e]:this.#z(this.#w[e],this.#l[e]),this.#z(this.#d,e),this.#d=e)}delete(e){return this.#k(e,"delete")}#k(e,t){let n=!1;if(this.#a!==0){let i=this.#c.get(e);if(i!==void 0)if(n=!0,this.#a===1)this.#$(t);else{this.#N(i);let o=this.#t[i];if(this.#o(o)?o.__abortController.abort(new Error("deleted")):(this.#x||this.#h)&&(this.#x&&this.#n?.(o,e,t),this.#h&&this.#f?.push([o,e,t])),this.#c.delete(e),this.#i[i]=void 0,this.#t[i]=void 0,i===this.#d)this.#d=this.#w[i];else if(i===this.#p)this.#p=this.#l[i];else{let s=this.#w[i];this.#l[s]=this.#l[i];let a=this.#l[i];this.#w[a]=this.#w[i]}this.#a--,this.#b.push(i)}}if(this.#h&&this.#f?.length){let i=this.#f,o;for(;o=i?.shift();)this.#u?.(...o)}return n}clear(){return this.#$("delete")}#$(e){for(let t of this.#_({allowStale:!0})){let n=this.#t[t];if(this.#o(n))n.__abortController.abort(new Error("deleted"));else{let i=this.#i[t];this.#x&&this.#n?.(n,i,e),this.#h&&this.#f?.push([n,i,e])}}if(this.#c.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#g&&this.#E&&(this.#g.fill(0),this.#E.fill(0)),this.#v&&this.#v.fill(0),this.#p=0,this.#d=0,this.#b.length=0,this.#s=0,this.#a=0,this.#h&&this.#f){let t=this.#f,n;for(;n=t?.shift();)this.#u?.(...n)}}};var k5=ut(qm(),1);var C5=40;function P5(r,e){if(!r.length)throw new Error("Unexpected end of data");let t=k5.default.decode(r);return e.seek(k5.default.decode.bytes),t}function R5(r){let e=new DataView(r.buffer,r.byteOffset,r.byteLength),t=0;return{version:2,characteristics:[e.getBigUint64(t,!0),e.getBigUint64(t+=8,!0)],dataOffset:Number(e.getBigUint64(t+=8,!0)),dataSize:Number(e.getBigUint64(t+=8,!0)),indexOffset:Number(e.getBigUint64(t+=8,!0))}}var jo={Null:r=>r===null?r:void 0,Int:r=>Number.isInteger(r)?r:void 0,Float:r=>typeof r=="number"&&Number.isFinite(r)?r:void 0,String:r=>typeof r=="string"?r:void 0,Bool:r=>typeof r=="boolean"?r:void 0,Bytes:r=>r instanceof Uint8Array?r:void 0,Link:r=>r!==null&&typeof r=="object"&&r.asCID===r?r:void 0,List:r=>Array.isArray(r)?r:void 0,Map:r=>r!==null&&typeof r=="object"&&r.asCID!==r&&!Array.isArray(r)&&!(r instanceof Uint8Array)?r:void 0},Zu={"CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)":jo.Link,"CarV1HeaderOrV2Pragma > roots (anon)":r=>{if(jo.List(r)!==void 0){for(let e=0;e<r.length;e++){let t=r[e];if(t=Zu["CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)"](t),t===void 0)return;if(t!==r[e]){let n=r.slice(0,e);for(let i=e;i<r.length;i++){let o=r[i];if(o=Zu["CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)"](o),o===void 0)return;n.push(o)}return n}}return r}},Int:jo.Int,CarV1HeaderOrV2Pragma:r=>{if(jo.Map(r)===void 0)return;let e=Object.entries(r),t=r,n=1;for(let i=0;i<e.length;i++){let[o,s]=e[i];switch(o){case"roots":{let a=Zu["CarV1HeaderOrV2Pragma > roots (anon)"](r[o]);if(a===void 0)return;if(a!==s||t!==r){if(t===r){t={};for(let c=0;c<i;c++)t[e[c][0]]=e[c][1]}t.roots=a}}break;case"version":{n--;let a=Zu.Int(r[o]);if(a===void 0)return;if(a!==s||t!==r){if(t===r){t={};for(let c=0;c<i;c++)t[e[c][0]]=e[c][1]}t.version=a}}break;default:return}}if(!(n>0))return t}},Ju={"CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)":jo.Link,"CarV1HeaderOrV2Pragma > roots (anon)":r=>{if(jo.List(r)!==void 0){for(let e=0;e<r.length;e++){let t=r[e];if(t=Ju["CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)"](t),t===void 0)return;if(t!==r[e]){let n=r.slice(0,e);for(let i=e;i<r.length;i++){let o=r[i];if(o=Ju["CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)"](o),o===void 0)return;n.push(o)}return n}}return r}},Int:jo.Int,CarV1HeaderOrV2Pragma:r=>{if(jo.Map(r)===void 0)return;let e=Object.entries(r),t=r,n=1;for(let i=0;i<e.length;i++){let[o,s]=e[i];switch(o){case"roots":{let a=Ju["CarV1HeaderOrV2Pragma > roots (anon)"](s);if(a===void 0)return;if(a!==s||t!==r){if(t===r){t={};for(let c=0;c<i;c++)t[e[c][0]]=e[c][1]}t.roots=a}}break;case"version":{n--;let a=Ju.Int(s);if(a===void 0)return;if(a!==s||t!==r){if(t===r){t={};for(let c=0;c<i;c++)t[e[c][0]]=e[c][1]}t.version=a}}break;default:return}}if(!(n>0))return t}},D5={toTyped:Zu.CarV1HeaderOrV2Pragma,toRepresentation:Ju.CarV1HeaderOrV2Pragma};var d9e=r4();var NU=ut(qm(),1);var g9e=[new z(v.map,2),new z(v.string,"version"),new z(v.uint,1),new z(v.string,"roots")],y9e=new z(v.tag,42);async function N5(r,e){let t=P5(await r.upTo(8),r);if(t===0)throw new Error("Invalid CAR header (zero length)");let n=await r.exactly(t,!0),i=ko(n);if(D5.toTyped(i)===void 0)throw new Error("Invalid CAR header format");if(i.version!==1&&i.version!==2||e!==void 0&&i.version!==e)throw new Error(`Invalid CAR version: ${i.version}${e!==void 0?` (expected ${e})`:""}`);if(i.version===1){if(!Array.isArray(i.roots))throw new Error("Invalid CAR header format");return i}if(i.roots!==void 0)throw new Error("Invalid CAR header format");let o=R5(await r.exactly(C5,!0));r.seek(o.dataOffset-r.pos);let s=await N5(r,1);return Object.assign(s,o)}function ed(r){let e=0;return{async upTo(t){return r.subarray(e,e+Math.min(t,r.length-e))},async exactly(t,n=!1){if(t>r.length-e)throw new Error("Unexpected end of data");let i=r.subarray(e,e+t);return n&&(e+=t),i},seek(t){e+=t},get pos(){return e}}}var L5=ut(qm(),1),LT=1;function O5(r){let e=Za({version:LT,roots:r}),t=L5.default.encode(e.length),n=new Uint8Array(t.length+e.length);return n.set(t,0),n.set(e,t.length),n}function OT(r){return{async setRoots(e){let t=O5(e);await r.write(t)},async writeBlock(e){let{cid:t,bytes:n}=e;await r.write(new Uint8Array(L5.default.encode(t.bytes.length+n.length))),await r.write(t.bytes),n.length&&await r.write(n)},async close(){await r.end()},version(){return LT}}}function Km(){}function BT(){let r=[],e=null,t=Km,n=!1,i=null,o=Km,s=()=>(e||(e=new Promise(l=>{t=()=>{e=null,t=Km,l()}})),e),a={write(l){r.push(l);let u=s();return o(),u},async end(){n=!0;let l=s();o(),await l}},c={async next(){let l=r.shift();return l?(r.length===0&&t(),{done:!1,value:l}):n?(t(),{done:!0,value:void 0}):(i||(i=new Promise(u=>{o=()=>(i=null,o=Km,u(c.next()))})),i)}};return{writer:a,iterator:c}}var td=class r{constructor(e,t){this._encoder=t,this._mutex=t.setRoots(e),this._ended=!1}async put(e){if(!(e.bytes instanceof Uint8Array)||!e.cid)throw new TypeError("Can only write {cid, bytes} objects");if(this._ended)throw new Error("Already closed");let t=B.asCID(e.cid);if(!t)throw new TypeError("Can only write {cid, bytes} objects");return this._mutex=this._mutex.then(()=>this._encoder.writeBlock({cid:t,bytes:e.bytes})),this._mutex}async close(){if(this._ended)throw new Error("Already closed");return await this._mutex,this._ended=!0,this._encoder.close()}version(){return this._encoder.version()}static create(e){e=MU(e);let{encoder:t,iterator:n}=MT(),i=new r(e,t),o=new Gm(n);return{writer:i,out:o}}static createAppender(){let{encoder:e,iterator:t}=MT();e.setRoots=()=>Promise.resolve();let n=new r([],e),i=new Gm(t);return{writer:n,out:i}}static async updateRootsInBytes(e,t){let n=ed(e);await N5(n);let i=O5(t);if(Number(n.pos)!==i.length)throw new Error(`updateRoots() can only overwrite a header of the same length (old header is ${n.pos} bytes, new header is ${i.length} bytes)`);return e.set(i,0),e}},Gm=class{constructor(e){this._iterator=e}[Symbol.asyncIterator](){if(this._iterating)throw new Error("Multiple iterator not supported");return this._iterating=!0,this._iterator}};function MT(){let r=BT(),{writer:e,iterator:t}=r;return{encoder:OT(e),iterator:t}}function MU(r){if(r===void 0)return[];if(!Array.isArray(r)){let t=B.asCID(r);if(!t)throw new TypeError("roots must be a single CID or an array of CIDs");return[t]}let e=[];for(let t of r){let n=B.asCID(t);if(!n)throw new TypeError("roots must be a single CID or an array of CIDs");e.push(n)}return e}var FU=1,B5=class{components;constructor(e,t){this.components=e}async import(e,t){await Lt(this.components.blockstore.putMany(Je(e.blocks(),({cid:n,bytes:i})=>({cid:n,block:i})),t))}async export(e,t,n){let i=Z(),o=Array.isArray(e)?e:[e],s=new Cr({concurrency:FU});s.on("idle",()=>{i.resolve()}),s.on("error",a=>{s.clear(),i.reject(a)});for(let a of o)s.add(async()=>{await this.#e(a,s,async(c,l)=>{n?.blockFilter?.has(c.multihash.bytes)!==!0&&(n?.blockFilter?.add(c.multihash.bytes),await t.put({cid:c,bytes:l}))},n)}).catch(()=>{});try{await i.promise}finally{await t.close()}}async*stream(e,t){let{writer:n,out:i}=td.create(e);this.export(e,n,t).catch(()=>{});for await(let o of i)yield o}async#e(e,t,n,i){let o=await this.components.getCodec(e.code),s=await this.components.blockstore.get(e,i);await n(e,s);let a=jf({bytes:s,cid:e,codec:o});for await(let[,c]of a.links())t.add(async()=>{await this.#e(c,t,n,i)})}};function FT(r,e={}){return new B5(r,e)}function rd(r,e={}){let t=bc(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(i){try{let{value:o,done:s}=await t.next();if(this._cancelled)return;if(s===!0){i.close();return}i.enqueue(o)}catch(o){i.error(o)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}function M5(r,e,t){Object.defineProperty(r,e,{enumerable:!0,configurable:!1,set:()=>{},get:()=>t})}function Qi(r,e){M5(r,"type",e)}function Zi(r,e){M5(r,"url",e)}function UT(r){M5(r,"redirected",!0)}function Kn(r,e,t){let n=new Response(e,{...t??{},status:200,statusText:"OK"});return t?.redirected===!0&&UT(n),Qi(n,"basic"),Zi(n,r),n.headers.set("Accept-Ranges","bytes"),n}function zc(r,e,t){let n=new Response(e,{...t??{},status:502,statusText:"Bad Gateway"});return Qi(n,"basic"),Zi(n,r),n}function Ym(r,e,t){let n=new Response(e,{...t??{},status:501,statusText:"Not Implemented"});return n.headers.set("X-Content-Type-Options","nosniff"),Qi(n,"basic"),Zi(n,r),n}function Ji(r,e,t){let n=new Response(e,{...t??{},status:406,statusText:"Not Acceptable"});return Qi(n,"basic"),Zi(n,r),n}function Xm(r,e,t){let n=new Response(e,{...t??{},status:404,statusText:"Not Found"});return Qi(n,"basic"),Zi(n,r),n}function nd(r,e,t){e instanceof Error&&(e=e.message);let n=new Response(e,{...t??{},status:400,statusText:"Bad Request"});return Qi(n,"basic"),Zi(n,r),n}function id(r,e,t){let n=new Response(null,{...t??{},status:301,statusText:"Moved Permanently",headers:{...t?.headers??{},location:e}});return Qi(n,"basic"),Zi(n,r),n}function jm(r,e,{byteRangeContext:t,log:n},i){if(!t.isRangeRequest)return Kn(r,e,i);if(!t.isValidRangeRequest)return Wm(r,e,i);let o;try{o=new Response(e,{...i??{},status:206,statusText:"Partial Content",headers:{...i?.headers??{},"content-range":t.contentRangeHeaderValue}})}catch(s){return n?.error("failed to create range response",s),Wm(r,e,i)}return i?.redirected===!0&&UT(o),Qi(o,"basic"),Zi(o,r),o.headers.set("Accept-Ranges","bytes"),o}function Wm(r,e,t){let n=new Response(e,{...t??{},status:416,statusText:"Requested Range Not Satisfiable"});return Qi(n,"basic"),Zi(n,r),n}var gt=class{codes=[];log;pluginOptions;constructor(e){let t=this.constructor.name.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();this.log=e.logger.forComponent(t),this.pluginOptions=e}canHandle(e){throw new Error("Not implemented")}async handle(e){throw new Error("Not implemented")}};function UU({cid:r,ipfsPath:e,query:t}){return t.filename!=null?t.filename:`${e.replace(/\/ipfs\//,"").replace(/\/ipns\//,"").replace(/\//g,"_")}.car`}var Qm=class extends gt{canHandle(e){return this.log("checking if we can handle %c with accept %s",e.cid,e.accept),e.accept?.startsWith("application/vnd.ipld.car")===!0||e.query.format==="car"}async handle(e){let{options:t,pathDetails:n,cid:i}=e,{getBlockstore:o,helia:s}=this.pluginOptions;e.reqFormat="car",e.query.download=!0,e.query.filename=UU(e);let a=o(i,e.resource,t?.session??!0,t),c=FT({blockstore:a,getCodec:s.getCodec}),l=rd(c.stream(n?.terminalElement.cid??i,t)),u=Kn(e.resource,l);return u.headers.set("content-type","application/vnd.ipld.car; version=1"),u}};function HT(r){let e=xr(r,{allowIndefinite:!1,coerceUndefinedToNull:!1,allowNaN:!1,allowInfinity:!1,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,allowBigInt:!1});return new TextDecoder().decode(Ql(e))}var jr=class extends Error{static name="InvalidRangeError";constructor(e="Invalid range request"){super(e),this.name="InvalidRangeError"}},Zm=class extends Error{static name="NoContentError";constructor(e="No content found"){super(e),this.name="NoContentError"}},Jm=class extends Error{static name="SubdomainNotSupportedError";constructor(e="Subdomain not supported"){super(e),this.name="SubdomainNotSupportedError"}};function zT({ttl:r,protocol:e,response:t}){if(t.headers.has("cache-control"))return;let n;e==="ipfs"?n="public, max-age=29030400, immutable":r==null?n="public, max-age=300":n=`public, max-age=${r}`,t.headers.set("cache-control",n)}function $T({byteStart:r,byteEnd:e,byteSize:t}){let n=t??"*";if((e??0)>=(t??1/0))throw new jr("Invalid range: Range-end index is greater than or equal to the size of the file.");if((r??0)>=(t??1/0))throw new jr("Invalid range: Range-start index is greater than or equal to the size of the file.");if(r!=null&&e==null)return t==null?`bytes */${n}`:`bytes ${r}-${t-1}/${t}`;if(r==null&&e!=null){if(t==null)return`bytes */${n}`;let i=t-1;return`bytes ${i-e+1}-${i}/${t}`}return r==null&&e==null?`bytes */${n}`:`bytes ${r}-${e}/${n}`}function e2(r,e){e!=null&&r.headers.set("X-Ipfs-Roots",e.map(t=>t.toV1().toString()).join(","))}var Gn=class extends Error{name;code;constructor(e,t,n){super(e),this.name=t,this.code=n}},Qr=class extends Gn{constructor(e="not a Unixfs node"){super(e,"NotUnixFSError","ERR_NOT_UNIXFS")}},Sr=class extends Gn{constructor(e="invalid PBNode"){super(e,"InvalidPBNodeError","ERR_INVALID_PB_NODE")}},Qo=class extends Gn{constructor(e="unknown error"){super(e,"InvalidPBNodeError","ERR_UNKNOWN_ERROR")}},od=class extends Gn{constructor(e="path already exists"){super(e,"AlreadyExistsError","ERR_ALREADY_EXISTS")}},$c=class extends Gn{constructor(e="path does not exist"){super(e,"DoesNotExistError","ERR_DOES_NOT_EXIST")}},Vc=class extends Gn{constructor(e="no content"){super(e,"NoContentError","ERR_NO_CONTENT")}},t2=class extends Gn{constructor(e="not a file"){super(e,"NotAFileError","ERR_NOT_A_FILE")}},Zo=class extends Gn{constructor(e="not a directory"){super(e,"NotADirectoryError","ERR_NOT_A_DIRECTORY")}},Zr=class extends Gn{constructor(e="invalid parameters"){super(e,"InvalidParametersError","ERR_INVALID_PARAMETERS")}};function HU(r){return r[Symbol.asyncIterator]!=null}function zU(r){if(HU(r))return(async()=>{let t;for await(let n of r)t=n;return t})();let e;for(let t of r)e=t;return e}var Jo=zU;var r2=class r extends Error{static name="BadPathError";static code="ERR_BAD_PATH";name=r.name;code=r.code;constructor(e="Bad path"){super(e)}},bn=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not found"){super(e)}},n2=class r extends Error{static name="NoResolverError";static code="ERR_NO_RESOLVER";name=r.name;code=r.code;constructor(e="No resolver"){super(e)}},Pt=class r extends Error{static name="NotUnixFSError";static code="ERR_NOT_UNIXFS";name=r.name;code=r.code;constructor(e="Not UnixFS"){super(e)}},i2=class r extends Error{static name="OverReadError";static code="ERR_OVER_READ";name=r.name;code=r.code;constructor(e="Over read"){super(e)}},o2=class r extends Error{static name="UnderReadError";static code="ERR_UNDER_READ";name=r.name;code=r.code;constructor(e="Under read"){super(e)}},s2=class r extends Error{static name="NoPropError";static code="ERR_NO_PROP";name=r.name;code=r.code;constructor(e="No Property found"){super(e)}},la=class r extends Error{static name="InvalidParametersError";static code="ERR_INVALID_PARAMS";name=r.name;code=r.code;constructor(e="Invalid parameters"){super(e)}};function qc(r,e,t,n,i,o,s){let a=r,c=i;for(;o.length>0;){let l=o[0];if(l in a){o.shift(),c=`${c}/${l}`;let u=B.asCID(a[l]);if(u!=null)return{entry:{type:"object",name:n,path:i,cid:t,node:e,depth:s,size:BigInt(e.length),content:async function*(){yield r}},next:{cid:u,name:l,path:c,toResolve:o}};a=a[l]}else throw new s2(`No property named ${l} found in node ${t}`)}return{entry:{type:"object",name:n,path:i,cid:t,node:e,depth:s,size:BigInt(e.length),content:async function*(){yield r}}}}var $U=async(r,e,t,n,i,o,s,a)=>{let c=await s.get(r,a),l=ko(c);return qc(l,c,r,e,t,n,o)},VT=$U;var VU=async(r,e,t,n,i,o,s,a)=>{let c=await s.get(r,a),l=ec(c);return qc(l,c,r,e,t,n,o)},qT=VU;function qU(r,e,t,n){let i=BigInt(r.length),o=BigInt(e+i);return t>=o||n<e?new Uint8Array(0):(n>=e&&n<o&&(r=r.subarray(0,Number(n-e))),t>=e&&t<o&&(r=r.subarray(Number(t-e))),r)}var ua=qU;var KU=(r,e=0,t=r)=>{let n=BigInt(r),i=BigInt(e??0),o=BigInt(t);if(o!==n&&(o=i+o),o>n&&(o=n),i<0n)throw new la("Offset must be greater than or equal to 0");if(i>n)throw new la("Offset must be less than the file size");if(o<0n)throw new la("Length must be greater than or equal to 0");if(o>n)throw new la("Length must be less than the file size");return{start:i,end:o}},Kc=KU;var GU=r=>{async function*e(t={}){let{start:n,end:i}=Kc(r.length,t.offset,t.length),o=ua(r,0n,n,i);t.onProgress?.(new M("unixfs:exporter:progress:identity",{bytesRead:BigInt(o.byteLength),totalBytes:i-n,fileSize:BigInt(r.byteLength)})),yield o}return e},WU=async(r,e,t,n,i,o,s,a)=>{if(n.length>0)throw new bn(`No link named ${t} found in raw node ${r}`);let c=pe(r.multihash.bytes);return{entry:{type:"identity",name:e,path:t,cid:r,content:GU(c.digest),depth:o,size:BigInt(c.digest.length),node:c.digest}}},KT=WU;var YU=async(r,e,t,n,i,o,s,a)=>{let c=await s.get(r,a),l=Dg(c);return qc(l,c,r,e,t,n,o)},GT=YU;var XU=r=>{async function*e(t={}){let{start:n,end:i}=Kc(r.length,t.offset,t.length),o=ua(r,0n,n,i);t.onProgress?.(new M("unixfs:exporter:progress:raw",{bytesRead:BigInt(o.byteLength),totalBytes:i-n,fileSize:BigInt(r.byteLength)})),yield o}return e},jU=async(r,e,t,n,i,o,s,a)=>{if(n.length>0)throw new bn(`No link named ${t} found in raw node ${r}`);let c=await s.get(r,a);return{entry:{type:"raw",name:e,path:t,cid:r,content:XU(c),depth:o,size:BigInt(c.length),node:c}}},WT=jU;var sd=class r extends Error{static name="InvalidTypeError";static code="ERR_INVALID_TYPE";name=r.name;code=r.code;constructor(e="Invalid type"){super(e)}};var Wn;(function(r){let e;(function(i){i.Raw="Raw",i.Directory="Directory",i.File="File",i.Metadata="Metadata",i.Symlink="Symlink",i.HAMTShard="HAMTShard"})(e=r.DataType||(r.DataType={}));let t;(function(i){i[i.Raw=0]="Raw",i[i.Directory=1]="Directory",i[i.File=2]="File",i[i.Metadata=3]="Metadata",i[i.Symlink=4]="Symlink",i[i.HAMTShard=5]="HAMTShard"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.DataType||(r.DataType={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{if(s.lengthDelimited!==!1&&o.fork(),i.Type!=null&&(o.uint32(8),r.DataType.codec().encode(i.Type,o)),i.Data!=null&&(o.uint32(18),o.bytes(i.Data)),i.filesize!=null&&(o.uint32(24),o.uint64(i.filesize)),i.blocksizes!=null)for(let a of i.blocksizes)o.uint32(32),o.uint64(a);i.hashType!=null&&(o.uint32(40),o.uint64(i.hashType)),i.fanout!=null&&(o.uint32(48),o.uint64(i.fanout)),i.mode!=null&&(o.uint32(56),o.uint32(i.mode)),i.mtime!=null&&(o.uint32(66),a2.codec().encode(i.mtime,o)),s.lengthDelimited!==!1&&o.ldelim()},(i,o)=>{let s={blocksizes:[]},a=o==null?i.len:i.pos+o;for(;i.pos<a;){let c=i.uint32();switch(c>>>3){case 1:s.Type=r.DataType.codec().decode(i);break;case 2:s.Data=i.bytes();break;case 3:s.filesize=i.uint64();break;case 4:s.blocksizes.push(i.uint64());break;case 5:s.hashType=i.uint64();break;case 6:s.fanout=i.uint64();break;case 7:s.mode=i.uint32();break;case 8:s.mtime=a2.codec().decode(i,i.uint32());break;default:i.skipType(c&7);break}}return s})),n),r.encode=i=>re(i,r.codec()),r.decode=i=>te(i,r.codec())})(Wn||(Wn={}));var a2;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.Seconds!=null&&(n.uint32(8),n.int64(t.Seconds)),t.FractionalNanoseconds!=null&&(n.uint32(21),n.fixed32(t.FractionalNanoseconds)),i.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let i={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let s=t.uint32();switch(s>>>3){case 1:i.Seconds=t.int64();break;case 2:i.FractionalNanoseconds=t.fixed32();break;default:t.skipType(s&7);break}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(a2||(a2={}));var YT;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.MimeType!=null&&(n.uint32(10),n.string(t.MimeType)),i.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let i={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let s=t.uint32();switch(s>>>3){case 1:i.MimeType=t.string();break;default:t.skipType(s&7);break}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(YT||(YT={}));var XT={Raw:"raw",Directory:"directory",File:"file",Metadata:"metadata",Symlink:"symlink",HAMTShard:"hamt-sharded-directory"},QU=["directory","hamt-sharded-directory"],jT=parseInt("0644",8),QT=parseInt("0755",8),ae=class r{static unmarshal(e){let t=Wn.decode(e),n=new r({type:XT[t.Type!=null?t.Type.toString():"File"],data:t.Data,blockSizes:t.blocksizes,mode:t.mode,mtime:t.mtime!=null?{secs:t.mtime.Seconds??0n,nsecs:t.mtime.FractionalNanoseconds}:void 0,fanout:t.fanout});return n._originalMode=t.mode??0,n}type;data;blockSizes;hashType;fanout;mtime;_mode;_originalMode;constructor(e={type:"file"}){let{type:t,data:n,blockSizes:i,hashType:o,fanout:s,mtime:a,mode:c}=e;if(t!=null&&!Object.values(XT).includes(t))throw new sd("Type: "+t+" is not valid");this.type=t??"file",this.data=n,this.hashType=o,this.fanout=s,this.blockSizes=i??[],this._originalMode=0,this.mode=c,this.mtime=a}set mode(e){e==null?this._mode=this.isDirectory()?QT:jT:this._mode=e&4095}get mode(){return this._mode}isDirectory(){return QU.includes(this.type)}addBlockSize(e){this.blockSizes.push(e)}removeBlockSize(e){this.blockSizes.splice(e,1)}fileSize(){if(this.isDirectory())return 0n;let e=0n;return this.blockSizes.forEach(t=>{e+=t}),this.data!=null&&(e+=BigInt(this.data.length)),e}marshal(){let e;switch(this.type){case"raw":e=Wn.DataType.Raw;break;case"directory":e=Wn.DataType.Directory;break;case"file":e=Wn.DataType.File;break;case"metadata":e=Wn.DataType.Metadata;break;case"symlink":e=Wn.DataType.Symlink;break;case"hamt-sharded-directory":e=Wn.DataType.HAMTShard;break;default:throw new sd(`Type: ${e} is not valid`)}let t=this.data;(this.data==null||this.data.length===0)&&(t=void 0);let n;this.mode!=null&&(n=this._originalMode&4294963200|(this.mode??0),n===jT&&!this.isDirectory()&&(n=void 0),n===QT&&this.isDirectory()&&(n=void 0));let i;return this.mtime!=null&&(i={Seconds:this.mtime.secs,FractionalNanoseconds:this.mtime.nsecs}),Wn.encode({Type:e,Data:t,filesize:this.isDirectory()?void 0:this.fileSize(),blocksizes:this.blockSizes,hashType:this.hashType,fanout:this.fanout,mode:n,mtime:i})}};var l2=ut(eI(),1);function ZU(r){let e=new Array(4);for(let t=0;t<4;t++)e[t]=r&255,r=r>>8;return new Uint8Array(e)}var tbe=hs({name:"murmur3-32",code:35,encode:r=>ZU(l2.default.x86.hash32(r))}),da=hs({name:"murmur3-128",code:34,encode:r=>ds.fromHex(l2.default.x64.hash128(r))}),rbe=hs({name:"murmur3-x64-64",code:34,encode:r=>ds.fromHex(l2.default.x64.hash128(r)).subarray(0,8)});var nI=ut(u2(),1);var Jr=class r{_options;_popCount;_parent;_posAtParent;_children;key;constructor(e,t,n=0){this._options=e,this._popCount=0,this._parent=t,this._posAtParent=n,this._children=new nI.default,this.key=null}async put(e,t){let n=await this._findNewBucketAndPos(e);n.bucket._putAt(n,e,t)}async get(e){let t=await this._findChild(e);if(t!=null)return t.value}async del(e){let t=await this._findPlace(e),n=t.bucket._at(t.pos);n!=null&&n.key===e&&t.bucket._delAt(t.pos)}leafCount(){return this._children.compactArray().reduce((t,n)=>n instanceof r?t+n.leafCount():t+1,0)}childrenCount(){return this._children.length}onlyChild(){return this._children.get(0)}*eachLeafSeries(){let e=this._children.compactArray();for(let t of e)t instanceof r?yield*t.eachLeafSeries():yield t}serialize(e,t){let n=[];return t(this._children.reduce((i,o,s)=>(o!=null&&(o instanceof r?i.push(o.serialize(e,t)):i.push(e(o,s))),i),n))}async asyncTransform(e,t){return iI(this,e,t)}toJSON(){return this.serialize(nH,iH)}prettyPrint(){return JSON.stringify(this.toJSON(),null," ")}tableSize(){return Math.pow(2,this._options.bits)}async _findChild(e){let t=await this._findPlace(e),n=t.bucket._at(t.pos);if(!(n instanceof r)&&n!=null&&n.key===e)return n}async _findPlace(e){let t=this._options.hash(typeof e=="string"?C(e):e),n=await t.take(this._options.bits),i=this._children.get(n);return i instanceof r?i._findPlace(t):{bucket:this,pos:n,hash:t,existingChild:i}}async _findNewBucketAndPos(e){let t=await this._findPlace(e);if(t.existingChild!=null&&t.existingChild.key!==e){let n=new r(this._options,t.bucket,t.pos);t.bucket._putObjectAt(t.pos,n);let i=await n._findPlace(t.existingChild.hash);return i.bucket._putAt(i,t.existingChild.key,t.existingChild.value),n._findNewBucketAndPos(t.hash)}return t}_putAt(e,t,n){this._putObjectAt(e.pos,{key:t,value:n,hash:e.hash})}_putObjectAt(e,t){this._children.get(e)==null&&this._popCount++,this._children.set(e,t)}_delAt(e){if(e===-1)throw new Error("Invalid position");this._children.get(e)!=null&&this._popCount--,this._children.unset(e),this._level()}_level(){if(this._parent!=null&&this._popCount<=1)if(this._popCount===1){let e=this._children.find(rH);if(e!=null&&!(e instanceof r)){let t=e.hash;t.untake(this._options.bits);let n={pos:this._posAtParent,hash:t,bucket:this._parent};this._parent._putAt(n,e.key,e.value)}}else this._parent._delAt(this._posAtParent)}_at(e){return this._children.get(e)}};function rH(r){return!!r}function nH(r,e){return r.key}function iH(r){return r}async function iI(r,e,t){let n=[];for(let i of r._children.compactArray())if(i instanceof Jr)await iI(i,e,t);else{let o=await e(i);n.push({bitField:r._children.bitField(),children:o})}return t(n)}var oH=[255,254,252,248,240,224,192,128],sH=[1,3,7,15,31,63,127,255],d2=class{_value;_currentBytePos;_currentBitPos;constructor(e){this._value=e,this._currentBytePos=e.length-1,this._currentBitPos=7}availableBits(){return this._currentBitPos+1+this._currentBytePos*8}totalBits(){return this._value.length*8}take(e){let t=e,n=0;for(;t>0&&this._haveBits();){let i=this._value[this._currentBytePos],o=this._currentBitPos+1,s=Math.min(o,t),a=aH(i,o-s,s);n=(n<<s)+a,t-=s,this._currentBitPos-=s,this._currentBitPos<0&&(this._currentBitPos=7,this._currentBytePos--)}return n}untake(e){for(this._currentBitPos+=e;this._currentBitPos>7;)this._currentBitPos-=8,this._currentBytePos+=1}_haveBits(){return this._currentBytePos>=0}};function aH(r,e,t){let n=cH(e,t);return(r&n)>>>e}function cH(r,e){return oH[r]&sH[Math.min(e+r-1,7)]}function oI(r){function e(t){return t instanceof f2?t:new f2(t,r)}return e}var f2=class{_value;_hashFn;_depth;_availableBits;_currentBufferIndex;_buffers;constructor(e,t){if(!(e instanceof Uint8Array))throw new Error("can only hash Uint8Arrays");this._value=e,this._hashFn=t,this._depth=-1,this._availableBits=0,this._currentBufferIndex=0,this._buffers=[]}async take(e){let t=e;for(;this._availableBits<t;)await this._produceMoreBits();let n=0;for(;t>0;){let i=this._buffers[this._currentBufferIndex],o=Math.min(i.availableBits(),t),s=i.take(o);n=(n<<o)+s,t-=o,this._availableBits-=o,i.availableBits()===0&&this._currentBufferIndex++}return n}untake(e){let t=e;for(;t>0;){let n=this._buffers[this._currentBufferIndex],i=Math.min(n.totalBits()-n.availableBits(),t);n.untake(i),t-=i,this._availableBits+=i,this._currentBufferIndex>0&&n.totalBits()===n.availableBits()&&(this._depth--,this._currentBufferIndex--)}}async _produceMoreBits(){this._depth++;let e=this._depth>0?ge([this._value,Uint8Array.from([this._depth])]):this._value,t=await this._hashFn(e),n=new d2(t);this._buffers.push(n),this._availableBits+=n.availableBits()}};function Gc(r){if(r==null||r.hashFn==null)throw new Error("please define an options.hashFn");let e={bits:r.bits??8,hash:oI(r.hashFn)};return new Jr(e)}var lH=async function(r){return(await da.encode(r)).slice(0,8).reverse()},uH=async(r,e,t)=>{let n=(e.tableSize()-1).toString(16).length;await Promise.all(r.map(async i=>{if(i.Name==null)throw new Error("Unexpected Link without a Name");if(i.Name.length===n){let o=parseInt(i.Name,16);e._putObjectAt(o,new Jr({hash:t._options.hash,bits:t._options.bits},e,o));return}await t.put(i.Name.substring(2),!0)}))},sI=(r,e)=>r.toString(16).toUpperCase().padStart(e,"0").substring(0,e),dH=r=>{let e=r.bucket,t=[];for(;e._parent!=null;)t.push(e),e=e._parent;return t.push(e),t.reverse()},aI=async(r,e,t,n,i)=>{if(n==null){if(r.Data==null)throw new Pt("no data in PBNode");let d;try{d=ae.unmarshal(r.Data)}catch(f){throw new Pt(f.message)}if(d.type!=="hamt-sharded-directory")throw new Pt("not a HAMT");if(d.fanout==null)throw new Pt("missing fanout");let h=Gc({hashFn:lH,bits:Math.log2(Number(d.fanout))});n={rootBucket:h,hamtDepth:1,lastBucket:h}}let o=(n.lastBucket.tableSize()-1).toString(16).length;await uH(r.Links,n.lastBucket,n.rootBucket);let s=await n.rootBucket._findNewBucketAndPos(e),a=sI(s.pos,o),c=dH(s);c.length>n.hamtDepth&&(n.lastBucket=c[n.hamtDepth],a=sI(n.lastBucket._posAtParent,o));let l=r.Links.find(d=>{if(d.Name==null)return!1;let h=d.Name.substring(0,o),f=d.Name.substring(o);return!(h!==a||f!==""&&f!==e)});if(l==null)return;if(l.Name!=null&&l.Name.substring(o)===e)return l.Hash;n.hamtDepth++;let u=await t.get(l.Hash,i);return r=xt(u),aI(r,e,t,n,i)},cI=aI;var fH=(r,e,t,n,i,o,s)=>{async function*a(c={}){let l=c.offset??0,u=c.length??e.Links.length,d=e.Links.slice(l,u);c.onProgress?.(new M("unixfs:exporter:walk:directory",{cid:r})),yield*Re(d,h=>Je(h,f=>async()=>{let p=f.Name??"",m=`${n}/${p}`;return(await i(f.Hash,p,m,[],o+1,s,c)).entry}),h=>Yt(h,{ordered:!0,concurrency:c.blockReadConcurrency}),h=>Wr(h,f=>f!=null))}return a},lI=fH;async function uI(r,e,t,n,i,o,s){if(e instanceof Uint8Array){let l=ua(e,n,i,o);t.push(l);return}if(e.Data==null)throw new Pt("no data in PBNode");let a;try{a=ae.unmarshal(e.Data)}catch(l){throw new Pt(l.message)}if(a.data!=null){let l=a.data,u=ua(l,n,i,o);t.push(u),n+=BigInt(u.byteLength)}let c=[];if(e.Links.length!==a.blockSizes.length)throw new Pt("Inconsistent block sizes and dag links");for(let l=0;l<e.Links.length;l++){let u=e.Links[l],d=n,h=d+a.blockSizes[l];if((i>=d&&i<h||o>=d&&o<=h||i<d&&o>h)&&c.push({link:u,blockStart:n}),n=h,n>o)break}await Re(c,l=>Je(l,u=>async()=>{let d=await r.get(u.link.Hash,s);return{...u,block:d}}),l=>Yt(l,{ordered:!0,concurrency:s.blockReadConcurrency}),async l=>{for await(let{link:u,block:d,blockStart:h}of l){let f;switch(u.Hash.code){case Le:f=xt(d);break;case We:f=d;break;default:t.end(new Pt(`Unsupported codec: ${u.Hash.code}`));return}let p=new Cr({concurrency:1});p.on("error",m=>{t.end(m)}),p.add(async()=>{s.onProgress?.(new M("unixfs:exporter:walk:file",{cid:u.Hash})),await uI(r,f,t,h,i,o,s)}),await p.onIdle()}}),n>=o&&t.end()}var hH=(r,e,t,n,i,o,s)=>{async function*a(c={}){let l=t.fileSize();if(l===void 0)throw new Error("File was a directory");let{start:u,end:d}=Kc(l,c.offset,c.length);if(d===0n)return;let h=0n,f=d-u,p=rr();c.onProgress?.(new M("unixfs:exporter:walk:file",{cid:r})),uI(s,e,p,0n,u,d,c).catch(m=>{p.end(m)});for await(let m of p)if(m!=null){if(h+=BigInt(m.byteLength),h>f)throw p.end(),new i2("Read too many bytes - the file size reported by the UnixFS data in the root node may be incorrect");h===f&&p.end(),c.onProgress?.(new M("unixfs:exporter:progress:unixfs:file",{bytesRead:h,totalBytes:f,fileSize:l})),yield m}if(h<f)throw new o2("Traversed entire DAG but did not read enough bytes")}return a},F5=hH;var pH=(r,e,t,n,i,o,s)=>{function a(c={}){return c.onProgress?.(new M("unixfs:exporter:walk:hamt-sharded-directory",{cid:r})),dI(e,n,i,o,s,c)}return a};async function*dI(r,e,t,n,i,o){let s=r.Links;if(r.Data==null)throw new Pt("no data in PBNode");let a;try{a=ae.unmarshal(r.Data)}catch(u){throw new Pt(u.message)}if(a.fanout==null)throw new Pt("missing fanout");let c=(a.fanout-1n).toString(16).length,l=Re(s,u=>Je(u,d=>async()=>{let h=d.Name!=null?d.Name.substring(c):null;if(h!=null&&h!==""){let f=await t(d.Hash,h,`${e}/${h}`,[],n+1,i,o);return{entries:f.entry==null?[]:[f.entry]}}else{let f=await i.get(d.Hash,o);return r=xt(f),o.onProgress?.(new M("unixfs:exporter:walk:hamt-sharded-directory",{cid:d.Hash})),{entries:dI(r,e,t,n,i,o)}}}),u=>Yt(u,{ordered:!0,concurrency:o.blockReadConcurrency}));for await(let{entries:u}of l)yield*u}var fI=pH;var mH=(r,e)=>r.Links.find(n=>n.Name===e)?.Hash,gH={raw:F5,file:F5,directory:lI,"hamt-sharded-directory":fI,metadata:(r,e,t,n,i,o,s)=>()=>[],symlink:(r,e,t,n,i,o,s)=>()=>[]},yH=async(r,e,t,n,i,o,s,a)=>{let c=await s.get(r,a),l=xt(c),u,d;if(e==null&&(e=r.toString()),l.Data==null)throw new Pt("no data in PBNode");try{u=ae.unmarshal(l.Data)}catch(f){throw new Pt(f.message)}if(t==null&&(t=e),n.length>0){let f;if(u?.type==="hamt-sharded-directory"?f=await cI(l,n[0],s):f=mH(l,n[0]),f==null)throw new bn("file does not exist");let p=n.shift(),m=`${t}/${p}`;d={cid:f,toResolve:n,name:p??"",path:m}}let h=gH[u.type](r,l,u,t,i,o,s);if(h==null)throw new bn("could not find content exporter");return u.isDirectory()?{entry:{type:"directory",name:e,path:t,cid:r,content:h,unixfs:u,depth:o,node:l,size:u.fileSize()},next:d}:{entry:{type:"file",name:e,path:t,cid:r,content:h,unixfs:u,depth:o,node:l,size:u.fileSize()},next:d}},hI=yH;var wH={[Le]:hI,[We]:WT,[Pr]:VT,[ai]:qT,[At.code]:KT,[ri]:GT},pI=async(r,e,t,n,i,o,s)=>{let a=wH[r.code];if(a==null)throw new n2(`No resolver for code ${r.code}`);return a(r,e,t,n,pI,i,o,s)},mI=pI;var xH=(r="")=>(r.trim().match(/([^\\^/]|\\\/)+/g)??[]).filter(Boolean),bH=r=>{if(r instanceof Uint8Array)return{cid:B.decode(r),toResolve:[]};let e=B.asCID(r);if(e!=null)return{cid:e,toResolve:[]};if(typeof r=="string"){r.indexOf("/ipfs/")===0&&(r=r.substring(6));let t=xH(r);return{cid:B.parse(t[0]),toResolve:t.slice(1)}}throw new r2(`Unknown path type ${r}`)};async function*cd(r,e,t={}){let{cid:n,toResolve:i}=bH(r),o=n.toString(),s=o,a=i.length;for(;;){let c=await mI(n,o,s,i,a,e,t);if(c.entry==null&&c.next==null)throw new bn(`Could not resolve ${r}`);if(c.entry!=null&&(yield c.entry),c.next==null)return;i=c.next.toResolve,n=c.next.cid,o=c.next.name,s=c.next.path}}async function _t(r,e,t={}){let n=await Jo(cd(r,e,t));if(n==null)throw new bn(`Could not resolve ${r}`);return n}async function*Wc(r,e,t={}){let n=await _t(r,e,t);if(n==null)return;if(yield n,n.type==="directory")for await(let o of i(n,t))yield o;async function*i(o,s){for await(let a of o.content(s))yield a,!(a instanceof Uint8Array)&&a.type==="directory"&&(yield*i(a,s))}}async function vH(r,e,t){let n=[],i;for await(let o of cd(e,r,t))n.push(o.cid),i=o;if(i==null)throw new $c("No terminal element found");return{ipfsRoots:n,terminalElement:i}}function U5(r){return r.type==="object"}async function gI({cid:r,path:e,resource:t,options:n,blockstore:i,log:o}){try{return await vH(i,`${r.toString()}/${e}`,n)}catch(s){return n?.signal?.throwIfAborted(),["ERR_NO_PROP","ERR_NO_TERMINAL_ELEMENT","ERR_NOT_FOUND"].includes(s.code)?Xm(t):(o.error("error walking path %s",e,s),zc(t,"Error walking path"))}}var h2=class extends gt{codes=[Pr];canHandle({cid:e,accept:t,pathDetails:n}){return this.log("checking if we can handle %c with accept %s",e,t),n==null||!U5(n.terminalElement)||e.code!==Pr?!1:U5(n.terminalElement)}async handle(e){let{cid:t,path:n,resource:i,accept:o,pathDetails:s}=e;if(this.log.trace("fetching %c/%s",t,n),s==null)throw new Error("pathDetails is null");let a=s.ipfsRoots,l=s.terminalElement.node,u;if(o==="application/octet-stream"||o==="application/vnd.ipld.dag-cbor"||o==="application/cbor")u=l;else if(o==="application/vnd.ipld.dag-json")try{let f=ko(l);u=sh(f)}catch(f){return this.log.error("could not transform %c to application/vnd.ipld.dag-json",f),Ji(i)}else try{u=HT(l)}catch(f){if(o==="application/json")return this.log('could not decode DAG-CBOR as JSON-safe, but the client sent "Accept: application/json"',f),Ji(i);this.log("could not decode DAG-CBOR as JSON-safe, falling back to `application/octet-stream`",f),u=l}let d=Kn(i,u),h=o??(u instanceof Uint8Array?"application/octet-stream":"application/json");return d.headers.set("content-type",h),e2(d,a),d}};function EH(r){return r[Symbol.asyncIterator]!=null}function SH(r,e=1){return e=Number(e),EH(r)?async function*(){let t=[];if(e<1&&(e=1),e!==Math.round(e))throw new Error("Batch size must be an integer");for await(let n of r)for(t.push(n);t.length>=e;)yield t.slice(0,e),t=t.slice(e);for(;t.length>0;)yield t.slice(0,e),t=t.slice(e)}():function*(){let t=[];if(e<1&&(e=1),e!==Math.round(e))throw new Error("Batch size must be an integer");for(let n of r)for(t.push(n);t.length>=e;)yield t.slice(0,e),t=t.slice(e);for(;t.length>0;)yield t.slice(0,e),t=t.slice(e)}()}var p2=SH;async function*ld(r,e=1){for await(let t of p2(r,e)){let n=t.map(async i=>i().then(o=>({ok:!0,value:o}),o=>({ok:!1,err:o})));for(let i=0;i<n.length;i++){let o=await n[i];if(o.ok)yield o.value;else throw o.err}}}var AH=262144,ud=(r={})=>{let e=r.chunkSize??AH;return async function*(n){let i=new ee,o=0,s=!1;for await(let a of n)for(i.append(a),o+=a.length;o>=e;)if(yield i.slice(0,e),s=!0,e===i.length)i=new ee,o=0;else{let c=new ee;c.append(i.sublist(e)),i=c,o-=e}(!s||o>0)&&(yield i.subarray(0,o))}};var Yn=async(r,e,t)=>{t.codec==null&&(t.codec=bt);let n=await Se.digest(r),i=B.create(t.cidVersion,t.codec.code,n);return await e.put(i,r,t),i};function yI(r){return async function*(t,n){let i=0n;for await(let o of t.content)yield async()=>{let s,a={codec:bt,cidVersion:r.cidVersion,onProgress:r.onProgress};r.rawLeaves?(a.codec=Ar,a.cidVersion=1):(s=new ae({type:r.leafType,data:o}),o=Ie({Data:s.marshal(),Links:[]}));let c=await Yn(o,n,a);return i+=BigInt(o.byteLength),r.onProgress?.(new M("unixfs:importer:progress:file:write",{bytesWritten:i,cid:c,path:t.path})),{cid:c,unixfs:s,size:BigInt(o.length),block:o}}}}var dd=class r extends Error{static name="InvalidParametersError";static code="ERR_INVALID_PARAMS";name=r.name;code=r.code;constructor(e="Invalid parameters"){super(e)}};var es=class r extends Error{static name="InvalidContentError";static code="ERR_INVALID_CONTENT";name=r.name;code=r.code;constructor(e="Invalid content"){super(e)}};var wI=async(r,e,t)=>{let n=new ae({type:"directory",mtime:r.mtime,mode:r.mode}),i=Ie(ht({Data:n.marshal()})),o=await Yn(i,e,t),s=r.path;return{cid:o,path:s,unixfs:n,size:BigInt(i.length),originalPath:r.originalPath,block:i}};async function*TH(r,e,t){let n=-1,i;for await(let o of ld(t.bufferImporter(r,e),t.blockWriteConcurrency)){if(n++,n===0){i={...o,single:!0};continue}else n===1&&i!=null&&(yield{...i,block:void 0,single:void 0},i=void 0);yield{...o,block:void 0}}i!=null&&(yield i)}function xI(r){return r.single===!0}var IH=(r,e,t)=>async function(i){if(i.length===1&&xI(i[0])&&t.reduceSingleLeafToSelf){let u=i[0],d=u.block;return xI(u)&&(r.mtime!==void 0||r.mode!==void 0)&&(u.unixfs=new ae({type:"file",mtime:r.mtime,mode:r.mode,data:u.block}),d={Data:u.unixfs.marshal(),Links:[]},u.block=Ie(ht(d)),u.cid=await Yn(u.block,e,{...t,cidVersion:t.cidVersion}),u.size=BigInt(u.block.length)),t.onProgress?.(new M("unixfs:importer:progress:file:layout",{cid:u.cid,path:u.originalPath})),{cid:u.cid,path:r.path,unixfs:u.unixfs,size:u.size,originalPath:u.originalPath}}let o=new ae({type:"file",mtime:r.mtime,mode:r.mode}),s=i.filter(u=>u.cid.code===We&&u.size>0||u.unixfs!=null&&u.unixfs.data==null&&u.unixfs.fileSize()>0n?!0:!!u.unixfs?.data?.length).map(u=>u.cid.code===We?(o.addBlockSize(u.size),{Name:"",Tsize:Number(u.size),Hash:u.cid}):(u.unixfs?.data==null?o.addBlockSize(u.unixfs?.fileSize()??0n):o.addBlockSize(BigInt(u.unixfs.data.length)),{Name:"",Tsize:Number(u.size),Hash:u.cid})),a={Data:o.marshal(),Links:s},c=Ie(ht(a)),l=await Yn(c,e,t);return t.onProgress?.(new M("unixfs:importer:progress:file:layout",{cid:l,path:r.originalPath})),{cid:l,path:r.path,unixfs:o,size:BigInt(c.length+a.Links.reduce((u,d)=>u+(d.Tsize??0),0)),originalPath:r.originalPath,block:c}},bI=async(r,e,t)=>t.layout(TH(r,e,t),IH(r,e,t));function _H(r){return Symbol.iterator in r}function kH(r){return Symbol.asyncIterator in r}function CH(r){try{if(r instanceof Uint8Array)return async function*(){yield r}();if(_H(r))return async function*(){yield*r}();if(kH(r))return r}catch{throw new es("Content was invalid")}throw new es("Content was invalid")}function vI(r){return async function*(t,n){for await(let i of t){let o;if(i.path!=null&&(o=i.path,i.path=i.path.split("/").filter(s=>s!=null&&s!==".").join("/")),PH(i)){let s={path:i.path,mtime:i.mtime,mode:i.mode,content:async function*(){let a=0n;for await(let c of r.chunker(r.chunkValidator(CH(i.content)))){let l=BigInt(c.byteLength);a+=l,r.onProgress?.(new M("unixfs:importer:progress:file:read",{bytesRead:a,chunkSize:l,path:i.path})),yield c}}(),originalPath:o};yield async()=>bI(s,n,r)}else if(i.path!=null){let s={path:i.path,mtime:i.mtime,mode:i.mode,originalPath:o};yield async()=>wI(s,n,r)}else throw new Error("Import candidate must have content or path or both")}}}function PH(r){return r.content!=null}var EI=()=>async function*(e){for await(let t of e){if(t.length===void 0)throw new es("Content was invalid");if(typeof t=="string"||t instanceof String)yield C(t.toString());else if(Array.isArray(t))yield Uint8Array.from(t);else if(t instanceof Uint8Array)yield t;else throw new es("Content was invalid")}};var RH=174;function fd(r){let e=r?.maxChildrenPerNode??RH;return async function t(n,i){let o=[];for await(let s of p2(n,e))o.push(await i(s));return o.length>1?t(o,i):o[0]}}var fi=class{options;root;dir;path;dirty;flat;parent;parentKey;unixfs;mode;mtime;cid;size;nodeSize;constructor(e,t){this.options=t??{},this.root=e.root,this.dir=e.dir,this.path=e.path,this.dirty=e.dirty,this.flat=e.flat,this.parent=e.parent,this.parentKey=e.parentKey,this.unixfs=e.unixfs,this.mode=e.mode,this.mtime=e.mtime}},hd=B.parse("QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn"),pd=B.parse("zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi");var fa=class extends fi{_children;constructor(e,t){super(e,t),this._children=new Map}async put(e,t){this.cid=void 0,this.size=void 0,this.nodeSize=void 0,this._children.set(e,t)}async get(e){return Promise.resolve(this._children.get(e))}childCount(){return this._children.size}directChildrenCount(){return this.childCount()}onlyChild(){return this._children.values().next().value}async*eachChildSeries(){for(let[e,t]of this._children.entries())yield{key:e,child:t}}estimateNodeSize(){if(this.nodeSize!==void 0)return this.nodeSize;this.nodeSize=0;for(let[e,t]of this._children.entries())t.size!=null&&t.cid!=null&&(this.nodeSize+=e.length+(this.options.cidVersion===1?pd.bytes.byteLength:hd.bytes.byteLength));return this.nodeSize}async*flush(e){let t=[];for(let[c,l]of this._children.entries()){let u=l;if(l instanceof fi)for await(let d of l.flush(e))u=d,yield d;u.size!=null&&u.cid!=null&&t.push({Name:c,Tsize:Number(u.size),Hash:u.cid})}let n=new ae({type:"directory",mtime:this.mtime,mode:this.mode}),i={Data:n.marshal(),Links:t},o=Ie(ht(i)),s=await Yn(o,e,this.options),a=o.length+i.Links.reduce((c,l)=>c+(l.Tsize??0),0);this.cid=s,this.size=a,yield{cid:s,unixfs:n,path:this.path,size:BigInt(a)}}};async function DH(r){return(await da.encode(r)).slice(0,8).reverse()}var SI=BigInt(34),NH=8,H5=class extends fi{_bucket;constructor(e,t){super(e,t),this._bucket=Gc({hashFn:DH,bits:t.shardFanoutBits??NH})}async put(e,t){this.cid=void 0,this.size=void 0,this.nodeSize=void 0,await this._bucket.put(e,t)}async get(e){return this._bucket.get(e)}childCount(){return this._bucket.leafCount()}directChildrenCount(){return this._bucket.childrenCount()}onlyChild(){return this._bucket.onlyChild()}async*eachChildSeries(){for await(let{key:e,value:t}of this._bucket.eachLeafSeries())yield{key:e,child:t}}estimateNodeSize(){return this.nodeSize!==void 0?this.nodeSize:(this.nodeSize=II(this._bucket,this,this.options),this.nodeSize)}async*flush(e){for await(let t of TI(this._bucket,e,this,this.options))yield{...t,path:this.path}}},AI=H5;async function*TI(r,e,t,n){let i=r._children,o=(r.tableSize()-1).toString(16).length,s=[],a=0n;for(let p=0;p<i.length;p++){let m=i.get(p);if(m==null)continue;let g=p.toString(16).toUpperCase().padStart(o,"0");if(m instanceof Jr){let y;for await(let w of TI(m,e,null,n))y=w;if(y==null)throw new Error("Could not flush sharded directory, no subshard found");s.push({Name:g,Tsize:Number(y.size),Hash:y.cid}),a+=y.size}else if(LH(m.value)){let y=m.value,w;for await(let b of y.flush(e))w=b,yield w;if(w==null)throw new Error("Did not flush dir");let x=g+m.key;s.push({Name:x,Tsize:Number(w.size),Hash:w.cid}),a+=w.size}else{let y=m.value;if(y.cid==null)continue;let w=g+m.key,x=y.size;s.push({Name:w,Tsize:Number(x),Hash:y.cid}),a+=BigInt(x??0)}}let c=Uint8Array.from(i.bitField().reverse()),l=new ae({type:"hamt-sharded-directory",data:c,fanout:BigInt(r.tableSize()),hashType:SI,mtime:t?.mtime,mode:t?.mode}),u={Data:l.marshal(),Links:s},d=Ie(ht(u)),h=await Yn(d,e,n),f=BigInt(d.byteLength)+a;yield{cid:h,unixfs:l,size:f}}function LH(r){return typeof r.flush=="function"}function II(r,e,t){let n=r._children,i=(r.tableSize()-1).toString(16).length,o=[];for(let l=0;l<n.length;l++){let u=n.get(l);if(u==null)continue;let d=l.toString(16).toUpperCase().padStart(i,"0");if(u instanceof Jr){let h=II(u,null,t);o.push({Name:d,Tsize:Number(h),Hash:t.cidVersion===0?hd:pd})}else if(typeof u.value.flush=="function"){let f=u.value.nodeSize();o.push({Name:d+u.key,Tsize:Number(f),Hash:t.cidVersion===0?hd:pd})}else{let h=u.value;if(h.cid==null)continue;let f=d+u.key,p=h.size;o.push({Name:f,Tsize:Number(p),Hash:h.cid})}}let s=Uint8Array.from(n.bitField().reverse()),a=new ae({type:"hamt-sharded-directory",data:s,fanout:BigInt(r.tableSize()),hashType:SI,mtime:e?.mtime,mode:e?.mode});return Ie(ht({Data:a.marshal(),Links:o})).length}async function z5(r,e,t,n){let i=e;e instanceof fa&&e.estimateNodeSize()>t&&(i=await OH(e,n));let o=i.parent;if(o!=null){if(i!==e){if(r!=null&&(r.parent=i),i.parentKey==null)throw new Error("No parent key found");await o.put(i.parentKey,i)}return z5(i,o,t,n)}return i}async function OH(r,e){let t=new AI({root:r.root,dir:!0,parent:r.parent,parentKey:r.parentKey,path:r.path,dirty:r.dirty,flat:!1,mtime:r.mtime,mode:r.mode},e);for await(let{key:n,child:i}of r.eachChildSeries())await t.put(n,i);return t}var _I=(r="")=>r.split(/(?<!\\)\//).filter(Boolean);async function BH(r,e,t){let n=_I(r.path??""),i=n.length-1,o=e,s="";for(let a=0;a<n.length;a++){let c=n[a];s+=`${s!==""?"/":""}${c}`;let l=a===i;if(o.dirty=!0,o.cid=void 0,o.size=void 0,l)await o.put(c,r),e=await z5(null,o,t.shardSplitThresholdBytes,t);else{let u=await o.get(c);(u==null||!(u instanceof fi))&&(u=new fa({root:!1,dir:!0,parent:o,parentKey:c,path:s,dirty:!0,flat:!0,mtime:u?.unixfs?.mtime,mode:u?.unixfs?.mode},t)),await o.put(c,u),o=u}}return e}async function*kI(r,e){if(!(r instanceof fi)){r.unixfs?.isDirectory()===!0&&(yield r);return}yield*r.flush(e)}function CI(r){return async function*(t,n){let i=new fa({root:!0,dir:!0,path:"",dirty:!0,flat:!0},r),o,s=!1;for await(let a of t){if(a==null)continue;let c=`${a.originalPath??""}`.split("/")[0];c!=null&&c!==""&&(o==null?(o=c,s=!0):o!==c&&(s=!1)),i=await BH(a,i,r),a.unixfs?.isDirectory()!==!0&&(yield a)}if(r.wrapWithDirectory||s&&i.childCount()>1)yield*kI(i,n);else for await(let a of i.eachChildSeries())a!=null&&(yield*kI(a.child,n))}}async function*ts(r,e,t={}){let n;Symbol.asyncIterator in r||Symbol.iterator in r?n=r:n=[r];let i=t.wrapWithDirectory??!1,o=t.shardSplitThresholdBytes??262144,s=t.shardFanoutBits??8,a=t.cidVersion??1,c=t.rawLeaves??!0,l=t.leafType??"file",u=t.fileImportConcurrency??50,d=t.blockWriteConcurrency??10,h=t.reduceSingleLeafToSelf??!0,f=t.chunker??ud(),p=t.chunkValidator??EI(),m=t.dagBuilder??vI({chunker:f,chunkValidator:p,wrapWithDirectory:i,layout:t.layout??fd(),bufferImporter:t.bufferImporter??yI({cidVersion:a,rawLeaves:c,leafType:l,onProgress:t.onProgress}),blockWriteConcurrency:d,reduceSingleLeafToSelf:h,cidVersion:a,onProgress:t.onProgress}),g=t.treeBuilder??CI({wrapWithDirectory:i,shardSplitThresholdBytes:o,shardFanoutBits:s,cidVersion:a,onProgress:t.onProgress});for await(let y of g(ld(m(n,e),u),e))yield{cid:y.cid,path:y.path,unixfs:y.unixfs,size:y.size}}async function m2(r,e,t={}){let n=await hu(ts([r],e,t));if(n==null)throw new dd("Nothing imported");return n}async function PI(r,e,t={}){let n=await hu(ts([r],e,t));if(n==null)throw new dd("Nothing imported");return n}async function RI(r,e,t={}){return m2({content:r},e,t)}async function DI(r,e,t={}){return m2({content:r},e,t)}var md={cidVersion:1,rawLeaves:!0,layout:fd({maxChildrenPerNode:1024}),chunker:ud({chunkSize:1048576})};async function*NI(r,e,t={}){yield*ts(r,e,{...md,...t})}async function LI(r,e,t={}){let{cid:n}=await RI(r,e,{...md,...t});return n}async function OI(r,e,t={}){let{cid:n}=await DI(r,e,{...md,...t});return n}async function BI(r,e,t={}){let{cid:n}=await m2(r,e,{...md,...t});return n}async function MI(r,e,t={}){let{cid:n}=await PI({...r,path:r.path??"-"},e,{...md,...t});return n}var K5=ut(u2(),1);function y2(r){function e(t){return t instanceof g2?t:new g2(t,r)}return e}var g2=class{_value;_hashFn;_depth;_availableBits;_currentBufferIndex;_buffers;constructor(e,t){if(!(e instanceof Uint8Array))throw new Error("can only hash Uint8Arrays");this._value=e,this._hashFn=t,this._depth=-1,this._availableBits=0,this._currentBufferIndex=0,this._buffers=[]}async take(e){let t=e;for(;this._availableBits<t;)await this._produceMoreBits();let n=0;for(;t>0;){let i=this._buffers[this._currentBufferIndex],o=Math.min(i.availableBits(),t),s=i.take(o);n=(n<<o)+s,t-=o,this._availableBits-=o,i.availableBits()===0&&this._currentBufferIndex++}return n}untake(e){let t=e;for(;t>0;){let n=this._buffers[this._currentBufferIndex],i=Math.min(n.totalBits()-n.availableBits(),t);n.untake(i),t-=i,this._availableBits+=i,this._currentBufferIndex>0&&n.totalBits()===n.availableBits()&&(this._depth--,this._currentBufferIndex--)}}async _produceMoreBits(){this._depth++;let e=this._depth>0?ge([this._value,Uint8Array.from([this._depth])]):this._value,t=await this._hashFn(e),n=new $5(t);this._buffers.push(n),this._availableBits+=n.availableBits()}},MH=[255,254,252,248,240,224,192,128],FH=[1,3,7,15,31,63,127,255],$5=class{_value;_currentBytePos;_currentBitPos;constructor(e){this._value=e,this._currentBytePos=e.length-1,this._currentBitPos=7}availableBits(){return this._currentBitPos+1+this._currentBytePos*8}totalBits(){return this._value.length*8}take(e){let t=e,n=0;for(;t>0&&this._haveBits();){let i=this._value[this._currentBytePos],o=this._currentBitPos+1,s=Math.min(o,t),a=UH(i,o-s,s);n=(n<<s)+a,t-=s,this._currentBitPos-=s,this._currentBitPos<0&&(this._currentBitPos=7,this._currentBytePos--)}return n}untake(e){for(this._currentBitPos+=e;this._currentBitPos>7;)this._currentBitPos-=8,this._currentBytePos+=1}_haveBits(){return this._currentBytePos>=0}};function UH(r,e,t){let n=HH(e,t);return(r&n)>>>e}function HH(r,e){return MH[r]&FH[Math.min(e+r-1,7)]}var gd=BigInt(da.code),ha=8;async function Yc(r){return(await da.encode(r)).subarray(0,8).reverse()}var HI=ut(u2(),1);var Xn=async(r,e,t)=>{t.codec==null&&(t.codec=bt);let n=await Se.digest(r),i=B.create(t.cidVersion,t.codec.code,n);return await e.put(i,r,{...t,signal:t.signal}),i};var V5=class{options;root;dir;path;dirty;flat;parent;parentKey;unixfs;mode;mtime;cid;size;nodeSize;constructor(e,t){this.options=t??{},this.root=e.root,this.dir=e.dir,this.path=e.path,this.dirty=e.dirty,this.flat=e.flat,this.parent=e.parent,this.parentKey=e.parentKey,this.unixfs=e.unixfs,this.mode=e.mode,this.mtime=e.mtime}},w2=class extends V5{_bucket;constructor(e,t){super(e,t),this._bucket=Gc({hashFn:Yc,bits:8})}async put(e,t){this.cid=void 0,this.size=void 0,this.nodeSize=void 0,await this._bucket.put(e,t)}async get(e){return this._bucket.get(e)}childCount(){return this._bucket.leafCount()}directChildrenCount(){return this._bucket.childrenCount()}onlyChild(){return this._bucket.onlyChild()}async*eachChildSeries(){for await(let{key:e,value:t}of this._bucket.eachLeafSeries())yield{key:e,child:t}}estimateNodeSize(){return this.nodeSize!==void 0?this.nodeSize:(this.nodeSize=UI(this._bucket,this,this.options),this.nodeSize)}async*flush(e){for await(let t of FI(this._bucket,e,this,this.options))yield{...t,path:this.path}}};async function*FI(r,e,t,n){let i=r._children,o=[],s=0n;for(let f=0;f<i.length;f++){let p=i.get(f);if(p==null)continue;let m=f.toString(16).toUpperCase().padStart(2,"0");if(p instanceof Jr){let g;for await(let y of FI(p,e,null,n))g=y;if(g==null)throw new Error("Could not flush sharded directory, no sub-shard found");o.push({Name:m,Tsize:Number(g.size),Hash:g.cid}),s+=g.size}else if(zH(p.value)){let g=p.value,y;for await(let x of g.flush(e))y=x,yield y;if(y==null)throw new Error("Did not flush dir");let w=m+p.key;o.push({Name:w,Tsize:Number(y.size),Hash:y.cid}),s+=y.size}else{let g=p.value;if(g.cid==null)continue;let y=m+p.key,w=g.size;o.push({Name:y,Tsize:Number(w),Hash:g.cid}),s+=BigInt(w??0)}}let a=Uint8Array.from(i.bitField().reverse()),c=new ae({type:"hamt-sharded-directory",data:a,fanout:BigInt(r.tableSize()),hashType:gd,mtime:t?.mtime,mode:t?.mode}),l={Data:c.marshal(),Links:o},u=Ie(ht(l)),d=await Xn(u,e,n),h=BigInt(u.byteLength)+s;yield{cid:d,unixfs:c,size:h}}function zH(r){return typeof r.flush=="function"}function UI(r,e,t){let n=r._children,i=[];for(let c=0;c<n.length;c++){let l=n.get(c);if(l==null)continue;let u=c.toString(16).toUpperCase().padStart(2,"0");if(l instanceof Jr){let d=UI(l,null,t);i.push({Name:u,Tsize:Number(d),Hash:t.cidVersion===0?x2:b2})}else if(typeof l.value.flush=="function"){let h=l.value.nodeSize();i.push({Name:u+l.key,Tsize:Number(h),Hash:t.cidVersion===0?x2:b2})}else{let d=l.value;if(d.cid==null)continue;let h=u+l.key,f=d.size;i.push({Name:h,Tsize:Number(f),Hash:d.cid})}}let o=Uint8Array.from(n.bitField().reverse()),s=new ae({type:"hamt-sharded-directory",data:o,fanout:BigInt(r.tableSize()),hashType:gd,mtime:e?.mtime,mode:e?.mode});return Ie(ht({Data:s.marshal(),Links:i})).length}var x2=B.parse("QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn"),b2=B.parse("zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi");var q5=we("helia:unixfs:commands:utils:hamt-utils"),v2=r=>r.toString(16).toUpperCase().padStart(2,"0").substring(0,2),zI=async(r,e,t)=>{let n=new w2({root:!0,dir:!0,parent:void 0,parentKey:void 0,path:"",dirty:!0,flat:!1,mtime:t.mtime,mode:t.mode},t);for(let o=0;o<e.length;o++)await n._bucket.put(e[o].name,{size:e[o].size,cid:e[o].cid});let i=await Jo(n.flush(r));if(i==null)throw new Error("Flushing shard yielded no result");return i},E2=async(r,e,t)=>{let n=ae.unmarshal(r[0].node.Data??new Uint8Array(0)),i=BigInt(Math.pow(2,ha));r.reverse();let o,s;for(let a=0;a<r.length;a++){let c=a===r.length-1,l=r[a],u=Uint8Array.from(l.children.bitField().reverse()),d=new ae({type:"hamt-sharded-directory",data:u,fanout:i,hashType:gd});c&&(d.mtime=n.mtime,d.mode=n.mode),s={Data:d.marshal(),Links:l.node.Links};let h=Ie(ht(s));if(o=await Xn(h,e,t),!c){let f=r[a+1];if(f==null)throw new Error("Was not operating on shard root but also had no parent?");q5("updating link in parent sub-shard with prefix %s",f.prefix),f.node.Links=f.node.Links.filter(p=>p.Name!==f.prefix),f.node.Links.push({Name:f.prefix,Hash:o,Tsize:l.node.Links.reduce((p,m)=>p+(m.Tsize??0),h.byteLength)})}}if(o==null||s==null)throw new Error("Noting persisted");return{cid:o,node:s}},S2=async(r,e,t,n)=>{let o=y2(Yc)(C(e)),s=[];for(;;){let a=await t.get(r,n),c=xt(a),l=new HI.default,u=await o.take(ha),d=v2(u);s.push({prefix:d,children:l,node:c});let h;for(let p of c.Links){let m=p.Name??"";if(m.length<2)throw new Error("Invalid HAMT - link name was too short");let g=parseInt(m.substring(0,2),16);l.set(g,!0),m.startsWith(d)&&(h=p)}if(h==null){q5("no link found with prefix %s for %s",d,e);break}let f=h.Name??"";if(f.length<2)throw new Error("Invalid HAMT - link name was too short");if(f.length===2){r=h.Hash,q5("descend into sub-shard with prefix %s",f);continue}break}return{path:s,hash:o}};async function A2(r,e,t,n){if(r.Data==null)throw new Error("DagPB node had no data");let i=ae.unmarshal(r.Data),o;if(i.type==="directory")o=$H(r);else if(i.type==="hamt-sharded-directory")o=await $I(r,0,t,e,n);else throw new Error("Can only estimate the size of directories or shards");return o>t}function $H(r){let e=0;for(let t of r.Links)e+=(t.Name??"").length,e+=t.Hash.version===1?b2.bytes.byteLength:x2.bytes.byteLength;return e}async function $I(r,e,t,n,i){if(e>t)return t;if(r.Data==null||!ae.unmarshal(r.Data).isDirectory())return e;for(let s of r.Links){let a=s.Name??"";if(a=a.substring(2),e+=a.length,e+=s.Hash.bytes.byteLength,s.Hash.code===Le){let c=await n.get(s.Hash,i),l=xt(c);e+=await $I(l,e,t,n,i)}}return e}var hi=we("helia:unixfs:components:utils:add-link");async function Xc(r,e,t,n){if(r.node.Data==null)throw new Zr("Invalid parent passed to addLink");if(ae.unmarshal(r.node.Data).type==="hamt-sharded-directory")return hi("adding link to sharded directory"),KH(r,e,t,n);hi(`adding ${e.Name} (${e.Hash}) to regular directory`);let o=await qH(r,e,t,n);if(await A2(o.node,t,n.shardSplitThresholdBytes,n)){hi("converting directory to sharded directory");let s=await VH(o,t);o.cid=s.cid,o.node=xt(await t.get(s.cid,n))}return o}var VH=async(r,e)=>{if(r.node.Data==null)throw new Zr("Invalid parent passed to convertToShardedDirectory");let t=ae.unmarshal(r.node.Data),n=await zI(e,r.node.Links.map(i=>({name:i.Name??"",size:BigInt(i.Tsize??0),cid:i.Hash})),{mode:t.mode,mtime:t.mtime,cidVersion:r.cid.version});return hi(`converted directory to sharded directory ${n.cid}`),n},qH=async(r,e,t,n)=>{let i=r.node.Links.filter(u=>{let d=u.Name===e.Name;if(d&&!n.allowOverwriting)throw new od;return!d});if(i.push(e),r.node.Data==null)throw new Sr("Parent node with no data passed to addToDirectory");let o=ae.unmarshal(r.node.Data),s;if(o.mtime!=null){let u=Date.now(),d=Math.floor(u/1e3);o.mtime={secs:BigInt(d),nsecs:(u-d*1e3)*1e3},s=o.marshal()}else s=r.node.Data;r.node=ht({Data:s,Links:i});let a=Ie(r.node),c=await Se.digest(a),l=B.create(r.cid.version,Le,c);return await t.put(l,a),{node:r.node,cid:l}},KH=async(r,e,t,n)=>{let{path:i,hash:o}=await S2(r.cid,e.Name,t,n),s=i[i.length-1];if(s==null)throw new Error("Invalid HAMT, could not generate path");let a=s.prefix,c=parseInt(a,16);hi("next prefix for %s is %s",e.Name,a);let l=`${a}${e.Name}`,u=s.node.Links.find(d=>(d.Name??"").startsWith(a));if(u!=null)if(hi("link %s was present in shard",l),u.Name===l){if(!n.allowOverwriting)throw new od;hi("overwriting %s in sub-shard",e.Name),s.node.Links=s.node.Links.filter(d=>d.Name!==l),s.node.Links.push({Name:l,Hash:e.Hash,Tsize:e.Tsize})}else{if(u.Name?.length===2)throw new Error("Existing link was sub-shard?!");{hi("prefix %s already exists, creating new sub-shard",a);let d=s.node.Links.findIndex(g=>g.Name?.startsWith(a)),h=s.node.Links.splice(d,1)[0],f=(h.Name??"").substring(2),m=y2(Yc)(C(f));for(let g=0;g<i.length;g++)await m.take(ha);for(;;){let g=await m.take(ha),y=v2(g);h.Name=`${y}${f}`;let w=await o.take(ha),x=v2(w);if(y===x){let A=new K5.default;A.set(w,!0),i.push({prefix:x,children:A,node:{Links:[]}});continue}let b=new K5.default;b.set(w,!0),b.set(g,!0),i.push({prefix:a,children:b,node:{Links:[h,{Name:`${x}${e.Name}`,Hash:e.Hash,Tsize:e.Tsize}]}});break}}}else hi("link %s was not present in sub-shard",l),e.Name=l,s.node.Links.push(e),s.children.set(c,!0),hi("adding %s to existing sub-shard",l);return E2(i,t,n)};async function rs(r,e,t={}){let n=await _t(r,e,t);if(n.type!=="directory")throw new Zo(`${r.toString()} was not a UnixFS directory`);return{cid:r,node:n.node}}async function jc(r,e,t,n){let i=await _t(r,t,n);if(i.type!=="directory"&&i.type!=="file"&&i.type!=="raw")throw new Qr(`${r.toString()} was not a UnixFS node`);return{Name:e,Tsize:i.node instanceof Uint8Array?i.node.byteLength:GH(i.node),Hash:r}}function GH(r){let e=r.Links.reduce((t,n)=>t+(n.Tsize??0),0);return Ie(r).byteLength+e}var WH=we("helia:unixfs:components:utils:resolve");async function pi(r,e,t,n){if(e==null||e==="")return{cid:r};let i=`/ipfs/${r}${e==null?"":`/${e}`}`,o=await Fi(cd(i,t,n));if(o.length===0)throw new $c("Could not find path in directory");return WH("resolved %s to %c",e,r),{cid:o[o.length-1].cid,path:e,segments:o}}async function Qc(r,e,t,n){if(e.segments==null||e.segments.length===0)return r;let i=e.segments.pop();if(i==null)throw new Error("Insufficient segments");i.cid=r,e.segments.reverse();for(let o of e.segments){let[s,a]=await Promise.all([rs(o.cid,t,n),jc(i.cid,i.name,t,n)]);r=(await Xc(s,a,t,{...n,allowOverwriting:!0,cidVersion:r.version})).cid,o.cid=r,i=o}return r}var YH=mt.bind({ignoreUndefined:!0}),XH={};async function*VI(r,e,t={}){let n=YH(XH,t),i=await pi(r,n.path,e,n),o=await _t(i.cid,e,n);if(o.type!=="file"&&o.type!=="raw")throw new t2;if(o.content==null)throw new Vc;yield*o.content(n)}var jH=mt.bind({ignoreUndefined:!0}),QH=we("helia:unixfs:chmod"),ZH={recursive:!1,shardSplitThresholdBytes:262144};async function qI(r,e,t,n={}){let i=jH(ZH,n),o=await pi(r,i.path,t,n);if(QH("chmod %c %d",o.cid,e),i.recursive){let h=await Re(async function*(){for await(let f of Wc(o.cid,t,n)){let p,m=[];if(f.type==="raw")p=new ae({type:"file",data:f.node});else if(f.type==="file"||f.type==="directory")p=f.unixfs,m=f.node.Links;else throw new Qr;p.mode=e;let g={Data:p.marshal(),Links:m};yield{path:f.path,content:g}}},f=>ts(f,t,{...i,dagBuilder:async function*(p,m){for await(let g of p)yield async function(){let y=g.content,w=Ie(y),x=await Xn(w,m,{...i,cidVersion:r.version});if(y.Data==null)throw new Sr(`${x} had no data`);let b=ae.unmarshal(y.Data);return{cid:x,size:BigInt(w.length),path:g.path,unixfs:b}}}}),async f=>Jo(f));if(h==null)throw new Qo(`Could not chmod ${o.cid.toString()}`);return Qc(h.cid,o,t,i)}let s=await t.get(o.cid,n),a,c=[];if(o.cid.code===We)a=new ae({type:"file",data:s});else{let h=xt(s);if(h.Data==null)throw new Sr(`${o.cid.toString()} had no data`);c=h.Links,a=ae.unmarshal(h.Data)}a.mode=e;let l=Ie({Data:a.marshal(),Links:c}),u=await Se.digest(l),d=B.create(o.cid.version,Le,u);return await t.put(d,l),Qc(d,o,t,i)}var JH=mt.bind({ignoreUndefined:!0}),ez=we("helia:unixfs:cp"),tz={force:!1,shardSplitThresholdBytes:262144};async function KI(r,e,t,n,i={}){let o=JH(tz,i);if(t.includes("/"))throw new Zr("Name must not have slashes");let[s,a]=await Promise.all([rs(e,n,o),jc(r,t,n,o)]);return ez('Adding %c as "%s" to %c',r,t,e),(await Xc(s,a,n,{allowOverwriting:o.force,cidVersion:e.version,...o})).cid}var rz=mt.bind({ignoreUndefined:!0}),nz={};async function*GI(r,e,t={}){let n=rz(nz,t),i=await pi(r,n.path,e,n),o=await _t(i.cid,e);if(o.type==="file"||o.type==="raw"){yield o;return}if(o.content==null)throw new Vc;if(o.type!=="directory")throw new Zo;yield*o.content({offset:t.offset,length:t.length})}var iz=mt.bind({ignoreUndefined:!0}),WI=we("helia:unixfs:mkdir"),oz={cidVersion:1,force:!1,shardSplitThresholdBytes:262144};async function YI(r,e,t,n={}){let i=iz(oz,n);if(e.includes("/"))throw new Zr("Path must not have slashes");if((await _t(r,t,n)).type!=="directory")throw new Zo(`${r.toString()} was not a UnixFS directory`);WI("creating %s",e);let a={Data:new ae({type:"directory",mode:i.mode,mtime:i.mtime}).marshal(),Links:[]},c=Ie(a),l=await Se.digest(c),u=B.create(i.cidVersion,Le,l);await t.put(u,c);let[d,h]=await Promise.all([rs(r,t,i),jc(u,e,t,i)]);return WI("adding empty dir called %s to %c",e,r),(await Xc(d,h,t,{...i,allowOverwriting:i.force})).cid}var I2=we("helia:unixfs:utils:remove-link");async function XI(r,e,t,n){if(r.node.Data==null)throw new Sr("Parent node had no data");if(ae.unmarshal(r.node.Data).type==="hamt-sharded-directory"){I2(`removing ${e} from sharded directory`);let o=await az(r,e,t,n);return await A2(o.node,t,n.shardSplitThresholdBytes,n)?o:(I2("converting shard to flat directory %c",r.cid),cz(o,t,n))}return I2(`removing link ${e} regular directory`),sz(r,e,t,n)}var sz=async(r,e,t,n)=>{r.node.Links=r.node.Links.filter(s=>s.Name!==e);let i=Ie(r.node),o=await Xn(i,t,{...n,cidVersion:r.cid.version});return I2(`Updated regular directory ${o}`),{node:r.node,cid:o}},az=async(r,e,t,n)=>{let{path:i}=await S2(r.cid,e,t,n),o=i[i.length-1];if(o==null)throw new Error("Invalid HAMT, could not generate path");let s=o.node.Links.filter(l=>(l.Name??"").substring(2)===e).map(l=>l.Name).pop();if(s==null)throw new Error("File not found");let a=s.substring(0,2),c=parseInt(a,16);if(o.node.Links=o.node.Links.filter(l=>l.Name!==s),o.children.unset(c),o.node.Links.length===1)for(;i.length!==1;){let l=i[i.length-1];if(l==null||l.node.Links.length>1)break;i.pop();let u=i[i.length-1];if(u==null)break;let d=l.node.Links[0];u.node.Links=u.node.Links.filter(h=>!(h.Name??"").startsWith(u.prefix)),u.node.Links.push({Hash:d.Hash,Name:`${u.prefix}${(d.Name??"").substring(2)}`,Tsize:d.Tsize})}return E2(i,t,n)},cz=async(r,e,t)=>{if(r.node.Data==null)throw new Zr("Invalid parent passed to convertToFlatDirectory");let n={Links:[]},i=await _t(r.cid,e);if(i.type!=="directory")throw new Error("Unexpected node type");for await(let c of i.content()){let l=0;c.node instanceof Uint8Array?l=c.node.byteLength:l=Ie(c.node).length,n.Links.push({Hash:c.cid,Name:c.name,Tsize:l})}let o=ae.unmarshal(r.node.Data);n.Data=new ae({type:"directory",mode:o.mode,mtime:o.mtime}).marshal();let s=Ie(ht(n));return{cid:await Xn(s,e,{codec:bt,cidVersion:r.cid.version,signal:t.signal}),node:n}};var lz=mt.bind({ignoreUndefined:!0}),uz=we("helia:unixfs:rm"),dz={shardSplitThresholdBytes:262144};async function jI(r,e,t,n={}){let i=lz(dz,n);if(e.includes("/"))throw new Zr("Name must not have slashes");let o=await rs(r,t,i);return uz("Removing %s from %c",e,r),(await XI(o,e,t,{...i,cidVersion:r.version})).cid}var fz=mt.bind({ignoreUndefined:!0}),hz=we("helia:unixfs:stat"),pz={};async function QI(r,e,t={}){let n=fz(pz,t),i=await pi(r,t.path,e,n);hz("stat %c",i.cid);let o=await _t(i.cid,e,n);if(o.type!=="file"&&o.type!=="directory"&&o.type!=="raw")throw new Qr;let s=0n,a=0n,c=0n,l=0n,u=0,d,h,f=o.type,p;if(o.type==="raw"&&(s=BigInt(o.node.byteLength),a=BigInt(o.node.byteLength),c=BigInt(o.node.byteLength),l=BigInt(o.node.byteLength),u=1),o.type==="directory"&&(s=0n,a=BigInt(o.unixfs.marshal().byteLength),c=0n,l=a,u=1,d=o.unixfs.mode,h=o.unixfs.mtime,p=o.unixfs),o.type==="file"){let m=await ZI(i.cid,e,n);s=o.unixfs.fileSize(),a=BigInt((o.node.Data?.byteLength??0)+o.node.Links.reduce((g,y)=>g+(y.Tsize??0),0)),c=BigInt(m.localFileSize),l=BigInt(m.localDagSize),u=m.blocks,d=o.unixfs.mode,h=o.unixfs.mtime,p=o.unixfs}return{cid:i.cid,mode:d,mtime:h,fileSize:s,dagSize:a,localFileSize:c,localDagSize:l,blocks:u,type:f,unixfs:p}}async function ZI(r,e,t){let n={localFileSize:0,localDagSize:0,blocks:0};if(await e.has(r,t)){let i=await e.get(r,t);if(n.blocks++,n.localDagSize+=i.byteLength,r.code===We)n.localFileSize+=i.byteLength;else if(r.code===Le){let o=xt(i);if(o.Links.length>0)for(let s of o.Links){let a=await ZI(s.Hash,e,t);n.localFileSize+=a.localFileSize,n.localDagSize+=a.localDagSize,n.blocks+=a.blocks}else{if(o.Data==null)throw new Sr(`PBNode ${r.toString()} had no data`);let s=ae.unmarshal(o.Data);if(s.data==null)throw new Sr(`UnixFS node ${r.toString()} had no data`);n.localFileSize+=s.data.byteLength??0}}else throw new Qo(`${r.toString()} was neither DAG_PB nor RAW`)}return n}var mz=mt.bind({ignoreUndefined:!0}),gz=we("helia:unixfs:touch"),yz={recursive:!1,shardSplitThresholdBytes:262144};async function JI(r,e,t={}){let n=mz(yz,t),i=await pi(r,n.path,e,n),o=n.mtime??{secs:BigInt(Math.round(Date.now()/1e3)),nsecs:0};if(gz("touch %c %o",i.cid,o),n.recursive){let h=await Re(async function*(){for await(let f of Wc(i.cid,e)){let p,m;if(f.type==="raw")p=new ae({data:f.node}),m=[];else if(f.type==="file"||f.type==="directory")p=f.unixfs,m=f.node.Links;else throw new Qr;p.mtime=o;let g={Data:p.marshal(),Links:m};yield{path:f.path,content:g}}},f=>ts(f,e,{...n,dagBuilder:async function*(p,m){for await(let g of p)yield async function(){let y=g.content,w=Ie(y),x=await Xn(w,m,{...n,cidVersion:r.version});if(y.Data==null)throw new Sr(`${x} had no data`);let b=ae.unmarshal(y.Data);return{cid:x,size:BigInt(w.length),path:g.path,unixfs:b}}}}),async f=>Jo(f));if(h==null)throw new Qo(`Could not chmod ${i.cid.toString()}`);return Qc(h.cid,i,e,n)}let s=await e.get(i.cid,t),a,c=[];if(i.cid.code===We)a=new ae({data:s});else{let h=xt(s);if(c=h.Links,h.Data==null)throw new Sr(`${i.cid.toString()} had no data`);a=ae.unmarshal(h.Data)}a.mtime=o;let l=Ie({Data:a.marshal(),Links:c}),u=await Se.digest(l),d=B.create(i.cid.version,Le,u);return await e.put(d,l),Qc(d,i,e,n)}var _2=class{components;constructor(e){this.components=e}async*addAll(e,t={}){yield*NI(e,this.components.blockstore,t)}async addBytes(e,t={}){return LI(e,this.components.blockstore,t)}async addByteStream(e,t={}){return OI(e,this.components.blockstore,t)}async addFile(e,t={}){return BI(e,this.components.blockstore,t)}async addDirectory(e={},t={}){return MI(e,this.components.blockstore,t)}async*cat(e,t={}){yield*VI(e,this.components.blockstore,t)}async chmod(e,t,n={}){return qI(e,t,this.components.blockstore,n)}async cp(e,t,n,i={}){return KI(e,t,n,this.components.blockstore,i)}async*ls(e,t={}){yield*GI(e,this.components.blockstore,t)}async mkdir(e,t,n={}){return YI(e,t,this.components.blockstore,n)}async rm(e,t,n={}){return jI(e,t,this.components.blockstore,n)}async stat(e,t={}){return QI(e,this.components.blockstore,t)}async touch(e,t={}){return JI(e,this.components.blockstore,t)}};function e_(r){return new _2(r)}function t_(r,e){if(r==null)return;if(r instanceof Headers)return r.get(e)??void 0;if(Array.isArray(r))return r.find(([i])=>i.toLowerCase()===e.toLowerCase())?.[1];let t=Object.keys(r).find(n=>n.toLowerCase()===e.toLowerCase());if(t!=null)return r[t]}function r_(r,e,t){if((r??0)>(e??1/0))throw new jr("Invalid range: Range-start index is greater than range-end index.");if(r!=null&&(e??0)>=(t??1/0))throw new jr("Invalid range: Range-end index is greater than or equal to the size of the file.");if(r==null&&(e??0)>(t??1/0))throw new jr("Invalid range: Range-end index is greater than the size of the file.");if(r!=null&&r<0)throw new jr("Invalid range: Range-start index cannot be negative.");if(r!=null&&e!=null)return{byteSize:e-r+1,start:r,end:e};if(r==null&&e!=null)return t==null?{end:e}:e===t?{byteSize:t,start:0,end:t-1}:{byteSize:e,start:t-e,end:t-1};if(r!=null&&e==null){if(t==null)return{start:r};let n=t-1;return{byteSize:t-r,start:r,end:n}}return{byteSize:t,start:0,end:t!=null?t-1:0}}function wz(r){return typeof r=="string"?r.length:r instanceof ArrayBuffer||r instanceof Uint8Array?r.byteLength:r instanceof Blob?r.size:(r instanceof ReadableStream,null)}function xz(r){let e=r.match(/^bytes=(?<start>\d+)?-(?<end>\d+)?$/);if(e?.groups==null)throw new jr("Invalid range request");let{start:t,end:n}=e.groups;return{start:t,end:n}}var Zc=class{headers;isRangeRequest;_fileSize;_body=null;rangeRequestHeader;log;requestRangeStart;requestRangeEnd;byteStart;byteEnd;byteSize;constructor(e,t){if(this.headers=t,this.log=e.forComponent("helia:verified-fetch:byte-range-context"),this.rangeRequestHeader=t_(this.headers,"Range"),this.rangeRequestHeader!=null){this.isRangeRequest=!0,this.log.trace("range request detected");try{let{start:n,end:i}=xz(this.rangeRequestHeader);this.requestRangeStart=n!=null?parseInt(n):null,this.requestRangeEnd=i!=null?parseInt(i):null}catch(n){this.log.error("error parsing range request header: %o",n),this.requestRangeStart=null,this.requestRangeEnd=null}this.setOffsetDetails()}else this.log.trace("no range request detected"),this.isRangeRequest=!1,this.requestRangeStart=null,this.requestRangeEnd=null}setBody(e){this._body=e,this.setFileSize(this._fileSize??wz(e)),this.log.trace("set request body with fileSize %o",this._fileSize)}getBody(){let e=this._body;if(e==null)return this.log.trace("body is null"),e;if(!this.isRangeRequest||!this.isValidRangeRequest)return this.log.trace("returning body unmodified for non-range, or invalid range, request"),e;let t=this.byteStart,n=this.byteEnd,i=this.byteSize;return t!=null||n!=null?(this.log.trace("returning body with byteStart=%o, byteEnd=%o, byteSize=%o",t,n,i),e instanceof ReadableStream?e:this.getSlicedBody(e)):(this.log.error("returning unmodified body for valid range request"),e)}getSlicedBody(e){let t=this.byteStart??0,n;return this.byteEnd!=null&&this.byteStart!=null?n=this.byteEnd-this.byteStart+1:n=void 0,this.log.trace("slicing body with offset=%o and length=%o",t,n),typeof e=="string"||e instanceof Blob||e instanceof ArrayBuffer||e instanceof Uint8Array?e.slice(t,n!==void 0?t+n:void 0):e}setFileSize(e){this._fileSize=e!=null?Number(e):null,this.log.trace("set _fileSize to %o",this._fileSize),this.setOffsetDetails()}getFileSize(){return this._fileSize}isValidByteStart(){return!(this.byteStart!=null&&(this.byteStart<0||this._fileSize!=null&&this.byteStart>=this._fileSize||this.byteEnd!=null&&this.byteStart>this.byteEnd))}isValidByteEnd(){return!(this.byteEnd!=null&&(this.byteEnd<0||this._fileSize!=null&&this.byteEnd>=this._fileSize||this.byteStart!=null&&this.byteEnd<this.byteStart))}get isValidRangeRequest(){if(!this.isRangeRequest)return!1;if(this.requestRangeStart==null&&this.requestRangeEnd==null)return this.log.trace("invalid range request, range request values not provided"),!1;if(!this.isValidByteStart())return this.log.trace("invalid range request, byteStart is less than 0 or greater than fileSize"),!1;if(!this.isValidByteEnd())return this.log.trace("invalid range request, byteEnd is less than 0 or greater than fileSize"),!1;if(this.requestRangeEnd!=null&&this.requestRangeStart!=null){if(this.requestRangeStart>this.requestRangeEnd)return this.log.trace("invalid range request, start is greater than end"),!1;if(this.requestRangeStart<0)return this.log.trace("invalid range request, start is less than 0"),!1;if(this.requestRangeEnd<0)return this.log.trace("invalid range request, end is less than 0"),!1}return this.byteEnd==null&&this.byteStart==null&&this.byteSize==null?(this.log.trace("invalid range request, could not calculate byteStart, byteEnd, or byteSize"),!1):!0}get offset(){return this.byteStart??0}get length(){return this.byteEnd!=null&&this.byteStart!=null?this.byteEnd-this.byteStart+1:this.byteEnd!=null?this.byteEnd+1:this.byteSize}setOffsetDetails(){if(this.requestRangeStart==null&&this.requestRangeEnd==null){this.log.trace("requestRangeStart and requestRangeEnd are null");return}try{let{start:e,end:t,byteSize:n}=r_(this.requestRangeStart??void 0,this.requestRangeEnd??void 0,this._fileSize??void 0);this.log.trace("set byteStart to %o, byteEnd to %o, byteSize to %o",e,t,n),this.byteStart=e,this.byteEnd=t,this.byteSize=n}catch(e){this.log.error("error setting offset details: %o",e),this.byteStart=void 0,this.byteEnd=void 0,this.byteSize=void 0}}get contentRangeHeaderValue(){if(!this.isValidRangeRequest)throw this.log.error("cannot get contentRangeHeaderValue for invalid range request"),new jr("Invalid range request");return $T({byteStart:this.byteStart,byteEnd:this.byteEnd,byteSize:this._fileSize??void 0})}};async function n_(r,e,t,n){let i=t.forComponent("helia:verified-fetch:get-stream-from-async-iterable"),o=r[Symbol.asyncIterator](),{value:s,done:a}=await o.next();if(a===!0)throw i.error("no content found for path",e),new Zm;return{stream:new ReadableStream({async start(l){n?.onProgress?.(new M("verified-fetch:request:progress:chunk")),l.enqueue(s)},async pull(l){let{value:u,done:d}=await o.next();if(n?.signal?.aborted===!0){l.error(new zt(n.signal.reason??"signal aborted by user")),l.close();return}if(d===!0){u!=null&&(n?.onProgress?.(new M("verified-fetch:request:progress:chunk")),l.enqueue(u)),l.close();return}n?.onProgress?.(new M("verified-fetch:request:progress:chunk")),l.enqueue(u)}}),firstChunk:s}}var o_=ut(i_(),1);function Fr(r){return new DataView(r.buffer,r.byteOffset)}var s_={len:1,get(r,e){return Fr(r).getUint8(e)},put(r,e,t){return Fr(r).setUint8(e,t),e+1}},it={len:2,get(r,e){return Fr(r).getUint16(e,!0)},put(r,e,t){return Fr(r).setUint16(e,t,!0),e+2}},Jc={len:2,get(r,e){return Fr(r).getUint16(e)},put(r,e,t){return Fr(r).setUint16(e,t),e+2}};var Et={len:4,get(r,e){return Fr(r).getUint32(e,!0)},put(r,e,t){return Fr(r).setUint32(e,t,!0),e+4}},a_={len:4,get(r,e){return Fr(r).getUint32(e)},put(r,e,t){return Fr(r).setUint32(e,t),e+4}};var c_={len:4,get(r,e){return Fr(r).getInt32(e)},put(r,e,t){return Fr(r).setInt32(e,t),e+4}};var l_={len:8,get(r,e){return Fr(r).getBigUint64(e,!0)},put(r,e,t){return Fr(r).setBigUint64(e,t,!0),e+8}};var Ur=class{constructor(e,t){this.len=e,this.encoding=t,this.textDecoder=new TextDecoder(t)}get(e,t){return this.textDecoder.decode(e.subarray(t,t+this.len))}};var vz="End-Of-Stream",lt=class extends Error{constructor(){super(vz),this.name="EndOfStreamError"}},pa=class extends Error{constructor(e="The operation was aborted"){super(e),this.name="AbortError"}};var ma=class{constructor(){this.endOfStream=!1,this.interrupted=!1,this.peekQueue=[]}async peek(e,t=!1){let n=await this.read(e,t);return this.peekQueue.push(e.subarray(0,n)),n}async read(e,t=!1){if(e.length===0)return 0;let n=this.readFromPeekBuffer(e);if(this.endOfStream||(n+=await this.readRemainderFromStream(e.subarray(n),t)),n===0)throw new lt;return n}readFromPeekBuffer(e){let t=e.length,n=0;for(;this.peekQueue.length>0&&t>0;){let i=this.peekQueue.pop();if(!i)throw new Error("peekData should be defined");let o=Math.min(i.length,t);e.set(i.subarray(0,o),n),n+=o,t-=o,o<i.length&&this.peekQueue.push(i.subarray(o))}return n}async readRemainderFromStream(e,t){let n=0;for(;n<e.length&&!this.endOfStream;){if(this.interrupted)throw new pa;let i=await this.readFromStream(e.subarray(n),t);if(i===0)break;n+=i}if(!t&&n<e.length)throw new lt;return n}};var k2=class extends ma{constructor(e){super(),this.reader=e}async abort(){return this.close()}async close(){this.reader.releaseLock()}};var yd=class extends k2{async readFromStream(e,t){if(e.length===0)return 0;let n=await this.reader.read(new Uint8Array(e.length),{min:t?void 0:e.length});return n.done&&(this.endOfStream=n.done),n.value?(e.set(n.value),n.value.length):0}};var el=class extends ma{constructor(e){super(),this.reader=e,this.buffer=null}writeChunk(e,t){let n=Math.min(t.length,e.length);return e.set(t.subarray(0,n)),n<t.length?this.buffer=t.subarray(n):this.buffer=null,n}async readFromStream(e,t){if(e.length===0)return 0;let n=0;for(this.buffer&&(n+=this.writeChunk(e,this.buffer));n<e.length&&!this.endOfStream;){let i=await this.reader.read();if(i.done){this.endOfStream=!0;break}i.value&&(n+=this.writeChunk(e.subarray(n),i.value))}if(n===0&&this.endOfStream)throw new lt;return n}abort(){return this.interrupted=!0,this.reader.cancel()}async close(){await this.abort(),this.reader.releaseLock()}};function W5(r){try{let e=r.getReader({mode:"byob"});return e instanceof ReadableStreamDefaultReader?new el(e):new yd(e)}catch(e){if(e instanceof TypeError)return new el(r.getReader());throw e}}var ga=class{constructor(e){this.numBuffer=new Uint8Array(8),this.position=0,this.onClose=e?.onClose,e?.abortSignal&&e.abortSignal.addEventListener("abort",()=>{this.abort()})}async readToken(e,t=this.position){let n=new Uint8Array(e.len);if(await this.readBuffer(n,{position:t})<e.len)throw new lt;return e.get(n,0)}async peekToken(e,t=this.position){let n=new Uint8Array(e.len);if(await this.peekBuffer(n,{position:t})<e.len)throw new lt;return e.get(n,0)}async readNumber(e){if(await this.readBuffer(this.numBuffer,{length:e.len})<e.len)throw new lt;return e.get(this.numBuffer,0)}async peekNumber(e){if(await this.peekBuffer(this.numBuffer,{length:e.len})<e.len)throw new lt;return e.get(this.numBuffer,0)}async ignore(e){if(this.fileInfo.size!==void 0){let t=this.fileInfo.size-this.position;if(e>t)return this.position+=t,t}return this.position+=e,e}async close(){await this.abort(),await this.onClose?.()}normalizeOptions(e,t){if(!this.supportsRandomAccess()&&t&&t.position!==void 0&&t.position<this.position)throw new Error("`options.position` must be equal or greater than `tokenizer.position`");return{mayBeLess:!1,offset:0,length:e.length,position:this.position,...t}}abort(){return Promise.resolve()}};var Sz=256e3,C2=class extends ga{constructor(e,t){super(t),this.streamReader=e,this.fileInfo=t?.fileInfo??{}}async readBuffer(e,t){let n=this.normalizeOptions(e,t),i=n.position-this.position;if(i>0)return await this.ignore(i),this.readBuffer(e,t);if(i<0)throw new Error("`options.position` must be equal or greater than `tokenizer.position`");if(n.length===0)return 0;let o=await this.streamReader.read(e.subarray(0,n.length),n.mayBeLess);if(this.position+=o,(!t||!t.mayBeLess)&&o<n.length)throw new lt;return o}async peekBuffer(e,t){let n=this.normalizeOptions(e,t),i=0;if(n.position){let o=n.position-this.position;if(o>0){let s=new Uint8Array(n.length+o);return i=await this.peekBuffer(s,{mayBeLess:n.mayBeLess}),e.set(s.subarray(o)),i-o}if(o<0)throw new Error("Cannot peek from a negative offset in a stream")}if(n.length>0){try{i=await this.streamReader.peek(e.subarray(0,n.length),n.mayBeLess)}catch(o){if(t?.mayBeLess&&o instanceof lt)return 0;throw o}if(!n.mayBeLess&&i<n.length)throw new lt}return i}async ignore(e){let t=Math.min(Sz,e),n=new Uint8Array(t),i=0;for(;i<e;){let o=e-i,s=await this.readBuffer(n,{length:Math.min(t,o)});if(s<0)return s;i+=s}return i}abort(){return this.streamReader.abort()}async close(){return this.streamReader.close()}supportsRandomAccess(){return!1}};var P2=class extends ga{constructor(e,t){super(t),this.uint8Array=e,this.fileInfo={...t?.fileInfo??{},size:e.length}}async readBuffer(e,t){t?.position&&(this.position=t.position);let n=await this.peekBuffer(e,t);return this.position+=n,n}async peekBuffer(e,t){let n=this.normalizeOptions(e,t),i=Math.min(this.uint8Array.length-n.position,n.length);if(!n.mayBeLess&&i<n.length)throw new lt;return e.set(this.uint8Array.subarray(n.position,n.position+i)),i}close(){return super.close()}supportsRandomAccess(){return!0}setPosition(e){this.position=e}};function u_(r,e){let t=W5(r),n=e??{},i=n.onClose;return n.onClose=async()=>{if(await t.close(),i)return i()},new C2(t,n)}function d_(r,e){return new P2(r,e)}var tn=Uint8Array,tl=Uint16Array,Tz=Int32Array,f_=new tn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),h_=new tn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Iz=new tn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),p_=function(r,e){for(var t=new tl(31),n=0;n<31;++n)t[n]=e+=1<<r[n-1];for(var i=new Tz(t[30]),n=1;n<30;++n)for(var o=t[n];o<t[n+1];++o)i[o]=o-t[n]<<5|n;return{b:t,r:i}},m_=p_(f_,2),g_=m_.b,_z=m_.r;g_[28]=258,_z[258]=28;var y_=p_(h_,0),kz=y_.b,wIe=y_.r,j5=new tl(32768);for(Be=0;Be<32768;++Be)eo=(Be&43690)>>1|(Be&21845)<<1,eo=(eo&52428)>>2|(eo&13107)<<2,eo=(eo&61680)>>4|(eo&3855)<<4,j5[Be]=((eo&65280)>>8|(eo&255)<<8)>>1;var eo,Be,wd=function(r,e,t){for(var n=r.length,i=0,o=new tl(e);i<n;++i)r[i]&&++o[r[i]-1];var s=new tl(e);for(i=1;i<e;++i)s[i]=s[i-1]+o[i-1]<<1;var a;if(t){a=new tl(1<<e);var c=15-e;for(i=0;i<n;++i)if(r[i])for(var l=i<<4|r[i],u=e-r[i],d=s[r[i]-1]++<<u,h=d|(1<<u)-1;d<=h;++d)a[j5[d]>>c]=l}else for(a=new tl(n),i=0;i<n;++i)r[i]&&(a[i]=j5[s[r[i]-1]++]>>15-r[i]);return a},xd=new tn(288);for(Be=0;Be<144;++Be)xd[Be]=8;var Be;for(Be=144;Be<256;++Be)xd[Be]=9;var Be;for(Be=256;Be<280;++Be)xd[Be]=7;var Be;for(Be=280;Be<288;++Be)xd[Be]=8;var Be,w_=new tn(32);for(Be=0;Be<32;++Be)w_[Be]=5;var Be;var Cz=wd(xd,9,1);var Pz=wd(w_,5,1),Y5=function(r){for(var e=r[0],t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},jn=function(r,e,t){var n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},X5=function(r,e){var t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},Rz=function(r){return(r+7)/8|0},Dz=function(r,e,t){return(e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new tn(r.subarray(e,t))};var Nz=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],en=function(r,e,t){var n=new Error(e||Nz[r]);if(n.code=r,Error.captureStackTrace&&Error.captureStackTrace(n,en),!t)throw n;return n},Q5=function(r,e,t,n){var i=r.length,o=n?n.length:0;if(!i||e.f&&!e.l)return t||new tn(0);var s=!t,a=s||e.i!=2,c=e.i;s&&(t=new tn(i*3));var l=function(Ht){var Dt=t.length;if(Ht>Dt){var Hr=new tn(Math.max(Dt*2,Ht));Hr.set(t),t=Hr}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,m=e.m,g=e.n,y=i*8;do{if(!f){u=jn(r,d,1);var w=jn(r,d+1,3);if(d+=3,w)if(w==1)f=Cz,p=Pz,m=9,g=5;else if(w==2){var k=jn(r,d,31)+257,E=jn(r,d+10,15)+4,S=k+jn(r,d+5,31)+1;d+=14;for(var T=new tn(S),$=new tn(19),R=0;R<E;++R)$[Iz[R]]=jn(r,d+R*3,7);d+=E*3;for(var H=Y5($),F=(1<<H)-1,N=wd($,H,1),R=0;R<S;){var L=N[jn(r,d,F)];d+=L&15;var x=L>>4;if(x<16)T[R++]=x;else{var _=0,I=0;for(x==16?(I=3+jn(r,d,3),d+=2,_=T[R-1]):x==17?(I=3+jn(r,d,7),d+=3):x==18&&(I=11+jn(r,d,127),d+=7);I--;)T[R++]=_}}var D=T.subarray(0,k),P=T.subarray(k);m=Y5(D),g=Y5(P),f=wd(D,m,1),p=wd(P,g,1)}else en(1);else{var x=Rz(d)+4,b=r[x-4]|r[x-3]<<8,A=x+b;if(A>i){c&&en(0);break}a&&l(h+b),t.set(r.subarray(x,A),h),e.b=h+=b,e.p=d=A*8,e.f=u;continue}if(d>y){c&&en(0);break}}a&&l(h+131072);for(var q=(1<<m)-1,G=(1<<g)-1,Y=d;;Y=d){var _=f[X5(r,d)&q],ie=_>>4;if(d+=_&15,d>y){c&&en(0);break}if(_||en(2),ie<256)t[h++]=ie;else if(ie==256){Y=d,f=null;break}else{var oe=ie-254;if(ie>264){var R=ie-257,ue=f_[R];oe=jn(r,d,(1<<ue)-1)+g_[R],d+=ue}var xe=p[X5(r,d)&G],Ue=xe>>4;xe||en(3),d+=xe&15;var P=kz[Ue];if(Ue>3){var ue=h_[Ue];P+=X5(r,d)&(1<<ue)-1,d+=ue}if(d>y){c&&en(0);break}a&&l(h+131072);var He=h+oe;if(h<P){var Ge=o-P,Rt=Math.min(P,He);for(Ge+h<0&&en(3);h<Rt;++h)t[h]=n[Ge+h]}for(;h<He;++h)t[h]=t[h-P]}}e.l=f,e.p=Y,e.b=h,e.f=u,f&&(u=1,e.m=m,e.d=p,e.n=g)}while(!u);return h!=t.length&&s?Dz(t,0,h):t.subarray(0,h)};var Lz=new tn(0);var Oz=function(r){(r[0]!=31||r[1]!=139||r[2]!=8)&&en(6,"invalid gzip data");var e=r[3],t=10;e&4&&(t+=(r[10]|r[11]<<8)+2);for(var n=(e>>3&1)+(e>>4&1);n>0;n-=!r[t++]);return t+(e&2)},Bz=function(r){var e=r.length;return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0};var Mz=function(r,e){return((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&en(6,"invalid zlib data"),(r[1]>>5&1)==+!e&&en(6,"invalid zlib data: "+(r[1]&32?"need":"unexpected")+" dictionary"),(r[1]>>3&4)+2};function Fz(r,e){return Q5(r,{i:2},e&&e.out,e&&e.dictionary)}function Uz(r,e){var t=Oz(r);return t+8>r.length&&en(6,"invalid gzip data"),Q5(r.subarray(t,-8),{i:2},e&&e.out||new tn(Bz(r)),e&&e.dictionary)}function Hz(r,e){return Q5(r.subarray(Mz(r,e&&e.dictionary),-4),{i:2},e&&e.out,e&&e.dictionary)}function x_(r,e){return r[0]==31&&r[1]==139&&r[2]==8?Uz(r,e):(r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31?Fz(r,e):Hz(r,e)}var zz=typeof TextDecoder<"u"&&new TextDecoder,$z=0;try{zz.decode(Lz,{stream:!0}),$z=1}catch{}var k_=ut(A_(),1);var wa={LocalFileHeader:67324752,DataDescriptor:134695760,CentralFileHeader:33639248,EndOfCentralDirectory:101010256},Z5={get(r){let e=it.get(r,6);return{signature:Et.get(r,0),compressedSize:Et.get(r,8),uncompressedSize:Et.get(r,12)}},len:16},T_={get(r){let e=it.get(r,6);return{signature:Et.get(r,0),minVersion:it.get(r,4),dataDescriptor:!!(e&8),compressedMethod:it.get(r,8),compressedSize:Et.get(r,18),uncompressedSize:Et.get(r,22),filenameLength:it.get(r,26),extraFieldLength:it.get(r,28),filename:null}},len:30},I_={get(r){return{signature:Et.get(r,0),nrOfThisDisk:it.get(r,4),nrOfThisDiskWithTheStart:it.get(r,6),nrOfEntriesOnThisDisk:it.get(r,8),nrOfEntriesOfSize:it.get(r,10),sizeOfCd:Et.get(r,12),offsetOfStartOfCd:Et.get(r,16),zipFileCommentLength:it.get(r,20)}},len:22},__={get(r){let e=it.get(r,8);return{signature:Et.get(r,0),minVersion:it.get(r,6),dataDescriptor:!!(e&8),compressedMethod:it.get(r,10),compressedSize:Et.get(r,20),uncompressedSize:Et.get(r,24),filenameLength:it.get(r,28),extraFieldLength:it.get(r,30),fileCommentLength:it.get(r,32),relativeOffsetOfLocalHeader:Et.get(r,42),filename:null}},len:46};function C_(r){let e=new Uint8Array(Et.len);return Et.put(e,0,r),e}var mi=(0,k_.default)("tokenizer:inflate"),J5=256*1024,t$=C_(wa.DataDescriptor),N2=C_(wa.EndOfCentralDirectory),L2=class{constructor(e){this.tokenizer=e,this.syncBuffer=new Uint8Array(J5)}async isZip(){return await this.peekSignature()===wa.LocalFileHeader}peekSignature(){return this.tokenizer.peekToken(Et)}async findEndOfCentralDirectoryLocator(){let e=this.tokenizer,t=Math.min(16*1024,e.fileInfo.size),n=this.syncBuffer.subarray(0,t);await this.tokenizer.readBuffer(n,{position:e.fileInfo.size-t});for(let i=n.length-4;i>=0;i--)if(n[i]===N2[0]&&n[i+1]===N2[1]&&n[i+2]===N2[2]&&n[i+3]===N2[3])return e.fileInfo.size-t+i;return-1}async readCentralDirectory(){if(!this.tokenizer.supportsRandomAccess()){mi("Cannot reading central-directory without random-read support");return}mi("Reading central-directory...");let e=this.tokenizer.position,t=await this.findEndOfCentralDirectoryLocator();if(t>0){mi("Central-directory 32-bit signature found");let n=await this.tokenizer.readToken(I_,t),i=[];this.tokenizer.setPosition(n.offsetOfStartOfCd);for(let o=0;o<n.nrOfEntriesOfSize;++o){let s=await this.tokenizer.readToken(__);if(s.signature!==wa.CentralFileHeader)throw new Error("Expected Central-File-Header signature");s.filename=await this.tokenizer.readToken(new Ur(s.filenameLength,"utf-8")),await this.tokenizer.ignore(s.extraFieldLength),await this.tokenizer.ignore(s.fileCommentLength),i.push(s),mi(`Add central-directory file-entry: n=${o+1}/${i.length}: filename=${i[o].filename}`)}return this.tokenizer.setPosition(e),i}this.tokenizer.setPosition(e)}async unzip(e){let t=await this.readCentralDirectory();if(t)return this.iterateOverCentralDirectory(t,e);let n=!1;do{let i=await this.readLocalFileHeader();if(!i)break;let o=e(i);n=!!o.stop;let s;if(await this.tokenizer.ignore(i.extraFieldLength),i.dataDescriptor&&i.compressedSize===0){let a=[],c=J5;mi("Compressed-file-size unknown, scanning for next data-descriptor-signature....");let l=-1;for(;l<0&&c===J5;){c=await this.tokenizer.peekBuffer(this.syncBuffer,{mayBeLess:!0}),l=r$(this.syncBuffer.subarray(0,c),t$);let u=l>=0?l:c;if(o.handler){let d=new Uint8Array(u);await this.tokenizer.readBuffer(d),a.push(d)}else await this.tokenizer.ignore(u)}mi(`Found data-descriptor-signature at pos=${this.tokenizer.position}`),o.handler&&await this.inflate(i,n$(a),o.handler)}else o.handler?(mi(`Reading compressed-file-data: ${i.compressedSize} bytes`),s=new Uint8Array(i.compressedSize),await this.tokenizer.readBuffer(s),await this.inflate(i,s,o.handler)):(mi(`Ignoring compressed-file-data: ${i.compressedSize} bytes`),await this.tokenizer.ignore(i.compressedSize));if(mi(`Reading data-descriptor at pos=${this.tokenizer.position}`),i.dataDescriptor&&(await this.tokenizer.readToken(Z5)).signature!==134695760)throw new Error(`Expected data-descriptor-signature at position ${this.tokenizer.position-Z5.len}`)}while(!n)}async iterateOverCentralDirectory(e,t){for(let n of e){let i=t(n);if(i.handler){this.tokenizer.setPosition(n.relativeOffsetOfLocalHeader);let o=await this.readLocalFileHeader();if(o){await this.tokenizer.ignore(o.extraFieldLength);let s=new Uint8Array(n.compressedSize);await this.tokenizer.readBuffer(s),await this.inflate(o,s,i.handler)}}if(i.stop)break}}inflate(e,t,n){if(e.compressedMethod===0)return n(t);mi(`Decompress filename=${e.filename}, compressed-size=${t.length}`);let i=x_(t);return n(i)}async readLocalFileHeader(){let e=await this.tokenizer.peekToken(Et);if(e===wa.LocalFileHeader){let t=await this.tokenizer.readToken(T_);return t.filename=await this.tokenizer.readToken(new Ur(t.filenameLength,"utf-8")),t}if(e===wa.CentralFileHeader)return!1;throw e===3759263696?new Error("Encrypted ZIP"):new Error("Unexpected signature")}};function r$(r,e){let t=r.length,n=e.length;if(n>t)return-1;for(let i=0;i<=t-n;i++){let o=!0;for(let s=0;s<n;s++)if(r[i+s]!==e[s]){o=!1;break}if(o)return i}return-1}function n$(r){let e=r.reduce((i,o)=>i+o.length,0),t=new Uint8Array(e),n=0;for(let i of r)t.set(i,n),n+=i.length;return t}var kIe={utf8:new globalThis.TextDecoder("utf8")};var CIe=new globalThis.TextEncoder;var PIe=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function ey(r){let{byteLength:e}=r;if(e===6)return r.getUint16(0)*2**32+r.getUint32(2);if(e===5)return r.getUint8(0)*2**32+r.getUint32(1);if(e===4)return r.getUint32(0);if(e===3)return r.getUint8(0)*2**16+r.getUint16(1);if(e===2)return r.getUint16(0);if(e===1)return r.getUint8(0)}function i$(r,e){let t=r.length,n=e.length;if(n===0||n>t)return-1;let i=t-n;for(let o=0;o<=i;o++){let s=!0;for(let a=0;a<n;a++)if(r[o+a]!==e[a]){s=!1;break}if(s)return o}return-1}function P_(r,e){return i$(r,e)!==-1}function R_(r){return[...r].map(e=>e.charCodeAt(0))}function D_(r,e=0){let t=Number.parseInt(new Ur(6).get(r,148).replace(/\0.*$/,"").trim(),8);if(Number.isNaN(t))return!1;let n=8*32;for(let i=e;i<e+148;i++)n+=r[i];for(let i=e+156;i<e+512;i++)n+=r[i];return t===n}var N_={get:(r,e)=>r[e+3]&127|r[e+2]<<7|r[e+1]<<14|r[e]<<21,len:4};var L_=["jpg","png","apng","gif","webp","flif","xcf","cr2","cr3","orf","arw","dng","nef","rw2","raf","tif","bmp","icns","jxr","psd","indd","zip","tar","rar","gz","bz2","7z","dmg","mp4","mid","mkv","webm","mov","avi","mpg","mp2","mp3","m4a","oga","ogg","ogv","opus","flac","wav","spx","amr","pdf","epub","elf","macho","exe","swf","rtf","wasm","woff","woff2","eot","ttf","otf","ttc","ico","flv","ps","xz","sqlite","nes","crx","xpi","cab","deb","ar","rpm","Z","lz","cfb","mxf","mts","blend","bpg","docx","pptx","xlsx","3gp","3g2","j2c","jp2","jpm","jpx","mj2","aif","qcp","odt","ods","odp","xml","mobi","heic","cur","ktx","ape","wv","dcm","ics","glb","pcap","dsf","lnk","alias","voc","ac3","m4v","m4p","m4b","f4v","f4p","f4b","f4a","mie","asf","ogm","ogx","mpc","arrow","shp","aac","mp1","it","s3m","xm","ai","skp","avif","eps","lzh","pgp","asar","stl","chm","3mf","zst","jxl","vcf","jls","pst","dwg","parquet","class","arj","cpio","ace","avro","icc","fbx","vsdx","vtt","apk","drc","lz4","potx","xltx","dotx","xltm","ott","ots","otp","odg","otg","xlsm","docm","dotm","potm","pptm","jar","rm"],O_=["image/jpeg","image/png","image/gif","image/webp","image/flif","image/x-xcf","image/x-canon-cr2","image/x-canon-cr3","image/tiff","image/bmp","image/vnd.ms-photo","image/vnd.adobe.photoshop","application/x-indesign","application/epub+zip","application/x-xpinstall","application/vnd.oasis.opendocument.text","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/zip","application/x-tar","application/x-rar-compressed","application/gzip","application/x-bzip2","application/x-7z-compressed","application/x-apple-diskimage","application/x-apache-arrow","video/mp4","audio/midi","video/x-matroska","video/webm","video/quicktime","video/vnd.avi","audio/wav","audio/qcelp","audio/x-ms-asf","video/x-ms-asf","application/vnd.ms-asf","video/mpeg","video/3gpp","audio/mpeg","audio/mp4","video/ogg","audio/ogg","audio/ogg; codecs=opus","application/ogg","audio/x-flac","audio/ape","audio/wavpack","audio/amr","application/pdf","application/x-elf","application/x-mach-binary","application/x-msdownload","application/x-shockwave-flash","application/rtf","application/wasm","font/woff","font/woff2","application/vnd.ms-fontobject","font/ttf","font/otf","font/collection","image/x-icon","video/x-flv","application/postscript","application/eps","application/x-xz","application/x-sqlite3","application/x-nintendo-nes-rom","application/x-google-chrome-extension","application/vnd.ms-cab-compressed","application/x-deb","application/x-unix-archive","application/x-rpm","application/x-compress","application/x-lzip","application/x-cfb","application/x-mie","application/mxf","video/mp2t","application/x-blender","image/bpg","image/j2c","image/jp2","image/jpx","image/jpm","image/mj2","audio/aiff","application/xml","application/x-mobipocket-ebook","image/heif","image/heif-sequence","image/heic","image/heic-sequence","image/icns","image/ktx","application/dicom","audio/x-musepack","text/calendar","text/vcard","text/vtt","model/gltf-binary","application/vnd.tcpdump.pcap","audio/x-dsf","application/x.ms.shortcut","application/x.apple.alias","audio/x-voc","audio/vnd.dolby.dd-raw","audio/x-m4a","image/apng","image/x-olympus-orf","image/x-sony-arw","image/x-adobe-dng","image/x-nikon-nef","image/x-panasonic-rw2","image/x-fujifilm-raf","video/x-m4v","video/3gpp2","application/x-esri-shape","audio/aac","audio/x-it","audio/x-s3m","audio/x-xm","video/MP1S","video/MP2P","application/vnd.sketchup.skp","image/avif","application/x-lzh-compressed","application/pgp-encrypted","application/x-asar","model/stl","application/vnd.ms-htmlhelp","model/3mf","image/jxl","application/zstd","image/jls","application/vnd.ms-outlook","image/vnd.dwg","application/x-parquet","application/java-vm","application/x-arj","application/x-cpio","application/x-ace-compressed","application/avro","application/vnd.iccprofile","application/x.autodesk.fbx","application/vnd.visio","application/vnd.android.package-archive","application/vnd.google.draco","application/x-lz4","application/vnd.openxmlformats-officedocument.presentationml.template","application/vnd.openxmlformats-officedocument.spreadsheetml.template","application/vnd.openxmlformats-officedocument.wordprocessingml.template","application/vnd.ms-excel.template.macroenabled.12","application/vnd.oasis.opendocument.text-template","application/vnd.oasis.opendocument.spreadsheet-template","application/vnd.oasis.opendocument.presentation-template","application/vnd.oasis.opendocument.graphics","application/vnd.oasis.opendocument.graphics-template","application/vnd.ms-excel.sheet.macroEnabled.12","application/vnd.ms-word.document.macroEnabled.12","application/vnd.ms-word.template.macroEnabled.12","application/vnd.ms-powerpoint.template.macroEnabled.12","application/vnd.ms-powerpoint.presentation.macroEnabled.12","application/java-archive","application/vnd.rn-realmedia"];var ty=4100;async function B_(r){return new ny().fromBuffer(r)}function ry(r){switch(r){case"application/epub+zip":return{ext:"epub",mime:"application/epub+zip"};case"application/vnd.oasis.opendocument.text":return{ext:"odt",mime:"application/vnd.oasis.opendocument.text"};case"application/vnd.oasis.opendocument.text-template":return{ext:"ott",mime:"application/vnd.oasis.opendocument.text-template"};case"application/vnd.oasis.opendocument.spreadsheet":return{ext:"ods",mime:"application/vnd.oasis.opendocument.spreadsheet"};case"application/vnd.oasis.opendocument.spreadsheet-template":return{ext:"ots",mime:"application/vnd.oasis.opendocument.spreadsheet-template"};case"application/vnd.oasis.opendocument.presentation":return{ext:"odp",mime:"application/vnd.oasis.opendocument.presentation"};case"application/vnd.oasis.opendocument.presentation-template":return{ext:"otp",mime:"application/vnd.oasis.opendocument.presentation-template"};case"application/vnd.oasis.opendocument.graphics":return{ext:"odg",mime:"application/vnd.oasis.opendocument.graphics"};case"application/vnd.oasis.opendocument.graphics-template":return{ext:"otg",mime:"application/vnd.oasis.opendocument.graphics-template"};case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":return{ext:"xlsx",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"};case"application/vnd.ms-excel.sheet.macroEnabled":return{ext:"xlsm",mime:"application/vnd.ms-excel.sheet.macroEnabled.12"};case"application/vnd.openxmlformats-officedocument.spreadsheetml.template":return{ext:"xltx",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.template"};case"application/vnd.ms-excel.template.macroEnabled":return{ext:"xltm",mime:"application/vnd.ms-excel.template.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.wordprocessingml.document":return{ext:"docx",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"};case"application/vnd.ms-word.document.macroEnabled":return{ext:"docm",mime:"application/vnd.ms-word.document.macroEnabled.12"};case"application/vnd.openxmlformats-officedocument.wordprocessingml.template":return{ext:"dotx",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.template"};case"application/vnd.ms-word.template.macroEnabledTemplate":return{ext:"dotm",mime:"application/vnd.ms-word.template.macroEnabled.12"};case"application/vnd.openxmlformats-officedocument.presentationml.template":return{ext:"potx",mime:"application/vnd.openxmlformats-officedocument.presentationml.template"};case"application/vnd.ms-powerpoint.template.macroEnabled":return{ext:"potm",mime:"application/vnd.ms-powerpoint.template.macroEnabled.12"};case"application/vnd.openxmlformats-officedocument.presentationml.presentation":return{ext:"pptx",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"};case"application/vnd.ms-powerpoint.presentation.macroEnabled":return{ext:"pptm",mime:"application/vnd.ms-powerpoint.presentation.macroEnabled.12"};case"application/vnd.ms-visio.drawing":return{ext:"vsdx",mime:"application/vnd.visio"};case"application/vnd.ms-package.3dmanufacturing-3dmodel+xml":return{ext:"3mf",mime:"model/3mf"};default:}}function gi(r,e,t){t={offset:0,...t};for(let[n,i]of e.entries())if(t.mask){if(i!==(t.mask[n]&r[n+t.offset]))return!1}else if(i!==r[n+t.offset])return!1;return!0}var ny=class{constructor(e){this.detectors=[...e?.customDetectors??[],{id:"core",detect:this.detectConfident},{id:"core.imprecise",detect:this.detectImprecise}],this.tokenizerOptions={abortSignal:e?.signal}}async fromTokenizer(e){let t=e.position;for(let n of this.detectors){let i=await n.detect(e);if(i)return i;if(t!==e.position)return}}async fromBuffer(e){if(!(e instanceof Uint8Array||e instanceof ArrayBuffer))throw new TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`ArrayBuffer\`, got \`${typeof e}\``);let t=e instanceof Uint8Array?e:new Uint8Array(e);if(t?.length>1)return this.fromTokenizer(d_(t,this.tokenizerOptions))}async fromBlob(e){return this.fromStream(e.stream())}async fromStream(e){let t=await u_(e,this.tokenizerOptions);try{return await this.fromTokenizer(t)}finally{await t.close()}}async toDetectionStream(e,t){let{sampleSize:n=ty}=t,i,o,s=e.getReader({mode:"byob"});try{let{value:l,done:u}=await s.read(new Uint8Array(n));if(o=l,!u&&l)try{i=await this.fromBuffer(l.slice(0,n))}catch(d){if(!(d instanceof lt))throw d;i=void 0}o=l}finally{s.releaseLock()}let a=new TransformStream({async start(l){l.enqueue(o)},transform(l,u){u.enqueue(l)}}),c=e.pipeThrough(a);return c.fileType=i,c}check(e,t){return gi(this.buffer,e,t)}checkString(e,t){return this.check(R_(e),t)}detectConfident=async e=>{if(this.buffer=new Uint8Array(ty),e.fileInfo.size===void 0&&(e.fileInfo.size=Number.MAX_SAFE_INTEGER),this.tokenizer=e,await e.peekBuffer(this.buffer,{length:12,mayBeLess:!0}),this.check([66,77]))return{ext:"bmp",mime:"image/bmp"};if(this.check([11,119]))return{ext:"ac3",mime:"audio/vnd.dolby.dd-raw"};if(this.check([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(this.check([77,90]))return{ext:"exe",mime:"application/x-msdownload"};if(this.check([37,33]))return await e.peekBuffer(this.buffer,{length:24,mayBeLess:!0}),this.checkString("PS-Adobe-",{offset:2})&&this.checkString(" EPSF-",{offset:14})?{ext:"eps",mime:"application/eps"}:{ext:"ps",mime:"application/postscript"};if(this.check([31,160])||this.check([31,157]))return{ext:"Z",mime:"application/x-compress"};if(this.check([199,113]))return{ext:"cpio",mime:"application/x-cpio"};if(this.check([96,234]))return{ext:"arj",mime:"application/x-arj"};if(this.check([239,187,191]))return this.tokenizer.ignore(3),this.detectConfident(e);if(this.check([71,73,70]))return{ext:"gif",mime:"image/gif"};if(this.check([73,73,188]))return{ext:"jxr",mime:"image/vnd.ms-photo"};if(this.check([31,139,8]))return{ext:"gz",mime:"application/gzip"};if(this.check([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(this.checkString("ID3")){await e.ignore(6);let t=await e.readToken(N_);return e.position+t>e.fileInfo.size?{ext:"mp3",mime:"audio/mpeg"}:(await e.ignore(t),this.fromTokenizer(e))}if(this.checkString("MP+"))return{ext:"mpc",mime:"audio/x-musepack"};if((this.buffer[0]===67||this.buffer[0]===70)&&this.check([87,83],{offset:1}))return{ext:"swf",mime:"application/x-shockwave-flash"};if(this.check([255,216,255]))return this.check([247],{offset:3})?{ext:"jls",mime:"image/jls"}:{ext:"jpg",mime:"image/jpeg"};if(this.check([79,98,106,1]))return{ext:"avro",mime:"application/avro"};if(this.checkString("FLIF"))return{ext:"flif",mime:"image/flif"};if(this.checkString("8BPS"))return{ext:"psd",mime:"image/vnd.adobe.photoshop"};if(this.checkString("MPCK"))return{ext:"mpc",mime:"audio/x-musepack"};if(this.checkString("FORM"))return{ext:"aif",mime:"audio/aiff"};if(this.checkString("icns",{offset:0}))return{ext:"icns",mime:"image/icns"};if(this.check([80,75,3,4])){let t;return await new L2(e).unzip(n=>{switch(n.filename){case"META-INF/mozilla.rsa":return t={ext:"xpi",mime:"application/x-xpinstall"},{stop:!0};case"META-INF/MANIFEST.MF":return t={ext:"jar",mime:"application/java-archive"},{stop:!0};case"mimetype":return{async handler(i){let o=new TextDecoder("utf-8").decode(i).trim();t=ry(o)},stop:!0};case"[Content_Types].xml":return{async handler(i){let o=new TextDecoder("utf-8").decode(i),s=o.indexOf('.main+xml"');if(s===-1){let a="application/vnd.ms-package.3dmanufacturing-3dmodel+xml";o.includes(`ContentType="${a}"`)&&(t=ry(a))}else{o=o.slice(0,Math.max(0,s));let a=o.lastIndexOf('"'),c=o.slice(Math.max(0,a+1));t=ry(c)}},stop:!0};default:return/classes\d*\.dex/.test(n.filename)?(t={ext:"apk",mime:"application/vnd.android.package-archive"},{stop:!0}):{}}}),t??{ext:"zip",mime:"application/zip"}}if(this.checkString("OggS")){await e.ignore(28);let t=new Uint8Array(8);return await e.readBuffer(t),gi(t,[79,112,117,115,72,101,97,100])?{ext:"opus",mime:"audio/ogg; codecs=opus"}:gi(t,[128,116,104,101,111,114,97])?{ext:"ogv",mime:"video/ogg"}:gi(t,[1,118,105,100,101,111,0])?{ext:"ogm",mime:"video/ogg"}:gi(t,[127,70,76,65,67])?{ext:"oga",mime:"audio/ogg"}:gi(t,[83,112,101,101,120,32,32])?{ext:"spx",mime:"audio/ogg"}:gi(t,[1,118,111,114,98,105,115])?{ext:"ogg",mime:"audio/ogg"}:{ext:"ogx",mime:"application/ogg"}}if(this.check([80,75])&&(this.buffer[2]===3||this.buffer[2]===5||this.buffer[2]===7)&&(this.buffer[3]===4||this.buffer[3]===6||this.buffer[3]===8))return{ext:"zip",mime:"application/zip"};if(this.checkString("MThd"))return{ext:"mid",mime:"audio/midi"};if(this.checkString("wOFF")&&(this.check([0,1,0,0],{offset:4})||this.checkString("OTTO",{offset:4})))return{ext:"woff",mime:"font/woff"};if(this.checkString("wOF2")&&(this.check([0,1,0,0],{offset:4})||this.checkString("OTTO",{offset:4})))return{ext:"woff2",mime:"font/woff2"};if(this.check([212,195,178,161])||this.check([161,178,195,212]))return{ext:"pcap",mime:"application/vnd.tcpdump.pcap"};if(this.checkString("DSD "))return{ext:"dsf",mime:"audio/x-dsf"};if(this.checkString("LZIP"))return{ext:"lz",mime:"application/x-lzip"};if(this.checkString("fLaC"))return{ext:"flac",mime:"audio/x-flac"};if(this.check([66,80,71,251]))return{ext:"bpg",mime:"image/bpg"};if(this.checkString("wvpk"))return{ext:"wv",mime:"audio/wavpack"};if(this.checkString("%PDF")){try{if(await e.ignore(1350)===1350){let i=new Uint8Array(Math.min(10485760,e.fileInfo.size-1350));if(await e.readBuffer(i,{mayBeLess:!0}),P_(i,new TextEncoder().encode("AIPrivateData")))return{ext:"ai",mime:"application/postscript"}}}catch(t){if(!(t instanceof lt))throw t}return{ext:"pdf",mime:"application/pdf"}}if(this.check([0,97,115,109]))return{ext:"wasm",mime:"application/wasm"};if(this.check([73,73])){let t=await this.readTiffHeader(!1);if(t)return t}if(this.check([77,77])){let t=await this.readTiffHeader(!0);if(t)return t}if(this.checkString("MAC "))return{ext:"ape",mime:"audio/ape"};if(this.check([26,69,223,163])){async function t(){let a=await e.peekNumber(s_),c=128,l=0;for(;(a&c)===0&&c!==0;)++l,c>>=1;let u=new Uint8Array(l+1);return await e.readBuffer(u),u}async function n(){let a=await t(),c=await t();c[0]^=128>>c.length-1;let l=Math.min(6,c.length),u=new DataView(a.buffer),d=new DataView(c.buffer,c.length-l,l);return{id:ey(u),len:ey(d)}}async function i(a){for(;a>0;){let c=await n();if(c.id===17026)return(await e.readToken(new Ur(c.len))).replaceAll(/\00.*$/g,"");await e.ignore(c.len),--a}}let o=await n();switch(await i(o.len)){case"webm":return{ext:"webm",mime:"video/webm"};case"matroska":return{ext:"mkv",mime:"video/x-matroska"};default:return}}if(this.checkString("SQLi"))return{ext:"sqlite",mime:"application/x-sqlite3"};if(this.check([78,69,83,26]))return{ext:"nes",mime:"application/x-nintendo-nes-rom"};if(this.checkString("Cr24"))return{ext:"crx",mime:"application/x-google-chrome-extension"};if(this.checkString("MSCF")||this.checkString("ISc("))return{ext:"cab",mime:"application/vnd.ms-cab-compressed"};if(this.check([237,171,238,219]))return{ext:"rpm",mime:"application/x-rpm"};if(this.check([197,208,211,198]))return{ext:"eps",mime:"application/eps"};if(this.check([40,181,47,253]))return{ext:"zst",mime:"application/zstd"};if(this.check([127,69,76,70]))return{ext:"elf",mime:"application/x-elf"};if(this.check([33,66,68,78]))return{ext:"pst",mime:"application/vnd.ms-outlook"};if(this.checkString("PAR1"))return{ext:"parquet",mime:"application/x-parquet"};if(this.checkString("ttcf"))return{ext:"ttc",mime:"font/collection"};if(this.check([207,250,237,254]))return{ext:"macho",mime:"application/x-mach-binary"};if(this.check([4,34,77,24]))return{ext:"lz4",mime:"application/x-lz4"};if(this.check([79,84,84,79,0]))return{ext:"otf",mime:"font/otf"};if(this.checkString("#!AMR"))return{ext:"amr",mime:"audio/amr"};if(this.checkString("{\\rtf"))return{ext:"rtf",mime:"application/rtf"};if(this.check([70,76,86,1]))return{ext:"flv",mime:"video/x-flv"};if(this.checkString("IMPM"))return{ext:"it",mime:"audio/x-it"};if(this.checkString("-lh0-",{offset:2})||this.checkString("-lh1-",{offset:2})||this.checkString("-lh2-",{offset:2})||this.checkString("-lh3-",{offset:2})||this.checkString("-lh4-",{offset:2})||this.checkString("-lh5-",{offset:2})||this.checkString("-lh6-",{offset:2})||this.checkString("-lh7-",{offset:2})||this.checkString("-lzs-",{offset:2})||this.checkString("-lz4-",{offset:2})||this.checkString("-lz5-",{offset:2})||this.checkString("-lhd-",{offset:2}))return{ext:"lzh",mime:"application/x-lzh-compressed"};if(this.check([0,0,1,186])){if(this.check([33],{offset:4,mask:[241]}))return{ext:"mpg",mime:"video/MP1S"};if(this.check([68],{offset:4,mask:[196]}))return{ext:"mpg",mime:"video/MP2P"}}if(this.checkString("ITSF"))return{ext:"chm",mime:"application/vnd.ms-htmlhelp"};if(this.check([202,254,186,190]))return{ext:"class",mime:"application/java-vm"};if(this.checkString(".RMF"))return{ext:"rm",mime:"application/vnd.rn-realmedia"};if(this.checkString("DRACO"))return{ext:"drc",mime:"application/vnd.google.draco"};if(this.check([253,55,122,88,90,0]))return{ext:"xz",mime:"application/x-xz"};if(this.checkString("<?xml "))return{ext:"xml",mime:"application/xml"};if(this.check([55,122,188,175,39,28]))return{ext:"7z",mime:"application/x-7z-compressed"};if(this.check([82,97,114,33,26,7])&&(this.buffer[6]===0||this.buffer[6]===1))return{ext:"rar",mime:"application/x-rar-compressed"};if(this.checkString("solid "))return{ext:"stl",mime:"model/stl"};if(this.checkString("AC")){let t=new Ur(4,"latin1").get(this.buffer,2);if(t.match("^d*")&&t>=1e3&&t<=1050)return{ext:"dwg",mime:"image/vnd.dwg"}}if(this.checkString("070707"))return{ext:"cpio",mime:"application/x-cpio"};if(this.checkString("BLENDER"))return{ext:"blend",mime:"application/x-blender"};if(this.checkString("!<arch>"))return await e.ignore(8),await e.readToken(new Ur(13,"ascii"))==="debian-binary"?{ext:"deb",mime:"application/x-deb"}:{ext:"ar",mime:"application/x-unix-archive"};if(this.checkString("WEBVTT")&&[`
|
|
76
|
-
`,"\r"," "," ","\0"].some(t=>this.checkString(t,{offset:6})))return{ext:"vtt",mime:"text/vtt"};if(this.check([137,80,78,71,13,10,26,10])){await e.ignore(8);async function t(){return{length:await e.readToken(c_),type:await e.readToken(new Ur(4,"latin1"))}}do{let n=await t();if(n.length<0)return;switch(n.type){case"IDAT":return{ext:"png",mime:"image/png"};case"acTL":return{ext:"apng",mime:"image/apng"};default:await e.ignore(n.length+4)}}while(e.position+8<e.fileInfo.size);return{ext:"png",mime:"image/png"}}if(this.check([65,82,82,79,87,49,0,0]))return{ext:"arrow",mime:"application/x-apache-arrow"};if(this.check([103,108,84,70,2,0,0,0]))return{ext:"glb",mime:"model/gltf-binary"};if(this.check([102,114,101,101],{offset:4})||this.check([109,100,97,116],{offset:4})||this.check([109,111,111,118],{offset:4})||this.check([119,105,100,101],{offset:4}))return{ext:"mov",mime:"video/quicktime"};if(this.check([73,73,82,79,8,0,0,0,24]))return{ext:"orf",mime:"image/x-olympus-orf"};if(this.checkString("gimp xcf "))return{ext:"xcf",mime:"image/x-xcf"};if(this.checkString("ftyp",{offset:4})&&(this.buffer[8]&96)!==0){let t=new Ur(4,"latin1").get(this.buffer,8).replace("\0"," ").trim();switch(t){case"avif":case"avis":return{ext:"avif",mime:"image/avif"};case"mif1":return{ext:"heic",mime:"image/heif"};case"msf1":return{ext:"heic",mime:"image/heif-sequence"};case"heic":case"heix":return{ext:"heic",mime:"image/heic"};case"hevc":case"hevx":return{ext:"heic",mime:"image/heic-sequence"};case"qt":return{ext:"mov",mime:"video/quicktime"};case"M4V":case"M4VH":case"M4VP":return{ext:"m4v",mime:"video/x-m4v"};case"M4P":return{ext:"m4p",mime:"video/mp4"};case"M4B":return{ext:"m4b",mime:"audio/mp4"};case"M4A":return{ext:"m4a",mime:"audio/x-m4a"};case"F4V":return{ext:"f4v",mime:"video/mp4"};case"F4P":return{ext:"f4p",mime:"video/mp4"};case"F4A":return{ext:"f4a",mime:"audio/mp4"};case"F4B":return{ext:"f4b",mime:"audio/mp4"};case"crx":return{ext:"cr3",mime:"image/x-canon-cr3"};default:return t.startsWith("3g")?t.startsWith("3g2")?{ext:"3g2",mime:"video/3gpp2"}:{ext:"3gp",mime:"video/3gpp"}:{ext:"mp4",mime:"video/mp4"}}}if(this.check([82,73,70,70])){if(this.checkString("WEBP",{offset:8}))return{ext:"webp",mime:"image/webp"};if(this.check([65,86,73],{offset:8}))return{ext:"avi",mime:"video/vnd.avi"};if(this.check([87,65,86,69],{offset:8}))return{ext:"wav",mime:"audio/wav"};if(this.check([81,76,67,77],{offset:8}))return{ext:"qcp",mime:"audio/qcelp"}}if(this.check([73,73,85,0,24,0,0,0,136,231,116,216]))return{ext:"rw2",mime:"image/x-panasonic-rw2"};if(this.check([48,38,178,117,142,102,207,17,166,217])){async function t(){let n=new Uint8Array(16);return await e.readBuffer(n),{id:n,size:Number(await e.readToken(l_))}}for(await e.ignore(30);e.position+24<e.fileInfo.size;){let n=await t(),i=n.size-24;if(gi(n.id,[145,7,220,183,183,169,207,17,142,230,0,192,12,32,83,101])){let o=new Uint8Array(16);if(i-=await e.readBuffer(o),gi(o,[64,158,105,248,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:"asf",mime:"audio/x-ms-asf"};if(gi(o,[192,239,25,188,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:"asf",mime:"video/x-ms-asf"};break}await e.ignore(i)}return{ext:"asf",mime:"application/vnd.ms-asf"}}if(this.check([171,75,84,88,32,49,49,187,13,10,26,10]))return{ext:"ktx",mime:"image/ktx"};if((this.check([126,16,4])||this.check([126,24,4]))&&this.check([48,77,73,69],{offset:4}))return{ext:"mie",mime:"application/x-mie"};if(this.check([39,10,0,0,0,0,0,0,0,0,0,0],{offset:2}))return{ext:"shp",mime:"application/x-esri-shape"};if(this.check([255,79,255,81]))return{ext:"j2c",mime:"image/j2c"};if(this.check([0,0,0,12,106,80,32,32,13,10,135,10]))switch(await e.ignore(20),await e.readToken(new Ur(4,"ascii"))){case"jp2 ":return{ext:"jp2",mime:"image/jp2"};case"jpx ":return{ext:"jpx",mime:"image/jpx"};case"jpm ":return{ext:"jpm",mime:"image/jpm"};case"mjp2":return{ext:"mj2",mime:"image/mj2"};default:return}if(this.check([255,10])||this.check([0,0,0,12,74,88,76,32,13,10,135,10]))return{ext:"jxl",mime:"image/jxl"};if(this.check([254,255]))return this.check([0,60,0,63,0,120,0,109,0,108],{offset:2})?{ext:"xml",mime:"application/xml"}:void 0;if(this.check([208,207,17,224,161,177,26,225]))return{ext:"cfb",mime:"application/x-cfb"};if(await e.peekBuffer(this.buffer,{length:Math.min(256,e.fileInfo.size),mayBeLess:!0}),this.check([97,99,115,112],{offset:36}))return{ext:"icc",mime:"application/vnd.iccprofile"};if(this.checkString("**ACE",{offset:7})&&this.checkString("**",{offset:12}))return{ext:"ace",mime:"application/x-ace-compressed"};if(this.checkString("BEGIN:")){if(this.checkString("VCARD",{offset:6}))return{ext:"vcf",mime:"text/vcard"};if(this.checkString("VCALENDAR",{offset:6}))return{ext:"ics",mime:"text/calendar"}}if(this.checkString("FUJIFILMCCD-RAW"))return{ext:"raf",mime:"image/x-fujifilm-raf"};if(this.checkString("Extended Module:"))return{ext:"xm",mime:"audio/x-xm"};if(this.checkString("Creative Voice File"))return{ext:"voc",mime:"audio/x-voc"};if(this.check([4,0,0,0])&&this.buffer.length>=16){let t=new DataView(this.buffer.buffer).getUint32(12,!0);if(t>12&&this.buffer.length>=t+16)try{let n=new TextDecoder().decode(this.buffer.slice(16,t+16));if(JSON.parse(n).files)return{ext:"asar",mime:"application/x-asar"}}catch{}}if(this.check([6,14,43,52,2,5,1,1,13,1,2,1,1,2]))return{ext:"mxf",mime:"application/mxf"};if(this.checkString("SCRM",{offset:44}))return{ext:"s3m",mime:"audio/x-s3m"};if(this.check([71])&&this.check([71],{offset:188}))return{ext:"mts",mime:"video/mp2t"};if(this.check([71],{offset:4})&&this.check([71],{offset:196}))return{ext:"mts",mime:"video/mp2t"};if(this.check([66,79,79,75,77,79,66,73],{offset:60}))return{ext:"mobi",mime:"application/x-mobipocket-ebook"};if(this.check([68,73,67,77],{offset:128}))return{ext:"dcm",mime:"application/dicom"};if(this.check([76,0,0,0,1,20,2,0,0,0,0,0,192,0,0,0,0,0,0,70]))return{ext:"lnk",mime:"application/x.ms.shortcut"};if(this.check([98,111,111,107,0,0,0,0,109,97,114,107,0,0,0,0]))return{ext:"alias",mime:"application/x.apple.alias"};if(this.checkString("Kaydara FBX Binary \0"))return{ext:"fbx",mime:"application/x.autodesk.fbx"};if(this.check([76,80],{offset:34})&&(this.check([0,0,1],{offset:8})||this.check([1,0,2],{offset:8})||this.check([2,0,2],{offset:8})))return{ext:"eot",mime:"application/vnd.ms-fontobject"};if(this.check([6,6,237,245,216,29,70,229,189,49,239,231,254,116,183,29]))return{ext:"indd",mime:"application/x-indesign"};if(await e.peekBuffer(this.buffer,{length:Math.min(512,e.fileInfo.size),mayBeLess:!0}),D_(this.buffer))return{ext:"tar",mime:"application/x-tar"};if(this.check([255,254]))return this.check([60,0,63,0,120,0,109,0,108,0],{offset:2})?{ext:"xml",mime:"application/xml"}:this.check([255,14,83,0,107,0,101,0,116,0,99,0,104,0,85,0,112,0,32,0,77,0,111,0,100,0,101,0,108,0],{offset:2})?{ext:"skp",mime:"application/vnd.sketchup.skp"}:void 0;if(this.checkString("-----BEGIN PGP MESSAGE-----"))return{ext:"pgp",mime:"application/pgp-encrypted"}};detectImprecise=async e=>{if(this.buffer=new Uint8Array(ty),await e.peekBuffer(this.buffer,{length:Math.min(8,e.fileInfo.size),mayBeLess:!0}),this.check([0,0,1,186])||this.check([0,0,1,179]))return{ext:"mpg",mime:"video/mpeg"};if(this.check([0,1,0,0,0]))return{ext:"ttf",mime:"font/ttf"};if(this.check([0,0,1,0]))return{ext:"ico",mime:"image/x-icon"};if(this.check([0,0,2,0]))return{ext:"cur",mime:"image/x-icon"};if(this.buffer.length>=2&&this.check([255,224],{offset:0,mask:[255,224]})){if(this.check([16],{offset:1,mask:[22]}))return this.check([8],{offset:1,mask:[8]})?{ext:"aac",mime:"audio/aac"}:{ext:"aac",mime:"audio/aac"};if(this.check([2],{offset:1,mask:[6]}))return{ext:"mp3",mime:"audio/mpeg"};if(this.check([4],{offset:1,mask:[6]}))return{ext:"mp2",mime:"audio/mpeg"};if(this.check([6],{offset:1,mask:[6]}))return{ext:"mp1",mime:"audio/mpeg"}}};async readTiffTag(e){let t=await this.tokenizer.readToken(e?Jc:it);switch(this.tokenizer.ignore(10),t){case 50341:return{ext:"arw",mime:"image/x-sony-arw"};case 50706:return{ext:"dng",mime:"image/x-adobe-dng"};default:}}async readTiffIFD(e){let t=await this.tokenizer.readToken(e?Jc:it);for(let n=0;n<t;++n){let i=await this.readTiffTag(e);if(i)return i}}async readTiffHeader(e){let t=(e?Jc:it).get(this.buffer,2),n=(e?a_:Et).get(this.buffer,4);if(t===42){if(n>=6){if(this.checkString("CR",{offset:8}))return{ext:"cr2",mime:"image/x-canon-cr2"};if(n>=8){let o=(e?Jc:it).get(this.buffer,8),s=(e?Jc:it).get(this.buffer,10);if(o===28&&s===254||o===31&&s===11)return{ext:"nef",mime:"image/x-nikon-nef"}}}return await this.tokenizer.ignore(n),await this.readTiffIFD(e)??{ext:"tif",mime:"image/tiff"}}if(t===43)return{ext:"tif",mime:"image/tiff"}}},UIe=new Set(L_),HIe=new Set(O_);var ns=we("helia:verified-fetch:content-type-parser"),O2="application/octet-stream";function o$(r){return ns("checking for svg"),/^(<\?xml[^>]+>)?[^<^\w]+<svg/ig.test(r)}async function s$(r){ns("checking for json");try{return JSON.parse(r),!0}catch(e){return ns("failed to parse as json",e),!1}}function a$(r){ns("checking for text");let e=new TextDecoder("utf-8",{fatal:!0});try{return e.decode(r)}catch{return null}}async function c$(r){return ns("checking for html"),/^\s*<(?:!doctype\s+html|html|head|body)\b/i.test(r)}async function M_(r,e){ns("contentTypeParser called for fileName: %s, byte size=%s",e,r.length);let t=(await B_(r))?.mime;if(t!=null)return ns("detectedType: %s",t),t;if(ns("no detectedType"),e==null){let n=a$(r);return n!=null?o$(n)?"image/svg+xml":await s$(n)?"application/json":await c$(n)?"text/html; charset=utf-8":"text/plain; charset=utf-8":O2}switch(e.split(".").pop()){case"css":return"text/css";case"html":return"text/html; charset=utf-8";case"js":return"application/javascript";case"json":return"application/json";case"txt":return"text/plain";case"woff2":return"font/woff2";case"svg":return"image/svg+xml";case"csv":return"text/csv";case"doc":return"application/msword";case"xls":return"application/vnd.ms-excel";case"ppt":return"application/vnd.ms-powerpoint";case"msi":return"application/x-msdownload";default:return O2}}function F_(r){return r?.then!=null}async function B2({bytes:r,path:e,response:t,contentTypeParser:n,log:i,defaultContentType:o="application/octet-stream"}){let s;if(n!=null)try{let a=e.split("/").pop()?.trim();a=a===""?void 0:a;let c=n(r,a);if(F_(c)){let l=await c;l!=null&&(s=l)}else c!=null&&(s=c);i.trace("contentTypeParser returned %s",s)}catch(a){i.error("error parsing content type",a)}s===O2&&(s=o),i.trace('setting content type to "%s"',s??o),t.headers.set("content-type",s??o)}var M2=class extends gt{codes=[Le];canHandle({cid:e,accept:t,pathDetails:n}){return this.log("checking if we can handle %c with accept %s",e,t),n==null?!1:e.code===Le}getRedirectUrl(e){let{resource:t,path:n}=e;if(n===""?!t.toString().endsWith("/"):!n.endsWith("/"))try{let o=new URL(t.toString());return o.pathname.endsWith("/")?null:(o.pathname=`${o.pathname}/`,o.toString())}catch{return`${t.toString()}/`}return null}async handle(e){let{cid:t,options:n,withServerTiming:i=!1,pathDetails:o}=e,{handleServerTiming:s,contentTypeParser:a,helia:c,getBlockstore:l}=this.pluginOptions,u=this.log,d=e.resource,h=e.path,f=!1,p=new Zc(this.pluginOptions.logger,n?.headers);if(o==null)throw new TypeError("Path details are required");let m=o.ipfsRoots,g=o.terminalElement,y=g.cid;if(g?.type==="directory"){let b=g.cid,A=this.getRedirectUrl(e);if(A!=null){if(u.trace("directory url normalization spec requires redirect..."),n?.redirect==="error")throw u('could not redirect to %s as redirect option was set to "error"',A),new TypeError("Failed to fetch");if(n?.redirect==="manual")return u("returning 301 permanent redirect to %s",A),id(d,A);u("following redirect to %s",A),d=A,f=!0}let k="index.html";try{u.trace("found directory at %c/%s, looking for index.html",t,h);let E=await s("exporter-dir","",async()=>_t(`/ipfs/${b}/${k}`,c.blockstore,{signal:n?.signal,onProgress:n?.onProgress}),i);u.trace("found root file at %c/%s with cid %c",b,k,E.cid),h=k,y=E.cid}catch(E){this.log.error("error loading path %c/%s",b,k,E),n?.signal?.throwIfAborted(),e.isDirectory=!0,e.directoryEntries=[],this.log.trace("attempting to get directory entries because index.html was not found");let S=e_({...c,blockstore:l(e.cid,e.resource,n?.session??!0,n)});try{for await(let T of S.ls(b,{signal:n?.signal,onProgress:n?.onProgress}))e.directoryEntries.push(T);return null}catch(T){return u.error("error listing directory %c",b,T),Ym("Unable to get directory contents")}}finally{n?.onProgress?.(new M("verified-fetch:request:end",{cid:b,path:k}))}}p.isRangeRequest&&p.isValidRangeRequest&&g.type==="file"&&(p.setFileSize(g.unixfs.fileSize()),u.trace("fileSize for rangeRequest %d",p.getFileSize()));let w=p.offset,x=p.length;u.trace("calling exporter for %c/%s with offset=%o & length=%o",y,h,w,x);try{let A=(await s("exporter-file","",async()=>_t(y,c.blockstore,{signal:n?.signal,onProgress:n?.onProgress}),i)).content({signal:n?.signal,onProgress:n?.onProgress,offset:w,length:x});u("got async iterator for %c/%s",t,h);let{stream:k,firstChunk:E}=await s("stream-and-chunk","",async()=>n_(A,h??"",this.pluginOptions.logger,{onProgress:n?.onProgress,signal:n?.signal}),i);p.setBody(k);let S=jm(d,p.getBody(),{byteRangeContext:p,log:u},{redirected:f});return await s("set-content-type","",async()=>B2({bytes:E,path:h,response:S,contentTypeParser:a,log:u}),i),e2(S,m),S}catch(b){return n?.signal?.throwIfAborted(),u.error("error streaming %c/%s",t,h,b),p.isRangeRequest&&b.code==="ERR_INVALID_PARAMS"?Wm(d):zc(d.toString(),"Unable to stream content")}}};var F2=class extends gt{canHandle(e){this.log("checking if we can handle %c with accept %s",e.cid,e.accept);let{pathDetails:t,cid:n}=e;return t!=null?!1:n.code===Le||n.code===Pr}async handle(e){let{cid:t,resource:n,options:i,withServerTiming:o=!1}=e,{getBlockstore:s,handleServerTiming:a}=this.pluginOptions,c=s(t,n,i?.session??!0,i),l=await a("path-walking","",async()=>gI({...e,blockstore:c,log:this.log}),o);return e.modified++,l instanceof Response?(this.log.trace("path walking failed"),l.status===404?l:null):(e.pathDetails=l,null)}};function U2(r){return r.charAt(0)==="1"||r.charAt(0)==="Q"?Ne(r):Kt(B.parse(r))}var bd=class extends Error{name="PluginError";code;fatal;details;response;constructor(e,t,n){super(t),this.code=e,this.fatal=n?.fatal??!1,this.details=n?.details,this.response=n?.response}},to=class extends bd{name="PluginFatalError";constructor(e,t,n){super(e,t,{...n,fatal:!0}),this.name="PluginFatalError"}};var H2=class extends gt{codes=[];canHandle({cid:e,accept:t,query:n}){return this.log("checking if we can handle %c with accept %s",e,t),t==="application/vnd.ipfs.ipns-record"||n.format==="ipns-record"}async handle(e){let{resource:t,path:n,options:i}=e,{helia:o}=this.pluginOptions;if(e.reqFormat="ipns-record",n!==""||!(t.startsWith("ipns://")||t.includes(".ipns.")||t.includes("/ipns/")))throw this.log.error('invalid request for IPNS name "%s" and path "%s"',t,n),new to("ERR_INVALID_IPNS_NAME","Invalid IPNS name",{response:nd(t,"Invalid IPNS name")});let s;try{let h;t.startsWith("ipns://")?h=t.replace("ipns://",""):t.includes("/ipns/")?h=t.split("/ipns/")[1].split("/")[0].split("?")[0]:h=t.split(".ipns.")[0].split("://")[1],this.log.trace('trying to parse peer id from "%s"',h),s=U2(h)}catch(h){throw this.log.error("could not parse peer id from IPNS url %s",t,h),new to("ERR_NO_PEER_ID_FOUND","could not parse peer id from url",{response:nd(t,h)})}let a=ge([C("/ipns/"),s.toMultihash().bytes]),c=new Fe("/dht/record/"+U(a,"base32"),!1),l=await o.datastore.get(c,i),u=tt.deserialize(l),d=Kn(t,u.value);return d.headers.set("content-type","application/vnd.ipfs.ipns-record"),d}};var z2=class extends gt{codes=[ai,ri];canHandle({cid:e,accept:t}){return this.log("checking if we can handle %c with accept %s",e,t),t==="application/vnd.ipld.dag-json"&&e.code!==Pr?!0:ai===e.code||ri===e.code}async handle(e){let{path:t,resource:n,cid:i,accept:o,options:s}=e,{getBlockstore:a}=this.pluginOptions,c=s?.session??!0;this.log.trace("fetching %c/%s",i,t);let l=e.pathDetails?.terminalElement.cid??e.cid,d=await a(l,n,c,s).get(l,s),h;if(o==="application/vnd.ipld.dag-cbor"||o==="application/cbor")try{let p=ec(d);h=Za(p)}catch(p){return this.log.error("could not transform %c to application/vnd.ipld.dag-cbor",p),Ji(n)}else h=d;let f=Kn(n,h);return f.headers.set("content-type",o??"application/json"),f}};var l$=["application/vnd.ipld.dag-json","application/vnd.ipld.raw","application/octet-stream"];function u$({headers:r,accept:e}){let n=(e??new Headers(r).get("accept")??"").split(",").map(i=>i.split(";")[0]).map(i=>i.trim());for(let i of n){if(i==="*/*")return;if(l$.includes(i??""))return i}}var $2=class extends gt{codes=[We,At.code];canHandle({cid:e,accept:t,query:n}){return this.log("checking if we can handle %c with accept %s",e,t),t==="application/vnd.ipld.raw"||n.format==="raw"}async handle(e){let{path:t,resource:n,cid:i,accept:o,query:s,options:a}=e,{getBlockstore:c,contentTypeParser:l}=this.pluginOptions,u=a?.session??!0,d=this.log;if(o==="application/vnd.ipld.raw"||s.format==="raw"?(e.reqFormat="raw",e.query.download=!0,e.query.filename=e.query.filename??`${i.toString()}.bin`,d.trace("Set content disposition...")):d.trace("Did NOT set content disposition..."),t!==""&&i.code===We)throw d.trace("404-ing raw codec request for %c/%s",i,t),new to("ERR_RAW_PATHS_NOT_SUPPORTED","Raw codec does not support paths",{response:Xm(n,"Raw codec does not support paths")});let h=new Zc(this.pluginOptions.logger,a?.headers),f=e.pathDetails?.terminalElement.cid??e.cid,m=await c(f,n,u,a).get(f,a);h.setBody(m);let g=jm(n,h.getBody(),{byteRangeContext:h,log:d},{redirected:!1});return await B2({bytes:m,path:t,response:g,defaultContentType:u$({headers:a?.headers,accept:o}),contentTypeParser:l,log:d}),g}};var d$=({weak:r,reqFormat:e})=>e==="tar"||e==="car"||e==="ipns-record"||r===!0?"W/":"",f$=({reqFormat:r})=>r==null?"":r==="tar"?".x-tar":`.${r}`;function V2({cid:r,reqFormat:e,weak:t,rangeStart:n,rangeEnd:i}){let o=d$({weak:t,reqFormat:e}),s=f$({reqFormat:e});return(n!=null||i!=null)&&(s+=`.${n??"0"}-${i??"N"}`),`${o}"${r.toString()}${s}"`}var $_e=C("ustar\0","binary"),V_e=C("ustar ","binary"),q_e=C(" \0","binary");var V_=ut(H_(),1);function p$(r){return r[Symbol.asyncIterator]!=null}function m$(r){if(p$(r))return(async()=>{let n=new Uint8Array(0);for await(let i of r)n=ge([n,i],n.length+i.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return ge(e,t)}var z_=m$;var g$="0000000000000000000",y$="7777777777777777777",w$=48,x$=C("ustar\0","binary"),b$=C("00","binary"),v$=parseInt("7777",8),E$=257,S$=263,A$=function(r){switch(r){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72;default:return 0}},T$=function(r){let e=256;for(let t=0;t<148;t++)e+=r[t];for(let t=156;t<512;t++)e+=r[t];return e},is=function(r,e){let t=r.toString(8);return t.length>e?C(y$.slice(0,e)+" "):C(g$.slice(0,e-t.length)+t+" ")},iy=function(r){let e=C(r).byteLength,t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,`${e+t}${r}`};function $_(r){let e="";r.name!=null&&(e+=iy(" path="+r.name+`
|
|
75
|
+
`),t),t.log('handle: responded with "na" for "%s"',i)}}var dU=500,S5=class{id;remoteAddr;remotePeer;direction;timeline;multiplexer;encryption;status;limits;log;tags;_newStream;_close;_abort;_getStreams;constructor(e){let{remoteAddr:t,remotePeer:n,newStream:i,close:o,abort:s,getStreams:a}=e;this.id=`${parseInt(String(Math.random()*1e9)).toString(36)}${Date.now()}`,this.remoteAddr=t,this.remotePeer=n,this.direction=e.direction,this.status="open",this.timeline=e.timeline,this.multiplexer=e.multiplexer,this.encryption=e.encryption,this.limits=e.limits,this.log=e.logger.forComponent(`libp2p:connection:${this.direction}:${this.id}`),this.remoteAddr.getPeerId()==null&&(this.remoteAddr=this.remoteAddr.encapsulate(`/p2p/${this.remotePeer}`)),this._newStream=i,this._close=o,this._abort=s,this._getStreams=a,this.tags=[]}[Symbol.toStringTag]="Connection";[wy]=!0;get streams(){return this._getStreams()}async newStream(e,t){if(this.status==="closing")throw new Pd("the connection is being closed");if(this.status==="closed")throw new xa("the connection is closed");if(Array.isArray(e)||(e=[e]),this.limits!=null&&t?.runOnLimitedConnection!==!0)throw new Ea("Cannot open protocol stream on limited connection");let n=await this._newStream(e,t);return n.direction="outbound",n}async close(e={}){if(!(this.status==="closed"||this.status==="closing")){if(this.log("closing connection to %a",this.remoteAddr),this.status="closing",e.signal==null){let t=AbortSignal.timeout(dU);e={...e,signal:t}}try{this.log.trace("closing underlying transport"),await this._close(e),this.log.trace("updating timeline with close time"),this.status="closed",this.timeline.close=Date.now()}catch(t){this.log.error("error encountered during graceful close of connection to %a",this.remoteAddr,t),this.abort(t)}}}abort(e){this.status!=="closed"&&(this.log.error("aborting connection to %a due to error",this.remoteAddr,e),this.status="closing",this._abort(e),this.status="closed",this.timeline.close=Date.now())}};function pT(r){return new S5(r)}function hU(r,e){try{let{options:t}=e.getHandler(r);return t.maxInboundStreams}catch(t){if(t.name!=="UnhandledProtocolError")throw t}return b5}function pU(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??v5}function mT(r,e,t){let n=0;return t.streams.forEach(i=>{i.direction===e&&i.protocol===r&&n++}),n}var Um=class{components;connectionEncrypters;streamMuxers;inboundUpgradeTimeout;inboundStreamProtocolNegotiationTimeout;outboundStreamProtocolNegotiationTimeout;events;metrics;constructor(e,t){this.components=e,this.connectionEncrypters=new Map,t.connectionEncrypters.forEach(n=>{this.connectionEncrypters.set(n.protocol,n)}),this.streamMuxers=new Map,t.streamMuxers.forEach(n=>{this.streamMuxers.set(n.protocol,n)}),this.inboundUpgradeTimeout=t.inboundUpgradeTimeout??1e4,this.inboundStreamProtocolNegotiationTimeout=t.inboundStreamProtocolNegotiationTimeout??1e4,this.outboundStreamProtocolNegotiationTimeout=t.outboundStreamProtocolNegotiationTimeout??1e4,this.events=e.events,this.metrics={dials:e.metrics?.registerCounterGroup("libp2p_connection_manager_dials_total"),errors:e.metrics?.registerCounterGroup("libp2p_connection_manager_dial_errors_total")}}[Symbol.toStringTag]="@libp2p/upgrader";async shouldBlockConnection(e,...t){let n=this.components.connectionGater[e];if(n==null)return;if(await n.apply(this.components.connectionGater,t)===!0)throw new vm(`The multiaddr connection is blocked by gater.${e}`)}createInboundAbortSignal(e){let t=de([AbortSignal.timeout(this.inboundUpgradeTimeout),e]);return t}async upgradeInbound(e,t){let n=!1,i=this.createInboundAbortSignal(t.signal);try{if(this.metrics.dials?.increment({inbound:!0}),n=await this.components.connectionManager.acceptIncomingConnection(e),!n)throw new Em("Connection denied");await this.shouldBlockConnection("denyInboundConnection",e),await this._performUpgrade(e,"inbound",{...t,signal:i})}catch(o){throw this.metrics.errors?.increment({inbound:!0}),o}finally{i.clear(),n&&this.components.connectionManager.afterUpgradeInbound()}}async upgradeOutbound(e,t){try{this.metrics.dials?.increment({outbound:!0});let n=e.remoteAddr.getPeerId(),i;n!=null&&(i=Ne(n),await this.shouldBlockConnection("denyOutboundConnection",i,e));let o="outbound";return t.initiator===!1&&(o="inbound"),await this._performUpgrade(e,o,t)}catch(n){throw this.metrics.errors?.increment({outbound:!0}),n}}async _performUpgrade(e,t,n){let i,o,s,a,c;this.components.metrics?.trackMultiaddrConnection(e),e.log.trace("starting the %s connection upgrade",t);let l=e;if(n?.skipProtection!==!0){let u=this.components.connectionProtector;u!=null&&(e.log("protecting the %s connection",t),l=await u.protect(e,n))}try{if(i=l,n?.skipEncryption!==!0){n?.onProgress?.(new M(`upgrader:encrypt-${t}-connection`)),{conn:i,remotePeer:o,protocol:c,streamMuxer:a}=await(t==="inbound"?this._encryptInbound(l,n):this._encryptOutbound(l,n));let u={...l,...i};await this.shouldBlockConnection(t==="inbound"?"denyInboundEncryptedConnection":"denyOutboundEncryptedConnection",o,u)}else{let u=e.remoteAddr.getPeerId();if(u==null)throw new io(`${t} connection that skipped encryption must have a peer id`);let d=Ne(u);c="native",o=d}if(o.equals(this.components.peerId)){let u=new va("Can not dial self");throw e.abort(u),u}if(s=i,n?.muxerFactory!=null)a=n.muxerFactory;else if(a==null&&this.streamMuxers.size>0){n?.onProgress?.(new M(`upgrader:multiplex-${t}-connection`));let u=await(t==="inbound"?this._multiplexInbound({...l,...i},this.streamMuxers,n):this._multiplexOutbound({...l,...i},this.streamMuxers,n));a=u.muxerFactory,s=u.stream}}catch(u){throw e.log.error("failed to upgrade inbound connection %s %a - %e",t==="inbound"?"from":"to",e.remoteAddr,u),u}return await this.shouldBlockConnection(t==="inbound"?"denyInboundUpgradedConnection":"denyOutboundUpgradedConnection",o,e),e.log("successfully upgraded %s connection",t),this._createConnection({cryptoProtocol:c,direction:t,maConn:e,upgradedConn:s,muxerFactory:a,remotePeer:o,limits:n?.limits})}_createConnection(e){let{cryptoProtocol:t,direction:n,maConn:i,upgradedConn:o,remotePeer:s,muxerFactory:a,limits:c}=e,l,u,d;a!=null&&(l=a.createStreamMuxer({direction:n,onIncomingStream:p=>{d!=null&&Promise.resolve().then(async()=>{let m=this.components.registrar.getProtocols(),g=AbortSignal.timeout(this.inboundStreamProtocolNegotiationTimeout);let{stream:y,protocol:w}=await Qu(p,m,{signal:g,log:p.log,yieldBytes:!1});if(d==null)return;d.log("incoming stream opened on %s",w);let x=hU(w,this.components.registrar);if(mT(w,"inbound",d)===x){let A=new Ld(`Too many inbound protocol streams for protocol "${w}" - limit ${x}`);throw p.abort(A),A}p.source=y.source,p.sink=y.sink,p.protocol=w,y.closeWrite!=null&&(p.closeWrite=y.closeWrite),y.closeRead!=null&&(p.closeRead=y.closeRead),y.close!=null&&(p.close=y.close),await this.components.peerStore.merge(s,{protocols:[w]}),this.components.metrics?.trackProtocolStream(p,d),this._onStream({connection:d,stream:p,protocol:w})}).catch(async m=>{d.log.error("error handling incoming stream id %s - %e",p.id,m),p.timeline.close==null&&await p.close()})}}),u=async(p,m={})=>{if(l==null)throw new oa("Connection is not multiplexed");d.log.trace("starting new stream for protocols %s",p);let g=await l.newStream();d.log.trace("started new stream %s for protocols %s",g.id,p);try{if(m.signal==null){g.log("no abort signal was passed while trying to negotiate protocols %s falling back to default timeout",p);let A=AbortSignal.timeout(this.outboundStreamProtocolNegotiationTimeout);m={...m,signal:A}}g.log.trace("selecting protocol from protocols %s",p);let{stream:y,protocol:w}=await ju(g,p,{...m,log:g.log,yieldBytes:!0});g.log.trace("selected protocol %s",w);let x=pU(w,this.components.registrar,m),b=mT(w,"outbound",d);if(b>=x){let A=new so(`Too many outbound protocol streams for protocol "${w}" - ${b}/${x}`);throw g.abort(A),A}return await this.components.peerStore.merge(s,{protocols:[w]}),g.source=y.source,g.sink=y.sink,g.protocol=w,y.closeWrite!=null&&(g.closeWrite=y.closeWrite),y.closeRead!=null&&(g.closeRead=y.closeRead),y.close!=null&&(g.close=y.close),this.components.metrics?.trackProtocolStream(g,d),g}catch(y){throw d.log.error("could not create new outbound stream on connection %s %a for protocols %s - %e",n==="inbound"?"from":"to",e.maConn.remoteAddr,p,y),g.timeline.close==null&&g.abort(y),y}},Promise.all([l.sink(o.source),o.sink(l.source)]).catch(p=>{d.log.error("error piping data through muxer - %e",p)}));let h=i.timeline;i.timeline=new Proxy(h,{set:(...p)=>(p[1]==="close"&&p[2]!=null&&h.close==null&&(async()=>{try{d.status==="open"&&await d.close()}catch(m){d.log.error("error closing connection after timeline close %e",m)}finally{this.events.safeDispatchEvent("connection:close",{detail:d})}})().catch(m=>{d.log.error("error thrown while dispatching connection:close event %e",m)}),Reflect.set(...p))}),i.timeline.upgraded=Date.now();let f=()=>{throw new oa("Connection is not multiplexed")};return d=pT({remoteAddr:i.remoteAddr,remotePeer:s,status:"open",direction:n,timeline:i.timeline,multiplexer:l?.protocol,encryption:t,limits:c,logger:this.components.logger,newStream:u??f,getStreams:()=>l?.streams??[],close:async p=>{await l?.close(p),await i.close(p)},abort:p=>{i.abort(p),l?.abort(p)}}),this.events.safeDispatchEvent("connection:open",{detail:d}),d.__maConnTimeline=h,d}_onStream(e){let{connection:t,stream:n,protocol:i}=e,{handler:o,options:s}=this.components.registrar.getHandler(i);if(t.limits!=null&&s.runOnLimitedConnection!==!0)throw new Ea("Cannot open protocol stream on limited connection");o({connection:t,stream:n})}async _encryptInbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{let{stream:i,protocol:o}=await Qu(e,n,{...t,log:e.log}),s=this.connectionEncrypters.get(o);if(s==null)throw new sa(`no crypto module found for ${o}`);return e.log("encrypting inbound connection to %a using %s",e.remoteAddr,o),{...await s.secureInbound(i,t),protocol:o}}catch(i){throw e.log.error("encrypting inbound connection from %a failed",e.remoteAddr,i),new sa(i.message)}}async _encryptOutbound(e,t){let n=Array.from(this.connectionEncrypters.keys());try{e.log.trace("selecting encrypter from %s",n);let{stream:i,protocol:o}=await ju(e,n,{...t,log:e.log,yieldBytes:!0}),s=this.connectionEncrypters.get(o);if(s==null)throw new sa(`no crypto module found for ${o}`);return e.log("encrypting outbound connection to %a using %s",e.remoteAddr,o),{...await s.secureOutbound(i,t),protocol:o}}catch(i){throw e.log.error("encrypting outbound connection to %a failed",e.remoteAddr,i),new sa(i.message)}}async _multiplexOutbound(e,t,n){let i=Array.from(t.keys());e.log("outbound selecting muxer %s",i);try{e.log.trace("selecting stream muxer from %s",i);let{stream:o,protocol:s}=await ju(e,i,{...n,log:e.log,yieldBytes:!0});e.log("selected %s as muxer protocol",s);let a=t.get(s);return{stream:o,muxerFactory:a}}catch(o){throw e.log.error("error multiplexing outbound connection",o),new oa(String(o))}}async _multiplexInbound(e,t,n){let i=Array.from(t.keys());e.log("inbound handling muxers %s",i);try{let{stream:o,protocol:s}=await Qu(e,i,{...n,log:e.log}),a=t.get(s);return{stream:o,muxerFactory:a}}catch(o){throw e.log.error("error multiplexing inbound connection",o),new oa(String(o))}}getConnectionEncrypters(){return this.connectionEncrypters}getStreamMuxers(){return this.streamMuxers}};var Hm=class extends be{peerId;peerStore;contentRouting;peerRouting;metrics;services;logger;status;components;log;constructor(e){super(),this.status="stopped";let t=new be,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??So(),this.log=this.logger.forComponent("libp2p"),this.services={};let i=e.nodeInfo?.name??J0,o=e.nodeInfo?.version??Z0,s=this.components=YA({peerId:e.peerId,privateKey:e.privateKey,nodeInfo:{name:i,version:o,userAgent:e.nodeInfo?.userAgent??em(i,o)},logger:this.logger,events:t,datastore:e.datastore??new Ws,connectionGater:jA(e.connectionGater),dns:e.dns});this.peerStore=this.configureComponent("peerStore",zA(s,{addressFilter:this.components.connectionGater.filterMultiaddrForPeer,...e.peerStore})),e.metrics!=null&&(this.metrics=this.configureComponent("metrics",e.metrics(this.components))),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 Um(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??e.connectionManager?.protocolNegotiationTimeout,outboundStreamProtocolNegotiationTimeout:e.connectionManager?.outboundStreamProtocolNegotiationTimeout??e.connectionManager?.protocolNegotiationTimeout}),this.configureComponent("transportManager",new Fm(this.components,e.transportManager)),this.configureComponent("connectionManager",new Dm(this.components,e.connectionManager)),e.connectionMonitor?.enabled!==!1&&this.configureComponent("connectionMonitor",new Nm(this.components,e.connectionMonitor)),this.configureComponent("registrar",new Mm(this.components)),this.configureComponent("addressManager",new fm(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 Om(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 Lm(this.components,{routers:c})),this.configureComponent("randomWalk",new Bm(this.components)),(e.peerDiscovery??[]).forEach((l,u)=>{this.configureComponent(`peer-discovery-${u}`,l(this.components)).addEventListener("peer",h=>{this.#e(h)})}),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[Qn]!=null&&(this.log("registering service %s for content routing",l),c.push(d[Qn])),d[Zn]!=null&&(this.log("registering service %s for peer routing",l),a.push(d[Zn])),d[os]!=null&&(this.log("registering service %s for peer discovery",l),d[os].addEventListener?.("peer",h=>{this.#e(h)}))}XA(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")}catch(e){throw this.log.error("An error occurred starting libp2p",e),this.status="started",await this.stop(),e}}}async stop(){this.status==="started"&&(this.log("libp2p is stopping"),this.status="stopping",await this.components.beforeStop?.(),await this.components.stop(),await this.components.afterStop?.(),this.status="stopped",this.safeDispatchEvent("stop",{detail:this}),this.log("libp2p has stopped"))}getConnections(e){return this.components.connectionManager.getConnections(e)}getDialQueue(){return this.components.connectionManager.getDialQueue()}getPeers(){let e=new yr;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 O("no protocols were provided to open a stream");if(t=Array.isArray(t)?t:[t],t.length===0)throw new O("no protocols were provided to open a stream");return(await this.dial(e,n)).newStream(t,n)}getMultiaddrs(){return this.components.addressManager.getAddresses()}getProtocols(){return this.components.registrar.getProtocols()}async hangUp(e,t={}){Po(e)&&(e=Ne(e.getPeerId()??"")),await this.components.connectionManager.closeConnections(e,t)}async getPublicKey(e,t={}){if(this.log("getPublicKey %p",e),e.publicKey!=null)return e.publicKey;try{let s=await this.peerStore.get(e);if(s.id.publicKey!=null)return s.id.publicKey}catch(s){if(s.name!=="NotFoundError")throw s}let n=ge([C("/pk/"),e.toMultihash().bytes]),i=await this.contentRouting.get(n,t),o=wt(i);return await this.peerStore.patch(e,{publicKey:o}),o}async handle(e,t,n){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async i=>{await this.components.registrar.handle(i,t,n)}))}async unhandle(e){Array.isArray(e)||(e=[e]),await Promise.all(e.map(async t=>{await this.components.registrar.unhandle(t)}))}async register(e,t){return this.components.registrar.register(e,t)}unregister(e){this.components.registrar.unregister(e)}async isDialable(e,t={}){return this.components.connectionManager.isDialable(e,t)}#e(e){let{detail:t}=e;if(t.id.toString()===this.peerId.toString()){this.log.error("peer discovery mechanism discovered self");return}this.components.peerStore.merge(t.id,{multiaddrs:t.multiaddrs}).catch(n=>{this.log.error(n)})}};async function zm(r={}){r.privateKey??=await vf("Ed25519");let e=new Hm({...await RA(r),peerId:ew(r.privateKey)});return r.start!==!1&&await e.start(),e}async function gT(r){let e=r.libp2p??{};e.privateKey==null&&r.datastore!=null&&(e.privateKey=await J8(r.datastore,r.keychain));let t=Ku(e);return t.datastore=t.datastore??r.datastore,await zm({...t,...e,start:!1})}async function yT(r={}){let e=r.datastore??new Ws,t=r.blockstore??new xu,n;mU(r.libp2p)?n=r.libp2p:n=await gT({...r,libp2p:{dns:r.dns,...r.libp2p,start:void 0},datastore:e});let i=new Yp({...r,libp2p:n,datastore:e,blockstore:t,blockBrokers:r.blockBrokers??[cu(),Jl()],routers:r.routers??[F6(n),B6()],metrics:n.metrics});return r.start!==!1&&await i.start(),i}function mU(r){return r==null?!1:["dial","dialProtocol","hangUp","handle","unhandle","getMultiaddrs","getProtocols"].every(t=>typeof r[t]=="function")}function wT(){let r=Ku();r.start=!1,r.addresses={listen:[]},r.transports=[Y0(),Q0()],r.peerDiscovery=[];let e={dcutr:r.services.dcutr,identify:r.services.identify,keychain:r.services.keychain,ping:r.services.ping};return{...r,start:!1,services:e}}var Uc=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,bT=new Set,A5=typeof process=="object"&&process?process:{},vT=(r,e,t,n)=>{typeof A5.emitWarning=="function"?A5.emitWarning(r,e,t,n):console.error(`[${t}] ${e}: ${r}`)},$m=globalThis.AbortController,xT=globalThis.AbortSignal;if(typeof $m>"u"){xT=class{onabort;_onabort=[];reason;aborted=!1;addEventListener(n,i){this._onabort.push(i)}},$m=class{constructor(){e()}signal=new xT;abort(n){if(!this.signal.aborted){this.signal.reason=n,this.signal.aborted=!0;for(let i of this.signal._onabort)i(n);this.signal.onabort?.(n)}}};let r=A5.env?.LRU_CACHE_IGNORE_AC_WARNING!=="1",e=()=>{r&&(r=!1,vT("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}var gU=r=>!bT.has(r),Qwe=Symbol("type"),Xo=r=>r&&r===Math.floor(r)&&r>0&&isFinite(r),ET=r=>Xo(r)?r<=Math.pow(2,8)?Uint8Array:r<=Math.pow(2,16)?Uint16Array:r<=Math.pow(2,32)?Uint32Array:r<=Number.MAX_SAFE_INTEGER?Hc:null:null,Hc=class extends Array{constructor(e){super(e),this.fill(0)}},T5=class r{heap;length;static#e=!1;static create(e){let t=ET(e);if(!t)return[];r.#e=!0;let n=new r(e,t);return r.#e=!1,n}constructor(e,t){if(!r.#e)throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new t(e),this.length=0}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}},Vm=class r{#e;#r;#n;#m;#u;#A;#y;ttl;ttlResolution;ttlAutopurge;updateAgeOnGet;updateAgeOnHas;allowStale;noDisposeOnSet;noUpdateTTL;maxEntrySize;sizeCalculation;noDeleteOnFetchRejection;noDeleteOnStaleGet;allowStaleOnFetchAbort;allowStaleOnFetchRejection;ignoreFetchAbort;#a;#s;#c;#i;#t;#l;#w;#p;#d;#b;#f;#v;#E;#g;#x;#T;#h;#R;static unsafeExposeInternals(e){return{starts:e.#E,ttls:e.#g,sizes:e.#v,keyMap:e.#c,keyList:e.#i,valList:e.#t,next:e.#l,prev:e.#w,get head(){return e.#p},get tail(){return e.#d},free:e.#b,isBackgroundFetch:t=>e.#o(t),backgroundFetch:(t,n,i,o)=>e.#M(t,n,i,o),moveToTail:t=>e.#L(t),indexes:t=>e.#I(t),rindexes:t=>e.#_(t),isStale:t=>e.#S(t)}}get max(){return this.#e}get maxSize(){return this.#r}get calculatedSize(){return this.#s}get size(){return this.#a}get fetchMethod(){return this.#A}get memoMethod(){return this.#y}get dispose(){return this.#n}get onInsert(){return this.#m}get disposeAfter(){return this.#u}constructor(e){let{max:t=0,ttl:n,ttlResolution:i=1,ttlAutopurge:o,updateAgeOnGet:s,updateAgeOnHas:a,allowStale:c,dispose:l,onInsert:u,disposeAfter:d,noDisposeOnSet:h,noUpdateTTL:f,maxSize:p=0,maxEntrySize:m=0,sizeCalculation:g,fetchMethod:y,memoMethod:w,noDeleteOnFetchRejection:x,noDeleteOnStaleGet:b,allowStaleOnFetchRejection:A,allowStaleOnFetchAbort:k,ignoreFetchAbort:E}=e;if(t!==0&&!Xo(t))throw new TypeError("max option must be a nonnegative integer");let S=t?ET(t):Array;if(!S)throw new Error("invalid max value: "+t);if(this.#e=t,this.#r=p,this.maxEntrySize=m||this.#r,this.sizeCalculation=g,this.sizeCalculation){if(!this.#r&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(w!==void 0&&typeof w!="function")throw new TypeError("memoMethod must be a function if defined");if(this.#y=w,y!==void 0&&typeof y!="function")throw new TypeError("fetchMethod must be a function if specified");if(this.#A=y,this.#T=!!y,this.#c=new Map,this.#i=new Array(t).fill(void 0),this.#t=new Array(t).fill(void 0),this.#l=new S(t),this.#w=new S(t),this.#p=0,this.#d=0,this.#b=T5.create(t),this.#a=0,this.#s=0,typeof l=="function"&&(this.#n=l),typeof u=="function"&&(this.#m=u),typeof d=="function"?(this.#u=d,this.#f=[]):(this.#u=void 0,this.#f=void 0),this.#x=!!this.#n,this.#R=!!this.#m,this.#h=!!this.#u,this.noDisposeOnSet=!!h,this.noUpdateTTL=!!f,this.noDeleteOnFetchRejection=!!x,this.allowStaleOnFetchRejection=!!A,this.allowStaleOnFetchAbort=!!k,this.ignoreFetchAbort=!!E,this.maxEntrySize!==0){if(this.#r!==0&&!Xo(this.#r))throw new TypeError("maxSize must be a positive integer if specified");if(!Xo(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");this.#V()}if(this.allowStale=!!c,this.noDeleteOnStaleGet=!!b,this.updateAgeOnGet=!!s,this.updateAgeOnHas=!!a,this.ttlResolution=Xo(i)||i===0?i:1,this.ttlAutopurge=!!o,this.ttl=n||0,this.ttl){if(!Xo(this.ttl))throw new TypeError("ttl must be a positive integer if specified");this.#C()}if(this.#e===0&&this.ttl===0&&this.#r===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!this.#e&&!this.#r){let T="LRU_CACHE_UNBOUNDED";gU(T)&&(bT.add(T),vT("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",T,r))}}getRemainingTTL(e){return this.#c.has(e)?1/0:0}#C(){let e=new Hc(this.#e),t=new Hc(this.#e);this.#g=e,this.#E=t,this.#F=(o,s,a=Uc.now())=>{if(t[o]=s!==0?a:0,e[o]=s,s!==0&&this.ttlAutopurge){let c=setTimeout(()=>{this.#S(o)&&this.#k(this.#i[o],"expire")},s+1);c.unref&&c.unref()}},this.#D=o=>{t[o]=e[o]!==0?Uc.now():0},this.#P=(o,s)=>{if(e[s]){let a=e[s],c=t[s];if(!a||!c)return;o.ttl=a,o.start=c,o.now=n||i();let l=o.now-c;o.remainingTTL=a-l}};let n=0,i=()=>{let o=Uc.now();if(this.ttlResolution>0){n=o;let s=setTimeout(()=>n=0,this.ttlResolution);s.unref&&s.unref()}return o};this.getRemainingTTL=o=>{let s=this.#c.get(o);if(s===void 0)return 0;let a=e[s],c=t[s];if(!a||!c)return 1/0;let l=(n||i())-c;return a-l},this.#S=o=>{let s=t[o],a=e[o];return!!a&&!!s&&(n||i())-s>a}}#D=()=>{};#P=()=>{};#F=()=>{};#S=()=>!1;#V(){let e=new Hc(this.#e);this.#s=0,this.#v=e,this.#N=t=>{this.#s-=e[t],e[t]=0},this.#U=(t,n,i,o)=>{if(this.#o(n))return 0;if(!Xo(i))if(o){if(typeof o!="function")throw new TypeError("sizeCalculation must be a function");if(i=o(n,t),!Xo(i))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return i},this.#O=(t,n,i)=>{if(e[t]=n,this.#r){let o=this.#r-e[t];for(;this.#s>o;)this.#B(!0)}this.#s+=e[t],i&&(i.entrySize=n,i.totalCalculatedSize=this.#s)}}#N=e=>{};#O=(e,t,n)=>{};#U=(e,t,n,i)=>{if(n||i)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0};*#I({allowStale:e=this.allowStale}={}){if(this.#a)for(let t=this.#d;!(!this.#H(t)||((e||!this.#S(t))&&(yield t),t===this.#p));)t=this.#w[t]}*#_({allowStale:e=this.allowStale}={}){if(this.#a)for(let t=this.#p;!(!this.#H(t)||((e||!this.#S(t))&&(yield t),t===this.#d));)t=this.#l[t]}#H(e){return e!==void 0&&this.#c.get(this.#i[e])===e}*entries(){for(let e of this.#I())this.#t[e]!==void 0&&this.#i[e]!==void 0&&!this.#o(this.#t[e])&&(yield[this.#i[e],this.#t[e]])}*rentries(){for(let e of this.#_())this.#t[e]!==void 0&&this.#i[e]!==void 0&&!this.#o(this.#t[e])&&(yield[this.#i[e],this.#t[e]])}*keys(){for(let e of this.#I()){let t=this.#i[e];t!==void 0&&!this.#o(this.#t[e])&&(yield t)}}*rkeys(){for(let e of this.#_()){let t=this.#i[e];t!==void 0&&!this.#o(this.#t[e])&&(yield t)}}*values(){for(let e of this.#I())this.#t[e]!==void 0&&!this.#o(this.#t[e])&&(yield this.#t[e])}*rvalues(){for(let e of this.#_())this.#t[e]!==void 0&&!this.#o(this.#t[e])&&(yield this.#t[e])}[Symbol.iterator](){return this.entries()}[Symbol.toStringTag]="LRUCache";find(e,t={}){for(let n of this.#I()){let i=this.#t[n],o=this.#o(i)?i.__staleWhileFetching:i;if(o!==void 0&&e(o,this.#i[n],this))return this.get(this.#i[n],t)}}forEach(e,t=this){for(let n of this.#I()){let i=this.#t[n],o=this.#o(i)?i.__staleWhileFetching:i;o!==void 0&&e.call(t,o,this.#i[n],this)}}rforEach(e,t=this){for(let n of this.#_()){let i=this.#t[n],o=this.#o(i)?i.__staleWhileFetching:i;o!==void 0&&e.call(t,o,this.#i[n],this)}}purgeStale(){let e=!1;for(let t of this.#_({allowStale:!0}))this.#S(t)&&(this.#k(this.#i[t],"expire"),e=!0);return e}info(e){let t=this.#c.get(e);if(t===void 0)return;let n=this.#t[t],i=this.#o(n)?n.__staleWhileFetching:n;if(i===void 0)return;let o={value:i};if(this.#g&&this.#E){let s=this.#g[t],a=this.#E[t];if(s&&a){let c=s-(Uc.now()-a);o.ttl=c,o.start=Date.now()}}return this.#v&&(o.size=this.#v[t]),o}dump(){let e=[];for(let t of this.#I({allowStale:!0})){let n=this.#i[t],i=this.#t[t],o=this.#o(i)?i.__staleWhileFetching:i;if(o===void 0||n===void 0)continue;let s={value:o};if(this.#g&&this.#E){s.ttl=this.#g[t];let a=Uc.now()-this.#E[t];s.start=Math.floor(Date.now()-a)}this.#v&&(s.size=this.#v[t]),e.unshift([n,s])}return e}load(e){this.clear();for(let[t,n]of e){if(n.start){let i=Date.now()-n.start;n.start=Uc.now()-i}this.set(t,n.value,n)}}set(e,t,n={}){if(t===void 0)return this.delete(e),this;let{ttl:i=this.ttl,start:o,noDisposeOnSet:s=this.noDisposeOnSet,sizeCalculation:a=this.sizeCalculation,status:c}=n,{noUpdateTTL:l=this.noUpdateTTL}=n,u=this.#U(e,t,n.size||0,a);if(this.maxEntrySize&&u>this.maxEntrySize)return c&&(c.set="miss",c.maxEntrySizeExceeded=!0),this.#k(e,"set"),this;let d=this.#a===0?void 0:this.#c.get(e);if(d===void 0)d=this.#a===0?this.#d:this.#b.length!==0?this.#b.pop():this.#a===this.#e?this.#B(!1):this.#a,this.#i[d]=e,this.#t[d]=t,this.#c.set(e,d),this.#l[this.#d]=d,this.#w[d]=this.#d,this.#d=d,this.#a++,this.#O(d,u,c),c&&(c.set="add"),l=!1,this.#R&&this.#m?.(t,e,"add");else{this.#L(d);let h=this.#t[d];if(t!==h){if(this.#T&&this.#o(h)){h.__abortController.abort(new Error("replaced"));let{__staleWhileFetching:f}=h;f!==void 0&&!s&&(this.#x&&this.#n?.(f,e,"set"),this.#h&&this.#f?.push([f,e,"set"]))}else s||(this.#x&&this.#n?.(h,e,"set"),this.#h&&this.#f?.push([h,e,"set"]));if(this.#N(d),this.#O(d,u,c),this.#t[d]=t,c){c.set="replace";let f=h&&this.#o(h)?h.__staleWhileFetching:h;f!==void 0&&(c.oldValue=f)}}else c&&(c.set="update");this.#R&&this.onInsert?.(t,e,t===h?"update":"replace")}if(i!==0&&!this.#g&&this.#C(),this.#g&&(l||this.#F(d,i,o),c&&this.#P(c,d)),!s&&this.#h&&this.#f){let h=this.#f,f;for(;f=h?.shift();)this.#u?.(...f)}return this}pop(){try{for(;this.#a;){let e=this.#t[this.#p];if(this.#B(!0),this.#o(e)){if(e.__staleWhileFetching)return e.__staleWhileFetching}else if(e!==void 0)return e}}finally{if(this.#h&&this.#f){let e=this.#f,t;for(;t=e?.shift();)this.#u?.(...t)}}}#B(e){let t=this.#p,n=this.#i[t],i=this.#t[t];return this.#T&&this.#o(i)?i.__abortController.abort(new Error("evicted")):(this.#x||this.#h)&&(this.#x&&this.#n?.(i,n,"evict"),this.#h&&this.#f?.push([i,n,"evict"])),this.#N(t),e&&(this.#i[t]=void 0,this.#t[t]=void 0,this.#b.push(t)),this.#a===1?(this.#p=this.#d=0,this.#b.length=0):this.#p=this.#l[t],this.#c.delete(n),this.#a--,t}has(e,t={}){let{updateAgeOnHas:n=this.updateAgeOnHas,status:i}=t,o=this.#c.get(e);if(o!==void 0){let s=this.#t[o];if(this.#o(s)&&s.__staleWhileFetching===void 0)return!1;if(this.#S(o))i&&(i.has="stale",this.#P(i,o));else return n&&this.#D(o),i&&(i.has="hit",this.#P(i,o)),!0}else i&&(i.has="miss");return!1}peek(e,t={}){let{allowStale:n=this.allowStale}=t,i=this.#c.get(e);if(i===void 0||!n&&this.#S(i))return;let o=this.#t[i];return this.#o(o)?o.__staleWhileFetching:o}#M(e,t,n,i){let o=t===void 0?void 0:this.#t[t];if(this.#o(o))return o;let s=new $m,{signal:a}=n;a?.addEventListener("abort",()=>s.abort(a.reason),{signal:s.signal});let c={signal:s.signal,options:n,context:i},l=(m,g=!1)=>{let{aborted:y}=s.signal,w=n.ignoreFetchAbort&&m!==void 0;if(n.status&&(y&&!g?(n.status.fetchAborted=!0,n.status.fetchError=s.signal.reason,w&&(n.status.fetchAbortIgnored=!0)):n.status.fetchResolved=!0),y&&!w&&!g)return d(s.signal.reason);let x=f;return this.#t[t]===f&&(m===void 0?x.__staleWhileFetching?this.#t[t]=x.__staleWhileFetching:this.#k(e,"fetch"):(n.status&&(n.status.fetchUpdated=!0),this.set(e,m,c.options))),m},u=m=>(n.status&&(n.status.fetchRejected=!0,n.status.fetchError=m),d(m)),d=m=>{let{aborted:g}=s.signal,y=g&&n.allowStaleOnFetchAbort,w=y||n.allowStaleOnFetchRejection,x=w||n.noDeleteOnFetchRejection,b=f;if(this.#t[t]===f&&(!x||b.__staleWhileFetching===void 0?this.#k(e,"fetch"):y||(this.#t[t]=b.__staleWhileFetching)),w)return n.status&&b.__staleWhileFetching!==void 0&&(n.status.returnedStale=!0),b.__staleWhileFetching;if(b.__returned===b)throw m},h=(m,g)=>{let y=this.#A?.(e,o,c);y&&y instanceof Promise&&y.then(w=>m(w===void 0?void 0:w),g),s.signal.addEventListener("abort",()=>{(!n.ignoreFetchAbort||n.allowStaleOnFetchAbort)&&(m(void 0),n.allowStaleOnFetchAbort&&(m=w=>l(w,!0)))})};n.status&&(n.status.fetchDispatched=!0);let f=new Promise(h).then(l,u),p=Object.assign(f,{__abortController:s,__staleWhileFetching:o,__returned:void 0});return t===void 0?(this.set(e,p,{...c.options,status:void 0}),t=this.#c.get(e)):this.#t[t]=p,p}#o(e){if(!this.#T)return!1;let t=e;return!!t&&t instanceof Promise&&t.hasOwnProperty("__staleWhileFetching")&&t.__abortController instanceof $m}async fetch(e,t={}){let{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,ttl:s=this.ttl,noDisposeOnSet:a=this.noDisposeOnSet,size:c=0,sizeCalculation:l=this.sizeCalculation,noUpdateTTL:u=this.noUpdateTTL,noDeleteOnFetchRejection:d=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:h=this.allowStaleOnFetchRejection,ignoreFetchAbort:f=this.ignoreFetchAbort,allowStaleOnFetchAbort:p=this.allowStaleOnFetchAbort,context:m,forceRefresh:g=!1,status:y,signal:w}=t;if(!this.#T)return y&&(y.fetch="get"),this.get(e,{allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:o,status:y});let x={allowStale:n,updateAgeOnGet:i,noDeleteOnStaleGet:o,ttl:s,noDisposeOnSet:a,size:c,sizeCalculation:l,noUpdateTTL:u,noDeleteOnFetchRejection:d,allowStaleOnFetchRejection:h,allowStaleOnFetchAbort:p,ignoreFetchAbort:f,status:y,signal:w},b=this.#c.get(e);if(b===void 0){y&&(y.fetch="miss");let A=this.#M(e,b,x,m);return A.__returned=A}else{let A=this.#t[b];if(this.#o(A)){let $=n&&A.__staleWhileFetching!==void 0;return y&&(y.fetch="inflight",$&&(y.returnedStale=!0)),$?A.__staleWhileFetching:A.__returned=A}let k=this.#S(b);if(!g&&!k)return y&&(y.fetch="hit"),this.#L(b),i&&this.#D(b),y&&this.#P(y,b),A;let E=this.#M(e,b,x,m),T=E.__staleWhileFetching!==void 0&&n;return y&&(y.fetch=k?"stale":"refresh",T&&k&&(y.returnedStale=!0)),T?E.__staleWhileFetching:E.__returned=E}}async forceFetch(e,t={}){let n=await this.fetch(e,t);if(n===void 0)throw new Error("fetch() returned undefined");return n}memo(e,t={}){let n=this.#y;if(!n)throw new Error("no memoMethod provided to constructor");let{context:i,forceRefresh:o,...s}=t,a=this.get(e,s);if(!o&&a!==void 0)return a;let c=n(e,a,{options:s,context:i});return this.set(e,c,s),c}get(e,t={}){let{allowStale:n=this.allowStale,updateAgeOnGet:i=this.updateAgeOnGet,noDeleteOnStaleGet:o=this.noDeleteOnStaleGet,status:s}=t,a=this.#c.get(e);if(a!==void 0){let c=this.#t[a],l=this.#o(c);return s&&this.#P(s,a),this.#S(a)?(s&&(s.get="stale"),l?(s&&n&&c.__staleWhileFetching!==void 0&&(s.returnedStale=!0),n?c.__staleWhileFetching:void 0):(o||this.#k(e,"expire"),s&&n&&(s.returnedStale=!0),n?c:void 0)):(s&&(s.get="hit"),l?c.__staleWhileFetching:(this.#L(a),i&&this.#D(a),c))}else s&&(s.get="miss")}#z(e,t){this.#w[t]=e,this.#l[e]=t}#L(e){e!==this.#d&&(e===this.#p?this.#p=this.#l[e]:this.#z(this.#w[e],this.#l[e]),this.#z(this.#d,e),this.#d=e)}delete(e){return this.#k(e,"delete")}#k(e,t){let n=!1;if(this.#a!==0){let i=this.#c.get(e);if(i!==void 0)if(n=!0,this.#a===1)this.#$(t);else{this.#N(i);let o=this.#t[i];if(this.#o(o)?o.__abortController.abort(new Error("deleted")):(this.#x||this.#h)&&(this.#x&&this.#n?.(o,e,t),this.#h&&this.#f?.push([o,e,t])),this.#c.delete(e),this.#i[i]=void 0,this.#t[i]=void 0,i===this.#d)this.#d=this.#w[i];else if(i===this.#p)this.#p=this.#l[i];else{let s=this.#w[i];this.#l[s]=this.#l[i];let a=this.#l[i];this.#w[a]=this.#w[i]}this.#a--,this.#b.push(i)}}if(this.#h&&this.#f?.length){let i=this.#f,o;for(;o=i?.shift();)this.#u?.(...o)}return n}clear(){return this.#$("delete")}#$(e){for(let t of this.#_({allowStale:!0})){let n=this.#t[t];if(this.#o(n))n.__abortController.abort(new Error("deleted"));else{let i=this.#i[t];this.#x&&this.#n?.(n,i,e),this.#h&&this.#f?.push([n,i,e])}}if(this.#c.clear(),this.#t.fill(void 0),this.#i.fill(void 0),this.#g&&this.#E&&(this.#g.fill(0),this.#E.fill(0)),this.#v&&this.#v.fill(0),this.#p=0,this.#d=0,this.#b.length=0,this.#s=0,this.#a=0,this.#h&&this.#f){let t=this.#f,n;for(;n=t?.shift();)this.#u?.(...n)}}};var k5=ut(qm(),1);var C5=40;function P5(r,e){if(!r.length)throw new Error("Unexpected end of data");let t=k5.default.decode(r);return e.seek(k5.default.decode.bytes),t}function R5(r){let e=new DataView(r.buffer,r.byteOffset,r.byteLength),t=0;return{version:2,characteristics:[e.getBigUint64(t,!0),e.getBigUint64(t+=8,!0)],dataOffset:Number(e.getBigUint64(t+=8,!0)),dataSize:Number(e.getBigUint64(t+=8,!0)),indexOffset:Number(e.getBigUint64(t+=8,!0))}}var jo={Null:r=>r===null?r:void 0,Int:r=>Number.isInteger(r)?r:void 0,Float:r=>typeof r=="number"&&Number.isFinite(r)?r:void 0,String:r=>typeof r=="string"?r:void 0,Bool:r=>typeof r=="boolean"?r:void 0,Bytes:r=>r instanceof Uint8Array?r:void 0,Link:r=>r!==null&&typeof r=="object"&&r.asCID===r?r:void 0,List:r=>Array.isArray(r)?r:void 0,Map:r=>r!==null&&typeof r=="object"&&r.asCID!==r&&!Array.isArray(r)&&!(r instanceof Uint8Array)?r:void 0},Zu={"CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)":jo.Link,"CarV1HeaderOrV2Pragma > roots (anon)":r=>{if(jo.List(r)!==void 0){for(let e=0;e<r.length;e++){let t=r[e];if(t=Zu["CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)"](t),t===void 0)return;if(t!==r[e]){let n=r.slice(0,e);for(let i=e;i<r.length;i++){let o=r[i];if(o=Zu["CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)"](o),o===void 0)return;n.push(o)}return n}}return r}},Int:jo.Int,CarV1HeaderOrV2Pragma:r=>{if(jo.Map(r)===void 0)return;let e=Object.entries(r),t=r,n=1;for(let i=0;i<e.length;i++){let[o,s]=e[i];switch(o){case"roots":{let a=Zu["CarV1HeaderOrV2Pragma > roots (anon)"](r[o]);if(a===void 0)return;if(a!==s||t!==r){if(t===r){t={};for(let c=0;c<i;c++)t[e[c][0]]=e[c][1]}t.roots=a}}break;case"version":{n--;let a=Zu.Int(r[o]);if(a===void 0)return;if(a!==s||t!==r){if(t===r){t={};for(let c=0;c<i;c++)t[e[c][0]]=e[c][1]}t.version=a}}break;default:return}}if(!(n>0))return t}},Ju={"CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)":jo.Link,"CarV1HeaderOrV2Pragma > roots (anon)":r=>{if(jo.List(r)!==void 0){for(let e=0;e<r.length;e++){let t=r[e];if(t=Ju["CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)"](t),t===void 0)return;if(t!==r[e]){let n=r.slice(0,e);for(let i=e;i<r.length;i++){let o=r[i];if(o=Ju["CarV1HeaderOrV2Pragma > roots (anon) > valueType (anon)"](o),o===void 0)return;n.push(o)}return n}}return r}},Int:jo.Int,CarV1HeaderOrV2Pragma:r=>{if(jo.Map(r)===void 0)return;let e=Object.entries(r),t=r,n=1;for(let i=0;i<e.length;i++){let[o,s]=e[i];switch(o){case"roots":{let a=Ju["CarV1HeaderOrV2Pragma > roots (anon)"](s);if(a===void 0)return;if(a!==s||t!==r){if(t===r){t={};for(let c=0;c<i;c++)t[e[c][0]]=e[c][1]}t.roots=a}}break;case"version":{n--;let a=Ju.Int(s);if(a===void 0)return;if(a!==s||t!==r){if(t===r){t={};for(let c=0;c<i;c++)t[e[c][0]]=e[c][1]}t.version=a}}break;default:return}}if(!(n>0))return t}},D5={toTyped:Zu.CarV1HeaderOrV2Pragma,toRepresentation:Ju.CarV1HeaderOrV2Pragma};var h9e=r4();var NU=ut(qm(),1);var w9e=[new z(v.map,2),new z(v.string,"version"),new z(v.uint,1),new z(v.string,"roots")],x9e=new z(v.tag,42);async function N5(r,e){let t=P5(await r.upTo(8),r);if(t===0)throw new Error("Invalid CAR header (zero length)");let n=await r.exactly(t,!0),i=ko(n);if(D5.toTyped(i)===void 0)throw new Error("Invalid CAR header format");if(i.version!==1&&i.version!==2||e!==void 0&&i.version!==e)throw new Error(`Invalid CAR version: ${i.version}${e!==void 0?` (expected ${e})`:""}`);if(i.version===1){if(!Array.isArray(i.roots))throw new Error("Invalid CAR header format");return i}if(i.roots!==void 0)throw new Error("Invalid CAR header format");let o=R5(await r.exactly(C5,!0));r.seek(o.dataOffset-r.pos);let s=await N5(r,1);return Object.assign(s,o)}function ed(r){let e=0;return{async upTo(t){return r.subarray(e,e+Math.min(t,r.length-e))},async exactly(t,n=!1){if(t>r.length-e)throw new Error("Unexpected end of data");let i=r.subarray(e,e+t);return n&&(e+=t),i},seek(t){e+=t},get pos(){return e}}}var L5=ut(qm(),1),LT=1;function O5(r){let e=Za({version:LT,roots:r}),t=L5.default.encode(e.length),n=new Uint8Array(t.length+e.length);return n.set(t,0),n.set(e,t.length),n}function OT(r){return{async setRoots(e){let t=O5(e);await r.write(t)},async writeBlock(e){let{cid:t,bytes:n}=e;await r.write(new Uint8Array(L5.default.encode(t.bytes.length+n.length))),await r.write(t.bytes),n.length&&await r.write(n)},async close(){await r.end()},version(){return LT}}}function Km(){}function BT(){let r=[],e=null,t=Km,n=!1,i=null,o=Km,s=()=>(e||(e=new Promise(l=>{t=()=>{e=null,t=Km,l()}})),e),a={write(l){r.push(l);let u=s();return o(),u},async end(){n=!0;let l=s();o(),await l}},c={async next(){let l=r.shift();return l?(r.length===0&&t(),{done:!1,value:l}):n?(t(),{done:!0,value:void 0}):(i||(i=new Promise(u=>{o=()=>(i=null,o=Km,u(c.next()))})),i)}};return{writer:a,iterator:c}}var td=class r{constructor(e,t){this._encoder=t,this._mutex=t.setRoots(e),this._ended=!1}async put(e){if(!(e.bytes instanceof Uint8Array)||!e.cid)throw new TypeError("Can only write {cid, bytes} objects");if(this._ended)throw new Error("Already closed");let t=B.asCID(e.cid);if(!t)throw new TypeError("Can only write {cid, bytes} objects");return this._mutex=this._mutex.then(()=>this._encoder.writeBlock({cid:t,bytes:e.bytes})),this._mutex}async close(){if(this._ended)throw new Error("Already closed");return await this._mutex,this._ended=!0,this._encoder.close()}version(){return this._encoder.version()}static create(e){e=MU(e);let{encoder:t,iterator:n}=MT(),i=new r(e,t),o=new Gm(n);return{writer:i,out:o}}static createAppender(){let{encoder:e,iterator:t}=MT();e.setRoots=()=>Promise.resolve();let n=new r([],e),i=new Gm(t);return{writer:n,out:i}}static async updateRootsInBytes(e,t){let n=ed(e);await N5(n);let i=O5(t);if(Number(n.pos)!==i.length)throw new Error(`updateRoots() can only overwrite a header of the same length (old header is ${n.pos} bytes, new header is ${i.length} bytes)`);return e.set(i,0),e}},Gm=class{constructor(e){this._iterator=e}[Symbol.asyncIterator](){if(this._iterating)throw new Error("Multiple iterator not supported");return this._iterating=!0,this._iterator}};function MT(){let r=BT(),{writer:e,iterator:t}=r;return{encoder:OT(e),iterator:t}}function MU(r){if(r===void 0)return[];if(!Array.isArray(r)){let t=B.asCID(r);if(!t)throw new TypeError("roots must be a single CID or an array of CIDs");return[t]}let e=[];for(let t of r){let n=B.asCID(t);if(!n)throw new TypeError("roots must be a single CID or an array of CIDs");e.push(n)}return e}var FU=1,B5=class{components;constructor(e,t){this.components=e}async import(e,t){await Lt(this.components.blockstore.putMany(Je(e.blocks(),({cid:n,bytes:i})=>({cid:n,block:i})),t))}async export(e,t,n){let i=Z(),o=Array.isArray(e)?e:[e],s=new Cr({concurrency:FU});s.on("idle",()=>{i.resolve()}),s.on("error",a=>{s.clear(),i.reject(a)});for(let a of o)s.add(async()=>{await this.#e(a,s,async(c,l)=>{n?.blockFilter?.has(c.multihash.bytes)!==!0&&(n?.blockFilter?.add(c.multihash.bytes),await t.put({cid:c,bytes:l}))},n)}).catch(()=>{});try{await i.promise}finally{await t.close()}}async*stream(e,t){let{writer:n,out:i}=td.create(e);this.export(e,n,t).catch(()=>{});for await(let o of i)yield o}async#e(e,t,n,i){let o=await this.components.getCodec(e.code),s=await this.components.blockstore.get(e,i);await n(e,s);let a=jf({bytes:s,cid:e,codec:o});for await(let[,c]of a.links())t.add(async()=>{await this.#e(c,t,n,i)})}};function FT(r,e={}){return new B5(r,e)}function rd(r,e={}){let t=bc(r),n={_cancelled:!1,async start(){this._cancelled=!1},async pull(i){try{let{value:o,done:s}=await t.next();if(this._cancelled)return;if(s===!0){i.close();return}i.enqueue(o)}catch(o){i.error(o)}},cancel(){this._cancelled=!0}};return new globalThis.ReadableStream(n,e)}function M5(r,e,t){Object.defineProperty(r,e,{enumerable:!0,configurable:!1,set:()=>{},get:()=>t})}function Qi(r,e){M5(r,"type",e)}function Zi(r,e){M5(r,"url",e)}function UT(r){M5(r,"redirected",!0)}function Kn(r,e,t){let n=new Response(e,{...t??{},status:200,statusText:"OK"});return t?.redirected===!0&&UT(n),Qi(n,"basic"),Zi(n,r),n.headers.set("Accept-Ranges","bytes"),n}function zc(r,e,t){let n=new Response(e,{...t??{},status:502,statusText:"Bad Gateway"});return Qi(n,"basic"),Zi(n,r),n}function Ym(r,e,t){let n=new Response(e,{...t??{},status:501,statusText:"Not Implemented"});return n.headers.set("X-Content-Type-Options","nosniff"),Qi(n,"basic"),Zi(n,r),n}function Ji(r,e,t){let n=new Response(e,{...t??{},status:406,statusText:"Not Acceptable"});return Qi(n,"basic"),Zi(n,r),n}function Xm(r,e,t){let n=new Response(e,{...t??{},status:404,statusText:"Not Found"});return Qi(n,"basic"),Zi(n,r),n}function nd(r,e,t){e instanceof Error&&(e=e.message);let n=new Response(e,{...t??{},status:400,statusText:"Bad Request"});return Qi(n,"basic"),Zi(n,r),n}function id(r,e,t){let n=new Response(null,{...t??{},status:301,statusText:"Moved Permanently",headers:{...t?.headers??{},location:e}});return Qi(n,"basic"),Zi(n,r),n}function jm(r,e,{byteRangeContext:t,log:n},i){if(!t.isRangeRequest)return Kn(r,e,i);if(!t.isValidRangeRequest)return Wm(r,e,i);let o;try{o=new Response(e,{...i??{},status:206,statusText:"Partial Content",headers:{...i?.headers??{},"content-range":t.contentRangeHeaderValue}})}catch(s){return n?.error("failed to create range response",s),Wm(r,e,i)}return i?.redirected===!0&&UT(o),Qi(o,"basic"),Zi(o,r),o.headers.set("Accept-Ranges","bytes"),o}function Wm(r,e,t){let n=new Response(e,{...t??{},status:416,statusText:"Requested Range Not Satisfiable"});return Qi(n,"basic"),Zi(n,r),n}var gt=class{codes=[];log;pluginOptions;constructor(e){let t=this.constructor.name.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();this.log=e.logger.forComponent(t),this.pluginOptions=e}canHandle(e){throw new Error("Not implemented")}async handle(e){throw new Error("Not implemented")}};function UU({cid:r,ipfsPath:e,query:t}){return t.filename!=null?t.filename:`${e.replace(/\/ipfs\//,"").replace(/\/ipns\//,"").replace(/\//g,"_")}.car`}var Qm=class extends gt{canHandle(e){return this.log("checking if we can handle %c with accept %s",e.cid,e.accept),e.accept?.startsWith("application/vnd.ipld.car")===!0||e.query.format==="car"}async handle(e){let{options:t,pathDetails:n,cid:i}=e,{getBlockstore:o,helia:s}=this.pluginOptions;e.reqFormat="car",e.query.download=!0,e.query.filename=UU(e);let a=o(i,e.resource,t?.session??!0,t),c=FT({blockstore:a,getCodec:s.getCodec}),l=rd(c.stream(n?.terminalElement.cid??i,t)),u=Kn(e.resource,l);return u.headers.set("content-type","application/vnd.ipld.car; version=1"),u}};function HT(r){let e=xr(r,{allowIndefinite:!1,coerceUndefinedToNull:!1,allowNaN:!1,allowInfinity:!1,strict:!0,useMaps:!1,rejectDuplicateMapKeys:!0,allowBigInt:!1});return new TextDecoder().decode(Ql(e))}var jr=class extends Error{static name="InvalidRangeError";constructor(e="Invalid range request"){super(e),this.name="InvalidRangeError"}},Zm=class extends Error{static name="NoContentError";constructor(e="No content found"){super(e),this.name="NoContentError"}},Jm=class extends Error{static name="SubdomainNotSupportedError";constructor(e="Subdomain not supported"){super(e),this.name="SubdomainNotSupportedError"}};function zT({ttl:r,protocol:e,response:t}){if(t.headers.has("cache-control"))return;let n;e==="ipfs"?n="public, max-age=29030400, immutable":r==null?n="public, max-age=300":n=`public, max-age=${r}`,t.headers.set("cache-control",n)}function $T({byteStart:r,byteEnd:e,byteSize:t}){let n=t??"*";if((e??0)>=(t??1/0))throw new jr("Invalid range: Range-end index is greater than or equal to the size of the file.");if((r??0)>=(t??1/0))throw new jr("Invalid range: Range-start index is greater than or equal to the size of the file.");if(r!=null&&e==null)return t==null?`bytes */${n}`:`bytes ${r}-${t-1}/${t}`;if(r==null&&e!=null){if(t==null)return`bytes */${n}`;let i=t-1;return`bytes ${i-e+1}-${i}/${t}`}return r==null&&e==null?`bytes */${n}`:`bytes ${r}-${e}/${n}`}function e2(r,e){e!=null&&r.headers.set("X-Ipfs-Roots",e.map(t=>t.toV1().toString()).join(","))}var Gn=class extends Error{name;code;constructor(e,t,n){super(e),this.name=t,this.code=n}},Qr=class extends Gn{constructor(e="not a Unixfs node"){super(e,"NotUnixFSError","ERR_NOT_UNIXFS")}},Sr=class extends Gn{constructor(e="invalid PBNode"){super(e,"InvalidPBNodeError","ERR_INVALID_PB_NODE")}},Qo=class extends Gn{constructor(e="unknown error"){super(e,"InvalidPBNodeError","ERR_UNKNOWN_ERROR")}},od=class extends Gn{constructor(e="path already exists"){super(e,"AlreadyExistsError","ERR_ALREADY_EXISTS")}},$c=class extends Gn{constructor(e="path does not exist"){super(e,"DoesNotExistError","ERR_DOES_NOT_EXIST")}},Vc=class extends Gn{constructor(e="no content"){super(e,"NoContentError","ERR_NO_CONTENT")}},t2=class extends Gn{constructor(e="not a file"){super(e,"NotAFileError","ERR_NOT_A_FILE")}},Zo=class extends Gn{constructor(e="not a directory"){super(e,"NotADirectoryError","ERR_NOT_A_DIRECTORY")}},Zr=class extends Gn{constructor(e="invalid parameters"){super(e,"InvalidParametersError","ERR_INVALID_PARAMETERS")}};function HU(r){return r[Symbol.asyncIterator]!=null}function zU(r){if(HU(r))return(async()=>{let t;for await(let n of r)t=n;return t})();let e;for(let t of r)e=t;return e}var Jo=zU;var r2=class r extends Error{static name="BadPathError";static code="ERR_BAD_PATH";name=r.name;code=r.code;constructor(e="Bad path"){super(e)}},bn=class r extends Error{static name="NotFoundError";static code="ERR_NOT_FOUND";name=r.name;code=r.code;constructor(e="Not found"){super(e)}},n2=class r extends Error{static name="NoResolverError";static code="ERR_NO_RESOLVER";name=r.name;code=r.code;constructor(e="No resolver"){super(e)}},Pt=class r extends Error{static name="NotUnixFSError";static code="ERR_NOT_UNIXFS";name=r.name;code=r.code;constructor(e="Not UnixFS"){super(e)}},i2=class r extends Error{static name="OverReadError";static code="ERR_OVER_READ";name=r.name;code=r.code;constructor(e="Over read"){super(e)}},o2=class r extends Error{static name="UnderReadError";static code="ERR_UNDER_READ";name=r.name;code=r.code;constructor(e="Under read"){super(e)}},s2=class r extends Error{static name="NoPropError";static code="ERR_NO_PROP";name=r.name;code=r.code;constructor(e="No Property found"){super(e)}},la=class r extends Error{static name="InvalidParametersError";static code="ERR_INVALID_PARAMS";name=r.name;code=r.code;constructor(e="Invalid parameters"){super(e)}};function qc(r,e,t,n,i,o,s){let a=r,c=i;for(;o.length>0;){let l=o[0];if(l in a){o.shift(),c=`${c}/${l}`;let u=B.asCID(a[l]);if(u!=null)return{entry:{type:"object",name:n,path:i,cid:t,node:e,depth:s,size:BigInt(e.length),content:async function*(){yield r}},next:{cid:u,name:l,path:c,toResolve:o}};a=a[l]}else throw new s2(`No property named ${l} found in node ${t}`)}return{entry:{type:"object",name:n,path:i,cid:t,node:e,depth:s,size:BigInt(e.length),content:async function*(){yield r}}}}var $U=async(r,e,t,n,i,o,s,a)=>{let c=await s.get(r,a),l=ko(c);return qc(l,c,r,e,t,n,o)},VT=$U;var VU=async(r,e,t,n,i,o,s,a)=>{let c=await s.get(r,a),l=ec(c);return qc(l,c,r,e,t,n,o)},qT=VU;function qU(r,e,t,n){let i=BigInt(r.length),o=BigInt(e+i);return t>=o||n<e?new Uint8Array(0):(n>=e&&n<o&&(r=r.subarray(0,Number(n-e))),t>=e&&t<o&&(r=r.subarray(Number(t-e))),r)}var ua=qU;var KU=(r,e=0,t=r)=>{let n=BigInt(r),i=BigInt(e??0),o=BigInt(t);if(o!==n&&(o=i+o),o>n&&(o=n),i<0n)throw new la("Offset must be greater than or equal to 0");if(i>n)throw new la("Offset must be less than the file size");if(o<0n)throw new la("Length must be greater than or equal to 0");if(o>n)throw new la("Length must be less than the file size");return{start:i,end:o}},Kc=KU;var GU=r=>{async function*e(t={}){let{start:n,end:i}=Kc(r.length,t.offset,t.length),o=ua(r,0n,n,i);t.onProgress?.(new M("unixfs:exporter:progress:identity",{bytesRead:BigInt(o.byteLength),totalBytes:i-n,fileSize:BigInt(r.byteLength)})),yield o}return e},WU=async(r,e,t,n,i,o,s,a)=>{if(n.length>0)throw new bn(`No link named ${t} found in raw node ${r}`);let c=pe(r.multihash.bytes);return{entry:{type:"identity",name:e,path:t,cid:r,content:GU(c.digest),depth:o,size:BigInt(c.digest.length),node:c.digest}}},KT=WU;var YU=async(r,e,t,n,i,o,s,a)=>{let c=await s.get(r,a),l=Dg(c);return qc(l,c,r,e,t,n,o)},GT=YU;var XU=r=>{async function*e(t={}){let{start:n,end:i}=Kc(r.length,t.offset,t.length),o=ua(r,0n,n,i);t.onProgress?.(new M("unixfs:exporter:progress:raw",{bytesRead:BigInt(o.byteLength),totalBytes:i-n,fileSize:BigInt(r.byteLength)})),yield o}return e},jU=async(r,e,t,n,i,o,s,a)=>{if(n.length>0)throw new bn(`No link named ${t} found in raw node ${r}`);let c=await s.get(r,a);return{entry:{type:"raw",name:e,path:t,cid:r,content:XU(c),depth:o,size:BigInt(c.length),node:c}}},WT=jU;var sd=class r extends Error{static name="InvalidTypeError";static code="ERR_INVALID_TYPE";name=r.name;code=r.code;constructor(e="Invalid type"){super(e)}};var Wn;(function(r){let e;(function(i){i.Raw="Raw",i.Directory="Directory",i.File="File",i.Metadata="Metadata",i.Symlink="Symlink",i.HAMTShard="HAMTShard"})(e=r.DataType||(r.DataType={}));let t;(function(i){i[i.Raw=0]="Raw",i[i.Directory=1]="Directory",i[i.File=2]="File",i[i.Metadata=3]="Metadata",i[i.Symlink=4]="Symlink",i[i.HAMTShard=5]="HAMTShard"})(t||(t={})),function(i){i.codec=()=>Ye(t)}(e=r.DataType||(r.DataType={}));let n;r.codec=()=>(n==null&&(n=ne((i,o,s={})=>{if(s.lengthDelimited!==!1&&o.fork(),i.Type!=null&&(o.uint32(8),r.DataType.codec().encode(i.Type,o)),i.Data!=null&&(o.uint32(18),o.bytes(i.Data)),i.filesize!=null&&(o.uint32(24),o.uint64(i.filesize)),i.blocksizes!=null)for(let a of i.blocksizes)o.uint32(32),o.uint64(a);i.hashType!=null&&(o.uint32(40),o.uint64(i.hashType)),i.fanout!=null&&(o.uint32(48),o.uint64(i.fanout)),i.mode!=null&&(o.uint32(56),o.uint32(i.mode)),i.mtime!=null&&(o.uint32(66),a2.codec().encode(i.mtime,o)),s.lengthDelimited!==!1&&o.ldelim()},(i,o)=>{let s={blocksizes:[]},a=o==null?i.len:i.pos+o;for(;i.pos<a;){let c=i.uint32();switch(c>>>3){case 1:s.Type=r.DataType.codec().decode(i);break;case 2:s.Data=i.bytes();break;case 3:s.filesize=i.uint64();break;case 4:s.blocksizes.push(i.uint64());break;case 5:s.hashType=i.uint64();break;case 6:s.fanout=i.uint64();break;case 7:s.mode=i.uint32();break;case 8:s.mtime=a2.codec().decode(i,i.uint32());break;default:i.skipType(c&7);break}}return s})),n),r.encode=i=>re(i,r.codec()),r.decode=i=>te(i,r.codec())})(Wn||(Wn={}));var a2;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.Seconds!=null&&(n.uint32(8),n.int64(t.Seconds)),t.FractionalNanoseconds!=null&&(n.uint32(21),n.fixed32(t.FractionalNanoseconds)),i.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let i={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let s=t.uint32();switch(s>>>3){case 1:i.Seconds=t.int64();break;case 2:i.FractionalNanoseconds=t.fixed32();break;default:t.skipType(s&7);break}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(a2||(a2={}));var YT;(function(r){let e;r.codec=()=>(e==null&&(e=ne((t,n,i={})=>{i.lengthDelimited!==!1&&n.fork(),t.MimeType!=null&&(n.uint32(10),n.string(t.MimeType)),i.lengthDelimited!==!1&&n.ldelim()},(t,n)=>{let i={},o=n==null?t.len:t.pos+n;for(;t.pos<o;){let s=t.uint32();switch(s>>>3){case 1:i.MimeType=t.string();break;default:t.skipType(s&7);break}}return i})),e),r.encode=t=>re(t,r.codec()),r.decode=t=>te(t,r.codec())})(YT||(YT={}));var XT={Raw:"raw",Directory:"directory",File:"file",Metadata:"metadata",Symlink:"symlink",HAMTShard:"hamt-sharded-directory"},QU=["directory","hamt-sharded-directory"],jT=parseInt("0644",8),QT=parseInt("0755",8),ae=class r{static unmarshal(e){let t=Wn.decode(e),n=new r({type:XT[t.Type!=null?t.Type.toString():"File"],data:t.Data,blockSizes:t.blocksizes,mode:t.mode,mtime:t.mtime!=null?{secs:t.mtime.Seconds??0n,nsecs:t.mtime.FractionalNanoseconds}:void 0,fanout:t.fanout});return n._originalMode=t.mode??0,n}type;data;blockSizes;hashType;fanout;mtime;_mode;_originalMode;constructor(e={type:"file"}){let{type:t,data:n,blockSizes:i,hashType:o,fanout:s,mtime:a,mode:c}=e;if(t!=null&&!Object.values(XT).includes(t))throw new sd("Type: "+t+" is not valid");this.type=t??"file",this.data=n,this.hashType=o,this.fanout=s,this.blockSizes=i??[],this._originalMode=0,this.mode=c,this.mtime=a}set mode(e){e==null?this._mode=this.isDirectory()?QT:jT:this._mode=e&4095}get mode(){return this._mode}isDirectory(){return QU.includes(this.type)}addBlockSize(e){this.blockSizes.push(e)}removeBlockSize(e){this.blockSizes.splice(e,1)}fileSize(){if(this.isDirectory())return 0n;let e=0n;return this.blockSizes.forEach(t=>{e+=t}),this.data!=null&&(e+=BigInt(this.data.length)),e}marshal(){let e;switch(this.type){case"raw":e=Wn.DataType.Raw;break;case"directory":e=Wn.DataType.Directory;break;case"file":e=Wn.DataType.File;break;case"metadata":e=Wn.DataType.Metadata;break;case"symlink":e=Wn.DataType.Symlink;break;case"hamt-sharded-directory":e=Wn.DataType.HAMTShard;break;default:throw new sd(`Type: ${e} is not valid`)}let t=this.data;(this.data==null||this.data.length===0)&&(t=void 0);let n;this.mode!=null&&(n=this._originalMode&4294963200|(this.mode??0),n===jT&&!this.isDirectory()&&(n=void 0),n===QT&&this.isDirectory()&&(n=void 0));let i;return this.mtime!=null&&(i={Seconds:this.mtime.secs,FractionalNanoseconds:this.mtime.nsecs}),Wn.encode({Type:e,Data:t,filesize:this.isDirectory()?void 0:this.fileSize(),blocksizes:this.blockSizes,hashType:this.hashType,fanout:this.fanout,mode:n,mtime:i})}};var l2=ut(eI(),1);function ZU(r){let e=new Array(4);for(let t=0;t<4;t++)e[t]=r&255,r=r>>8;return new Uint8Array(e)}var nbe=hs({name:"murmur3-32",code:35,encode:r=>ZU(l2.default.x86.hash32(r))}),da=hs({name:"murmur3-128",code:34,encode:r=>ds.fromHex(l2.default.x64.hash128(r))}),ibe=hs({name:"murmur3-x64-64",code:34,encode:r=>ds.fromHex(l2.default.x64.hash128(r)).subarray(0,8)});var nI=ut(u2(),1);var Jr=class r{_options;_popCount;_parent;_posAtParent;_children;key;constructor(e,t,n=0){this._options=e,this._popCount=0,this._parent=t,this._posAtParent=n,this._children=new nI.default,this.key=null}async put(e,t){let n=await this._findNewBucketAndPos(e);n.bucket._putAt(n,e,t)}async get(e){let t=await this._findChild(e);if(t!=null)return t.value}async del(e){let t=await this._findPlace(e),n=t.bucket._at(t.pos);n!=null&&n.key===e&&t.bucket._delAt(t.pos)}leafCount(){return this._children.compactArray().reduce((t,n)=>n instanceof r?t+n.leafCount():t+1,0)}childrenCount(){return this._children.length}onlyChild(){return this._children.get(0)}*eachLeafSeries(){let e=this._children.compactArray();for(let t of e)t instanceof r?yield*t.eachLeafSeries():yield t}serialize(e,t){let n=[];return t(this._children.reduce((i,o,s)=>(o!=null&&(o instanceof r?i.push(o.serialize(e,t)):i.push(e(o,s))),i),n))}async asyncTransform(e,t){return iI(this,e,t)}toJSON(){return this.serialize(nH,iH)}prettyPrint(){return JSON.stringify(this.toJSON(),null," ")}tableSize(){return Math.pow(2,this._options.bits)}async _findChild(e){let t=await this._findPlace(e),n=t.bucket._at(t.pos);if(!(n instanceof r)&&n!=null&&n.key===e)return n}async _findPlace(e){let t=this._options.hash(typeof e=="string"?C(e):e),n=await t.take(this._options.bits),i=this._children.get(n);return i instanceof r?i._findPlace(t):{bucket:this,pos:n,hash:t,existingChild:i}}async _findNewBucketAndPos(e){let t=await this._findPlace(e);if(t.existingChild!=null&&t.existingChild.key!==e){let n=new r(this._options,t.bucket,t.pos);t.bucket._putObjectAt(t.pos,n);let i=await n._findPlace(t.existingChild.hash);return i.bucket._putAt(i,t.existingChild.key,t.existingChild.value),n._findNewBucketAndPos(t.hash)}return t}_putAt(e,t,n){this._putObjectAt(e.pos,{key:t,value:n,hash:e.hash})}_putObjectAt(e,t){this._children.get(e)==null&&this._popCount++,this._children.set(e,t)}_delAt(e){if(e===-1)throw new Error("Invalid position");this._children.get(e)!=null&&this._popCount--,this._children.unset(e),this._level()}_level(){if(this._parent!=null&&this._popCount<=1)if(this._popCount===1){let e=this._children.find(rH);if(e!=null&&!(e instanceof r)){let t=e.hash;t.untake(this._options.bits);let n={pos:this._posAtParent,hash:t,bucket:this._parent};this._parent._putAt(n,e.key,e.value)}}else this._parent._delAt(this._posAtParent)}_at(e){return this._children.get(e)}};function rH(r){return!!r}function nH(r,e){return r.key}function iH(r){return r}async function iI(r,e,t){let n=[];for(let i of r._children.compactArray())if(i instanceof Jr)await iI(i,e,t);else{let o=await e(i);n.push({bitField:r._children.bitField(),children:o})}return t(n)}var oH=[255,254,252,248,240,224,192,128],sH=[1,3,7,15,31,63,127,255],d2=class{_value;_currentBytePos;_currentBitPos;constructor(e){this._value=e,this._currentBytePos=e.length-1,this._currentBitPos=7}availableBits(){return this._currentBitPos+1+this._currentBytePos*8}totalBits(){return this._value.length*8}take(e){let t=e,n=0;for(;t>0&&this._haveBits();){let i=this._value[this._currentBytePos],o=this._currentBitPos+1,s=Math.min(o,t),a=aH(i,o-s,s);n=(n<<s)+a,t-=s,this._currentBitPos-=s,this._currentBitPos<0&&(this._currentBitPos=7,this._currentBytePos--)}return n}untake(e){for(this._currentBitPos+=e;this._currentBitPos>7;)this._currentBitPos-=8,this._currentBytePos+=1}_haveBits(){return this._currentBytePos>=0}};function aH(r,e,t){let n=cH(e,t);return(r&n)>>>e}function cH(r,e){return oH[r]&sH[Math.min(e+r-1,7)]}function oI(r){function e(t){return t instanceof f2?t:new f2(t,r)}return e}var f2=class{_value;_hashFn;_depth;_availableBits;_currentBufferIndex;_buffers;constructor(e,t){if(!(e instanceof Uint8Array))throw new Error("can only hash Uint8Arrays");this._value=e,this._hashFn=t,this._depth=-1,this._availableBits=0,this._currentBufferIndex=0,this._buffers=[]}async take(e){let t=e;for(;this._availableBits<t;)await this._produceMoreBits();let n=0;for(;t>0;){let i=this._buffers[this._currentBufferIndex],o=Math.min(i.availableBits(),t),s=i.take(o);n=(n<<o)+s,t-=o,this._availableBits-=o,i.availableBits()===0&&this._currentBufferIndex++}return n}untake(e){let t=e;for(;t>0;){let n=this._buffers[this._currentBufferIndex],i=Math.min(n.totalBits()-n.availableBits(),t);n.untake(i),t-=i,this._availableBits+=i,this._currentBufferIndex>0&&n.totalBits()===n.availableBits()&&(this._depth--,this._currentBufferIndex--)}}async _produceMoreBits(){this._depth++;let e=this._depth>0?ge([this._value,Uint8Array.from([this._depth])]):this._value,t=await this._hashFn(e),n=new d2(t);this._buffers.push(n),this._availableBits+=n.availableBits()}};function Gc(r){if(r==null||r.hashFn==null)throw new Error("please define an options.hashFn");let e={bits:r.bits??8,hash:oI(r.hashFn)};return new Jr(e)}var lH=async function(r){return(await da.encode(r)).slice(0,8).reverse()},uH=async(r,e,t)=>{let n=(e.tableSize()-1).toString(16).length;await Promise.all(r.map(async i=>{if(i.Name==null)throw new Error("Unexpected Link without a Name");if(i.Name.length===n){let o=parseInt(i.Name,16);e._putObjectAt(o,new Jr({hash:t._options.hash,bits:t._options.bits},e,o));return}await t.put(i.Name.substring(2),!0)}))},sI=(r,e)=>r.toString(16).toUpperCase().padStart(e,"0").substring(0,e),dH=r=>{let e=r.bucket,t=[];for(;e._parent!=null;)t.push(e),e=e._parent;return t.push(e),t.reverse()},aI=async(r,e,t,n,i)=>{if(n==null){if(r.Data==null)throw new Pt("no data in PBNode");let d;try{d=ae.unmarshal(r.Data)}catch(f){throw new Pt(f.message)}if(d.type!=="hamt-sharded-directory")throw new Pt("not a HAMT");if(d.fanout==null)throw new Pt("missing fanout");let h=Gc({hashFn:lH,bits:Math.log2(Number(d.fanout))});n={rootBucket:h,hamtDepth:1,lastBucket:h}}let o=(n.lastBucket.tableSize()-1).toString(16).length;await uH(r.Links,n.lastBucket,n.rootBucket);let s=await n.rootBucket._findNewBucketAndPos(e),a=sI(s.pos,o),c=dH(s);c.length>n.hamtDepth&&(n.lastBucket=c[n.hamtDepth],a=sI(n.lastBucket._posAtParent,o));let l=r.Links.find(d=>{if(d.Name==null)return!1;let h=d.Name.substring(0,o),f=d.Name.substring(o);return!(h!==a||f!==""&&f!==e)});if(l==null)return;if(l.Name!=null&&l.Name.substring(o)===e)return l.Hash;n.hamtDepth++;let u=await t.get(l.Hash,i);return r=xt(u),aI(r,e,t,n,i)},cI=aI;var fH=(r,e,t,n,i,o,s)=>{async function*a(c={}){let l=c.offset??0,u=c.length??e.Links.length,d=e.Links.slice(l,u);c.onProgress?.(new M("unixfs:exporter:walk:directory",{cid:r})),yield*Re(d,h=>Je(h,f=>async()=>{let p=f.Name??"",m=`${n}/${p}`;return(await i(f.Hash,p,m,[],o+1,s,c)).entry}),h=>Yt(h,{ordered:!0,concurrency:c.blockReadConcurrency}),h=>Wr(h,f=>f!=null))}return a},lI=fH;async function uI(r,e,t,n,i,o,s){if(e instanceof Uint8Array){let l=ua(e,n,i,o);t.push(l);return}if(e.Data==null)throw new Pt("no data in PBNode");let a;try{a=ae.unmarshal(e.Data)}catch(l){throw new Pt(l.message)}if(a.data!=null){let l=a.data,u=ua(l,n,i,o);t.push(u),n+=BigInt(u.byteLength)}let c=[];if(e.Links.length!==a.blockSizes.length)throw new Pt("Inconsistent block sizes and dag links");for(let l=0;l<e.Links.length;l++){let u=e.Links[l],d=n,h=d+a.blockSizes[l];if((i>=d&&i<h||o>=d&&o<=h||i<d&&o>h)&&c.push({link:u,blockStart:n}),n=h,n>o)break}await Re(c,l=>Je(l,u=>async()=>{let d=await r.get(u.link.Hash,s);return{...u,block:d}}),l=>Yt(l,{ordered:!0,concurrency:s.blockReadConcurrency}),async l=>{for await(let{link:u,block:d,blockStart:h}of l){let f;switch(u.Hash.code){case Le:f=xt(d);break;case We:f=d;break;default:t.end(new Pt(`Unsupported codec: ${u.Hash.code}`));return}let p=new Cr({concurrency:1});p.on("error",m=>{t.end(m)}),p.add(async()=>{s.onProgress?.(new M("unixfs:exporter:walk:file",{cid:u.Hash})),await uI(r,f,t,h,i,o,s)}),await p.onIdle()}}),n>=o&&t.end()}var hH=(r,e,t,n,i,o,s)=>{async function*a(c={}){let l=t.fileSize();if(l===void 0)throw new Error("File was a directory");let{start:u,end:d}=Kc(l,c.offset,c.length);if(d===0n)return;let h=0n,f=d-u,p=rr();c.onProgress?.(new M("unixfs:exporter:walk:file",{cid:r})),uI(s,e,p,0n,u,d,c).catch(m=>{p.end(m)});for await(let m of p)if(m!=null){if(h+=BigInt(m.byteLength),h>f)throw p.end(),new i2("Read too many bytes - the file size reported by the UnixFS data in the root node may be incorrect");h===f&&p.end(),c.onProgress?.(new M("unixfs:exporter:progress:unixfs:file",{bytesRead:h,totalBytes:f,fileSize:l})),yield m}if(h<f)throw new o2("Traversed entire DAG but did not read enough bytes")}return a},F5=hH;var pH=(r,e,t,n,i,o,s)=>{function a(c={}){return c.onProgress?.(new M("unixfs:exporter:walk:hamt-sharded-directory",{cid:r})),dI(e,n,i,o,s,c)}return a};async function*dI(r,e,t,n,i,o){let s=r.Links;if(r.Data==null)throw new Pt("no data in PBNode");let a;try{a=ae.unmarshal(r.Data)}catch(u){throw new Pt(u.message)}if(a.fanout==null)throw new Pt("missing fanout");let c=(a.fanout-1n).toString(16).length,l=Re(s,u=>Je(u,d=>async()=>{let h=d.Name!=null?d.Name.substring(c):null;if(h!=null&&h!==""){let f=await t(d.Hash,h,`${e}/${h}`,[],n+1,i,o);return{entries:f.entry==null?[]:[f.entry]}}else{let f=await i.get(d.Hash,o);return r=xt(f),o.onProgress?.(new M("unixfs:exporter:walk:hamt-sharded-directory",{cid:d.Hash})),{entries:dI(r,e,t,n,i,o)}}}),u=>Yt(u,{ordered:!0,concurrency:o.blockReadConcurrency}));for await(let{entries:u}of l)yield*u}var fI=pH;var mH=(r,e)=>r.Links.find(n=>n.Name===e)?.Hash,gH={raw:F5,file:F5,directory:lI,"hamt-sharded-directory":fI,metadata:(r,e,t,n,i,o,s)=>()=>[],symlink:(r,e,t,n,i,o,s)=>()=>[]},yH=async(r,e,t,n,i,o,s,a)=>{let c=await s.get(r,a),l=xt(c),u,d;if(e==null&&(e=r.toString()),l.Data==null)throw new Pt("no data in PBNode");try{u=ae.unmarshal(l.Data)}catch(f){throw new Pt(f.message)}if(t==null&&(t=e),n.length>0){let f;if(u?.type==="hamt-sharded-directory"?f=await cI(l,n[0],s):f=mH(l,n[0]),f==null)throw new bn("file does not exist");let p=n.shift(),m=`${t}/${p}`;d={cid:f,toResolve:n,name:p??"",path:m}}let h=gH[u.type](r,l,u,t,i,o,s);if(h==null)throw new bn("could not find content exporter");return u.isDirectory()?{entry:{type:"directory",name:e,path:t,cid:r,content:h,unixfs:u,depth:o,node:l,size:u.fileSize()},next:d}:{entry:{type:"file",name:e,path:t,cid:r,content:h,unixfs:u,depth:o,node:l,size:u.fileSize()},next:d}},hI=yH;var wH={[Le]:hI,[We]:WT,[Pr]:VT,[ai]:qT,[At.code]:KT,[ri]:GT},pI=async(r,e,t,n,i,o,s)=>{let a=wH[r.code];if(a==null)throw new n2(`No resolver for code ${r.code}`);return a(r,e,t,n,pI,i,o,s)},mI=pI;var xH=(r="")=>(r.trim().match(/([^\\^/]|\\\/)+/g)??[]).filter(Boolean),bH=r=>{if(r instanceof Uint8Array)return{cid:B.decode(r),toResolve:[]};let e=B.asCID(r);if(e!=null)return{cid:e,toResolve:[]};if(typeof r=="string"){r.indexOf("/ipfs/")===0&&(r=r.substring(6));let t=xH(r);return{cid:B.parse(t[0]),toResolve:t.slice(1)}}throw new r2(`Unknown path type ${r}`)};async function*cd(r,e,t={}){let{cid:n,toResolve:i}=bH(r),o=n.toString(),s=o,a=i.length;for(;;){let c=await mI(n,o,s,i,a,e,t);if(c.entry==null&&c.next==null)throw new bn(`Could not resolve ${r}`);if(c.entry!=null&&(yield c.entry),c.next==null)return;i=c.next.toResolve,n=c.next.cid,o=c.next.name,s=c.next.path}}async function _t(r,e,t={}){let n=await Jo(cd(r,e,t));if(n==null)throw new bn(`Could not resolve ${r}`);return n}async function*Wc(r,e,t={}){let n=await _t(r,e,t);if(n==null)return;if(yield n,n.type==="directory")for await(let o of i(n,t))yield o;async function*i(o,s){for await(let a of o.content(s))yield a,!(a instanceof Uint8Array)&&a.type==="directory"&&(yield*i(a,s))}}async function vH(r,e,t){let n=[],i;for await(let o of cd(e,r,t))n.push(o.cid),i=o;if(i==null)throw new $c("No terminal element found");return{ipfsRoots:n,terminalElement:i}}function U5(r){return r.type==="object"}async function gI({cid:r,path:e,resource:t,options:n,blockstore:i,log:o}){try{return await vH(i,`${r.toString()}/${e}`,n)}catch(s){return n?.signal?.throwIfAborted(),["ERR_NO_PROP","ERR_NO_TERMINAL_ELEMENT","ERR_NOT_FOUND"].includes(s.code)?Xm(t):(o.error("error walking path %s",e,s),zc(t,"Error walking path"))}}var h2=class extends gt{codes=[Pr];canHandle({cid:e,accept:t,pathDetails:n}){return this.log("checking if we can handle %c with accept %s",e,t),n==null||!U5(n.terminalElement)||e.code!==Pr?!1:U5(n.terminalElement)}async handle(e){let{cid:t,path:n,resource:i,accept:o,pathDetails:s}=e;if(this.log.trace("fetching %c/%s",t,n),s==null)throw new Error("pathDetails is null");let a=s.ipfsRoots,l=s.terminalElement.node,u;if(o==="application/octet-stream"||o==="application/vnd.ipld.dag-cbor"||o==="application/cbor")u=l;else if(o==="application/vnd.ipld.dag-json")try{let f=ko(l);u=sh(f)}catch(f){return this.log.error("could not transform %c to application/vnd.ipld.dag-json",f),Ji(i)}else try{u=HT(l)}catch(f){if(o==="application/json")return this.log('could not decode DAG-CBOR as JSON-safe, but the client sent "Accept: application/json"',f),Ji(i);this.log("could not decode DAG-CBOR as JSON-safe, falling back to `application/octet-stream`",f),u=l}let d=Kn(i,u),h=o??(u instanceof Uint8Array?"application/octet-stream":"application/json");return d.headers.set("content-type",h),e2(d,a),d}};function EH(r){return r[Symbol.asyncIterator]!=null}function SH(r,e=1){return e=Number(e),EH(r)?async function*(){let t=[];if(e<1&&(e=1),e!==Math.round(e))throw new Error("Batch size must be an integer");for await(let n of r)for(t.push(n);t.length>=e;)yield t.slice(0,e),t=t.slice(e);for(;t.length>0;)yield t.slice(0,e),t=t.slice(e)}():function*(){let t=[];if(e<1&&(e=1),e!==Math.round(e))throw new Error("Batch size must be an integer");for(let n of r)for(t.push(n);t.length>=e;)yield t.slice(0,e),t=t.slice(e);for(;t.length>0;)yield t.slice(0,e),t=t.slice(e)}()}var p2=SH;async function*ld(r,e=1){for await(let t of p2(r,e)){let n=t.map(async i=>i().then(o=>({ok:!0,value:o}),o=>({ok:!1,err:o})));for(let i=0;i<n.length;i++){let o=await n[i];if(o.ok)yield o.value;else throw o.err}}}var AH=262144,ud=(r={})=>{let e=r.chunkSize??AH;return async function*(n){let i=new ee,o=0,s=!1;for await(let a of n)for(i.append(a),o+=a.length;o>=e;)if(yield i.slice(0,e),s=!0,e===i.length)i=new ee,o=0;else{let c=new ee;c.append(i.sublist(e)),i=c,o-=e}(!s||o>0)&&(yield i.subarray(0,o))}};var Yn=async(r,e,t)=>{t.codec==null&&(t.codec=bt);let n=await Se.digest(r),i=B.create(t.cidVersion,t.codec.code,n);return await e.put(i,r,t),i};function yI(r){return async function*(t,n){let i=0n;for await(let o of t.content)yield async()=>{let s,a={codec:bt,cidVersion:r.cidVersion,onProgress:r.onProgress};r.rawLeaves?(a.codec=Ar,a.cidVersion=1):(s=new ae({type:r.leafType,data:o}),o=Ie({Data:s.marshal(),Links:[]}));let c=await Yn(o,n,a);return i+=BigInt(o.byteLength),r.onProgress?.(new M("unixfs:importer:progress:file:write",{bytesWritten:i,cid:c,path:t.path})),{cid:c,unixfs:s,size:BigInt(o.length),block:o}}}}var dd=class r extends Error{static name="InvalidParametersError";static code="ERR_INVALID_PARAMS";name=r.name;code=r.code;constructor(e="Invalid parameters"){super(e)}};var es=class r extends Error{static name="InvalidContentError";static code="ERR_INVALID_CONTENT";name=r.name;code=r.code;constructor(e="Invalid content"){super(e)}};var wI=async(r,e,t)=>{let n=new ae({type:"directory",mtime:r.mtime,mode:r.mode}),i=Ie(ht({Data:n.marshal()})),o=await Yn(i,e,t),s=r.path;return{cid:o,path:s,unixfs:n,size:BigInt(i.length),originalPath:r.originalPath,block:i}};async function*TH(r,e,t){let n=-1,i;for await(let o of ld(t.bufferImporter(r,e),t.blockWriteConcurrency)){if(n++,n===0){i={...o,single:!0};continue}else n===1&&i!=null&&(yield{...i,block:void 0,single:void 0},i=void 0);yield{...o,block:void 0}}i!=null&&(yield i)}function xI(r){return r.single===!0}var IH=(r,e,t)=>async function(i){if(i.length===1&&xI(i[0])&&t.reduceSingleLeafToSelf){let u=i[0],d=u.block;return xI(u)&&(r.mtime!==void 0||r.mode!==void 0)&&(u.unixfs=new ae({type:"file",mtime:r.mtime,mode:r.mode,data:u.block}),d={Data:u.unixfs.marshal(),Links:[]},u.block=Ie(ht(d)),u.cid=await Yn(u.block,e,{...t,cidVersion:t.cidVersion}),u.size=BigInt(u.block.length)),t.onProgress?.(new M("unixfs:importer:progress:file:layout",{cid:u.cid,path:u.originalPath})),{cid:u.cid,path:r.path,unixfs:u.unixfs,size:u.size,originalPath:u.originalPath}}let o=new ae({type:"file",mtime:r.mtime,mode:r.mode}),s=i.filter(u=>u.cid.code===We&&u.size>0||u.unixfs!=null&&u.unixfs.data==null&&u.unixfs.fileSize()>0n?!0:!!u.unixfs?.data?.length).map(u=>u.cid.code===We?(o.addBlockSize(u.size),{Name:"",Tsize:Number(u.size),Hash:u.cid}):(u.unixfs?.data==null?o.addBlockSize(u.unixfs?.fileSize()??0n):o.addBlockSize(BigInt(u.unixfs.data.length)),{Name:"",Tsize:Number(u.size),Hash:u.cid})),a={Data:o.marshal(),Links:s},c=Ie(ht(a)),l=await Yn(c,e,t);return t.onProgress?.(new M("unixfs:importer:progress:file:layout",{cid:l,path:r.originalPath})),{cid:l,path:r.path,unixfs:o,size:BigInt(c.length+a.Links.reduce((u,d)=>u+(d.Tsize??0),0)),originalPath:r.originalPath,block:c}},bI=async(r,e,t)=>t.layout(TH(r,e,t),IH(r,e,t));function _H(r){return Symbol.iterator in r}function kH(r){return Symbol.asyncIterator in r}function CH(r){try{if(r instanceof Uint8Array)return async function*(){yield r}();if(_H(r))return async function*(){yield*r}();if(kH(r))return r}catch{throw new es("Content was invalid")}throw new es("Content was invalid")}function vI(r){return async function*(t,n){for await(let i of t){let o;if(i.path!=null&&(o=i.path,i.path=i.path.split("/").filter(s=>s!=null&&s!==".").join("/")),PH(i)){let s={path:i.path,mtime:i.mtime,mode:i.mode,content:async function*(){let a=0n;for await(let c of r.chunker(r.chunkValidator(CH(i.content)))){let l=BigInt(c.byteLength);a+=l,r.onProgress?.(new M("unixfs:importer:progress:file:read",{bytesRead:a,chunkSize:l,path:i.path})),yield c}}(),originalPath:o};yield async()=>bI(s,n,r)}else if(i.path!=null){let s={path:i.path,mtime:i.mtime,mode:i.mode,originalPath:o};yield async()=>wI(s,n,r)}else throw new Error("Import candidate must have content or path or both")}}}function PH(r){return r.content!=null}var EI=()=>async function*(e){for await(let t of e){if(t.length===void 0)throw new es("Content was invalid");if(typeof t=="string"||t instanceof String)yield C(t.toString());else if(Array.isArray(t))yield Uint8Array.from(t);else if(t instanceof Uint8Array)yield t;else throw new es("Content was invalid")}};var RH=174;function fd(r){let e=r?.maxChildrenPerNode??RH;return async function t(n,i){let o=[];for await(let s of p2(n,e))o.push(await i(s));return o.length>1?t(o,i):o[0]}}var fi=class{options;root;dir;path;dirty;flat;parent;parentKey;unixfs;mode;mtime;cid;size;nodeSize;constructor(e,t){this.options=t??{},this.root=e.root,this.dir=e.dir,this.path=e.path,this.dirty=e.dirty,this.flat=e.flat,this.parent=e.parent,this.parentKey=e.parentKey,this.unixfs=e.unixfs,this.mode=e.mode,this.mtime=e.mtime}},hd=B.parse("QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn"),pd=B.parse("zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi");var fa=class extends fi{_children;constructor(e,t){super(e,t),this._children=new Map}async put(e,t){this.cid=void 0,this.size=void 0,this.nodeSize=void 0,this._children.set(e,t)}async get(e){return Promise.resolve(this._children.get(e))}childCount(){return this._children.size}directChildrenCount(){return this.childCount()}onlyChild(){return this._children.values().next().value}async*eachChildSeries(){for(let[e,t]of this._children.entries())yield{key:e,child:t}}estimateNodeSize(){if(this.nodeSize!==void 0)return this.nodeSize;this.nodeSize=0;for(let[e,t]of this._children.entries())t.size!=null&&t.cid!=null&&(this.nodeSize+=e.length+(this.options.cidVersion===1?pd.bytes.byteLength:hd.bytes.byteLength));return this.nodeSize}async*flush(e){let t=[];for(let[c,l]of this._children.entries()){let u=l;if(l instanceof fi)for await(let d of l.flush(e))u=d,yield d;u.size!=null&&u.cid!=null&&t.push({Name:c,Tsize:Number(u.size),Hash:u.cid})}let n=new ae({type:"directory",mtime:this.mtime,mode:this.mode}),i={Data:n.marshal(),Links:t},o=Ie(ht(i)),s=await Yn(o,e,this.options),a=o.length+i.Links.reduce((c,l)=>c+(l.Tsize??0),0);this.cid=s,this.size=a,yield{cid:s,unixfs:n,path:this.path,size:BigInt(a)}}};async function DH(r){return(await da.encode(r)).slice(0,8).reverse()}var SI=BigInt(34),NH=8,H5=class extends fi{_bucket;constructor(e,t){super(e,t),this._bucket=Gc({hashFn:DH,bits:t.shardFanoutBits??NH})}async put(e,t){this.cid=void 0,this.size=void 0,this.nodeSize=void 0,await this._bucket.put(e,t)}async get(e){return this._bucket.get(e)}childCount(){return this._bucket.leafCount()}directChildrenCount(){return this._bucket.childrenCount()}onlyChild(){return this._bucket.onlyChild()}async*eachChildSeries(){for await(let{key:e,value:t}of this._bucket.eachLeafSeries())yield{key:e,child:t}}estimateNodeSize(){return this.nodeSize!==void 0?this.nodeSize:(this.nodeSize=II(this._bucket,this,this.options),this.nodeSize)}async*flush(e){for await(let t of TI(this._bucket,e,this,this.options))yield{...t,path:this.path}}},AI=H5;async function*TI(r,e,t,n){let i=r._children,o=(r.tableSize()-1).toString(16).length,s=[],a=0n;for(let p=0;p<i.length;p++){let m=i.get(p);if(m==null)continue;let g=p.toString(16).toUpperCase().padStart(o,"0");if(m instanceof Jr){let y;for await(let w of TI(m,e,null,n))y=w;if(y==null)throw new Error("Could not flush sharded directory, no subshard found");s.push({Name:g,Tsize:Number(y.size),Hash:y.cid}),a+=y.size}else if(LH(m.value)){let y=m.value,w;for await(let b of y.flush(e))w=b,yield w;if(w==null)throw new Error("Did not flush dir");let x=g+m.key;s.push({Name:x,Tsize:Number(w.size),Hash:w.cid}),a+=w.size}else{let y=m.value;if(y.cid==null)continue;let w=g+m.key,x=y.size;s.push({Name:w,Tsize:Number(x),Hash:y.cid}),a+=BigInt(x??0)}}let c=Uint8Array.from(i.bitField().reverse()),l=new ae({type:"hamt-sharded-directory",data:c,fanout:BigInt(r.tableSize()),hashType:SI,mtime:t?.mtime,mode:t?.mode}),u={Data:l.marshal(),Links:s},d=Ie(ht(u)),h=await Yn(d,e,n),f=BigInt(d.byteLength)+a;yield{cid:h,unixfs:l,size:f}}function LH(r){return typeof r.flush=="function"}function II(r,e,t){let n=r._children,i=(r.tableSize()-1).toString(16).length,o=[];for(let l=0;l<n.length;l++){let u=n.get(l);if(u==null)continue;let d=l.toString(16).toUpperCase().padStart(i,"0");if(u instanceof Jr){let h=II(u,null,t);o.push({Name:d,Tsize:Number(h),Hash:t.cidVersion===0?hd:pd})}else if(typeof u.value.flush=="function"){let f=u.value.nodeSize();o.push({Name:d+u.key,Tsize:Number(f),Hash:t.cidVersion===0?hd:pd})}else{let h=u.value;if(h.cid==null)continue;let f=d+u.key,p=h.size;o.push({Name:f,Tsize:Number(p),Hash:h.cid})}}let s=Uint8Array.from(n.bitField().reverse()),a=new ae({type:"hamt-sharded-directory",data:s,fanout:BigInt(r.tableSize()),hashType:SI,mtime:e?.mtime,mode:e?.mode});return Ie(ht({Data:a.marshal(),Links:o})).length}async function z5(r,e,t,n){let i=e;e instanceof fa&&e.estimateNodeSize()>t&&(i=await OH(e,n));let o=i.parent;if(o!=null){if(i!==e){if(r!=null&&(r.parent=i),i.parentKey==null)throw new Error("No parent key found");await o.put(i.parentKey,i)}return z5(i,o,t,n)}return i}async function OH(r,e){let t=new AI({root:r.root,dir:!0,parent:r.parent,parentKey:r.parentKey,path:r.path,dirty:r.dirty,flat:!1,mtime:r.mtime,mode:r.mode},e);for await(let{key:n,child:i}of r.eachChildSeries())await t.put(n,i);return t}var _I=(r="")=>r.split(/(?<!\\)\//).filter(Boolean);async function BH(r,e,t){let n=_I(r.path??""),i=n.length-1,o=e,s="";for(let a=0;a<n.length;a++){let c=n[a];s+=`${s!==""?"/":""}${c}`;let l=a===i;if(o.dirty=!0,o.cid=void 0,o.size=void 0,l)await o.put(c,r),e=await z5(null,o,t.shardSplitThresholdBytes,t);else{let u=await o.get(c);(u==null||!(u instanceof fi))&&(u=new fa({root:!1,dir:!0,parent:o,parentKey:c,path:s,dirty:!0,flat:!0,mtime:u?.unixfs?.mtime,mode:u?.unixfs?.mode},t)),await o.put(c,u),o=u}}return e}async function*kI(r,e){if(!(r instanceof fi)){r.unixfs?.isDirectory()===!0&&(yield r);return}yield*r.flush(e)}function CI(r){return async function*(t,n){let i=new fa({root:!0,dir:!0,path:"",dirty:!0,flat:!0},r),o,s=!1;for await(let a of t){if(a==null)continue;let c=`${a.originalPath??""}`.split("/")[0];c!=null&&c!==""&&(o==null?(o=c,s=!0):o!==c&&(s=!1)),i=await BH(a,i,r),a.unixfs?.isDirectory()!==!0&&(yield a)}if(r.wrapWithDirectory||s&&i.childCount()>1)yield*kI(i,n);else for await(let a of i.eachChildSeries())a!=null&&(yield*kI(a.child,n))}}async function*ts(r,e,t={}){let n;Symbol.asyncIterator in r||Symbol.iterator in r?n=r:n=[r];let i=t.wrapWithDirectory??!1,o=t.shardSplitThresholdBytes??262144,s=t.shardFanoutBits??8,a=t.cidVersion??1,c=t.rawLeaves??!0,l=t.leafType??"file",u=t.fileImportConcurrency??50,d=t.blockWriteConcurrency??10,h=t.reduceSingleLeafToSelf??!0,f=t.chunker??ud(),p=t.chunkValidator??EI(),m=t.dagBuilder??vI({chunker:f,chunkValidator:p,wrapWithDirectory:i,layout:t.layout??fd(),bufferImporter:t.bufferImporter??yI({cidVersion:a,rawLeaves:c,leafType:l,onProgress:t.onProgress}),blockWriteConcurrency:d,reduceSingleLeafToSelf:h,cidVersion:a,onProgress:t.onProgress}),g=t.treeBuilder??CI({wrapWithDirectory:i,shardSplitThresholdBytes:o,shardFanoutBits:s,cidVersion:a,onProgress:t.onProgress});for await(let y of g(ld(m(n,e),u),e))yield{cid:y.cid,path:y.path,unixfs:y.unixfs,size:y.size}}async function m2(r,e,t={}){let n=await hu(ts([r],e,t));if(n==null)throw new dd("Nothing imported");return n}async function PI(r,e,t={}){let n=await hu(ts([r],e,t));if(n==null)throw new dd("Nothing imported");return n}async function RI(r,e,t={}){return m2({content:r},e,t)}async function DI(r,e,t={}){return m2({content:r},e,t)}var md={cidVersion:1,rawLeaves:!0,layout:fd({maxChildrenPerNode:1024}),chunker:ud({chunkSize:1048576})};async function*NI(r,e,t={}){yield*ts(r,e,{...md,...t})}async function LI(r,e,t={}){let{cid:n}=await RI(r,e,{...md,...t});return n}async function OI(r,e,t={}){let{cid:n}=await DI(r,e,{...md,...t});return n}async function BI(r,e,t={}){let{cid:n}=await m2(r,e,{...md,...t});return n}async function MI(r,e,t={}){let{cid:n}=await PI({...r,path:r.path??"-"},e,{...md,...t});return n}var K5=ut(u2(),1);function y2(r){function e(t){return t instanceof g2?t:new g2(t,r)}return e}var g2=class{_value;_hashFn;_depth;_availableBits;_currentBufferIndex;_buffers;constructor(e,t){if(!(e instanceof Uint8Array))throw new Error("can only hash Uint8Arrays");this._value=e,this._hashFn=t,this._depth=-1,this._availableBits=0,this._currentBufferIndex=0,this._buffers=[]}async take(e){let t=e;for(;this._availableBits<t;)await this._produceMoreBits();let n=0;for(;t>0;){let i=this._buffers[this._currentBufferIndex],o=Math.min(i.availableBits(),t),s=i.take(o);n=(n<<o)+s,t-=o,this._availableBits-=o,i.availableBits()===0&&this._currentBufferIndex++}return n}untake(e){let t=e;for(;t>0;){let n=this._buffers[this._currentBufferIndex],i=Math.min(n.totalBits()-n.availableBits(),t);n.untake(i),t-=i,this._availableBits+=i,this._currentBufferIndex>0&&n.totalBits()===n.availableBits()&&(this._depth--,this._currentBufferIndex--)}}async _produceMoreBits(){this._depth++;let e=this._depth>0?ge([this._value,Uint8Array.from([this._depth])]):this._value,t=await this._hashFn(e),n=new $5(t);this._buffers.push(n),this._availableBits+=n.availableBits()}},MH=[255,254,252,248,240,224,192,128],FH=[1,3,7,15,31,63,127,255],$5=class{_value;_currentBytePos;_currentBitPos;constructor(e){this._value=e,this._currentBytePos=e.length-1,this._currentBitPos=7}availableBits(){return this._currentBitPos+1+this._currentBytePos*8}totalBits(){return this._value.length*8}take(e){let t=e,n=0;for(;t>0&&this._haveBits();){let i=this._value[this._currentBytePos],o=this._currentBitPos+1,s=Math.min(o,t),a=UH(i,o-s,s);n=(n<<s)+a,t-=s,this._currentBitPos-=s,this._currentBitPos<0&&(this._currentBitPos=7,this._currentBytePos--)}return n}untake(e){for(this._currentBitPos+=e;this._currentBitPos>7;)this._currentBitPos-=8,this._currentBytePos+=1}_haveBits(){return this._currentBytePos>=0}};function UH(r,e,t){let n=HH(e,t);return(r&n)>>>e}function HH(r,e){return MH[r]&FH[Math.min(e+r-1,7)]}var gd=BigInt(da.code),ha=8;async function Yc(r){return(await da.encode(r)).subarray(0,8).reverse()}var HI=ut(u2(),1);var Xn=async(r,e,t)=>{t.codec==null&&(t.codec=bt);let n=await Se.digest(r),i=B.create(t.cidVersion,t.codec.code,n);return await e.put(i,r,{...t,signal:t.signal}),i};var V5=class{options;root;dir;path;dirty;flat;parent;parentKey;unixfs;mode;mtime;cid;size;nodeSize;constructor(e,t){this.options=t??{},this.root=e.root,this.dir=e.dir,this.path=e.path,this.dirty=e.dirty,this.flat=e.flat,this.parent=e.parent,this.parentKey=e.parentKey,this.unixfs=e.unixfs,this.mode=e.mode,this.mtime=e.mtime}},w2=class extends V5{_bucket;constructor(e,t){super(e,t),this._bucket=Gc({hashFn:Yc,bits:8})}async put(e,t){this.cid=void 0,this.size=void 0,this.nodeSize=void 0,await this._bucket.put(e,t)}async get(e){return this._bucket.get(e)}childCount(){return this._bucket.leafCount()}directChildrenCount(){return this._bucket.childrenCount()}onlyChild(){return this._bucket.onlyChild()}async*eachChildSeries(){for await(let{key:e,value:t}of this._bucket.eachLeafSeries())yield{key:e,child:t}}estimateNodeSize(){return this.nodeSize!==void 0?this.nodeSize:(this.nodeSize=UI(this._bucket,this,this.options),this.nodeSize)}async*flush(e){for await(let t of FI(this._bucket,e,this,this.options))yield{...t,path:this.path}}};async function*FI(r,e,t,n){let i=r._children,o=[],s=0n;for(let f=0;f<i.length;f++){let p=i.get(f);if(p==null)continue;let m=f.toString(16).toUpperCase().padStart(2,"0");if(p instanceof Jr){let g;for await(let y of FI(p,e,null,n))g=y;if(g==null)throw new Error("Could not flush sharded directory, no sub-shard found");o.push({Name:m,Tsize:Number(g.size),Hash:g.cid}),s+=g.size}else if(zH(p.value)){let g=p.value,y;for await(let x of g.flush(e))y=x,yield y;if(y==null)throw new Error("Did not flush dir");let w=m+p.key;o.push({Name:w,Tsize:Number(y.size),Hash:y.cid}),s+=y.size}else{let g=p.value;if(g.cid==null)continue;let y=m+p.key,w=g.size;o.push({Name:y,Tsize:Number(w),Hash:g.cid}),s+=BigInt(w??0)}}let a=Uint8Array.from(i.bitField().reverse()),c=new ae({type:"hamt-sharded-directory",data:a,fanout:BigInt(r.tableSize()),hashType:gd,mtime:t?.mtime,mode:t?.mode}),l={Data:c.marshal(),Links:o},u=Ie(ht(l)),d=await Xn(u,e,n),h=BigInt(u.byteLength)+s;yield{cid:d,unixfs:c,size:h}}function zH(r){return typeof r.flush=="function"}function UI(r,e,t){let n=r._children,i=[];for(let c=0;c<n.length;c++){let l=n.get(c);if(l==null)continue;let u=c.toString(16).toUpperCase().padStart(2,"0");if(l instanceof Jr){let d=UI(l,null,t);i.push({Name:u,Tsize:Number(d),Hash:t.cidVersion===0?x2:b2})}else if(typeof l.value.flush=="function"){let h=l.value.nodeSize();i.push({Name:u+l.key,Tsize:Number(h),Hash:t.cidVersion===0?x2:b2})}else{let d=l.value;if(d.cid==null)continue;let h=u+l.key,f=d.size;i.push({Name:h,Tsize:Number(f),Hash:d.cid})}}let o=Uint8Array.from(n.bitField().reverse()),s=new ae({type:"hamt-sharded-directory",data:o,fanout:BigInt(r.tableSize()),hashType:gd,mtime:e?.mtime,mode:e?.mode});return Ie(ht({Data:s.marshal(),Links:i})).length}var x2=B.parse("QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn"),b2=B.parse("zdj7WbTaiJT1fgatdet9Ei9iDB5hdCxkbVyhyh8YTUnXMiwYi");var q5=we("helia:unixfs:commands:utils:hamt-utils"),v2=r=>r.toString(16).toUpperCase().padStart(2,"0").substring(0,2),zI=async(r,e,t)=>{let n=new w2({root:!0,dir:!0,parent:void 0,parentKey:void 0,path:"",dirty:!0,flat:!1,mtime:t.mtime,mode:t.mode},t);for(let o=0;o<e.length;o++)await n._bucket.put(e[o].name,{size:e[o].size,cid:e[o].cid});let i=await Jo(n.flush(r));if(i==null)throw new Error("Flushing shard yielded no result");return i},E2=async(r,e,t)=>{let n=ae.unmarshal(r[0].node.Data??new Uint8Array(0)),i=BigInt(Math.pow(2,ha));r.reverse();let o,s;for(let a=0;a<r.length;a++){let c=a===r.length-1,l=r[a],u=Uint8Array.from(l.children.bitField().reverse()),d=new ae({type:"hamt-sharded-directory",data:u,fanout:i,hashType:gd});c&&(d.mtime=n.mtime,d.mode=n.mode),s={Data:d.marshal(),Links:l.node.Links};let h=Ie(ht(s));if(o=await Xn(h,e,t),!c){let f=r[a+1];if(f==null)throw new Error("Was not operating on shard root but also had no parent?");q5("updating link in parent sub-shard with prefix %s",f.prefix),f.node.Links=f.node.Links.filter(p=>p.Name!==f.prefix),f.node.Links.push({Name:f.prefix,Hash:o,Tsize:l.node.Links.reduce((p,m)=>p+(m.Tsize??0),h.byteLength)})}}if(o==null||s==null)throw new Error("Noting persisted");return{cid:o,node:s}},S2=async(r,e,t,n)=>{let o=y2(Yc)(C(e)),s=[];for(;;){let a=await t.get(r,n),c=xt(a),l=new HI.default,u=await o.take(ha),d=v2(u);s.push({prefix:d,children:l,node:c});let h;for(let p of c.Links){let m=p.Name??"";if(m.length<2)throw new Error("Invalid HAMT - link name was too short");let g=parseInt(m.substring(0,2),16);l.set(g,!0),m.startsWith(d)&&(h=p)}if(h==null){q5("no link found with prefix %s for %s",d,e);break}let f=h.Name??"";if(f.length<2)throw new Error("Invalid HAMT - link name was too short");if(f.length===2){r=h.Hash,q5("descend into sub-shard with prefix %s",f);continue}break}return{path:s,hash:o}};async function A2(r,e,t,n){if(r.Data==null)throw new Error("DagPB node had no data");let i=ae.unmarshal(r.Data),o;if(i.type==="directory")o=$H(r);else if(i.type==="hamt-sharded-directory")o=await $I(r,0,t,e,n);else throw new Error("Can only estimate the size of directories or shards");return o>t}function $H(r){let e=0;for(let t of r.Links)e+=(t.Name??"").length,e+=t.Hash.version===1?b2.bytes.byteLength:x2.bytes.byteLength;return e}async function $I(r,e,t,n,i){if(e>t)return t;if(r.Data==null||!ae.unmarshal(r.Data).isDirectory())return e;for(let s of r.Links){let a=s.Name??"";if(a=a.substring(2),e+=a.length,e+=s.Hash.bytes.byteLength,s.Hash.code===Le){let c=await n.get(s.Hash,i),l=xt(c);e+=await $I(l,e,t,n,i)}}return e}var hi=we("helia:unixfs:components:utils:add-link");async function Xc(r,e,t,n){if(r.node.Data==null)throw new Zr("Invalid parent passed to addLink");if(ae.unmarshal(r.node.Data).type==="hamt-sharded-directory")return hi("adding link to sharded directory"),KH(r,e,t,n);hi(`adding ${e.Name} (${e.Hash}) to regular directory`);let o=await qH(r,e,t,n);if(await A2(o.node,t,n.shardSplitThresholdBytes,n)){hi("converting directory to sharded directory");let s=await VH(o,t);o.cid=s.cid,o.node=xt(await t.get(s.cid,n))}return o}var VH=async(r,e)=>{if(r.node.Data==null)throw new Zr("Invalid parent passed to convertToShardedDirectory");let t=ae.unmarshal(r.node.Data),n=await zI(e,r.node.Links.map(i=>({name:i.Name??"",size:BigInt(i.Tsize??0),cid:i.Hash})),{mode:t.mode,mtime:t.mtime,cidVersion:r.cid.version});return hi(`converted directory to sharded directory ${n.cid}`),n},qH=async(r,e,t,n)=>{let i=r.node.Links.filter(u=>{let d=u.Name===e.Name;if(d&&!n.allowOverwriting)throw new od;return!d});if(i.push(e),r.node.Data==null)throw new Sr("Parent node with no data passed to addToDirectory");let o=ae.unmarshal(r.node.Data),s;if(o.mtime!=null){let u=Date.now(),d=Math.floor(u/1e3);o.mtime={secs:BigInt(d),nsecs:(u-d*1e3)*1e3},s=o.marshal()}else s=r.node.Data;r.node=ht({Data:s,Links:i});let a=Ie(r.node),c=await Se.digest(a),l=B.create(r.cid.version,Le,c);return await t.put(l,a),{node:r.node,cid:l}},KH=async(r,e,t,n)=>{let{path:i,hash:o}=await S2(r.cid,e.Name,t,n),s=i[i.length-1];if(s==null)throw new Error("Invalid HAMT, could not generate path");let a=s.prefix,c=parseInt(a,16);hi("next prefix for %s is %s",e.Name,a);let l=`${a}${e.Name}`,u=s.node.Links.find(d=>(d.Name??"").startsWith(a));if(u!=null)if(hi("link %s was present in shard",l),u.Name===l){if(!n.allowOverwriting)throw new od;hi("overwriting %s in sub-shard",e.Name),s.node.Links=s.node.Links.filter(d=>d.Name!==l),s.node.Links.push({Name:l,Hash:e.Hash,Tsize:e.Tsize})}else{if(u.Name?.length===2)throw new Error("Existing link was sub-shard?!");{hi("prefix %s already exists, creating new sub-shard",a);let d=s.node.Links.findIndex(g=>g.Name?.startsWith(a)),h=s.node.Links.splice(d,1)[0],f=(h.Name??"").substring(2),m=y2(Yc)(C(f));for(let g=0;g<i.length;g++)await m.take(ha);for(;;){let g=await m.take(ha),y=v2(g);h.Name=`${y}${f}`;let w=await o.take(ha),x=v2(w);if(y===x){let A=new K5.default;A.set(w,!0),i.push({prefix:x,children:A,node:{Links:[]}});continue}let b=new K5.default;b.set(w,!0),b.set(g,!0),i.push({prefix:a,children:b,node:{Links:[h,{Name:`${x}${e.Name}`,Hash:e.Hash,Tsize:e.Tsize}]}});break}}}else hi("link %s was not present in sub-shard",l),e.Name=l,s.node.Links.push(e),s.children.set(c,!0),hi("adding %s to existing sub-shard",l);return E2(i,t,n)};async function rs(r,e,t={}){let n=await _t(r,e,t);if(n.type!=="directory")throw new Zo(`${r.toString()} was not a UnixFS directory`);return{cid:r,node:n.node}}async function jc(r,e,t,n){let i=await _t(r,t,n);if(i.type!=="directory"&&i.type!=="file"&&i.type!=="raw")throw new Qr(`${r.toString()} was not a UnixFS node`);return{Name:e,Tsize:i.node instanceof Uint8Array?i.node.byteLength:GH(i.node),Hash:r}}function GH(r){let e=r.Links.reduce((t,n)=>t+(n.Tsize??0),0);return Ie(r).byteLength+e}var WH=we("helia:unixfs:components:utils:resolve");async function pi(r,e,t,n){if(e==null||e==="")return{cid:r};let i=`/ipfs/${r}${e==null?"":`/${e}`}`,o=await Fi(cd(i,t,n));if(o.length===0)throw new $c("Could not find path in directory");return WH("resolved %s to %c",e,r),{cid:o[o.length-1].cid,path:e,segments:o}}async function Qc(r,e,t,n){if(e.segments==null||e.segments.length===0)return r;let i=e.segments.pop();if(i==null)throw new Error("Insufficient segments");i.cid=r,e.segments.reverse();for(let o of e.segments){let[s,a]=await Promise.all([rs(o.cid,t,n),jc(i.cid,i.name,t,n)]);r=(await Xc(s,a,t,{...n,allowOverwriting:!0,cidVersion:r.version})).cid,o.cid=r,i=o}return r}var YH=mt.bind({ignoreUndefined:!0}),XH={};async function*VI(r,e,t={}){let n=YH(XH,t),i=await pi(r,n.path,e,n),o=await _t(i.cid,e,n);if(o.type!=="file"&&o.type!=="raw")throw new t2;if(o.content==null)throw new Vc;yield*o.content(n)}var jH=mt.bind({ignoreUndefined:!0}),QH=we("helia:unixfs:chmod"),ZH={recursive:!1,shardSplitThresholdBytes:262144};async function qI(r,e,t,n={}){let i=jH(ZH,n),o=await pi(r,i.path,t,n);if(QH("chmod %c %d",o.cid,e),i.recursive){let h=await Re(async function*(){for await(let f of Wc(o.cid,t,n)){let p,m=[];if(f.type==="raw")p=new ae({type:"file",data:f.node});else if(f.type==="file"||f.type==="directory")p=f.unixfs,m=f.node.Links;else throw new Qr;p.mode=e;let g={Data:p.marshal(),Links:m};yield{path:f.path,content:g}}},f=>ts(f,t,{...i,dagBuilder:async function*(p,m){for await(let g of p)yield async function(){let y=g.content,w=Ie(y),x=await Xn(w,m,{...i,cidVersion:r.version});if(y.Data==null)throw new Sr(`${x} had no data`);let b=ae.unmarshal(y.Data);return{cid:x,size:BigInt(w.length),path:g.path,unixfs:b}}}}),async f=>Jo(f));if(h==null)throw new Qo(`Could not chmod ${o.cid.toString()}`);return Qc(h.cid,o,t,i)}let s=await t.get(o.cid,n),a,c=[];if(o.cid.code===We)a=new ae({type:"file",data:s});else{let h=xt(s);if(h.Data==null)throw new Sr(`${o.cid.toString()} had no data`);c=h.Links,a=ae.unmarshal(h.Data)}a.mode=e;let l=Ie({Data:a.marshal(),Links:c}),u=await Se.digest(l),d=B.create(o.cid.version,Le,u);return await t.put(d,l),Qc(d,o,t,i)}var JH=mt.bind({ignoreUndefined:!0}),ez=we("helia:unixfs:cp"),tz={force:!1,shardSplitThresholdBytes:262144};async function KI(r,e,t,n,i={}){let o=JH(tz,i);if(t.includes("/"))throw new Zr("Name must not have slashes");let[s,a]=await Promise.all([rs(e,n,o),jc(r,t,n,o)]);return ez('Adding %c as "%s" to %c',r,t,e),(await Xc(s,a,n,{allowOverwriting:o.force,cidVersion:e.version,...o})).cid}var rz=mt.bind({ignoreUndefined:!0}),nz={};async function*GI(r,e,t={}){let n=rz(nz,t),i=await pi(r,n.path,e,n),o=await _t(i.cid,e);if(o.type==="file"||o.type==="raw"){yield o;return}if(o.content==null)throw new Vc;if(o.type!=="directory")throw new Zo;yield*o.content({offset:t.offset,length:t.length})}var iz=mt.bind({ignoreUndefined:!0}),WI=we("helia:unixfs:mkdir"),oz={cidVersion:1,force:!1,shardSplitThresholdBytes:262144};async function YI(r,e,t,n={}){let i=iz(oz,n);if(e.includes("/"))throw new Zr("Path must not have slashes");if((await _t(r,t,n)).type!=="directory")throw new Zo(`${r.toString()} was not a UnixFS directory`);WI("creating %s",e);let a={Data:new ae({type:"directory",mode:i.mode,mtime:i.mtime}).marshal(),Links:[]},c=Ie(a),l=await Se.digest(c),u=B.create(i.cidVersion,Le,l);await t.put(u,c);let[d,h]=await Promise.all([rs(r,t,i),jc(u,e,t,i)]);return WI("adding empty dir called %s to %c",e,r),(await Xc(d,h,t,{...i,allowOverwriting:i.force})).cid}var I2=we("helia:unixfs:utils:remove-link");async function XI(r,e,t,n){if(r.node.Data==null)throw new Sr("Parent node had no data");if(ae.unmarshal(r.node.Data).type==="hamt-sharded-directory"){I2(`removing ${e} from sharded directory`);let o=await az(r,e,t,n);return await A2(o.node,t,n.shardSplitThresholdBytes,n)?o:(I2("converting shard to flat directory %c",r.cid),cz(o,t,n))}return I2(`removing link ${e} regular directory`),sz(r,e,t,n)}var sz=async(r,e,t,n)=>{r.node.Links=r.node.Links.filter(s=>s.Name!==e);let i=Ie(r.node),o=await Xn(i,t,{...n,cidVersion:r.cid.version});return I2(`Updated regular directory ${o}`),{node:r.node,cid:o}},az=async(r,e,t,n)=>{let{path:i}=await S2(r.cid,e,t,n),o=i[i.length-1];if(o==null)throw new Error("Invalid HAMT, could not generate path");let s=o.node.Links.filter(l=>(l.Name??"").substring(2)===e).map(l=>l.Name).pop();if(s==null)throw new Error("File not found");let a=s.substring(0,2),c=parseInt(a,16);if(o.node.Links=o.node.Links.filter(l=>l.Name!==s),o.children.unset(c),o.node.Links.length===1)for(;i.length!==1;){let l=i[i.length-1];if(l==null||l.node.Links.length>1)break;i.pop();let u=i[i.length-1];if(u==null)break;let d=l.node.Links[0];u.node.Links=u.node.Links.filter(h=>!(h.Name??"").startsWith(u.prefix)),u.node.Links.push({Hash:d.Hash,Name:`${u.prefix}${(d.Name??"").substring(2)}`,Tsize:d.Tsize})}return E2(i,t,n)},cz=async(r,e,t)=>{if(r.node.Data==null)throw new Zr("Invalid parent passed to convertToFlatDirectory");let n={Links:[]},i=await _t(r.cid,e);if(i.type!=="directory")throw new Error("Unexpected node type");for await(let c of i.content()){let l=0;c.node instanceof Uint8Array?l=c.node.byteLength:l=Ie(c.node).length,n.Links.push({Hash:c.cid,Name:c.name,Tsize:l})}let o=ae.unmarshal(r.node.Data);n.Data=new ae({type:"directory",mode:o.mode,mtime:o.mtime}).marshal();let s=Ie(ht(n));return{cid:await Xn(s,e,{codec:bt,cidVersion:r.cid.version,signal:t.signal}),node:n}};var lz=mt.bind({ignoreUndefined:!0}),uz=we("helia:unixfs:rm"),dz={shardSplitThresholdBytes:262144};async function jI(r,e,t,n={}){let i=lz(dz,n);if(e.includes("/"))throw new Zr("Name must not have slashes");let o=await rs(r,t,i);return uz("Removing %s from %c",e,r),(await XI(o,e,t,{...i,cidVersion:r.version})).cid}var fz=mt.bind({ignoreUndefined:!0}),hz=we("helia:unixfs:stat"),pz={};async function QI(r,e,t={}){let n=fz(pz,t),i=await pi(r,t.path,e,n);hz("stat %c",i.cid);let o=await _t(i.cid,e,n);if(o.type!=="file"&&o.type!=="directory"&&o.type!=="raw")throw new Qr;let s=0n,a=0n,c=0n,l=0n,u=0,d,h,f=o.type,p;if(o.type==="raw"&&(s=BigInt(o.node.byteLength),a=BigInt(o.node.byteLength),c=BigInt(o.node.byteLength),l=BigInt(o.node.byteLength),u=1),o.type==="directory"&&(s=0n,a=BigInt(o.unixfs.marshal().byteLength),c=0n,l=a,u=1,d=o.unixfs.mode,h=o.unixfs.mtime,p=o.unixfs),o.type==="file"){let m=await ZI(i.cid,e,n);s=o.unixfs.fileSize(),a=BigInt((o.node.Data?.byteLength??0)+o.node.Links.reduce((g,y)=>g+(y.Tsize??0),0)),c=BigInt(m.localFileSize),l=BigInt(m.localDagSize),u=m.blocks,d=o.unixfs.mode,h=o.unixfs.mtime,p=o.unixfs}return{cid:i.cid,mode:d,mtime:h,fileSize:s,dagSize:a,localFileSize:c,localDagSize:l,blocks:u,type:f,unixfs:p}}async function ZI(r,e,t){let n={localFileSize:0,localDagSize:0,blocks:0};if(await e.has(r,t)){let i=await e.get(r,t);if(n.blocks++,n.localDagSize+=i.byteLength,r.code===We)n.localFileSize+=i.byteLength;else if(r.code===Le){let o=xt(i);if(o.Links.length>0)for(let s of o.Links){let a=await ZI(s.Hash,e,t);n.localFileSize+=a.localFileSize,n.localDagSize+=a.localDagSize,n.blocks+=a.blocks}else{if(o.Data==null)throw new Sr(`PBNode ${r.toString()} had no data`);let s=ae.unmarshal(o.Data);if(s.data==null)throw new Sr(`UnixFS node ${r.toString()} had no data`);n.localFileSize+=s.data.byteLength??0}}else throw new Qo(`${r.toString()} was neither DAG_PB nor RAW`)}return n}var mz=mt.bind({ignoreUndefined:!0}),gz=we("helia:unixfs:touch"),yz={recursive:!1,shardSplitThresholdBytes:262144};async function JI(r,e,t={}){let n=mz(yz,t),i=await pi(r,n.path,e,n),o=n.mtime??{secs:BigInt(Math.round(Date.now()/1e3)),nsecs:0};if(gz("touch %c %o",i.cid,o),n.recursive){let h=await Re(async function*(){for await(let f of Wc(i.cid,e)){let p,m;if(f.type==="raw")p=new ae({data:f.node}),m=[];else if(f.type==="file"||f.type==="directory")p=f.unixfs,m=f.node.Links;else throw new Qr;p.mtime=o;let g={Data:p.marshal(),Links:m};yield{path:f.path,content:g}}},f=>ts(f,e,{...n,dagBuilder:async function*(p,m){for await(let g of p)yield async function(){let y=g.content,w=Ie(y),x=await Xn(w,m,{...n,cidVersion:r.version});if(y.Data==null)throw new Sr(`${x} had no data`);let b=ae.unmarshal(y.Data);return{cid:x,size:BigInt(w.length),path:g.path,unixfs:b}}}}),async f=>Jo(f));if(h==null)throw new Qo(`Could not chmod ${i.cid.toString()}`);return Qc(h.cid,i,e,n)}let s=await e.get(i.cid,t),a,c=[];if(i.cid.code===We)a=new ae({data:s});else{let h=xt(s);if(c=h.Links,h.Data==null)throw new Sr(`${i.cid.toString()} had no data`);a=ae.unmarshal(h.Data)}a.mtime=o;let l=Ie({Data:a.marshal(),Links:c}),u=await Se.digest(l),d=B.create(i.cid.version,Le,u);return await e.put(d,l),Qc(d,i,e,n)}var _2=class{components;constructor(e){this.components=e}async*addAll(e,t={}){yield*NI(e,this.components.blockstore,t)}async addBytes(e,t={}){return LI(e,this.components.blockstore,t)}async addByteStream(e,t={}){return OI(e,this.components.blockstore,t)}async addFile(e,t={}){return BI(e,this.components.blockstore,t)}async addDirectory(e={},t={}){return MI(e,this.components.blockstore,t)}async*cat(e,t={}){yield*VI(e,this.components.blockstore,t)}async chmod(e,t,n={}){return qI(e,t,this.components.blockstore,n)}async cp(e,t,n,i={}){return KI(e,t,n,this.components.blockstore,i)}async*ls(e,t={}){yield*GI(e,this.components.blockstore,t)}async mkdir(e,t,n={}){return YI(e,t,this.components.blockstore,n)}async rm(e,t,n={}){return jI(e,t,this.components.blockstore,n)}async stat(e,t={}){return QI(e,this.components.blockstore,t)}async touch(e,t={}){return JI(e,this.components.blockstore,t)}};function e_(r){return new _2(r)}function t_(r,e){if(r==null)return;if(r instanceof Headers)return r.get(e)??void 0;if(Array.isArray(r))return r.find(([i])=>i.toLowerCase()===e.toLowerCase())?.[1];let t=Object.keys(r).find(n=>n.toLowerCase()===e.toLowerCase());if(t!=null)return r[t]}function r_(r,e,t){if((r??0)>(e??1/0))throw new jr("Invalid range: Range-start index is greater than range-end index.");if(r!=null&&(e??0)>=(t??1/0))throw new jr("Invalid range: Range-end index is greater than or equal to the size of the file.");if(r==null&&(e??0)>(t??1/0))throw new jr("Invalid range: Range-end index is greater than the size of the file.");if(r!=null&&r<0)throw new jr("Invalid range: Range-start index cannot be negative.");if(r!=null&&e!=null)return{byteSize:e-r+1,start:r,end:e};if(r==null&&e!=null)return t==null?{end:e}:e===t?{byteSize:t,start:0,end:t-1}:{byteSize:e,start:t-e,end:t-1};if(r!=null&&e==null){if(t==null)return{start:r};let n=t-1;return{byteSize:t-r,start:r,end:n}}return{byteSize:t,start:0,end:t!=null?t-1:0}}function wz(r){return typeof r=="string"?r.length:r instanceof ArrayBuffer||r instanceof Uint8Array?r.byteLength:r instanceof Blob?r.size:(r instanceof ReadableStream,null)}function xz(r){let e=r.match(/^bytes=(?<start>\d+)?-(?<end>\d+)?$/);if(e?.groups==null)throw new jr("Invalid range request");let{start:t,end:n}=e.groups;return{start:t,end:n}}var Zc=class{headers;isRangeRequest;_fileSize;_body=null;rangeRequestHeader;log;requestRangeStart;requestRangeEnd;byteStart;byteEnd;byteSize;constructor(e,t){if(this.headers=t,this.log=e.forComponent("helia:verified-fetch:byte-range-context"),this.rangeRequestHeader=t_(this.headers,"Range"),this.rangeRequestHeader!=null){this.isRangeRequest=!0,this.log.trace("range request detected");try{let{start:n,end:i}=xz(this.rangeRequestHeader);this.requestRangeStart=n!=null?parseInt(n):null,this.requestRangeEnd=i!=null?parseInt(i):null}catch(n){this.log.error("error parsing range request header: %o",n),this.requestRangeStart=null,this.requestRangeEnd=null}this.setOffsetDetails()}else this.log.trace("no range request detected"),this.isRangeRequest=!1,this.requestRangeStart=null,this.requestRangeEnd=null}setBody(e){this._body=e,this.setFileSize(this._fileSize??wz(e)),this.log.trace("set request body with fileSize %o",this._fileSize)}getBody(){let e=this._body;if(e==null)return this.log.trace("body is null"),e;if(!this.isRangeRequest||!this.isValidRangeRequest)return this.log.trace("returning body unmodified for non-range, or invalid range, request"),e;let t=this.byteStart,n=this.byteEnd,i=this.byteSize;return t!=null||n!=null?(this.log.trace("returning body with byteStart=%o, byteEnd=%o, byteSize=%o",t,n,i),e instanceof ReadableStream?e:this.getSlicedBody(e)):(this.log.error("returning unmodified body for valid range request"),e)}getSlicedBody(e){let t=this.byteStart??0,n;return this.byteEnd!=null&&this.byteStart!=null?n=this.byteEnd-this.byteStart+1:n=void 0,this.log.trace("slicing body with offset=%o and length=%o",t,n),typeof e=="string"||e instanceof Blob||e instanceof ArrayBuffer||e instanceof Uint8Array?e.slice(t,n!==void 0?t+n:void 0):e}setFileSize(e){this._fileSize=e!=null?Number(e):null,this.log.trace("set _fileSize to %o",this._fileSize),this.setOffsetDetails()}getFileSize(){return this._fileSize}isValidByteStart(){return!(this.byteStart!=null&&(this.byteStart<0||this._fileSize!=null&&this.byteStart>=this._fileSize||this.byteEnd!=null&&this.byteStart>this.byteEnd))}isValidByteEnd(){return!(this.byteEnd!=null&&(this.byteEnd<0||this._fileSize!=null&&this.byteEnd>=this._fileSize||this.byteStart!=null&&this.byteEnd<this.byteStart))}get isValidRangeRequest(){if(!this.isRangeRequest)return!1;if(this.requestRangeStart==null&&this.requestRangeEnd==null)return this.log.trace("invalid range request, range request values not provided"),!1;if(!this.isValidByteStart())return this.log.trace("invalid range request, byteStart is less than 0 or greater than fileSize"),!1;if(!this.isValidByteEnd())return this.log.trace("invalid range request, byteEnd is less than 0 or greater than fileSize"),!1;if(this.requestRangeEnd!=null&&this.requestRangeStart!=null){if(this.requestRangeStart>this.requestRangeEnd)return this.log.trace("invalid range request, start is greater than end"),!1;if(this.requestRangeStart<0)return this.log.trace("invalid range request, start is less than 0"),!1;if(this.requestRangeEnd<0)return this.log.trace("invalid range request, end is less than 0"),!1}return this.byteEnd==null&&this.byteStart==null&&this.byteSize==null?(this.log.trace("invalid range request, could not calculate byteStart, byteEnd, or byteSize"),!1):!0}get offset(){return this.byteStart??0}get length(){return this.byteEnd!=null&&this.byteStart!=null?this.byteEnd-this.byteStart+1:this.byteEnd!=null?this.byteEnd+1:this.byteSize}setOffsetDetails(){if(this.requestRangeStart==null&&this.requestRangeEnd==null){this.log.trace("requestRangeStart and requestRangeEnd are null");return}try{let{start:e,end:t,byteSize:n}=r_(this.requestRangeStart??void 0,this.requestRangeEnd??void 0,this._fileSize??void 0);this.log.trace("set byteStart to %o, byteEnd to %o, byteSize to %o",e,t,n),this.byteStart=e,this.byteEnd=t,this.byteSize=n}catch(e){this.log.error("error setting offset details: %o",e),this.byteStart=void 0,this.byteEnd=void 0,this.byteSize=void 0}}get contentRangeHeaderValue(){if(!this.isValidRangeRequest)throw this.log.error("cannot get contentRangeHeaderValue for invalid range request"),new jr("Invalid range request");return $T({byteStart:this.byteStart,byteEnd:this.byteEnd,byteSize:this._fileSize??void 0})}};async function n_(r,e,t,n){let i=t.forComponent("helia:verified-fetch:get-stream-from-async-iterable"),o=r[Symbol.asyncIterator](),{value:s,done:a}=await o.next();if(a===!0)throw i.error("no content found for path",e),new Zm;return{stream:new ReadableStream({async start(l){n?.onProgress?.(new M("verified-fetch:request:progress:chunk")),l.enqueue(s)},async pull(l){let{value:u,done:d}=await o.next();if(n?.signal?.aborted===!0){l.error(new zt(n.signal.reason??"signal aborted by user")),l.close();return}if(d===!0){u!=null&&(n?.onProgress?.(new M("verified-fetch:request:progress:chunk")),l.enqueue(u)),l.close();return}n?.onProgress?.(new M("verified-fetch:request:progress:chunk")),l.enqueue(u)}}),firstChunk:s}}var o_=ut(i_(),1);function Fr(r){return new DataView(r.buffer,r.byteOffset)}var s_={len:1,get(r,e){return Fr(r).getUint8(e)},put(r,e,t){return Fr(r).setUint8(e,t),e+1}},it={len:2,get(r,e){return Fr(r).getUint16(e,!0)},put(r,e,t){return Fr(r).setUint16(e,t,!0),e+2}},Jc={len:2,get(r,e){return Fr(r).getUint16(e)},put(r,e,t){return Fr(r).setUint16(e,t),e+2}};var Et={len:4,get(r,e){return Fr(r).getUint32(e,!0)},put(r,e,t){return Fr(r).setUint32(e,t,!0),e+4}},a_={len:4,get(r,e){return Fr(r).getUint32(e)},put(r,e,t){return Fr(r).setUint32(e,t),e+4}};var c_={len:4,get(r,e){return Fr(r).getInt32(e)},put(r,e,t){return Fr(r).setInt32(e,t),e+4}};var l_={len:8,get(r,e){return Fr(r).getBigUint64(e,!0)},put(r,e,t){return Fr(r).setBigUint64(e,t,!0),e+8}};var Ur=class{constructor(e,t){this.len=e,this.encoding=t,this.textDecoder=new TextDecoder(t)}get(e,t){return this.textDecoder.decode(e.subarray(t,t+this.len))}};var vz="End-Of-Stream",lt=class extends Error{constructor(){super(vz),this.name="EndOfStreamError"}},pa=class extends Error{constructor(e="The operation was aborted"){super(e),this.name="AbortError"}};var ma=class{constructor(){this.endOfStream=!1,this.interrupted=!1,this.peekQueue=[]}async peek(e,t=!1){let n=await this.read(e,t);return this.peekQueue.push(e.subarray(0,n)),n}async read(e,t=!1){if(e.length===0)return 0;let n=this.readFromPeekBuffer(e);if(this.endOfStream||(n+=await this.readRemainderFromStream(e.subarray(n),t)),n===0)throw new lt;return n}readFromPeekBuffer(e){let t=e.length,n=0;for(;this.peekQueue.length>0&&t>0;){let i=this.peekQueue.pop();if(!i)throw new Error("peekData should be defined");let o=Math.min(i.length,t);e.set(i.subarray(0,o),n),n+=o,t-=o,o<i.length&&this.peekQueue.push(i.subarray(o))}return n}async readRemainderFromStream(e,t){let n=0;for(;n<e.length&&!this.endOfStream;){if(this.interrupted)throw new pa;let i=await this.readFromStream(e.subarray(n),t);if(i===0)break;n+=i}if(!t&&n<e.length)throw new lt;return n}};var k2=class extends ma{constructor(e){super(),this.reader=e}async abort(){return this.close()}async close(){this.reader.releaseLock()}};var yd=class extends k2{async readFromStream(e,t){if(e.length===0)return 0;let n=await this.reader.read(new Uint8Array(e.length),{min:t?void 0:e.length});return n.done&&(this.endOfStream=n.done),n.value?(e.set(n.value),n.value.length):0}};var el=class extends ma{constructor(e){super(),this.reader=e,this.buffer=null}writeChunk(e,t){let n=Math.min(t.length,e.length);return e.set(t.subarray(0,n)),n<t.length?this.buffer=t.subarray(n):this.buffer=null,n}async readFromStream(e,t){if(e.length===0)return 0;let n=0;for(this.buffer&&(n+=this.writeChunk(e,this.buffer));n<e.length&&!this.endOfStream;){let i=await this.reader.read();if(i.done){this.endOfStream=!0;break}i.value&&(n+=this.writeChunk(e.subarray(n),i.value))}if(n===0&&this.endOfStream)throw new lt;return n}abort(){return this.interrupted=!0,this.reader.cancel()}async close(){await this.abort(),this.reader.releaseLock()}};function W5(r){try{let e=r.getReader({mode:"byob"});return e instanceof ReadableStreamDefaultReader?new el(e):new yd(e)}catch(e){if(e instanceof TypeError)return new el(r.getReader());throw e}}var ga=class{constructor(e){this.numBuffer=new Uint8Array(8),this.position=0,this.onClose=e?.onClose,e?.abortSignal&&e.abortSignal.addEventListener("abort",()=>{this.abort()})}async readToken(e,t=this.position){let n=new Uint8Array(e.len);if(await this.readBuffer(n,{position:t})<e.len)throw new lt;return e.get(n,0)}async peekToken(e,t=this.position){let n=new Uint8Array(e.len);if(await this.peekBuffer(n,{position:t})<e.len)throw new lt;return e.get(n,0)}async readNumber(e){if(await this.readBuffer(this.numBuffer,{length:e.len})<e.len)throw new lt;return e.get(this.numBuffer,0)}async peekNumber(e){if(await this.peekBuffer(this.numBuffer,{length:e.len})<e.len)throw new lt;return e.get(this.numBuffer,0)}async ignore(e){if(this.fileInfo.size!==void 0){let t=this.fileInfo.size-this.position;if(e>t)return this.position+=t,t}return this.position+=e,e}async close(){await this.abort(),await this.onClose?.()}normalizeOptions(e,t){if(!this.supportsRandomAccess()&&t&&t.position!==void 0&&t.position<this.position)throw new Error("`options.position` must be equal or greater than `tokenizer.position`");return{mayBeLess:!1,offset:0,length:e.length,position:this.position,...t}}abort(){return Promise.resolve()}};var Sz=256e3,C2=class extends ga{constructor(e,t){super(t),this.streamReader=e,this.fileInfo=t?.fileInfo??{}}async readBuffer(e,t){let n=this.normalizeOptions(e,t),i=n.position-this.position;if(i>0)return await this.ignore(i),this.readBuffer(e,t);if(i<0)throw new Error("`options.position` must be equal or greater than `tokenizer.position`");if(n.length===0)return 0;let o=await this.streamReader.read(e.subarray(0,n.length),n.mayBeLess);if(this.position+=o,(!t||!t.mayBeLess)&&o<n.length)throw new lt;return o}async peekBuffer(e,t){let n=this.normalizeOptions(e,t),i=0;if(n.position){let o=n.position-this.position;if(o>0){let s=new Uint8Array(n.length+o);return i=await this.peekBuffer(s,{mayBeLess:n.mayBeLess}),e.set(s.subarray(o)),i-o}if(o<0)throw new Error("Cannot peek from a negative offset in a stream")}if(n.length>0){try{i=await this.streamReader.peek(e.subarray(0,n.length),n.mayBeLess)}catch(o){if(t?.mayBeLess&&o instanceof lt)return 0;throw o}if(!n.mayBeLess&&i<n.length)throw new lt}return i}async ignore(e){let t=Math.min(Sz,e),n=new Uint8Array(t),i=0;for(;i<e;){let o=e-i,s=await this.readBuffer(n,{length:Math.min(t,o)});if(s<0)return s;i+=s}return i}abort(){return this.streamReader.abort()}async close(){return this.streamReader.close()}supportsRandomAccess(){return!1}};var P2=class extends ga{constructor(e,t){super(t),this.uint8Array=e,this.fileInfo={...t?.fileInfo??{},size:e.length}}async readBuffer(e,t){t?.position&&(this.position=t.position);let n=await this.peekBuffer(e,t);return this.position+=n,n}async peekBuffer(e,t){let n=this.normalizeOptions(e,t),i=Math.min(this.uint8Array.length-n.position,n.length);if(!n.mayBeLess&&i<n.length)throw new lt;return e.set(this.uint8Array.subarray(n.position,n.position+i)),i}close(){return super.close()}supportsRandomAccess(){return!0}setPosition(e){this.position=e}};function u_(r,e){let t=W5(r),n=e??{},i=n.onClose;return n.onClose=async()=>{if(await t.close(),i)return i()},new C2(t,n)}function d_(r,e){return new P2(r,e)}var tn=Uint8Array,tl=Uint16Array,Tz=Int32Array,f_=new tn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),h_=new tn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Iz=new tn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),p_=function(r,e){for(var t=new tl(31),n=0;n<31;++n)t[n]=e+=1<<r[n-1];for(var i=new Tz(t[30]),n=1;n<30;++n)for(var o=t[n];o<t[n+1];++o)i[o]=o-t[n]<<5|n;return{b:t,r:i}},m_=p_(f_,2),g_=m_.b,_z=m_.r;g_[28]=258,_z[258]=28;var y_=p_(h_,0),kz=y_.b,bIe=y_.r,j5=new tl(32768);for(Be=0;Be<32768;++Be)eo=(Be&43690)>>1|(Be&21845)<<1,eo=(eo&52428)>>2|(eo&13107)<<2,eo=(eo&61680)>>4|(eo&3855)<<4,j5[Be]=((eo&65280)>>8|(eo&255)<<8)>>1;var eo,Be,wd=function(r,e,t){for(var n=r.length,i=0,o=new tl(e);i<n;++i)r[i]&&++o[r[i]-1];var s=new tl(e);for(i=1;i<e;++i)s[i]=s[i-1]+o[i-1]<<1;var a;if(t){a=new tl(1<<e);var c=15-e;for(i=0;i<n;++i)if(r[i])for(var l=i<<4|r[i],u=e-r[i],d=s[r[i]-1]++<<u,h=d|(1<<u)-1;d<=h;++d)a[j5[d]>>c]=l}else for(a=new tl(n),i=0;i<n;++i)r[i]&&(a[i]=j5[s[r[i]-1]++]>>15-r[i]);return a},xd=new tn(288);for(Be=0;Be<144;++Be)xd[Be]=8;var Be;for(Be=144;Be<256;++Be)xd[Be]=9;var Be;for(Be=256;Be<280;++Be)xd[Be]=7;var Be;for(Be=280;Be<288;++Be)xd[Be]=8;var Be,w_=new tn(32);for(Be=0;Be<32;++Be)w_[Be]=5;var Be;var Cz=wd(xd,9,1);var Pz=wd(w_,5,1),Y5=function(r){for(var e=r[0],t=1;t<r.length;++t)r[t]>e&&(e=r[t]);return e},jn=function(r,e,t){var n=e/8|0;return(r[n]|r[n+1]<<8)>>(e&7)&t},X5=function(r,e){var t=e/8|0;return(r[t]|r[t+1]<<8|r[t+2]<<16)>>(e&7)},Rz=function(r){return(r+7)/8|0},Dz=function(r,e,t){return(e==null||e<0)&&(e=0),(t==null||t>r.length)&&(t=r.length),new tn(r.subarray(e,t))};var Nz=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],en=function(r,e,t){var n=new Error(e||Nz[r]);if(n.code=r,Error.captureStackTrace&&Error.captureStackTrace(n,en),!t)throw n;return n},Q5=function(r,e,t,n){var i=r.length,o=n?n.length:0;if(!i||e.f&&!e.l)return t||new tn(0);var s=!t,a=s||e.i!=2,c=e.i;s&&(t=new tn(i*3));var l=function(Ht){var Dt=t.length;if(Ht>Dt){var Hr=new tn(Math.max(Dt*2,Ht));Hr.set(t),t=Hr}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,m=e.m,g=e.n,y=i*8;do{if(!f){u=jn(r,d,1);var w=jn(r,d+1,3);if(d+=3,w)if(w==1)f=Cz,p=Pz,m=9,g=5;else if(w==2){var k=jn(r,d,31)+257,E=jn(r,d+10,15)+4,S=k+jn(r,d+5,31)+1;d+=14;for(var T=new tn(S),$=new tn(19),R=0;R<E;++R)$[Iz[R]]=jn(r,d+R*3,7);d+=E*3;for(var H=Y5($),F=(1<<H)-1,N=wd($,H,1),R=0;R<S;){var L=N[jn(r,d,F)];d+=L&15;var x=L>>4;if(x<16)T[R++]=x;else{var _=0,I=0;for(x==16?(I=3+jn(r,d,3),d+=2,_=T[R-1]):x==17?(I=3+jn(r,d,7),d+=3):x==18&&(I=11+jn(r,d,127),d+=7);I--;)T[R++]=_}}var D=T.subarray(0,k),P=T.subarray(k);m=Y5(D),g=Y5(P),f=wd(D,m,1),p=wd(P,g,1)}else en(1);else{var x=Rz(d)+4,b=r[x-4]|r[x-3]<<8,A=x+b;if(A>i){c&&en(0);break}a&&l(h+b),t.set(r.subarray(x,A),h),e.b=h+=b,e.p=d=A*8,e.f=u;continue}if(d>y){c&&en(0);break}}a&&l(h+131072);for(var q=(1<<m)-1,G=(1<<g)-1,Y=d;;Y=d){var _=f[X5(r,d)&q],ie=_>>4;if(d+=_&15,d>y){c&&en(0);break}if(_||en(2),ie<256)t[h++]=ie;else if(ie==256){Y=d,f=null;break}else{var oe=ie-254;if(ie>264){var R=ie-257,ue=f_[R];oe=jn(r,d,(1<<ue)-1)+g_[R],d+=ue}var xe=p[X5(r,d)&G],Ue=xe>>4;xe||en(3),d+=xe&15;var P=kz[Ue];if(Ue>3){var ue=h_[Ue];P+=X5(r,d)&(1<<ue)-1,d+=ue}if(d>y){c&&en(0);break}a&&l(h+131072);var He=h+oe;if(h<P){var Ge=o-P,Rt=Math.min(P,He);for(Ge+h<0&&en(3);h<Rt;++h)t[h]=n[Ge+h]}for(;h<He;++h)t[h]=t[h-P]}}e.l=f,e.p=Y,e.b=h,e.f=u,f&&(u=1,e.m=m,e.d=p,e.n=g)}while(!u);return h!=t.length&&s?Dz(t,0,h):t.subarray(0,h)};var Lz=new tn(0);var Oz=function(r){(r[0]!=31||r[1]!=139||r[2]!=8)&&en(6,"invalid gzip data");var e=r[3],t=10;e&4&&(t+=(r[10]|r[11]<<8)+2);for(var n=(e>>3&1)+(e>>4&1);n>0;n-=!r[t++]);return t+(e&2)},Bz=function(r){var e=r.length;return(r[e-4]|r[e-3]<<8|r[e-2]<<16|r[e-1]<<24)>>>0};var Mz=function(r,e){return((r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31)&&en(6,"invalid zlib data"),(r[1]>>5&1)==+!e&&en(6,"invalid zlib data: "+(r[1]&32?"need":"unexpected")+" dictionary"),(r[1]>>3&4)+2};function Fz(r,e){return Q5(r,{i:2},e&&e.out,e&&e.dictionary)}function Uz(r,e){var t=Oz(r);return t+8>r.length&&en(6,"invalid gzip data"),Q5(r.subarray(t,-8),{i:2},e&&e.out||new tn(Bz(r)),e&&e.dictionary)}function Hz(r,e){return Q5(r.subarray(Mz(r,e&&e.dictionary),-4),{i:2},e&&e.out,e&&e.dictionary)}function x_(r,e){return r[0]==31&&r[1]==139&&r[2]==8?Uz(r,e):(r[0]&15)!=8||r[0]>>4>7||(r[0]<<8|r[1])%31?Fz(r,e):Hz(r,e)}var zz=typeof TextDecoder<"u"&&new TextDecoder,$z=0;try{zz.decode(Lz,{stream:!0}),$z=1}catch{}var k_=ut(A_(),1);var wa={LocalFileHeader:67324752,DataDescriptor:134695760,CentralFileHeader:33639248,EndOfCentralDirectory:101010256},Z5={get(r){let e=it.get(r,6);return{signature:Et.get(r,0),compressedSize:Et.get(r,8),uncompressedSize:Et.get(r,12)}},len:16},T_={get(r){let e=it.get(r,6);return{signature:Et.get(r,0),minVersion:it.get(r,4),dataDescriptor:!!(e&8),compressedMethod:it.get(r,8),compressedSize:Et.get(r,18),uncompressedSize:Et.get(r,22),filenameLength:it.get(r,26),extraFieldLength:it.get(r,28),filename:null}},len:30},I_={get(r){return{signature:Et.get(r,0),nrOfThisDisk:it.get(r,4),nrOfThisDiskWithTheStart:it.get(r,6),nrOfEntriesOnThisDisk:it.get(r,8),nrOfEntriesOfSize:it.get(r,10),sizeOfCd:Et.get(r,12),offsetOfStartOfCd:Et.get(r,16),zipFileCommentLength:it.get(r,20)}},len:22},__={get(r){let e=it.get(r,8);return{signature:Et.get(r,0),minVersion:it.get(r,6),dataDescriptor:!!(e&8),compressedMethod:it.get(r,10),compressedSize:Et.get(r,20),uncompressedSize:Et.get(r,24),filenameLength:it.get(r,28),extraFieldLength:it.get(r,30),fileCommentLength:it.get(r,32),relativeOffsetOfLocalHeader:Et.get(r,42),filename:null}},len:46};function C_(r){let e=new Uint8Array(Et.len);return Et.put(e,0,r),e}var mi=(0,k_.default)("tokenizer:inflate"),J5=256*1024,t$=C_(wa.DataDescriptor),N2=C_(wa.EndOfCentralDirectory),L2=class{constructor(e){this.tokenizer=e,this.syncBuffer=new Uint8Array(J5)}async isZip(){return await this.peekSignature()===wa.LocalFileHeader}peekSignature(){return this.tokenizer.peekToken(Et)}async findEndOfCentralDirectoryLocator(){let e=this.tokenizer,t=Math.min(16*1024,e.fileInfo.size),n=this.syncBuffer.subarray(0,t);await this.tokenizer.readBuffer(n,{position:e.fileInfo.size-t});for(let i=n.length-4;i>=0;i--)if(n[i]===N2[0]&&n[i+1]===N2[1]&&n[i+2]===N2[2]&&n[i+3]===N2[3])return e.fileInfo.size-t+i;return-1}async readCentralDirectory(){if(!this.tokenizer.supportsRandomAccess()){mi("Cannot reading central-directory without random-read support");return}mi("Reading central-directory...");let e=this.tokenizer.position,t=await this.findEndOfCentralDirectoryLocator();if(t>0){mi("Central-directory 32-bit signature found");let n=await this.tokenizer.readToken(I_,t),i=[];this.tokenizer.setPosition(n.offsetOfStartOfCd);for(let o=0;o<n.nrOfEntriesOfSize;++o){let s=await this.tokenizer.readToken(__);if(s.signature!==wa.CentralFileHeader)throw new Error("Expected Central-File-Header signature");s.filename=await this.tokenizer.readToken(new Ur(s.filenameLength,"utf-8")),await this.tokenizer.ignore(s.extraFieldLength),await this.tokenizer.ignore(s.fileCommentLength),i.push(s),mi(`Add central-directory file-entry: n=${o+1}/${i.length}: filename=${i[o].filename}`)}return this.tokenizer.setPosition(e),i}this.tokenizer.setPosition(e)}async unzip(e){let t=await this.readCentralDirectory();if(t)return this.iterateOverCentralDirectory(t,e);let n=!1;do{let i=await this.readLocalFileHeader();if(!i)break;let o=e(i);n=!!o.stop;let s;if(await this.tokenizer.ignore(i.extraFieldLength),i.dataDescriptor&&i.compressedSize===0){let a=[],c=J5;mi("Compressed-file-size unknown, scanning for next data-descriptor-signature....");let l=-1;for(;l<0&&c===J5;){c=await this.tokenizer.peekBuffer(this.syncBuffer,{mayBeLess:!0}),l=r$(this.syncBuffer.subarray(0,c),t$);let u=l>=0?l:c;if(o.handler){let d=new Uint8Array(u);await this.tokenizer.readBuffer(d),a.push(d)}else await this.tokenizer.ignore(u)}mi(`Found data-descriptor-signature at pos=${this.tokenizer.position}`),o.handler&&await this.inflate(i,n$(a),o.handler)}else o.handler?(mi(`Reading compressed-file-data: ${i.compressedSize} bytes`),s=new Uint8Array(i.compressedSize),await this.tokenizer.readBuffer(s),await this.inflate(i,s,o.handler)):(mi(`Ignoring compressed-file-data: ${i.compressedSize} bytes`),await this.tokenizer.ignore(i.compressedSize));if(mi(`Reading data-descriptor at pos=${this.tokenizer.position}`),i.dataDescriptor&&(await this.tokenizer.readToken(Z5)).signature!==134695760)throw new Error(`Expected data-descriptor-signature at position ${this.tokenizer.position-Z5.len}`)}while(!n)}async iterateOverCentralDirectory(e,t){for(let n of e){let i=t(n);if(i.handler){this.tokenizer.setPosition(n.relativeOffsetOfLocalHeader);let o=await this.readLocalFileHeader();if(o){await this.tokenizer.ignore(o.extraFieldLength);let s=new Uint8Array(n.compressedSize);await this.tokenizer.readBuffer(s),await this.inflate(o,s,i.handler)}}if(i.stop)break}}inflate(e,t,n){if(e.compressedMethod===0)return n(t);mi(`Decompress filename=${e.filename}, compressed-size=${t.length}`);let i=x_(t);return n(i)}async readLocalFileHeader(){let e=await this.tokenizer.peekToken(Et);if(e===wa.LocalFileHeader){let t=await this.tokenizer.readToken(T_);return t.filename=await this.tokenizer.readToken(new Ur(t.filenameLength,"utf-8")),t}if(e===wa.CentralFileHeader)return!1;throw e===3759263696?new Error("Encrypted ZIP"):new Error("Unexpected signature")}};function r$(r,e){let t=r.length,n=e.length;if(n>t)return-1;for(let i=0;i<=t-n;i++){let o=!0;for(let s=0;s<n;s++)if(r[i+s]!==e[s]){o=!1;break}if(o)return i}return-1}function n$(r){let e=r.reduce((i,o)=>i+o.length,0),t=new Uint8Array(e),n=0;for(let i of r)t.set(i,n),n+=i.length;return t}var PIe={utf8:new globalThis.TextDecoder("utf8")};var RIe=new globalThis.TextEncoder;var DIe=Array.from({length:256},(r,e)=>e.toString(16).padStart(2,"0"));function ey(r){let{byteLength:e}=r;if(e===6)return r.getUint16(0)*2**32+r.getUint32(2);if(e===5)return r.getUint8(0)*2**32+r.getUint32(1);if(e===4)return r.getUint32(0);if(e===3)return r.getUint8(0)*2**16+r.getUint16(1);if(e===2)return r.getUint16(0);if(e===1)return r.getUint8(0)}function i$(r,e){let t=r.length,n=e.length;if(n===0||n>t)return-1;let i=t-n;for(let o=0;o<=i;o++){let s=!0;for(let a=0;a<n;a++)if(r[o+a]!==e[a]){s=!1;break}if(s)return o}return-1}function P_(r,e){return i$(r,e)!==-1}function R_(r){return[...r].map(e=>e.charCodeAt(0))}function D_(r,e=0){let t=Number.parseInt(new Ur(6).get(r,148).replace(/\0.*$/,"").trim(),8);if(Number.isNaN(t))return!1;let n=8*32;for(let i=e;i<e+148;i++)n+=r[i];for(let i=e+156;i<e+512;i++)n+=r[i];return t===n}var N_={get:(r,e)=>r[e+3]&127|r[e+2]<<7|r[e+1]<<14|r[e]<<21,len:4};var L_=["jpg","png","apng","gif","webp","flif","xcf","cr2","cr3","orf","arw","dng","nef","rw2","raf","tif","bmp","icns","jxr","psd","indd","zip","tar","rar","gz","bz2","7z","dmg","mp4","mid","mkv","webm","mov","avi","mpg","mp2","mp3","m4a","oga","ogg","ogv","opus","flac","wav","spx","amr","pdf","epub","elf","macho","exe","swf","rtf","wasm","woff","woff2","eot","ttf","otf","ttc","ico","flv","ps","xz","sqlite","nes","crx","xpi","cab","deb","ar","rpm","Z","lz","cfb","mxf","mts","blend","bpg","docx","pptx","xlsx","3gp","3g2","j2c","jp2","jpm","jpx","mj2","aif","qcp","odt","ods","odp","xml","mobi","heic","cur","ktx","ape","wv","dcm","ics","glb","pcap","dsf","lnk","alias","voc","ac3","m4v","m4p","m4b","f4v","f4p","f4b","f4a","mie","asf","ogm","ogx","mpc","arrow","shp","aac","mp1","it","s3m","xm","ai","skp","avif","eps","lzh","pgp","asar","stl","chm","3mf","zst","jxl","vcf","jls","pst","dwg","parquet","class","arj","cpio","ace","avro","icc","fbx","vsdx","vtt","apk","drc","lz4","potx","xltx","dotx","xltm","ott","ots","otp","odg","otg","xlsm","docm","dotm","potm","pptm","jar","rm"],O_=["image/jpeg","image/png","image/gif","image/webp","image/flif","image/x-xcf","image/x-canon-cr2","image/x-canon-cr3","image/tiff","image/bmp","image/vnd.ms-photo","image/vnd.adobe.photoshop","application/x-indesign","application/epub+zip","application/x-xpinstall","application/vnd.oasis.opendocument.text","application/vnd.oasis.opendocument.spreadsheet","application/vnd.oasis.opendocument.presentation","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/vnd.openxmlformats-officedocument.presentationml.presentation","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/zip","application/x-tar","application/x-rar-compressed","application/gzip","application/x-bzip2","application/x-7z-compressed","application/x-apple-diskimage","application/x-apache-arrow","video/mp4","audio/midi","video/x-matroska","video/webm","video/quicktime","video/vnd.avi","audio/wav","audio/qcelp","audio/x-ms-asf","video/x-ms-asf","application/vnd.ms-asf","video/mpeg","video/3gpp","audio/mpeg","audio/mp4","video/ogg","audio/ogg","audio/ogg; codecs=opus","application/ogg","audio/x-flac","audio/ape","audio/wavpack","audio/amr","application/pdf","application/x-elf","application/x-mach-binary","application/x-msdownload","application/x-shockwave-flash","application/rtf","application/wasm","font/woff","font/woff2","application/vnd.ms-fontobject","font/ttf","font/otf","font/collection","image/x-icon","video/x-flv","application/postscript","application/eps","application/x-xz","application/x-sqlite3","application/x-nintendo-nes-rom","application/x-google-chrome-extension","application/vnd.ms-cab-compressed","application/x-deb","application/x-unix-archive","application/x-rpm","application/x-compress","application/x-lzip","application/x-cfb","application/x-mie","application/mxf","video/mp2t","application/x-blender","image/bpg","image/j2c","image/jp2","image/jpx","image/jpm","image/mj2","audio/aiff","application/xml","application/x-mobipocket-ebook","image/heif","image/heif-sequence","image/heic","image/heic-sequence","image/icns","image/ktx","application/dicom","audio/x-musepack","text/calendar","text/vcard","text/vtt","model/gltf-binary","application/vnd.tcpdump.pcap","audio/x-dsf","application/x.ms.shortcut","application/x.apple.alias","audio/x-voc","audio/vnd.dolby.dd-raw","audio/x-m4a","image/apng","image/x-olympus-orf","image/x-sony-arw","image/x-adobe-dng","image/x-nikon-nef","image/x-panasonic-rw2","image/x-fujifilm-raf","video/x-m4v","video/3gpp2","application/x-esri-shape","audio/aac","audio/x-it","audio/x-s3m","audio/x-xm","video/MP1S","video/MP2P","application/vnd.sketchup.skp","image/avif","application/x-lzh-compressed","application/pgp-encrypted","application/x-asar","model/stl","application/vnd.ms-htmlhelp","model/3mf","image/jxl","application/zstd","image/jls","application/vnd.ms-outlook","image/vnd.dwg","application/x-parquet","application/java-vm","application/x-arj","application/x-cpio","application/x-ace-compressed","application/avro","application/vnd.iccprofile","application/x.autodesk.fbx","application/vnd.visio","application/vnd.android.package-archive","application/vnd.google.draco","application/x-lz4","application/vnd.openxmlformats-officedocument.presentationml.template","application/vnd.openxmlformats-officedocument.spreadsheetml.template","application/vnd.openxmlformats-officedocument.wordprocessingml.template","application/vnd.ms-excel.template.macroenabled.12","application/vnd.oasis.opendocument.text-template","application/vnd.oasis.opendocument.spreadsheet-template","application/vnd.oasis.opendocument.presentation-template","application/vnd.oasis.opendocument.graphics","application/vnd.oasis.opendocument.graphics-template","application/vnd.ms-excel.sheet.macroEnabled.12","application/vnd.ms-word.document.macroEnabled.12","application/vnd.ms-word.template.macroEnabled.12","application/vnd.ms-powerpoint.template.macroEnabled.12","application/vnd.ms-powerpoint.presentation.macroEnabled.12","application/java-archive","application/vnd.rn-realmedia"];var ty=4100;async function B_(r){return new ny().fromBuffer(r)}function ry(r){switch(r){case"application/epub+zip":return{ext:"epub",mime:"application/epub+zip"};case"application/vnd.oasis.opendocument.text":return{ext:"odt",mime:"application/vnd.oasis.opendocument.text"};case"application/vnd.oasis.opendocument.text-template":return{ext:"ott",mime:"application/vnd.oasis.opendocument.text-template"};case"application/vnd.oasis.opendocument.spreadsheet":return{ext:"ods",mime:"application/vnd.oasis.opendocument.spreadsheet"};case"application/vnd.oasis.opendocument.spreadsheet-template":return{ext:"ots",mime:"application/vnd.oasis.opendocument.spreadsheet-template"};case"application/vnd.oasis.opendocument.presentation":return{ext:"odp",mime:"application/vnd.oasis.opendocument.presentation"};case"application/vnd.oasis.opendocument.presentation-template":return{ext:"otp",mime:"application/vnd.oasis.opendocument.presentation-template"};case"application/vnd.oasis.opendocument.graphics":return{ext:"odg",mime:"application/vnd.oasis.opendocument.graphics"};case"application/vnd.oasis.opendocument.graphics-template":return{ext:"otg",mime:"application/vnd.oasis.opendocument.graphics-template"};case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":return{ext:"xlsx",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"};case"application/vnd.ms-excel.sheet.macroEnabled":return{ext:"xlsm",mime:"application/vnd.ms-excel.sheet.macroEnabled.12"};case"application/vnd.openxmlformats-officedocument.spreadsheetml.template":return{ext:"xltx",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.template"};case"application/vnd.ms-excel.template.macroEnabled":return{ext:"xltm",mime:"application/vnd.ms-excel.template.macroenabled.12"};case"application/vnd.openxmlformats-officedocument.wordprocessingml.document":return{ext:"docx",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"};case"application/vnd.ms-word.document.macroEnabled":return{ext:"docm",mime:"application/vnd.ms-word.document.macroEnabled.12"};case"application/vnd.openxmlformats-officedocument.wordprocessingml.template":return{ext:"dotx",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.template"};case"application/vnd.ms-word.template.macroEnabledTemplate":return{ext:"dotm",mime:"application/vnd.ms-word.template.macroEnabled.12"};case"application/vnd.openxmlformats-officedocument.presentationml.template":return{ext:"potx",mime:"application/vnd.openxmlformats-officedocument.presentationml.template"};case"application/vnd.ms-powerpoint.template.macroEnabled":return{ext:"potm",mime:"application/vnd.ms-powerpoint.template.macroEnabled.12"};case"application/vnd.openxmlformats-officedocument.presentationml.presentation":return{ext:"pptx",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"};case"application/vnd.ms-powerpoint.presentation.macroEnabled":return{ext:"pptm",mime:"application/vnd.ms-powerpoint.presentation.macroEnabled.12"};case"application/vnd.ms-visio.drawing":return{ext:"vsdx",mime:"application/vnd.visio"};case"application/vnd.ms-package.3dmanufacturing-3dmodel+xml":return{ext:"3mf",mime:"model/3mf"};default:}}function gi(r,e,t){t={offset:0,...t};for(let[n,i]of e.entries())if(t.mask){if(i!==(t.mask[n]&r[n+t.offset]))return!1}else if(i!==r[n+t.offset])return!1;return!0}var ny=class{constructor(e){this.detectors=[...e?.customDetectors??[],{id:"core",detect:this.detectConfident},{id:"core.imprecise",detect:this.detectImprecise}],this.tokenizerOptions={abortSignal:e?.signal}}async fromTokenizer(e){let t=e.position;for(let n of this.detectors){let i=await n.detect(e);if(i)return i;if(t!==e.position)return}}async fromBuffer(e){if(!(e instanceof Uint8Array||e instanceof ArrayBuffer))throw new TypeError(`Expected the \`input\` argument to be of type \`Uint8Array\` or \`ArrayBuffer\`, got \`${typeof e}\``);let t=e instanceof Uint8Array?e:new Uint8Array(e);if(t?.length>1)return this.fromTokenizer(d_(t,this.tokenizerOptions))}async fromBlob(e){return this.fromStream(e.stream())}async fromStream(e){let t=await u_(e,this.tokenizerOptions);try{return await this.fromTokenizer(t)}finally{await t.close()}}async toDetectionStream(e,t){let{sampleSize:n=ty}=t,i,o,s=e.getReader({mode:"byob"});try{let{value:l,done:u}=await s.read(new Uint8Array(n));if(o=l,!u&&l)try{i=await this.fromBuffer(l.slice(0,n))}catch(d){if(!(d instanceof lt))throw d;i=void 0}o=l}finally{s.releaseLock()}let a=new TransformStream({async start(l){l.enqueue(o)},transform(l,u){u.enqueue(l)}}),c=e.pipeThrough(a);return c.fileType=i,c}check(e,t){return gi(this.buffer,e,t)}checkString(e,t){return this.check(R_(e),t)}detectConfident=async e=>{if(this.buffer=new Uint8Array(ty),e.fileInfo.size===void 0&&(e.fileInfo.size=Number.MAX_SAFE_INTEGER),this.tokenizer=e,await e.peekBuffer(this.buffer,{length:12,mayBeLess:!0}),this.check([66,77]))return{ext:"bmp",mime:"image/bmp"};if(this.check([11,119]))return{ext:"ac3",mime:"audio/vnd.dolby.dd-raw"};if(this.check([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(this.check([77,90]))return{ext:"exe",mime:"application/x-msdownload"};if(this.check([37,33]))return await e.peekBuffer(this.buffer,{length:24,mayBeLess:!0}),this.checkString("PS-Adobe-",{offset:2})&&this.checkString(" EPSF-",{offset:14})?{ext:"eps",mime:"application/eps"}:{ext:"ps",mime:"application/postscript"};if(this.check([31,160])||this.check([31,157]))return{ext:"Z",mime:"application/x-compress"};if(this.check([199,113]))return{ext:"cpio",mime:"application/x-cpio"};if(this.check([96,234]))return{ext:"arj",mime:"application/x-arj"};if(this.check([239,187,191]))return this.tokenizer.ignore(3),this.detectConfident(e);if(this.check([71,73,70]))return{ext:"gif",mime:"image/gif"};if(this.check([73,73,188]))return{ext:"jxr",mime:"image/vnd.ms-photo"};if(this.check([31,139,8]))return{ext:"gz",mime:"application/gzip"};if(this.check([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(this.checkString("ID3")){await e.ignore(6);let t=await e.readToken(N_);return e.position+t>e.fileInfo.size?{ext:"mp3",mime:"audio/mpeg"}:(await e.ignore(t),this.fromTokenizer(e))}if(this.checkString("MP+"))return{ext:"mpc",mime:"audio/x-musepack"};if((this.buffer[0]===67||this.buffer[0]===70)&&this.check([87,83],{offset:1}))return{ext:"swf",mime:"application/x-shockwave-flash"};if(this.check([255,216,255]))return this.check([247],{offset:3})?{ext:"jls",mime:"image/jls"}:{ext:"jpg",mime:"image/jpeg"};if(this.check([79,98,106,1]))return{ext:"avro",mime:"application/avro"};if(this.checkString("FLIF"))return{ext:"flif",mime:"image/flif"};if(this.checkString("8BPS"))return{ext:"psd",mime:"image/vnd.adobe.photoshop"};if(this.checkString("MPCK"))return{ext:"mpc",mime:"audio/x-musepack"};if(this.checkString("FORM"))return{ext:"aif",mime:"audio/aiff"};if(this.checkString("icns",{offset:0}))return{ext:"icns",mime:"image/icns"};if(this.check([80,75,3,4])){let t;return await new L2(e).unzip(n=>{switch(n.filename){case"META-INF/mozilla.rsa":return t={ext:"xpi",mime:"application/x-xpinstall"},{stop:!0};case"META-INF/MANIFEST.MF":return t={ext:"jar",mime:"application/java-archive"},{stop:!0};case"mimetype":return{async handler(i){let o=new TextDecoder("utf-8").decode(i).trim();t=ry(o)},stop:!0};case"[Content_Types].xml":return{async handler(i){let o=new TextDecoder("utf-8").decode(i),s=o.indexOf('.main+xml"');if(s===-1){let a="application/vnd.ms-package.3dmanufacturing-3dmodel+xml";o.includes(`ContentType="${a}"`)&&(t=ry(a))}else{o=o.slice(0,Math.max(0,s));let a=o.lastIndexOf('"'),c=o.slice(Math.max(0,a+1));t=ry(c)}},stop:!0};default:return/classes\d*\.dex/.test(n.filename)?(t={ext:"apk",mime:"application/vnd.android.package-archive"},{stop:!0}):{}}}),t??{ext:"zip",mime:"application/zip"}}if(this.checkString("OggS")){await e.ignore(28);let t=new Uint8Array(8);return await e.readBuffer(t),gi(t,[79,112,117,115,72,101,97,100])?{ext:"opus",mime:"audio/ogg; codecs=opus"}:gi(t,[128,116,104,101,111,114,97])?{ext:"ogv",mime:"video/ogg"}:gi(t,[1,118,105,100,101,111,0])?{ext:"ogm",mime:"video/ogg"}:gi(t,[127,70,76,65,67])?{ext:"oga",mime:"audio/ogg"}:gi(t,[83,112,101,101,120,32,32])?{ext:"spx",mime:"audio/ogg"}:gi(t,[1,118,111,114,98,105,115])?{ext:"ogg",mime:"audio/ogg"}:{ext:"ogx",mime:"application/ogg"}}if(this.check([80,75])&&(this.buffer[2]===3||this.buffer[2]===5||this.buffer[2]===7)&&(this.buffer[3]===4||this.buffer[3]===6||this.buffer[3]===8))return{ext:"zip",mime:"application/zip"};if(this.checkString("MThd"))return{ext:"mid",mime:"audio/midi"};if(this.checkString("wOFF")&&(this.check([0,1,0,0],{offset:4})||this.checkString("OTTO",{offset:4})))return{ext:"woff",mime:"font/woff"};if(this.checkString("wOF2")&&(this.check([0,1,0,0],{offset:4})||this.checkString("OTTO",{offset:4})))return{ext:"woff2",mime:"font/woff2"};if(this.check([212,195,178,161])||this.check([161,178,195,212]))return{ext:"pcap",mime:"application/vnd.tcpdump.pcap"};if(this.checkString("DSD "))return{ext:"dsf",mime:"audio/x-dsf"};if(this.checkString("LZIP"))return{ext:"lz",mime:"application/x-lzip"};if(this.checkString("fLaC"))return{ext:"flac",mime:"audio/x-flac"};if(this.check([66,80,71,251]))return{ext:"bpg",mime:"image/bpg"};if(this.checkString("wvpk"))return{ext:"wv",mime:"audio/wavpack"};if(this.checkString("%PDF")){try{if(await e.ignore(1350)===1350){let i=new Uint8Array(Math.min(10485760,e.fileInfo.size-1350));if(await e.readBuffer(i,{mayBeLess:!0}),P_(i,new TextEncoder().encode("AIPrivateData")))return{ext:"ai",mime:"application/postscript"}}}catch(t){if(!(t instanceof lt))throw t}return{ext:"pdf",mime:"application/pdf"}}if(this.check([0,97,115,109]))return{ext:"wasm",mime:"application/wasm"};if(this.check([73,73])){let t=await this.readTiffHeader(!1);if(t)return t}if(this.check([77,77])){let t=await this.readTiffHeader(!0);if(t)return t}if(this.checkString("MAC "))return{ext:"ape",mime:"audio/ape"};if(this.check([26,69,223,163])){async function t(){let a=await e.peekNumber(s_),c=128,l=0;for(;(a&c)===0&&c!==0;)++l,c>>=1;let u=new Uint8Array(l+1);return await e.readBuffer(u),u}async function n(){let a=await t(),c=await t();c[0]^=128>>c.length-1;let l=Math.min(6,c.length),u=new DataView(a.buffer),d=new DataView(c.buffer,c.length-l,l);return{id:ey(u),len:ey(d)}}async function i(a){for(;a>0;){let c=await n();if(c.id===17026)return(await e.readToken(new Ur(c.len))).replaceAll(/\00.*$/g,"");await e.ignore(c.len),--a}}let o=await n();switch(await i(o.len)){case"webm":return{ext:"webm",mime:"video/webm"};case"matroska":return{ext:"mkv",mime:"video/x-matroska"};default:return}}if(this.checkString("SQLi"))return{ext:"sqlite",mime:"application/x-sqlite3"};if(this.check([78,69,83,26]))return{ext:"nes",mime:"application/x-nintendo-nes-rom"};if(this.checkString("Cr24"))return{ext:"crx",mime:"application/x-google-chrome-extension"};if(this.checkString("MSCF")||this.checkString("ISc("))return{ext:"cab",mime:"application/vnd.ms-cab-compressed"};if(this.check([237,171,238,219]))return{ext:"rpm",mime:"application/x-rpm"};if(this.check([197,208,211,198]))return{ext:"eps",mime:"application/eps"};if(this.check([40,181,47,253]))return{ext:"zst",mime:"application/zstd"};if(this.check([127,69,76,70]))return{ext:"elf",mime:"application/x-elf"};if(this.check([33,66,68,78]))return{ext:"pst",mime:"application/vnd.ms-outlook"};if(this.checkString("PAR1"))return{ext:"parquet",mime:"application/x-parquet"};if(this.checkString("ttcf"))return{ext:"ttc",mime:"font/collection"};if(this.check([207,250,237,254]))return{ext:"macho",mime:"application/x-mach-binary"};if(this.check([4,34,77,24]))return{ext:"lz4",mime:"application/x-lz4"};if(this.check([79,84,84,79,0]))return{ext:"otf",mime:"font/otf"};if(this.checkString("#!AMR"))return{ext:"amr",mime:"audio/amr"};if(this.checkString("{\\rtf"))return{ext:"rtf",mime:"application/rtf"};if(this.check([70,76,86,1]))return{ext:"flv",mime:"video/x-flv"};if(this.checkString("IMPM"))return{ext:"it",mime:"audio/x-it"};if(this.checkString("-lh0-",{offset:2})||this.checkString("-lh1-",{offset:2})||this.checkString("-lh2-",{offset:2})||this.checkString("-lh3-",{offset:2})||this.checkString("-lh4-",{offset:2})||this.checkString("-lh5-",{offset:2})||this.checkString("-lh6-",{offset:2})||this.checkString("-lh7-",{offset:2})||this.checkString("-lzs-",{offset:2})||this.checkString("-lz4-",{offset:2})||this.checkString("-lz5-",{offset:2})||this.checkString("-lhd-",{offset:2}))return{ext:"lzh",mime:"application/x-lzh-compressed"};if(this.check([0,0,1,186])){if(this.check([33],{offset:4,mask:[241]}))return{ext:"mpg",mime:"video/MP1S"};if(this.check([68],{offset:4,mask:[196]}))return{ext:"mpg",mime:"video/MP2P"}}if(this.checkString("ITSF"))return{ext:"chm",mime:"application/vnd.ms-htmlhelp"};if(this.check([202,254,186,190]))return{ext:"class",mime:"application/java-vm"};if(this.checkString(".RMF"))return{ext:"rm",mime:"application/vnd.rn-realmedia"};if(this.checkString("DRACO"))return{ext:"drc",mime:"application/vnd.google.draco"};if(this.check([253,55,122,88,90,0]))return{ext:"xz",mime:"application/x-xz"};if(this.checkString("<?xml "))return{ext:"xml",mime:"application/xml"};if(this.check([55,122,188,175,39,28]))return{ext:"7z",mime:"application/x-7z-compressed"};if(this.check([82,97,114,33,26,7])&&(this.buffer[6]===0||this.buffer[6]===1))return{ext:"rar",mime:"application/x-rar-compressed"};if(this.checkString("solid "))return{ext:"stl",mime:"model/stl"};if(this.checkString("AC")){let t=new Ur(4,"latin1").get(this.buffer,2);if(t.match("^d*")&&t>=1e3&&t<=1050)return{ext:"dwg",mime:"image/vnd.dwg"}}if(this.checkString("070707"))return{ext:"cpio",mime:"application/x-cpio"};if(this.checkString("BLENDER"))return{ext:"blend",mime:"application/x-blender"};if(this.checkString("!<arch>"))return await e.ignore(8),await e.readToken(new Ur(13,"ascii"))==="debian-binary"?{ext:"deb",mime:"application/x-deb"}:{ext:"ar",mime:"application/x-unix-archive"};if(this.checkString("WEBVTT")&&[`
|
|
76
|
+
`,"\r"," "," ","\0"].some(t=>this.checkString(t,{offset:6})))return{ext:"vtt",mime:"text/vtt"};if(this.check([137,80,78,71,13,10,26,10])){await e.ignore(8);async function t(){return{length:await e.readToken(c_),type:await e.readToken(new Ur(4,"latin1"))}}do{let n=await t();if(n.length<0)return;switch(n.type){case"IDAT":return{ext:"png",mime:"image/png"};case"acTL":return{ext:"apng",mime:"image/apng"};default:await e.ignore(n.length+4)}}while(e.position+8<e.fileInfo.size);return{ext:"png",mime:"image/png"}}if(this.check([65,82,82,79,87,49,0,0]))return{ext:"arrow",mime:"application/x-apache-arrow"};if(this.check([103,108,84,70,2,0,0,0]))return{ext:"glb",mime:"model/gltf-binary"};if(this.check([102,114,101,101],{offset:4})||this.check([109,100,97,116],{offset:4})||this.check([109,111,111,118],{offset:4})||this.check([119,105,100,101],{offset:4}))return{ext:"mov",mime:"video/quicktime"};if(this.check([73,73,82,79,8,0,0,0,24]))return{ext:"orf",mime:"image/x-olympus-orf"};if(this.checkString("gimp xcf "))return{ext:"xcf",mime:"image/x-xcf"};if(this.checkString("ftyp",{offset:4})&&(this.buffer[8]&96)!==0){let t=new Ur(4,"latin1").get(this.buffer,8).replace("\0"," ").trim();switch(t){case"avif":case"avis":return{ext:"avif",mime:"image/avif"};case"mif1":return{ext:"heic",mime:"image/heif"};case"msf1":return{ext:"heic",mime:"image/heif-sequence"};case"heic":case"heix":return{ext:"heic",mime:"image/heic"};case"hevc":case"hevx":return{ext:"heic",mime:"image/heic-sequence"};case"qt":return{ext:"mov",mime:"video/quicktime"};case"M4V":case"M4VH":case"M4VP":return{ext:"m4v",mime:"video/x-m4v"};case"M4P":return{ext:"m4p",mime:"video/mp4"};case"M4B":return{ext:"m4b",mime:"audio/mp4"};case"M4A":return{ext:"m4a",mime:"audio/x-m4a"};case"F4V":return{ext:"f4v",mime:"video/mp4"};case"F4P":return{ext:"f4p",mime:"video/mp4"};case"F4A":return{ext:"f4a",mime:"audio/mp4"};case"F4B":return{ext:"f4b",mime:"audio/mp4"};case"crx":return{ext:"cr3",mime:"image/x-canon-cr3"};default:return t.startsWith("3g")?t.startsWith("3g2")?{ext:"3g2",mime:"video/3gpp2"}:{ext:"3gp",mime:"video/3gpp"}:{ext:"mp4",mime:"video/mp4"}}}if(this.check([82,73,70,70])){if(this.checkString("WEBP",{offset:8}))return{ext:"webp",mime:"image/webp"};if(this.check([65,86,73],{offset:8}))return{ext:"avi",mime:"video/vnd.avi"};if(this.check([87,65,86,69],{offset:8}))return{ext:"wav",mime:"audio/wav"};if(this.check([81,76,67,77],{offset:8}))return{ext:"qcp",mime:"audio/qcelp"}}if(this.check([73,73,85,0,24,0,0,0,136,231,116,216]))return{ext:"rw2",mime:"image/x-panasonic-rw2"};if(this.check([48,38,178,117,142,102,207,17,166,217])){async function t(){let n=new Uint8Array(16);return await e.readBuffer(n),{id:n,size:Number(await e.readToken(l_))}}for(await e.ignore(30);e.position+24<e.fileInfo.size;){let n=await t(),i=n.size-24;if(gi(n.id,[145,7,220,183,183,169,207,17,142,230,0,192,12,32,83,101])){let o=new Uint8Array(16);if(i-=await e.readBuffer(o),gi(o,[64,158,105,248,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:"asf",mime:"audio/x-ms-asf"};if(gi(o,[192,239,25,188,77,91,207,17,168,253,0,128,95,92,68,43]))return{ext:"asf",mime:"video/x-ms-asf"};break}await e.ignore(i)}return{ext:"asf",mime:"application/vnd.ms-asf"}}if(this.check([171,75,84,88,32,49,49,187,13,10,26,10]))return{ext:"ktx",mime:"image/ktx"};if((this.check([126,16,4])||this.check([126,24,4]))&&this.check([48,77,73,69],{offset:4}))return{ext:"mie",mime:"application/x-mie"};if(this.check([39,10,0,0,0,0,0,0,0,0,0,0],{offset:2}))return{ext:"shp",mime:"application/x-esri-shape"};if(this.check([255,79,255,81]))return{ext:"j2c",mime:"image/j2c"};if(this.check([0,0,0,12,106,80,32,32,13,10,135,10]))switch(await e.ignore(20),await e.readToken(new Ur(4,"ascii"))){case"jp2 ":return{ext:"jp2",mime:"image/jp2"};case"jpx ":return{ext:"jpx",mime:"image/jpx"};case"jpm ":return{ext:"jpm",mime:"image/jpm"};case"mjp2":return{ext:"mj2",mime:"image/mj2"};default:return}if(this.check([255,10])||this.check([0,0,0,12,74,88,76,32,13,10,135,10]))return{ext:"jxl",mime:"image/jxl"};if(this.check([254,255]))return this.check([0,60,0,63,0,120,0,109,0,108],{offset:2})?{ext:"xml",mime:"application/xml"}:void 0;if(this.check([208,207,17,224,161,177,26,225]))return{ext:"cfb",mime:"application/x-cfb"};if(await e.peekBuffer(this.buffer,{length:Math.min(256,e.fileInfo.size),mayBeLess:!0}),this.check([97,99,115,112],{offset:36}))return{ext:"icc",mime:"application/vnd.iccprofile"};if(this.checkString("**ACE",{offset:7})&&this.checkString("**",{offset:12}))return{ext:"ace",mime:"application/x-ace-compressed"};if(this.checkString("BEGIN:")){if(this.checkString("VCARD",{offset:6}))return{ext:"vcf",mime:"text/vcard"};if(this.checkString("VCALENDAR",{offset:6}))return{ext:"ics",mime:"text/calendar"}}if(this.checkString("FUJIFILMCCD-RAW"))return{ext:"raf",mime:"image/x-fujifilm-raf"};if(this.checkString("Extended Module:"))return{ext:"xm",mime:"audio/x-xm"};if(this.checkString("Creative Voice File"))return{ext:"voc",mime:"audio/x-voc"};if(this.check([4,0,0,0])&&this.buffer.length>=16){let t=new DataView(this.buffer.buffer).getUint32(12,!0);if(t>12&&this.buffer.length>=t+16)try{let n=new TextDecoder().decode(this.buffer.slice(16,t+16));if(JSON.parse(n).files)return{ext:"asar",mime:"application/x-asar"}}catch{}}if(this.check([6,14,43,52,2,5,1,1,13,1,2,1,1,2]))return{ext:"mxf",mime:"application/mxf"};if(this.checkString("SCRM",{offset:44}))return{ext:"s3m",mime:"audio/x-s3m"};if(this.check([71])&&this.check([71],{offset:188}))return{ext:"mts",mime:"video/mp2t"};if(this.check([71],{offset:4})&&this.check([71],{offset:196}))return{ext:"mts",mime:"video/mp2t"};if(this.check([66,79,79,75,77,79,66,73],{offset:60}))return{ext:"mobi",mime:"application/x-mobipocket-ebook"};if(this.check([68,73,67,77],{offset:128}))return{ext:"dcm",mime:"application/dicom"};if(this.check([76,0,0,0,1,20,2,0,0,0,0,0,192,0,0,0,0,0,0,70]))return{ext:"lnk",mime:"application/x.ms.shortcut"};if(this.check([98,111,111,107,0,0,0,0,109,97,114,107,0,0,0,0]))return{ext:"alias",mime:"application/x.apple.alias"};if(this.checkString("Kaydara FBX Binary \0"))return{ext:"fbx",mime:"application/x.autodesk.fbx"};if(this.check([76,80],{offset:34})&&(this.check([0,0,1],{offset:8})||this.check([1,0,2],{offset:8})||this.check([2,0,2],{offset:8})))return{ext:"eot",mime:"application/vnd.ms-fontobject"};if(this.check([6,6,237,245,216,29,70,229,189,49,239,231,254,116,183,29]))return{ext:"indd",mime:"application/x-indesign"};if(await e.peekBuffer(this.buffer,{length:Math.min(512,e.fileInfo.size),mayBeLess:!0}),D_(this.buffer))return{ext:"tar",mime:"application/x-tar"};if(this.check([255,254]))return this.check([60,0,63,0,120,0,109,0,108,0],{offset:2})?{ext:"xml",mime:"application/xml"}:this.check([255,14,83,0,107,0,101,0,116,0,99,0,104,0,85,0,112,0,32,0,77,0,111,0,100,0,101,0,108,0],{offset:2})?{ext:"skp",mime:"application/vnd.sketchup.skp"}:void 0;if(this.checkString("-----BEGIN PGP MESSAGE-----"))return{ext:"pgp",mime:"application/pgp-encrypted"}};detectImprecise=async e=>{if(this.buffer=new Uint8Array(ty),await e.peekBuffer(this.buffer,{length:Math.min(8,e.fileInfo.size),mayBeLess:!0}),this.check([0,0,1,186])||this.check([0,0,1,179]))return{ext:"mpg",mime:"video/mpeg"};if(this.check([0,1,0,0,0]))return{ext:"ttf",mime:"font/ttf"};if(this.check([0,0,1,0]))return{ext:"ico",mime:"image/x-icon"};if(this.check([0,0,2,0]))return{ext:"cur",mime:"image/x-icon"};if(this.buffer.length>=2&&this.check([255,224],{offset:0,mask:[255,224]})){if(this.check([16],{offset:1,mask:[22]}))return this.check([8],{offset:1,mask:[8]})?{ext:"aac",mime:"audio/aac"}:{ext:"aac",mime:"audio/aac"};if(this.check([2],{offset:1,mask:[6]}))return{ext:"mp3",mime:"audio/mpeg"};if(this.check([4],{offset:1,mask:[6]}))return{ext:"mp2",mime:"audio/mpeg"};if(this.check([6],{offset:1,mask:[6]}))return{ext:"mp1",mime:"audio/mpeg"}}};async readTiffTag(e){let t=await this.tokenizer.readToken(e?Jc:it);switch(this.tokenizer.ignore(10),t){case 50341:return{ext:"arw",mime:"image/x-sony-arw"};case 50706:return{ext:"dng",mime:"image/x-adobe-dng"};default:}}async readTiffIFD(e){let t=await this.tokenizer.readToken(e?Jc:it);for(let n=0;n<t;++n){let i=await this.readTiffTag(e);if(i)return i}}async readTiffHeader(e){let t=(e?Jc:it).get(this.buffer,2),n=(e?a_:Et).get(this.buffer,4);if(t===42){if(n>=6){if(this.checkString("CR",{offset:8}))return{ext:"cr2",mime:"image/x-canon-cr2"};if(n>=8){let o=(e?Jc:it).get(this.buffer,8),s=(e?Jc:it).get(this.buffer,10);if(o===28&&s===254||o===31&&s===11)return{ext:"nef",mime:"image/x-nikon-nef"}}}return await this.tokenizer.ignore(n),await this.readTiffIFD(e)??{ext:"tif",mime:"image/tiff"}}if(t===43)return{ext:"tif",mime:"image/tiff"}}},zIe=new Set(L_),$Ie=new Set(O_);var ns=we("helia:verified-fetch:content-type-parser"),O2="application/octet-stream";function o$(r){return ns("checking for svg"),/^(<\?xml[^>]+>)?[^<^\w]+<svg/ig.test(r)}async function s$(r){ns("checking for json");try{return JSON.parse(r),!0}catch(e){return ns("failed to parse as json",e),!1}}function a$(r){ns("checking for text");let e=new TextDecoder("utf-8",{fatal:!0});try{return e.decode(r)}catch{return null}}async function c$(r){return ns("checking for html"),/^\s*<(?:!doctype\s+html|html|head|body)\b/i.test(r)}async function M_(r,e){ns("contentTypeParser called for fileName: %s, byte size=%s",e,r.length);let t=(await B_(r))?.mime;if(t!=null)return ns("detectedType: %s",t),t;if(ns("no detectedType"),e==null){let n=a$(r);return n!=null?o$(n)?"image/svg+xml":await s$(n)?"application/json":await c$(n)?"text/html; charset=utf-8":"text/plain; charset=utf-8":O2}switch(e.split(".").pop()){case"css":return"text/css";case"html":return"text/html; charset=utf-8";case"js":return"application/javascript";case"json":return"application/json";case"txt":return"text/plain";case"woff2":return"font/woff2";case"svg":return"image/svg+xml";case"csv":return"text/csv";case"doc":return"application/msword";case"xls":return"application/vnd.ms-excel";case"ppt":return"application/vnd.ms-powerpoint";case"msi":return"application/x-msdownload";default:return O2}}function F_(r){return r?.then!=null}async function B2({bytes:r,path:e,response:t,contentTypeParser:n,log:i,defaultContentType:o="application/octet-stream"}){let s;if(n!=null)try{let a=e.split("/").pop()?.trim();a=a===""?void 0:a;let c=n(r,a);if(F_(c)){let l=await c;l!=null&&(s=l)}else c!=null&&(s=c);i.trace("contentTypeParser returned %s",s)}catch(a){i.error("error parsing content type",a)}s===O2&&(s=o),i.trace('setting content type to "%s"',s??o),t.headers.set("content-type",s??o)}var M2=class extends gt{codes=[Le];canHandle({cid:e,accept:t,pathDetails:n}){return this.log("checking if we can handle %c with accept %s",e,t),n==null?!1:e.code===Le}getRedirectUrl(e){let{resource:t,path:n}=e;if(n===""?!t.toString().endsWith("/"):!n.endsWith("/"))try{let o=new URL(t.toString());return o.pathname.endsWith("/")?null:(o.pathname=`${o.pathname}/`,o.toString())}catch{return`${t.toString()}/`}return null}async handle(e){let{cid:t,options:n,withServerTiming:i=!1,pathDetails:o}=e,{handleServerTiming:s,contentTypeParser:a,helia:c,getBlockstore:l}=this.pluginOptions,u=this.log,d=e.resource,h=e.path,f=!1,p=new Zc(this.pluginOptions.logger,n?.headers);if(o==null)throw new TypeError("Path details are required");let m=o.ipfsRoots,g=o.terminalElement,y=g.cid;if(g?.type==="directory"){let b=g.cid,A=this.getRedirectUrl(e);if(A!=null){if(u.trace("directory url normalization spec requires redirect..."),n?.redirect==="error")throw u('could not redirect to %s as redirect option was set to "error"',A),new TypeError("Failed to fetch");if(n?.redirect==="manual")return u("returning 301 permanent redirect to %s",A),id(d,A);u("following redirect to %s",A),d=A,f=!0}let k="index.html";try{u.trace("found directory at %c/%s, looking for index.html",t,h);let E=await s("exporter-dir","",async()=>_t(`/ipfs/${b}/${k}`,c.blockstore,{signal:n?.signal,onProgress:n?.onProgress}),i);u.trace("found root file at %c/%s with cid %c",b,k,E.cid),h=k,y=E.cid}catch(E){this.log.error("error loading path %c/%s",b,k,E),n?.signal?.throwIfAborted(),e.isDirectory=!0,e.directoryEntries=[],this.log.trace("attempting to get directory entries because index.html was not found");let S=e_({...c,blockstore:l(e.cid,e.resource,n?.session??!0,n)});try{for await(let T of S.ls(b,{signal:n?.signal,onProgress:n?.onProgress}))e.directoryEntries.push(T);return null}catch(T){return u.error("error listing directory %c",b,T),Ym("Unable to get directory contents")}}finally{n?.onProgress?.(new M("verified-fetch:request:end",{cid:b,path:k}))}}p.isRangeRequest&&p.isValidRangeRequest&&g.type==="file"&&(p.setFileSize(g.unixfs.fileSize()),u.trace("fileSize for rangeRequest %d",p.getFileSize()));let w=p.offset,x=p.length;u.trace("calling exporter for %c/%s with offset=%o & length=%o",y,h,w,x);try{let A=(await s("exporter-file","",async()=>_t(y,c.blockstore,{signal:n?.signal,onProgress:n?.onProgress}),i)).content({signal:n?.signal,onProgress:n?.onProgress,offset:w,length:x});u("got async iterator for %c/%s",t,h);let{stream:k,firstChunk:E}=await s("stream-and-chunk","",async()=>n_(A,h??"",this.pluginOptions.logger,{onProgress:n?.onProgress,signal:n?.signal}),i);p.setBody(k);let S=jm(d,p.getBody(),{byteRangeContext:p,log:u},{redirected:f});return await s("set-content-type","",async()=>B2({bytes:E,path:h,response:S,contentTypeParser:a,log:u}),i),e2(S,m),S}catch(b){return n?.signal?.throwIfAborted(),u.error("error streaming %c/%s",t,h,b),p.isRangeRequest&&b.code==="ERR_INVALID_PARAMS"?Wm(d):zc(d.toString(),"Unable to stream content")}}};var F2=class extends gt{canHandle(e){this.log("checking if we can handle %c with accept %s",e.cid,e.accept);let{pathDetails:t,cid:n}=e;return t!=null?!1:n.code===Le||n.code===Pr}async handle(e){let{cid:t,resource:n,options:i,withServerTiming:o=!1}=e,{getBlockstore:s,handleServerTiming:a}=this.pluginOptions,c=s(t,n,i?.session??!0,i),l=await a("path-walking","",async()=>gI({...e,blockstore:c,log:this.log}),o);return e.modified++,l instanceof Response?(this.log.trace("path walking failed"),l.status===404?l:null):(e.pathDetails=l,null)}};function U2(r){return r.charAt(0)==="1"||r.charAt(0)==="Q"?Ne(r):Kt(B.parse(r))}var bd=class extends Error{name="PluginError";code;fatal;details;response;constructor(e,t,n){super(t),this.code=e,this.fatal=n?.fatal??!1,this.details=n?.details,this.response=n?.response}},to=class extends bd{name="PluginFatalError";constructor(e,t,n){super(e,t,{...n,fatal:!0}),this.name="PluginFatalError"}};var H2=class extends gt{codes=[];canHandle({cid:e,accept:t,query:n}){return this.log("checking if we can handle %c with accept %s",e,t),t==="application/vnd.ipfs.ipns-record"||n.format==="ipns-record"}async handle(e){let{resource:t,path:n,options:i}=e,{helia:o}=this.pluginOptions;if(e.reqFormat="ipns-record",n!==""||!(t.startsWith("ipns://")||t.includes(".ipns.")||t.includes("/ipns/")))throw this.log.error('invalid request for IPNS name "%s" and path "%s"',t,n),new to("ERR_INVALID_IPNS_NAME","Invalid IPNS name",{response:nd(t,"Invalid IPNS name")});let s;try{let h;t.startsWith("ipns://")?h=t.replace("ipns://",""):t.includes("/ipns/")?h=t.split("/ipns/")[1].split("/")[0].split("?")[0]:h=t.split(".ipns.")[0].split("://")[1],this.log.trace('trying to parse peer id from "%s"',h),s=U2(h)}catch(h){throw this.log.error("could not parse peer id from IPNS url %s",t,h),new to("ERR_NO_PEER_ID_FOUND","could not parse peer id from url",{response:nd(t,h)})}let a=ge([C("/ipns/"),s.toMultihash().bytes]),c=new Fe("/dht/record/"+U(a,"base32"),!1),l=await o.datastore.get(c,i),u=tt.deserialize(l),d=Kn(t,u.value);return d.headers.set("content-type","application/vnd.ipfs.ipns-record"),d}};var z2=class extends gt{codes=[ai,ri];canHandle({cid:e,accept:t}){return this.log("checking if we can handle %c with accept %s",e,t),t==="application/vnd.ipld.dag-json"&&e.code!==Pr?!0:ai===e.code||ri===e.code}async handle(e){let{path:t,resource:n,cid:i,accept:o,options:s}=e,{getBlockstore:a}=this.pluginOptions,c=s?.session??!0;this.log.trace("fetching %c/%s",i,t);let l=e.pathDetails?.terminalElement.cid??e.cid,d=await a(l,n,c,s).get(l,s),h;if(o==="application/vnd.ipld.dag-cbor"||o==="application/cbor")try{let p=ec(d);h=Za(p)}catch(p){return this.log.error("could not transform %c to application/vnd.ipld.dag-cbor",p),Ji(n)}else h=d;let f=Kn(n,h);return f.headers.set("content-type",o??"application/json"),f}};var l$=["application/vnd.ipld.dag-json","application/vnd.ipld.raw","application/octet-stream"];function u$({headers:r,accept:e}){let n=(e??new Headers(r).get("accept")??"").split(",").map(i=>i.split(";")[0]).map(i=>i.trim());for(let i of n){if(i==="*/*")return;if(l$.includes(i??""))return i}}var $2=class extends gt{codes=[We,At.code];canHandle({cid:e,accept:t,query:n}){return this.log("checking if we can handle %c with accept %s",e,t),t==="application/vnd.ipld.raw"||n.format==="raw"}async handle(e){let{path:t,resource:n,cid:i,accept:o,query:s,options:a}=e,{getBlockstore:c,contentTypeParser:l}=this.pluginOptions,u=a?.session??!0,d=this.log;if(o==="application/vnd.ipld.raw"||s.format==="raw"?(e.reqFormat="raw",e.query.download=!0,e.query.filename=e.query.filename??`${i.toString()}.bin`,d.trace("Set content disposition...")):d.trace("Did NOT set content disposition..."),t!==""&&i.code===We)throw d.trace("404-ing raw codec request for %c/%s",i,t),new to("ERR_RAW_PATHS_NOT_SUPPORTED","Raw codec does not support paths",{response:Xm(n,"Raw codec does not support paths")});let h=new Zc(this.pluginOptions.logger,a?.headers),f=e.pathDetails?.terminalElement.cid??e.cid,m=await c(f,n,u,a).get(f,a);h.setBody(m);let g=jm(n,h.getBody(),{byteRangeContext:h,log:d},{redirected:!1});return await B2({bytes:m,path:t,response:g,defaultContentType:u$({headers:a?.headers,accept:o}),contentTypeParser:l,log:d}),g}};var d$=({weak:r,reqFormat:e})=>e==="tar"||e==="car"||e==="ipns-record"||r===!0?"W/":"",f$=({reqFormat:r})=>r==null?"":r==="tar"?".x-tar":`.${r}`;function V2({cid:r,reqFormat:e,weak:t,rangeStart:n,rangeEnd:i}){let o=d$({weak:t,reqFormat:e}),s=f$({reqFormat:e});return(n!=null||i!=null)&&(s+=`.${n??"0"}-${i??"N"}`),`${o}"${r.toString()}${s}"`}var q_e=C("ustar\0","binary"),K_e=C("ustar ","binary"),G_e=C(" \0","binary");var V_=ut(H_(),1);function p$(r){return r[Symbol.asyncIterator]!=null}function m$(r){if(p$(r))return(async()=>{let n=new Uint8Array(0);for await(let i of r)n=ge([n,i],n.length+i.length);return n})();let e=[],t=0;for(let n of r)e.push(n),t+=n.byteLength;return ge(e,t)}var z_=m$;var g$="0000000000000000000",y$="7777777777777777777",w$=48,x$=C("ustar\0","binary"),b$=C("00","binary"),v$=parseInt("7777",8),E$=257,S$=263,A$=function(r){switch(r){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72;default:return 0}},T$=function(r){let e=256;for(let t=0;t<148;t++)e+=r[t];for(let t=156;t<512;t++)e+=r[t];return e},is=function(r,e){let t=r.toString(8);return t.length>e?C(y$.slice(0,e)+" "):C(g$.slice(0,e-t.length)+t+" ")},iy=function(r){let e=C(r).byteLength,t=Math.floor(Math.log(e)/Math.log(10))+1;return e+t>=Math.pow(10,t)&&t++,`${e+t}${r}`};function $_(r){let e="";r.name!=null&&(e+=iy(" path="+r.name+`
|
|
77
77
|
`)),r.linkname!=null&&(e+=iy(" linkpath="+r.linkname+`
|
|
78
78
|
`));let t=r.pax;if(t!=null)for(let n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e+=iy(" "+n+"="+t[n]+`
|
|
79
|
-
`));return C(e)}function q2(r){let e=new Uint8Array(512),t=r.name,n="";if(r.typeflag===5&&t[t.length-1]!=="/"&&(t+="/"),C(t).byteLength!==t.length)return null;for(;C(t).byteLength>100;){let i=t.indexOf("/");if(i===-1)return null;n+=n!==""?"/"+t.slice(0,i):t.slice(0,i),t=t.slice(i+1)}return C(t).byteLength>100||C(n).byteLength>155||r.linkname!=null&&C(r.linkname).byteLength>100?null:(e.set(C(t),0),e.set(is(r.mode&v$,6),100),e.set(is(r.uid,6),108),e.set(is(r.gid,6),116),e.set(is(r.size,11),124),e.set(is(r.mtime.getTime()/1e3|0,11),136),e[156]=w$+A$(r.type),r.linkname!=null&&e.set(C(r.linkname),157),e.set(x$,E$),e.set(b$,S$),r.uname!=null&&e.set(C(r.uname),265),r.gname!=null&&e.set(C(r.gname),297),e.set(is(r.devmajor??0,6),329),e.set(is(r.devminor??0,6),337),n!=null&&e.set(C(n),345),e.set(is(T$(e),6),148),e)}var{S_IFMT:_$,S_IFBLK:k$,S_IFCHR:C$,S_IFDIR:P$,S_IFIFO:R$,S_IFLNK:D$}=V_.default,N$=parseInt("755",8),L$=parseInt("644",8),q_=new Uint8Array(1024);function O$(r=0){switch(r&_$){case k$:return"block-device";case C$:return"character-device";case P$:return"directory";case R$:return"fifo";case D$:return"symlink";default:return"file"}}function sy(r){return r&=511,r!==0?q_.subarray(0,512-r):new Uint8Array(0)}function oy(r){if(r.pax==null){let e=q2(r);if(e!=null)return e}return B$(r)}function B$(r){let e=$_(r),t={name:"PaxHeader",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:"pax-header",linkname:r.linkname,uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};return new ee(q2(t)??new Uint8Array(0),e,sy(e.length),q2({...t,size:r.size,type:r.type})??new Uint8Array(0)).subarray()}function K2(){return async function*(r){for await(let{header:e,body:t}of r){let n={...e,size:e.type==="symlink"?0:e.size??0,type:e.type??O$(e.mode),mode:e.mode??(e.type==="directory"?N$:L$),uid:e.uid??0,gid:e.gid??0,mtime:e.mtime??new Date};if(typeof t=="string"&&(t=C(t)),t instanceof Uint8Array||nn(t)){n.size=t.length,yield oy(n),yield nn(t)?t.subarray():t,yield sy(n.size);continue}if(n.type==="symlink"&&n.linkname==null){if(t==null)throw new Error("type was symlink but no linkname or body specified");n.linkname=U(await z_(t)),yield oy(n);continue}if(yield oy(n),n.type!=="file"&&n.type!=="contiguous-file")continue;let i=0;for await(let o of t??[])i+=o.length,yield nn(o)?o.subarray():o;if(i!==n.size)throw new Error(`size mismatch, wrote ${i} of ${n.size} bytes`);yield sy(n.size)}yield q_}}var M$=["file","raw","directory"];function F$(r){let e,t;return(r.type==="file"||r.type==="directory")&&(e=r.unixfs.mode,t=r.unixfs.mtime!=null?new Date(Number(r.unixfs.mtime.secs*1000n)):void 0),{name:r.path,mode:e,mtime:t,size:Number(r.size),type:r.type==="directory"?"directory":"file"}}function K_(r){if(!M$.includes(r.type))throw new Qr(`${r.type} is not a UnixFS node`);let e={header:F$(r)};return(r.type==="file"||r.type==="raw")&&(e.body=r.content()),e}async function*G_(r,e,t){let n=await _t(r,e,t);if(n.type==="file"||n.type==="raw"){yield*Re([K_(n)],K2());return}if(n.type==="directory"){yield*Re(Wc(r,e,t),i=>Je(i,o=>K_(o)),K2());return}throw new Qr("Not a UnixFS node")}var G2=class extends gt{codes=[];canHandle({cid:e,accept:t,query:n}){return this.log("checking if we can handle %c with accept %s",e,t),t==="application/x-tar"||n.format==="tar"}async handle(e){let{cid:t,path:n,resource:i,options:o,pathDetails:s}=e,{getBlockstore:a}=this.pluginOptions,c=s?.terminalElement.cid??t;if(c.code!==Le&&c.code!==We)return Ji("only UnixFS data can be returned in a TAR file");e.reqFormat="tar",e.query.download=!0,e.query.filename=e.query.filename??`${c.toString()}.tar`;let l=a(c,i,o?.session,o),u=rd(G_(`/ipfs/${t}/${n}`,l,o)),d=Kn(i,u);return d.headers.set("content-type","application/x-tar"),d.headers.set("etag",V2({cid:c,reqFormat:e.reqFormat,weak:!0})),d}};function W_(r){let e=U$(r);return e===r?`filename="${r}"`:`filename="${e}"; filename*=UTF-8''${encodeURIComponent(r)}`}function U$(r){return r.replace(/[^\x00-\x7F]/g,"_")}var H$={[Pr]:["application/json","application/vnd.ipld.dag-cbor","application/cbor","application/vnd.ipld.dag-json","application/octet-stream","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.car"],[ai]:["application/json","application/vnd.ipld.dag-cbor","application/cbor","application/vnd.ipld.dag-json","application/octet-stream","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.car"],[ri]:["application/json","application/vnd.ipld.dag-cbor","application/cbor","application/vnd.ipld.dag-json","application/octet-stream","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.car"],[Le]:["application/octet-stream","application/json","application/vnd.ipld.dag-cbor","application/cbor","application/vnd.ipld.dag-json","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.car","application/x-tar"],[We]:["application/octet-stream","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.dag-json","application/vnd.ipld.car","application/x-tar"]};function Y_(r,e){let t=H$[r.code];if(e!=null)return z$(e,t)}function z$(r,e){let t=r.split(",").map(n=>{let i=n.trim().split(";");return{mimeType:`${i[0]}`.trim(),weight:$$(i[1])}}).sort((n,i)=>n.weight===i.weight?0:n.weight>i.weight?-1:1).map(n=>n.mimeType);for(let n of t)for(let i of e)if(n.includes(i)||n==="*/*"||n.startsWith("*/")&&i.split("/")[1]===n.split("/")[1]||n.endsWith("/*")&&i.split("/")[0]===n.split("/")[0])return i}function $$(r){if(r!=null&&(r=r.trim()),r?.startsWith("q=")!==!0)return 1;let e=parseFloat(r.replace("q=",""));return isNaN(e)?0:e}var W2={raw:"application/vnd.ipld.raw",car:"application/vnd.ipld.car","dag-json":"application/vnd.ipld.dag-json","dag-cbor":"application/vnd.ipld.dag-cbor",json:"application/json",cbor:"application/cbor","ipns-record":"application/vnd.ipfs.ipns-record",tar:"application/x-tar"};function X_(r){if(r!=null)return W2[r]}function ay(r){let e=r.get("accept");return!!(e!=null&&Object.values(W2).includes(e))}function cy(r){let e=r?.format;return!!(e!=null&&Object.keys(W2).includes(e))}function j_({query:r,headers:e}){return ay(e)||cy(r)}function Q_({query:r,headers:e,logger:t}){let n=t.forComponent("helia:verified-fetch:get-resolved-accept-header"),i=new Headers(e),o=i.get("accept")??void 0;if(o!=null&&n('incoming accept header "%s"',o),!j_({query:r,headers:i}))return n("no explicit IPLD content-type requested, returning incoming accept header %s",o),o;let s=X_(r?.format);r?.format!=null&&n('incoming query format "%s", mapped to %s',r.format,s);let a=o;return!ay(i)&&cy(r)&&(n("accept header not recognized, but query format provided, setting accept header to %s",s),a=s),n('resolved accept header to "%s"',a),a}async function vd(r,e,t){let n=performance.now();try{let i=await t(),s=(performance.now()-n).toFixed(1),a=`${r};dur=${s};desc="${e}"`;return{result:i,header:a,error:null}}catch(i){let s=(performance.now()-n).toFixed(1),a=`${r};dur=${s};desc="${e}"`;return{result:null,error:i,header:a}}}var Z_=ut(W3(),1),Y2=class{lru;constructor(e){this.lru=(0,Z_.default)(e)}get(e){let t=this.lru.get(e);if(t!=null){if(t.expire!=null&&t.expire<Date.now()){this.lru.remove(e);return}return t.value}}set(e,t,n){this.lru.set(e,{value:t,expire:Date.now()+n})}has(e){return this.get(e)!=null}remove(e){this.lru.remove(e)}clear(){this.lru.clear()}};var J_=new Y2(1e3),V$=/^(?<protocol>ip[fn]s):\/\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/,q$=/^\/(?<protocol>ip[fn]s)\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/,K$=/^https?:\/\/(.*[^/])\/(?<protocol>ip[fn]s)\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/,G$=/^https?:\/\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\.(?<protocol>ip[fn]s)\.([^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/;function W$(r){let e=r?.protocol;if(e==null)return!1;let t=r?.cidOrPeerIdOrDnsLink;if(t==null)return!1;let n=r?.path,i=r?.queryString;return["ipns","ipfs"].includes(e)&&typeof t=="string"&&(n==null||typeof n=="string")&&(i==null||typeof i=="string")}function Ed(r){for(let e of[G$,V$,K$,q$]){let t=r.match(e);if(W$(t?.groups))return t.groups}throw new TypeError(`Invalid URL: ${r}, please use ipfs://, ipns://, or gateway URLs only`)}function Y$(r){if(r==null)return;let e=r.answer?.TTL,t=r.record?.ttl,n=t!=null?Number(t/BigInt(1e9)):void 0;return e??n}var X$=/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/;function j$(r){return X$.test(r)&&r.includes("-")&&!r.includes(".")}function Q$(r){return r.replace(/--/g,"%").replace(/-/g,".").replace(/%/g,"-")}async function ek({urlString:r,ipns:e,logger:t,withServerTiming:n=!1},i){let o=t.forComponent("helia:verified-fetch:parse-url-string"),{protocol:s,cidOrPeerIdOrDnsLink:a,path:c,queryString:l}=Ed(r),u,d,h=[],f,p=[];if(s==="ipfs")try{u=B.parse(a)}catch(y){o.error(y),h.push(new TypeError("Invalid CID for ipfs://<cid> URL"))}else if(f=J_.get(a),f!=null)u=f.cid,d=f.path,o.trace("resolved %s to %c from cache",a,u);else{o.trace("Attempting to resolve PeerId for %s",a);let y;try{if(y=U2(a),y.publicKey==null)throw new TypeError("cidOrPeerIdOrDnsLink contains no public key");if(n){let w=await vd("ipns.resolve",`Resolve IPNS name ${a}`,e.resolve.bind(null,y.publicKey,i));if(p.push(w),w.error!=null)throw w.error;f=w.result}else f=await e.resolve(y.publicKey,i);u=f?.cid,d=f?.path,o.trace("resolved %s to %c",a,u)}catch(w){i?.signal?.throwIfAborted(),y==null?(o.error('could not parse PeerId string "%s"',a,w),h.push(new TypeError(`Could not parse PeerId in ipns url "${a}", ${w.message}`))):(o.error("could not resolve PeerId %c",y,w),h.push(new TypeError(`Could not resolve PeerId "${a}", ${w.message}`)))}if(u==null){let w=a;j$(a)&&(w=Q$(a),o.trace('decoded dnslink from "%s" to "%s"',a,w)),o.trace("Attempting to resolve DNSLink for %s",w);try{if(n){let x=await vd("ipns.resolveDNSLink",`Resolve DNSLink ${w}`,e.resolveDNSLink.bind(e,w,i));if(p.push(x),x.error!=null)throw x.error;f=x.result}else f=await e.resolveDNSLink(w,i);u=f?.cid,d=f?.path,o.trace("resolved %s to %c",w,u)}catch(x){i?.signal?.throwIfAborted(),o.error('could not resolve DnsLink for "%s"',a,x),h.push(x)}}}if(u==null)throw h.length===1?h[0]:new AggregateError(h,`Invalid resource. Cannot determine CID from URL "${r}"`);let m=Y$(f);f!=null&&(m=m??60*2,o.trace("caching %s resolved to %s with TTL: %s",a,u,m),J_.set(a,f,m*1e3));let g={};if(l!=null&&l.length>0){let y=l.split("&");for(let w of y){let[x,b]=w.split("=");g[x]=decodeURIComponent(b)}g.download!=null&&(g.download=g.download==="true"),g.filename!=null&&(g.filename=g.filename.toString())}return{protocol:s,cid:u,path:Z$(d,c??""),query:g,ttl:m,ipfsPath:`/${s}/${a}${c!=null&&c!==""?`/${c}`:""}`,serverTimings:p}}function Z$(r,e){let t="";return r!=null&&(t+=r),e.length>0&&(t=`${t.length>0?`${t}/`:t}${e}`),t=t.replace(/\/(\/)+/g,"/"),t.startsWith("/")&&(t=t.substring(1)),t.split("/").map(decodeURIComponent).join("/")}function tk(r){return r.match(/\.[a-zA-Z0-9]{1,4}$/)!=null||r.endsWith("/")?r:`${r}/`}async function rk({resource:r,options:e,logger:t,cid:n,fetch:i=globalThis.fetch}){let o=t.forComponent("helia:verified-fetch:get-redirect-response");if(typeof r!="string"||e==null||["ipfs://","ipns://"].some(u=>r.startsWith(u)))return null;let s=new Headers(e?.headers),a=s.get("x-forwarded-host"),c=s.get("host");if(s.get("x-forwarded-for")==null&&a==null&&c==null)return o.trace("no redirect info found in headers"),null;o.trace("checking for redirect info");try{let u=Ed(r),d=new URL(r),h=a??d.host,f=new URL(d);if(u.protocol==="ipfs"&&n.version===0?f.host=`${n.toV1()}.ipfs.${h}`:f.host=`${u.cidOrPeerIdOrDnsLink}.${u.protocol}.${h}`,c?.includes(u.protocol)===!0&&f.host.includes(c))return o.trace("request was for a subdomain already, not setting location header"),null;if(c!=null&&!f.host.includes(c))return o.trace("host header is not the same as the subdomain url host, not setting location header"),null;if(d.host===f.host)return o.trace("req url is the same as the subdomain url, not setting location header"),null;f.pathname=tk(d.pathname.replace(`/${u.cidOrPeerIdOrDnsLink}`,"").replace(`/${u.protocol}`,"")),o.trace("subdomain url %s",f.href);let p=new URL(d,`${d.protocol}//${h}`);p.pathname=tk(d.pathname),o.trace("path url %s",p.href);try{let m=await i(f,{method:"HEAD"});if(m.ok)return o("subdomain supported, redirecting to subdomain"),id(r.toString(),f.href);throw o("subdomain not supported, subdomain failed with status %s %s",m.status,m.statusText),new Jm("subdomain not supported")}catch(m){return o("subdomain not supported",m),p.href===d.href?(o("path url is the same as the request url, not setting location header"),null):id(r.toString(),p.href)}}catch(u){o.error("error setting location header for x-forwarded-host",u)}return null}async function nk(r,{ipns:e,logger:t},{withServerTiming:n=!1,...i}={withServerTiming:!1}){if(typeof r=="string")return ek({urlString:r,ipns:e,logger:t,withServerTiming:n},i);let o=B.asCID(r);if(o!=null)return{cid:o,protocol:"ipfs",path:"",query:{},ipfsPath:`/ipfs/${o.toString()}`,ttl:29030400,serverTimings:[]};throw new TypeError(`Invalid resource. Cannot determine CID from resource: ${r}`)}function ik(r){let e=B.asCID(r);if(e!=null)return`ipfs://${e}`;try{return`ipfs://${B.parse(r.toString())}`}catch{}let{protocol:t,cidOrPeerIdOrDnsLink:n}=Ed(r.toString());return`${t}://${n}`}var J$=100,eV=60*1e3;function tV(r){if(r==null)return;let e;return r?.signal===null?e=void 0:e=r?.signal,{...r,signal:e}}var X2=class{helia;ipns;log;contentTypeParser;blockstoreSessions;serverTimingHeaders=[];withServerTiming;plugins=[];constructor({helia:e,ipns:t},n){this.helia=e,this.log=e.logger.forComponent("helia:verified-fetch"),this.ipns=t??Db(e),this.contentTypeParser=n?.contentTypeParser??M_,this.blockstoreSessions=new Vm({max:n?.sessionCacheSize??J$,ttl:n?.sessionTTLms??eV,dispose:a=>{a.close()}}),this.withServerTiming=n?.withServerTiming??!1;let i={...n,logger:fw("helia:verified-fetch"),getBlockstore:(a,c,l,u)=>this.getBlockstore(a,c,l,u),handleServerTiming:async(a,c,l)=>this.handleServerTiming(a,c,l,this.withServerTiming),helia:e,contentTypeParser:this.contentTypeParser},o=[new F2(i),new H2(i),new Qm(i),new $2(i),new G2(i),new z2(i),new h2(i),new M2(i)],s=n?.plugins?.map(a=>a(i))??[];if(s.length>0){let a=new Map(o.map(l=>[l.constructor.name,l])),c=new Map(s.map(l=>[l.constructor.name,l]));this.plugins=o.map(l=>c.get(l.constructor.name)??l),this.plugins.push(...s.filter(l=>!a.has(l.constructor.name)))}else this.plugins=o;this.log.trace("created VerifiedFetch instance")}getBlockstore(e,t,n=!0,i={}){let o=ik(t);if(!n)return this.helia.blockstore;let s=this.blockstoreSessions.get(o);return s==null&&(s=this.helia.blockstore.createSession(e,i),this.blockstoreSessions.set(o,s)),s}async handleServerTiming(e,t,n,i){if(!i)return n();let{error:o,result:s,header:a}=await vd(e,t,n);if(this.serverTimingHeaders.push(a),o!=null)throw o;return s}handleFinalResponse(e,{query:t,cid:n,reqFormat:i,ttl:o,protocol:s,ipfsPath:a,pathDetails:c}={}){if(this.serverTimingHeaders.length>0){let u=this.serverTimingHeaders.join(", ");e.headers.set("Server-Timing",u),this.serverTimingHeaders=[]}let l;return this.log.trace("checking for content disposition"),t?.download===!0?l="attachment":this.log.trace("download not requested"),t?.filename!=null?(l==null&&(l="inline"),l=`${l}; ${W_(t.filename)}`):this.log.trace("no filename specified in query"),l!=null?e.headers.set("Content-Disposition",l):this.log.trace("no content disposition specified"),n!=null&&e.headers.get("etag")==null&&e.headers.set("etag",V2({cid:c?.terminalElement.cid??n,reqFormat:i,weak:!1})),s!=null&&zT({response:e,ttl:o,protocol:s}),a!=null&&e.headers.set("X-Ipfs-Path",a),e}async runPluginPipeline(e,t=3){let n,i=0,o=new Set,s=e.modified;for(;i<t;){this.log(`Starting pipeline pass #${i+1}`),i++;let a=this.plugins.filter(u=>!o.has(u.constructor.name)).filter(u=>u.canHandle(e));if(a.length===0){this.log.trace("No plugins can handle the current context.. checking by CID code");let u=this.plugins.filter(d=>d.codes.includes(e.cid.code));if(u.length>0)a.push(...u);else{this.log.trace("No plugins found that can handle request by CID code; exiting pipeline.");break}}this.log.trace("Plugins ready to handle request: ",a.map(u=>u.constructor.name).join(", "));let c=!1,l=!1;for(let u of a){try{this.log.trace("Invoking plugin:",u.constructor.name),o.add(u.constructor.name);let d=await u.handle(e);if(d!=null){n=d,l=!0;break}}catch(d){if(e.options?.signal?.throwIfAborted(),this.log.error("Error in plugin:",u.constructor.name,d),d.name==="PluginFatalError")return d.response??zc(e.resource,"Failed to fetch")}finally{let d=e.modified;c=d!==s,c&&(s=d)}if(n!=null){this.log.trace("Plugin produced final response:",u.constructor.name);break}}if(l&&n!=null)break;if(!c){this.log.trace("No context changes and no final response; exiting pipeline.");break}}return n}async fetch(e,t){this.log("fetch %s",e);let n=tV(t),i=n?.withServerTiming??this.withServerTiming;n?.onProgress?.(new M("verified-fetch:request:start",{resource:e}));let o;try{o=await this.handleServerTiming("parse-resource","",async()=>nk(e,{ipns:this.ipns,logger:this.helia.logger},{withServerTiming:i,...n}),i),this.serverTimingHeaders.push(...o.serverTimings.map(({header:h})=>h))}catch(h){return n?.signal?.throwIfAborted(),this.log.error("error parsing resource %s",e,h),this.handleFinalResponse(nd(e.toString(),h))}n?.onProgress?.(new M("verified-fetch:request:resolve",{cid:o.cid,path:o.path}));let s=Q_({query:o.query,headers:n?.headers,logger:this.helia.logger}),a=Y_(o.cid,s);if(this.log("output type %s",a),s!=null&&a==null)return this.handleFinalResponse(Ji(e.toString()));let c=a?.split(";")[0]??"application/octet-stream",l=await rk({resource:e,options:n,logger:this.helia.logger,cid:o.cid});if(l!=null)return this.handleFinalResponse(l);let u={...o,resource:e.toString(),accept:a,options:n,withServerTiming:i,onProgress:n?.onProgress,modified:0};this.log.trace('finding handler for cid code "%s" and response content type "%s"',o.cid.code,c);let d=await this.runPluginPipeline(u);return n?.onProgress?.(new M("verified-fetch:request:end",{cid:o.cid,path:o.path})),this.handleFinalResponse(d??Ym(e.toString()),u)}async start(){await this.helia.start()}async stop(){await this.helia.stop()}};var Sd,j2=async function(e,t){return Sd==null&&(Sd=await ly()),Sd(e,t)};j2.start=async function(){await Sd?.start()};j2.stop=async function(){await Sd?.stop()};function rV(r){return"ipfs-_blank"}function nV(r,e){let t;try{let n=new URL(e.globalData.gatewayURL),i=e.globalData.dnsLink?"inbrowser.dev":n.host,o=i;i.includes(".ipfs.")?o=i.split(".ipfs.")[1]:i.includes(".ipns.")&&(o=i.split(".ipns.")[1]),t=`${n.protocol}//${o}/ipfs/${r.hash}?filename=${r.name}`}catch{t=`ipfs://${r.hash}`}return`<a class="ipfs-hash" translate="no" href="${t}">${r.shortHash}</a>`}function iV(r){return r.path!=null?`Index of <a href="${`${r.globalData.gatewayURL}/${r.path}`}">${r.name}</a>`:`Index of ${r.name} ${r.path}`}function oV(r){return r.listing.map(e=>`<div class="type-icon">
|
|
79
|
+
`));return C(e)}function q2(r){let e=new Uint8Array(512),t=r.name,n="";if(r.typeflag===5&&t[t.length-1]!=="/"&&(t+="/"),C(t).byteLength!==t.length)return null;for(;C(t).byteLength>100;){let i=t.indexOf("/");if(i===-1)return null;n+=n!==""?"/"+t.slice(0,i):t.slice(0,i),t=t.slice(i+1)}return C(t).byteLength>100||C(n).byteLength>155||r.linkname!=null&&C(r.linkname).byteLength>100?null:(e.set(C(t),0),e.set(is(r.mode&v$,6),100),e.set(is(r.uid,6),108),e.set(is(r.gid,6),116),e.set(is(r.size,11),124),e.set(is(r.mtime.getTime()/1e3|0,11),136),e[156]=w$+A$(r.type),r.linkname!=null&&e.set(C(r.linkname),157),e.set(x$,E$),e.set(b$,S$),r.uname!=null&&e.set(C(r.uname),265),r.gname!=null&&e.set(C(r.gname),297),e.set(is(r.devmajor??0,6),329),e.set(is(r.devminor??0,6),337),n!=null&&e.set(C(n),345),e.set(is(T$(e),6),148),e)}var{S_IFMT:_$,S_IFBLK:k$,S_IFCHR:C$,S_IFDIR:P$,S_IFIFO:R$,S_IFLNK:D$}=V_.default,N$=parseInt("755",8),L$=parseInt("644",8),q_=new Uint8Array(1024);function O$(r=0){switch(r&_$){case k$:return"block-device";case C$:return"character-device";case P$:return"directory";case R$:return"fifo";case D$:return"symlink";default:return"file"}}function sy(r){return r&=511,r!==0?q_.subarray(0,512-r):new Uint8Array(0)}function oy(r){if(r.pax==null){let e=q2(r);if(e!=null)return e}return B$(r)}function B$(r){let e=$_(r),t={name:"PaxHeader",mode:r.mode,uid:r.uid,gid:r.gid,size:e.length,mtime:r.mtime,type:"pax-header",linkname:r.linkname,uname:r.uname,gname:r.gname,devmajor:r.devmajor,devminor:r.devminor};return new ee(q2(t)??new Uint8Array(0),e,sy(e.length),q2({...t,size:r.size,type:r.type})??new Uint8Array(0)).subarray()}function K2(){return async function*(r){for await(let{header:e,body:t}of r){let n={...e,size:e.type==="symlink"?0:e.size??0,type:e.type??O$(e.mode),mode:e.mode??(e.type==="directory"?N$:L$),uid:e.uid??0,gid:e.gid??0,mtime:e.mtime??new Date};if(typeof t=="string"&&(t=C(t)),t instanceof Uint8Array||nn(t)){n.size=t.length,yield oy(n),yield nn(t)?t.subarray():t,yield sy(n.size);continue}if(n.type==="symlink"&&n.linkname==null){if(t==null)throw new Error("type was symlink but no linkname or body specified");n.linkname=U(await z_(t)),yield oy(n);continue}if(yield oy(n),n.type!=="file"&&n.type!=="contiguous-file")continue;let i=0;for await(let o of t??[])i+=o.length,yield nn(o)?o.subarray():o;if(i!==n.size)throw new Error(`size mismatch, wrote ${i} of ${n.size} bytes`);yield sy(n.size)}yield q_}}var M$=["file","raw","directory"];function F$(r){let e,t;return(r.type==="file"||r.type==="directory")&&(e=r.unixfs.mode,t=r.unixfs.mtime!=null?new Date(Number(r.unixfs.mtime.secs*1000n)):void 0),{name:r.path,mode:e,mtime:t,size:Number(r.size),type:r.type==="directory"?"directory":"file"}}function K_(r){if(!M$.includes(r.type))throw new Qr(`${r.type} is not a UnixFS node`);let e={header:F$(r)};return(r.type==="file"||r.type==="raw")&&(e.body=r.content()),e}async function*G_(r,e,t){let n=await _t(r,e,t);if(n.type==="file"||n.type==="raw"){yield*Re([K_(n)],K2());return}if(n.type==="directory"){yield*Re(Wc(r,e,t),i=>Je(i,o=>K_(o)),K2());return}throw new Qr("Not a UnixFS node")}var G2=class extends gt{codes=[];canHandle({cid:e,accept:t,query:n}){return this.log("checking if we can handle %c with accept %s",e,t),t==="application/x-tar"||n.format==="tar"}async handle(e){let{cid:t,path:n,resource:i,options:o,pathDetails:s}=e,{getBlockstore:a}=this.pluginOptions,c=s?.terminalElement.cid??t;if(c.code!==Le&&c.code!==We)return Ji("only UnixFS data can be returned in a TAR file");e.reqFormat="tar",e.query.download=!0,e.query.filename=e.query.filename??`${c.toString()}.tar`;let l=a(c,i,o?.session,o),u=rd(G_(`/ipfs/${t}/${n}`,l,o)),d=Kn(i,u);return d.headers.set("content-type","application/x-tar"),d.headers.set("etag",V2({cid:c,reqFormat:e.reqFormat,weak:!0})),d}};function W_(r){let e=U$(r);return e===r?`filename="${r}"`:`filename="${e}"; filename*=UTF-8''${encodeURIComponent(r)}`}function U$(r){return r.replace(/[^\x00-\x7F]/g,"_")}var H$={[Pr]:["application/json","application/vnd.ipld.dag-cbor","application/cbor","application/vnd.ipld.dag-json","application/octet-stream","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.car"],[ai]:["application/json","application/vnd.ipld.dag-cbor","application/cbor","application/vnd.ipld.dag-json","application/octet-stream","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.car"],[ri]:["application/json","application/vnd.ipld.dag-cbor","application/cbor","application/vnd.ipld.dag-json","application/octet-stream","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.car"],[Le]:["application/octet-stream","application/json","application/vnd.ipld.dag-cbor","application/cbor","application/vnd.ipld.dag-json","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.car","application/x-tar"],[We]:["application/octet-stream","application/vnd.ipld.raw","application/vnd.ipfs.ipns-record","application/vnd.ipld.dag-json","application/vnd.ipld.car","application/x-tar"]};function Y_(r,e){let t=H$[r.code];if(e!=null)return z$(e,t)}function z$(r,e){let t=r.split(",").map(n=>{let i=n.trim().split(";");return{mimeType:`${i[0]}`.trim(),weight:$$(i[1])}}).sort((n,i)=>n.weight===i.weight?0:n.weight>i.weight?-1:1).map(n=>n.mimeType);for(let n of t)for(let i of e)if(n.includes(i)||n==="*/*"||n.startsWith("*/")&&i.split("/")[1]===n.split("/")[1]||n.endsWith("/*")&&i.split("/")[0]===n.split("/")[0])return i}function $$(r){if(r!=null&&(r=r.trim()),r?.startsWith("q=")!==!0)return 1;let e=parseFloat(r.replace("q=",""));return isNaN(e)?0:e}var W2={raw:"application/vnd.ipld.raw",car:"application/vnd.ipld.car","dag-json":"application/vnd.ipld.dag-json","dag-cbor":"application/vnd.ipld.dag-cbor",json:"application/json",cbor:"application/cbor","ipns-record":"application/vnd.ipfs.ipns-record",tar:"application/x-tar"};function X_(r){if(r!=null)return W2[r]}function ay(r){let e=r.get("accept");return!!(e!=null&&Object.values(W2).includes(e))}function cy(r){let e=r?.format;return!!(e!=null&&Object.keys(W2).includes(e))}function j_({query:r,headers:e}){return ay(e)||cy(r)}function Q_({query:r,headers:e,logger:t}){let n=t.forComponent("helia:verified-fetch:get-resolved-accept-header"),i=new Headers(e),o=i.get("accept")??void 0;if(o!=null&&n('incoming accept header "%s"',o),!j_({query:r,headers:i}))return n("no explicit IPLD content-type requested, returning incoming accept header %s",o),o;let s=X_(r?.format);r?.format!=null&&n('incoming query format "%s", mapped to %s',r.format,s);let a=o;return!ay(i)&&cy(r)&&(n("accept header not recognized, but query format provided, setting accept header to %s",s),a=s),n('resolved accept header to "%s"',a),a}async function vd(r,e,t){let n=performance.now();try{let i=await t(),s=(performance.now()-n).toFixed(1),a=`${r};dur=${s};desc="${e}"`;return{result:i,header:a,error:null}}catch(i){let s=(performance.now()-n).toFixed(1),a=`${r};dur=${s};desc="${e}"`;return{result:null,error:i,header:a}}}var Z_=ut(W3(),1),Y2=class{lru;constructor(e){this.lru=(0,Z_.default)(e)}get(e){let t=this.lru.get(e);if(t!=null){if(t.expire!=null&&t.expire<Date.now()){this.lru.remove(e);return}return t.value}}set(e,t,n){this.lru.set(e,{value:t,expire:Date.now()+n})}has(e){return this.get(e)!=null}remove(e){this.lru.remove(e)}clear(){this.lru.clear()}};var J_=new Y2(1e3),V$=/^(?<protocol>ip[fn]s):\/\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/,q$=/^\/(?<protocol>ip[fn]s)\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/,K$=/^https?:\/\/(.*[^/])\/(?<protocol>ip[fn]s)\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/,G$=/^https?:\/\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\.(?<protocol>ip[fn]s)\.([^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/;function W$(r){let e=r?.protocol;if(e==null)return!1;let t=r?.cidOrPeerIdOrDnsLink;if(t==null)return!1;let n=r?.path,i=r?.queryString;return["ipns","ipfs"].includes(e)&&typeof t=="string"&&(n==null||typeof n=="string")&&(i==null||typeof i=="string")}function Ed(r){for(let e of[G$,V$,K$,q$]){let t=r.match(e);if(W$(t?.groups))return t.groups}throw new TypeError(`Invalid URL: ${r}, please use ipfs://, ipns://, or gateway URLs only`)}function Y$(r){if(r==null)return;let e=r.answer?.TTL,t=r.record?.ttl,n=t!=null?Number(t/BigInt(1e9)):void 0;return e??n}var X$=/^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?$/;function j$(r){return X$.test(r)&&r.includes("-")&&!r.includes(".")}function Q$(r){return r.replace(/--/g,"%").replace(/-/g,".").replace(/%/g,"-")}async function ek({urlString:r,ipns:e,logger:t,withServerTiming:n=!1},i){let o=t.forComponent("helia:verified-fetch:parse-url-string"),{protocol:s,cidOrPeerIdOrDnsLink:a,path:c,queryString:l}=Ed(r),u,d,h=[],f,p=[];if(s==="ipfs")try{u=B.parse(a)}catch(y){o.error(y),h.push(new TypeError("Invalid CID for ipfs://<cid> URL"))}else if(f=J_.get(a),f!=null)u=f.cid,d=f.path,o.trace("resolved %s to %c from cache",a,u);else{o.trace("Attempting to resolve PeerId for %s",a);let y;try{if(y=U2(a),y.publicKey==null)throw new TypeError("cidOrPeerIdOrDnsLink contains no public key");if(n){let w=await vd("ipns.resolve",`Resolve IPNS name ${a}`,e.resolve.bind(null,y.publicKey,i));if(p.push(w),w.error!=null)throw w.error;f=w.result}else f=await e.resolve(y.publicKey,i);u=f?.cid,d=f?.path,o.trace("resolved %s to %c",a,u)}catch(w){i?.signal?.throwIfAborted(),y==null?(o.error('could not parse PeerId string "%s"',a,w),h.push(new TypeError(`Could not parse PeerId in ipns url "${a}", ${w.message}`))):(o.error("could not resolve PeerId %c",y,w),h.push(new TypeError(`Could not resolve PeerId "${a}", ${w.message}`)))}if(u==null){let w=a;j$(a)&&(w=Q$(a),o.trace('decoded dnslink from "%s" to "%s"',a,w)),o.trace("Attempting to resolve DNSLink for %s",w);try{if(n){let x=await vd("ipns.resolveDNSLink",`Resolve DNSLink ${w}`,e.resolveDNSLink.bind(e,w,i));if(p.push(x),x.error!=null)throw x.error;f=x.result}else f=await e.resolveDNSLink(w,i);u=f?.cid,d=f?.path,o.trace("resolved %s to %c",w,u)}catch(x){i?.signal?.throwIfAborted(),o.error('could not resolve DnsLink for "%s"',a,x),h.push(x)}}}if(u==null)throw h.length===1?h[0]:new AggregateError(h,`Invalid resource. Cannot determine CID from URL "${r}"`);let m=Y$(f);f!=null&&(m=m??60*2,o.trace("caching %s resolved to %s with TTL: %s",a,u,m),J_.set(a,f,m*1e3));let g={};if(l!=null&&l.length>0){let y=l.split("&");for(let w of y){let[x,b]=w.split("=");g[x]=decodeURIComponent(b)}g.download!=null&&(g.download=g.download==="true"),g.filename!=null&&(g.filename=g.filename.toString())}return{protocol:s,cid:u,path:Z$(d,c??""),query:g,ttl:m,ipfsPath:`/${s}/${a}${c!=null&&c!==""?`/${c}`:""}`,serverTimings:p}}function Z$(r,e){let t="";return r!=null&&(t+=r),e.length>0&&(t=`${t.length>0?`${t}/`:t}${e}`),t=t.replace(/\/(\/)+/g,"/"),t.startsWith("/")&&(t=t.substring(1)),t.split("/").map(decodeURIComponent).join("/")}function tk(r){return r.match(/\.[a-zA-Z0-9]{1,4}$/)!=null||r.endsWith("/")?r:`${r}/`}async function rk({resource:r,options:e,logger:t,cid:n,fetch:i=globalThis.fetch}){let o=t.forComponent("helia:verified-fetch:get-redirect-response");if(typeof r!="string"||e==null||["ipfs://","ipns://"].some(u=>r.startsWith(u)))return null;let s=new Headers(e?.headers),a=s.get("x-forwarded-host"),c=s.get("host");if(s.get("x-forwarded-for")==null&&a==null&&c==null)return o.trace("no redirect info found in headers"),null;o.trace("checking for redirect info");try{let u=Ed(r),d=new URL(r),h=a??d.host,f=new URL(d);if(u.protocol==="ipfs"&&n.version===0?f.host=`${n.toV1()}.ipfs.${h}`:f.host=`${u.cidOrPeerIdOrDnsLink}.${u.protocol}.${h}`,c?.includes(u.protocol)===!0&&f.host.includes(c))return o.trace("request was for a subdomain already, not setting location header"),null;if(c!=null&&!f.host.includes(c))return o.trace("host header is not the same as the subdomain url host, not setting location header"),null;if(d.host===f.host)return o.trace("req url is the same as the subdomain url, not setting location header"),null;f.pathname=tk(d.pathname.replace(`/${u.cidOrPeerIdOrDnsLink}`,"").replace(`/${u.protocol}`,"")),o.trace("subdomain url %s",f.href);let p=new URL(d,`${d.protocol}//${h}`);p.pathname=tk(d.pathname),o.trace("path url %s",p.href);try{let m=await i(f,{method:"HEAD"});if(m.ok)return o("subdomain supported, redirecting to subdomain"),id(r.toString(),f.href);throw o("subdomain not supported, subdomain failed with status %s %s",m.status,m.statusText),new Jm("subdomain not supported")}catch(m){return o("subdomain not supported",m),p.href===d.href?(o("path url is the same as the request url, not setting location header"),null):id(r.toString(),p.href)}}catch(u){o.error("error setting location header for x-forwarded-host",u)}return null}async function nk(r,{ipns:e,logger:t},{withServerTiming:n=!1,...i}={withServerTiming:!1}){if(typeof r=="string")return ek({urlString:r,ipns:e,logger:t,withServerTiming:n},i);let o=B.asCID(r);if(o!=null)return{cid:o,protocol:"ipfs",path:"",query:{},ipfsPath:`/ipfs/${o.toString()}`,ttl:29030400,serverTimings:[]};throw new TypeError(`Invalid resource. Cannot determine CID from resource: ${r}`)}function ik(r){let e=B.asCID(r);if(e!=null)return`ipfs://${e}`;try{return`ipfs://${B.parse(r.toString())}`}catch{}let{protocol:t,cidOrPeerIdOrDnsLink:n}=Ed(r.toString());return`${t}://${n}`}var J$=100,eV=60*1e3;function tV(r){if(r==null)return;let e;return r?.signal===null?e=void 0:e=r?.signal,{...r,signal:e}}var X2=class{helia;ipns;log;contentTypeParser;blockstoreSessions;serverTimingHeaders=[];withServerTiming;plugins=[];constructor({helia:e,ipns:t},n){this.helia=e,this.log=e.logger.forComponent("helia:verified-fetch"),this.ipns=t??Db(e),this.contentTypeParser=n?.contentTypeParser??M_,this.blockstoreSessions=new Vm({max:n?.sessionCacheSize??J$,ttl:n?.sessionTTLms??eV,dispose:a=>{a.close()}}),this.withServerTiming=n?.withServerTiming??!1;let i={...n,logger:fw("helia:verified-fetch"),getBlockstore:(a,c,l,u)=>this.getBlockstore(a,c,l,u),handleServerTiming:async(a,c,l)=>this.handleServerTiming(a,c,l,this.withServerTiming),helia:e,contentTypeParser:this.contentTypeParser},o=[new F2(i),new H2(i),new Qm(i),new $2(i),new G2(i),new z2(i),new h2(i),new M2(i)],s=n?.plugins?.map(a=>a(i))??[];if(s.length>0){let a=new Map(o.map(l=>[l.constructor.name,l])),c=new Map(s.map(l=>[l.constructor.name,l]));this.plugins=o.map(l=>c.get(l.constructor.name)??l),this.plugins.push(...s.filter(l=>!a.has(l.constructor.name)))}else this.plugins=o;this.log.trace("created VerifiedFetch instance")}getBlockstore(e,t,n=!0,i={}){let o=ik(t);if(!n)return this.helia.blockstore;let s=this.blockstoreSessions.get(o);return s==null&&(s=this.helia.blockstore.createSession(e,i),this.blockstoreSessions.set(o,s)),s}async handleServerTiming(e,t,n,i){if(!i)return n();let{error:o,result:s,header:a}=await vd(e,t,n);if(this.serverTimingHeaders.push(a),o!=null)throw o;return s}handleFinalResponse(e,{query:t,cid:n,reqFormat:i,ttl:o,protocol:s,ipfsPath:a,pathDetails:c}={}){if(this.serverTimingHeaders.length>0){let u=this.serverTimingHeaders.join(", ");e.headers.set("Server-Timing",u),this.serverTimingHeaders=[]}let l;return this.log.trace("checking for content disposition"),t?.download===!0?l="attachment":this.log.trace("download not requested"),t?.filename!=null?(l==null&&(l="inline"),l=`${l}; ${W_(t.filename)}`):this.log.trace("no filename specified in query"),l!=null?e.headers.set("Content-Disposition",l):this.log.trace("no content disposition specified"),n!=null&&e.headers.get("etag")==null&&e.headers.set("etag",V2({cid:c?.terminalElement.cid??n,reqFormat:i,weak:!1})),s!=null&&zT({response:e,ttl:o,protocol:s}),a!=null&&e.headers.set("X-Ipfs-Path",a),e}async runPluginPipeline(e,t=3){let n,i=0,o=new Set,s=e.modified;for(;i<t;){this.log(`Starting pipeline pass #${i+1}`),i++;let a=this.plugins.filter(u=>!o.has(u.constructor.name)).filter(u=>u.canHandle(e));if(a.length===0){this.log.trace("No plugins can handle the current context.. checking by CID code");let u=this.plugins.filter(d=>d.codes.includes(e.cid.code));if(u.length>0)a.push(...u);else{this.log.trace("No plugins found that can handle request by CID code; exiting pipeline.");break}}this.log.trace("Plugins ready to handle request: ",a.map(u=>u.constructor.name).join(", "));let c=!1,l=!1;for(let u of a){try{this.log.trace("Invoking plugin:",u.constructor.name),o.add(u.constructor.name);let d=await u.handle(e);if(d!=null){n=d,l=!0;break}}catch(d){if(e.options?.signal?.throwIfAborted(),this.log.error("Error in plugin:",u.constructor.name,d),d.name==="PluginFatalError")return d.response??zc(e.resource,"Failed to fetch")}finally{let d=e.modified;c=d!==s,c&&(s=d)}if(n!=null){this.log.trace("Plugin produced final response:",u.constructor.name);break}}if(l&&n!=null)break;if(!c){this.log.trace("No context changes and no final response; exiting pipeline.");break}}return n}async fetch(e,t){this.log("fetch %s",e);let n=tV(t),i=n?.withServerTiming??this.withServerTiming;n?.onProgress?.(new M("verified-fetch:request:start",{resource:e}));let o;try{o=await this.handleServerTiming("parse-resource","",async()=>nk(e,{ipns:this.ipns,logger:this.helia.logger},{withServerTiming:i,...n}),i),this.serverTimingHeaders.push(...o.serverTimings.map(({header:h})=>h))}catch(h){return n?.signal?.throwIfAborted(),this.log.error("error parsing resource %s",e,h),this.handleFinalResponse(nd(e.toString(),h))}n?.onProgress?.(new M("verified-fetch:request:resolve",{cid:o.cid,path:o.path}));let s=Q_({query:o.query,headers:n?.headers,logger:this.helia.logger}),a=Y_(o.cid,s);if(this.log("output type %s",a),s!=null&&a==null)return this.handleFinalResponse(Ji(e.toString()));let c=a?.split(";")[0]??"application/octet-stream",l=await rk({resource:e,options:n,logger:this.helia.logger,cid:o.cid});if(l!=null)return this.handleFinalResponse(l);let u={...o,resource:e.toString(),accept:a,options:n,withServerTiming:i,onProgress:n?.onProgress,modified:0};this.log.trace('finding handler for cid code "%s" and response content type "%s"',o.cid.code,c);let d=await this.runPluginPipeline(u);return n?.onProgress?.(new M("verified-fetch:request:end",{cid:o.cid,path:o.path})),this.handleFinalResponse(d??Ym(e.toString()),u)}async start(){await this.helia.start()}async stop(){await this.helia.stop()}};var Sd,j2=async function(e,t){return Sd==null&&(Sd=await ly()),Sd(e,t)};j2.start=async function(){await Sd?.start()};j2.stop=async function(){await Sd?.stop()};function rV(r){return"ipfs-_blank"}function nV(r,e){let t=e.globalData.gatewayURLWithoutSubdomain.host;return`<a class="ipfs-hash" translate="no" href="${e.globalData.gatewayURLWithoutSubdomain.protocol}//${t}/ipfs/${r.hash}?filename=${r.name}">${r.shortHash}</a>`}function iV(r){let e=r.split("."),t=[];for(let n=e.length-1;n>=0;n--){let i=e[n];if(i==="ipfs"||i==="ipns")break;t.push(i)}return t.reverse(),t.join(".")}function oV(r){let e;try{e=new URL(r)}catch{e=new URL("https://inbrowser.link")}return e.host=iV(e.host),e}function sV(r){return r.path!=null?`Index of <a href="${`${r.globalData.gatewayURL}/${r.path}`}">${r.name}</a>`:`Index of ${r.name} ${r.path}`}function aV(r){return r.listing.map(e=>`<div class="type-icon">
|
|
80
80
|
<div class="${rV(e.name)}"> </div>
|
|
81
81
|
</div>
|
|
82
82
|
<div>
|
|
@@ -85,7 +85,7 @@ ${[...t.errors.entries()].map(([o,s])=>`
|
|
|
85
85
|
<div class="nowrap">
|
|
86
86
|
${nV(e,r)}
|
|
87
87
|
</div>
|
|
88
|
-
<div class="nowrap" title="Cumulative size of IPFS DAG (data + metadata)">${e.size}</div>`).join(" ")}function
|
|
88
|
+
<div class="nowrap" title="Cumulative size of IPFS DAG (data + metadata)">${e.size}</div>`).join(" ")}function cV(r){return r.path.split("/").pop()??r.path}function lV(r){return r.length<=11?r:`${r.slice(0,4)}...${r.slice(-4)}`}var ok=(r,e,{gatewayURL:t,dnsLink:n,log:i})=>{i("loading directory html for %s",r.path);let o={globalData:{gatewayURL:t,gatewayURLWithoutSubdomain:oV(t),dnsLink:n??!1},listing:e.map(s=>({size:s.size.toString(),name:s.name,path:cV(s),hash:s.cid.toString(),shortHash:lV(s.cid.toString())})),name:r.name,size:r.size.toString(),path:r.path,breadcrumbs:[],backLink:"",hash:r.cid.toString()};return`<!DOCTYPE html>
|
|
89
89
|
<html lang="en">
|
|
90
90
|
<head>
|
|
91
91
|
<meta charset="utf-8">
|
|
@@ -93,7 +93,7 @@ ${[...t.errors.entries()].map(([o,s])=>`
|
|
|
93
93
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
94
94
|
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlo89/56ZQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUjDu1lo89/6mhTP+zrVP/nplD/5+aRK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNiIS6Wjz3/ubFY/761W/+vp1D/urRZ/8vDZf/GvmH/nplD/1BNIm8AAAAAAAAAAAAAAAAAAAAAAAAAAJaPPf+knEj/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf+tpk7/nplD/wAAAAAAAAAAAAAAAJaPPf+2rVX/vrVb/761W/++tVv/vrVb/6+nUP+6tFn/y8Nl/8vDZf/Lw2X/y8Nl/8G6Xv+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/761W/+vp1D/urRZ/8vDZf/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf++tVv/vrVb/761W/++tVv/vbRa/5aPPf+emUP/y8Nl/8vDZf/Lw2X/y8Nl/8vDZf+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/5qTQP+inkb/op5G/6KdRv/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/sqlS/56ZQ//LxWb/0Mlp/9DJaf/Kw2X/oJtE/7+3XP/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf+9tFr/mJE+/7GsUv/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+xrFL/nplD/8vDZf+emUP/AAAAAAAAAACWjz3/op5G/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+inkb/nplD/wAAAAAAAAAAAAAAAKKeRv+3slb/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+1sFX/op5G/wAAAAAAAAAAAAAAAAAAAAAAAAAAop5GUKKeRv/Nxmf/0cpq/9HKav/Rymr/0cpq/83GZ/+inkb/op5GSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G16KeRv/LxWb/y8Vm/6KeRv+inkaPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G/6KeRtcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/n8AAPgfAADwDwAAwAMAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAwAMAAPAPAAD4HwAA/n8AAA==">
|
|
95
95
|
<title>${o.path}</title>
|
|
96
|
-
<style>${
|
|
96
|
+
<style>${uV}</style>
|
|
97
97
|
</head>
|
|
98
98
|
<body>
|
|
99
99
|
<!--
|
|
@@ -114,7 +114,7 @@ ${[...t.errors.entries()].map(([o,s])=>`
|
|
|
114
114
|
<main id="main">
|
|
115
115
|
<header class="flex flex-wrap">
|
|
116
116
|
<div>
|
|
117
|
-
<strong>${
|
|
117
|
+
<strong>${sV(o)}</strong>
|
|
118
118
|
${o.hash==null?"":`<div class="ipfs-hash" translate="no">
|
|
119
119
|
${o.hash}
|
|
120
120
|
</div>`}
|
|
@@ -136,12 +136,12 @@ ${[...t.errors.entries()].map(([o,s])=>`
|
|
|
136
136
|
<div></div>
|
|
137
137
|
</tr>
|
|
138
138
|
{{ end }}-->
|
|
139
|
-
${
|
|
139
|
+
${aV(o)}
|
|
140
140
|
</div>
|
|
141
141
|
</div>
|
|
142
142
|
</main>
|
|
143
143
|
</body>
|
|
144
|
-
</html>`},
|
|
144
|
+
</html>`},uV=`
|
|
145
145
|
|
|
146
146
|
.ipfs-_blank {
|
|
147
147
|
background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 72 100'%3E%3ClinearGradient id='a' gradientUnits='userSpaceOnUse' x1='36' y1='1' x2='36' y2='99' gradientTransform='matrix(1 0 0 -1 0 100)'%3E%3Cstop offset='0' stop-color='%23c8d4db'/%3E%3Cstop offset='.139' stop-color='%23d8e1e6'/%3E%3Cstop offset='.359' stop-color='%23ebf0f3'/%3E%3Cstop offset='.617' stop-color='%23f9fafb'/%3E%3Cstop offset='1' stop-color='%23fff'/%3E%3C/linearGradient%3E%3Cpath d='M45 1l27 26.7V99H0V1h45z' fill='url(%23a)'/%3E%3Cpath d='M45 1l27 26.7V99H0V1h45z' fill-opacity='0' stroke='%237191a1' stroke-width='2'/%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='45.068' y1='72.204' x2='58.568' y2='85.705' gradientTransform='matrix(1 0 0 -1 0 100)'%3E%3Cstop offset='0' stop-color='%23fff'/%3E%3Cstop offset='.35' stop-color='%23fafbfb'/%3E%3Cstop offset='.532' stop-color='%23edf1f4'/%3E%3Cstop offset='.675' stop-color='%23dde5e9'/%3E%3Cstop offset='.799' stop-color='%23c7d3da'/%3E%3Cstop offset='.908' stop-color='%23adbdc7'/%3E%3Cstop offset='1' stop-color='%2392a5b0'/%3E%3C/linearGradient%3E%3Cpath d='M45 1l27 26.7H45V1z' fill='url(%23b)'/%3E%3Cpath d='M45 1l27 26.7H45V1z' fill-opacity='0' stroke='%237191a1' stroke-width='2' stroke-linejoin='bevel'/%3E%3C/svg%3E");
|
|
@@ -398,7 +398,7 @@ ${[...t.errors.entries()].map(([o,s])=>`
|
|
|
398
398
|
.dn-mobile {
|
|
399
399
|
display: none;
|
|
400
400
|
}
|
|
401
|
-
}`;var Ad=class extends gt{codes=[Le];canHandle(e){let{cid:t,pathDetails:n,directoryEntries:i}=e;return n==null||n.terminalElement?.type!=="directory"||i?.length===0?!1:t.code===Le}async handle(e){let{resource:t,pathDetails:n,directoryEntries:i}=e;if(n?.terminalElement==null)throw new Error("Path details are required");if(i==null||i?.length===0)throw new Error("Directory entries are required");let o=n.terminalElement,a=ok(o,i,{gatewayURL:t,log:this.log});return new Response(a,{status:200,statusText:"OK",headers:{"Content-Type":"text/html","Cache-Control":"public, max-age=604800, stale-while-revalidate=2678400"}})}},sk=r=>new Ad(r);async function ly(r,e){let t;if(!
|
|
401
|
+
}`;var Ad=class extends gt{codes=[Le];canHandle(e){let{cid:t,pathDetails:n,directoryEntries:i}=e;return n==null||n.terminalElement?.type!=="directory"||i?.length===0?!1:t.code===Le}async handle(e){let{resource:t,pathDetails:n,directoryEntries:i}=e;if(n?.terminalElement==null)throw new Error("Path details are required");if(i==null||i?.length===0)throw new Error("Directory entries are required");let o=n.terminalElement,a=ok(o,i,{gatewayURL:t,log:this.log});return new Response(a,{status:200,statusText:"OK",headers:{"Content-Type":"text/html","Cache-Control":"public, max-age=604800, stale-while-revalidate=2678400"}})}},sk=r=>new Ad(r);async function ly(r,e){let t;if(!dV(r)){let o=fV(r?.dnsResolvers),s=wT();s.dns=o;let a=r?.routers??["https://delegated-ipfs.dev"];for(let u=0;u<a.length;u++){let d=a[u];s.services[`delegatedRouting${u}`]=()=>jh(d)}r?.libp2pConfig!=null&&Object.assign(s,r.libp2pConfig),t=await zm(s);let c=[Jl()],l=[N6(t)];(r?.gateways==null||r.gateways.length>0)&&(c.push(cu({allowInsecure:r?.allowInsecure,allowLocal:r?.allowLocal})),l.push(R6({gateways:r?.gateways??["https://trustless-gateway.link"]}))),r=await yT({libp2p:t,blockBrokers:c,dns:o,routers:l,hashers:r?.hashers}),r.logger.forComponent("helia:verified-fetch").trace("created verified-fetch with libp2p config: %j",s)}let n=new X2({helia:r},e);async function i(o,s){return n.fetch(o,s)}return i.start=n.start.bind(n),i.stop=n.stop.bind(n),i}function dV(r){return r?.blockstore!=null&&r?.datastore!=null&&r?.gc!=null&&r?.stop!=null&&r?.start!=null}function fV(r){if(r!=null)return Array.isArray(r)?ks({resolvers:{".":r}}):ks({resolvers:r})}return bk(hV);})();
|
|
402
402
|
/*! Bundled license information:
|
|
403
403
|
|
|
404
404
|
pvtsutils/build/index.js:
|