@peerbit/stream 4.6.0 → 5.0.0-06e7585

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.
@@ -1,5 +1,7 @@
1
- import { AbortError, delay } from "@peerbit/time";
2
1
  export const MAX_ROUTE_DISTANCE = Number.MAX_SAFE_INTEGER - 1;
2
+ const DEFAULT_MAX_FROM_ENTRIES = 2048;
3
+ const DEFAULT_MAX_TARGETS_PER_FROM = 10_000;
4
+ const DEFAULT_MAX_RELAYS_PER_TARGET = 32;
3
5
  const sortRoutes = (routes) => {
4
6
  // sort by distance, if same distance make the routes without expire time first
5
7
  const sorted = routes.sort((a, b) => {
@@ -25,14 +27,86 @@ export class Routes {
25
27
  // once we receive new route info to reach a specific target
26
28
  routeMaxRetentionPeriod;
27
29
  signal;
30
+ pendingCleanupByFrom = new Map();
31
+ cleanupTimer;
32
+ maxFromEntries;
33
+ maxTargetsPerFrom;
34
+ maxRelaysPerTarget;
28
35
  constructor(me, options) {
29
36
  this.me = me;
30
37
  this.routeMaxRetentionPeriod =
31
38
  options?.routeMaxRetentionPeriod ?? 10 * 1000;
32
39
  this.signal = options?.signal;
40
+ this.maxFromEntries = Math.max(1, Math.floor(options?.maxFromEntries ?? DEFAULT_MAX_FROM_ENTRIES));
41
+ this.maxTargetsPerFrom = Math.max(1, Math.floor(options?.maxTargetsPerFrom ?? DEFAULT_MAX_TARGETS_PER_FROM));
42
+ this.maxRelaysPerTarget = Math.max(1, Math.floor(options?.maxRelaysPerTarget ?? DEFAULT_MAX_RELAYS_PER_TARGET));
33
43
  }
34
44
  clear() {
35
45
  this.routes.clear();
46
+ this.pendingCleanupByFrom.clear();
47
+ if (this.cleanupTimer)
48
+ clearTimeout(this.cleanupTimer);
49
+ this.cleanupTimer = undefined;
50
+ }
51
+ requestCleanup(from, to) {
52
+ if (this.signal?.aborted)
53
+ return;
54
+ let targets = this.pendingCleanupByFrom.get(from);
55
+ if (!targets) {
56
+ targets = new Set();
57
+ this.pendingCleanupByFrom.set(from, targets);
58
+ }
59
+ targets.add(to);
60
+ // Coalesce cleanups into a single timer. The previous per-update timer approach
61
+ // scales poorly in large networks and can OOM in single-process simulations.
62
+ if (this.cleanupTimer)
63
+ return;
64
+ this.cleanupTimer = setTimeout(() => {
65
+ this.cleanupTimer = undefined;
66
+ const pending = this.pendingCleanupByFrom;
67
+ this.pendingCleanupByFrom = new Map();
68
+ for (const [fromKey, tos] of pending) {
69
+ for (const toKey of tos) {
70
+ this.cleanup(fromKey, toKey);
71
+ }
72
+ }
73
+ }, this.routeMaxRetentionPeriod + 100);
74
+ }
75
+ pruneFromMaps() {
76
+ if (this.routes.size <= this.maxFromEntries)
77
+ return;
78
+ // Keep `me` pinned: local routes are used for pruning decisions and should be
79
+ // the last thing we evict under memory pressure.
80
+ while (this.routes.size > this.maxFromEntries) {
81
+ const oldest = this.routes.keys().next().value;
82
+ if (!oldest)
83
+ return;
84
+ if (oldest === this.me) {
85
+ const selfMap = this.routes.get(oldest);
86
+ if (!selfMap) {
87
+ this.routes.delete(oldest);
88
+ continue;
89
+ }
90
+ // Move to the end (most recently used) and continue eviction.
91
+ this.routes.delete(oldest);
92
+ this.routes.set(oldest, selfMap);
93
+ continue;
94
+ }
95
+ this.routes.delete(oldest);
96
+ }
97
+ }
98
+ pruneTargets(from, fromMap) {
99
+ if (fromMap.size <= this.maxTargetsPerFrom)
100
+ return;
101
+ while (fromMap.size > this.maxTargetsPerFrom) {
102
+ const oldestTarget = fromMap.keys().next().value;
103
+ if (!oldestTarget)
104
+ break;
105
+ fromMap.delete(oldestTarget);
106
+ }
107
+ if (fromMap.size === 0) {
108
+ this.routes.delete(from);
109
+ }
36
110
  }
37
111
  cleanup(from, to) {
38
112
  const fromMap = this.routes.get(from);
@@ -50,6 +124,9 @@ export class Routes {
50
124
  keepRoutes.push(route);
51
125
  }
52
126
  }
127
+ if (keepRoutes.length > this.maxRelaysPerTarget) {
128
+ keepRoutes.length = this.maxRelaysPerTarget;
129
+ }
53
130
  if (keepRoutes.length > 0) {
54
131
  map.list = keepRoutes;
55
132
  }
@@ -68,6 +145,11 @@ export class Routes {
68
145
  fromMap = new Map();
69
146
  this.routes.set(from, fromMap);
70
147
  }
148
+ else {
149
+ // LRU-touch the `from` map.
150
+ this.routes.delete(from);
151
+ this.routes.set(from, fromMap);
152
+ }
71
153
  let prev = fromMap.get(target);
72
154
  const routeDidExist = prev;
73
155
  const isNewSession = !prev || session > prev.session;
@@ -76,6 +158,11 @@ export class Routes {
76
158
  prev = { session, remoteSession, list: [] };
77
159
  fromMap.set(target, prev);
78
160
  }
161
+ else {
162
+ // LRU-touch the target entry.
163
+ fromMap.delete(target);
164
+ fromMap.set(target, prev);
165
+ }
79
166
  const isRelayed = from !== this.me;
80
167
  const targetIsNeighbour = neighbour === target;
81
168
  if (targetIsNeighbour) {
@@ -92,19 +179,6 @@ export class Routes {
92
179
  prev.remoteSession = Math.max(remoteSession, prev.remoteSession || -1);
93
180
  }
94
181
  prev.session = Math.max(session, prev.session);
95
- const scheduleCleanup = () => {
96
- return delay(this.routeMaxRetentionPeriod + 100, { signal: this.signal })
97
- .then(() => {
98
- this.cleanup(from, target);
99
- })
100
- .catch((e) => {
101
- if (e instanceof AbortError) {
102
- // skip
103
- return;
104
- }
105
- throw e;
106
- });
107
- };
108
182
  // Update routes and cleanup all old routes that are older than latest session - some threshold
109
183
  if (isNewSession) {
110
184
  // Mark previous routes as old
@@ -119,11 +193,11 @@ export class Routes {
119
193
  }
120
194
  // Initiate cleanup
121
195
  if (distance !== -1 && foundNodeToExpire) {
122
- scheduleCleanup();
196
+ this.requestCleanup(from, target);
123
197
  }
124
198
  }
125
199
  else if (isOldSession) {
126
- scheduleCleanup();
200
+ this.requestCleanup(from, target);
127
201
  }
128
202
  // Modify list for new/update route
129
203
  let exist = false;
@@ -134,13 +208,25 @@ export class Routes {
134
208
  if (route.distance > distance) {
135
209
  route.distance = distance;
136
210
  route.session = session;
211
+ route.updatedAt = +new Date();
137
212
  route.expireAt = undefined; // remove expiry since we updated
138
213
  sortRoutes(prev.list);
214
+ if (prev.list.length > this.maxRelaysPerTarget) {
215
+ prev.list.length = this.maxRelaysPerTarget;
216
+ }
217
+ this.pruneTargets(from, fromMap);
218
+ this.pruneFromMaps();
139
219
  return isNewRemoteSession ? "restart" : "updated";
140
220
  }
141
221
  else if (route.distance === distance) {
142
222
  route.session = session;
223
+ route.updatedAt = +new Date();
143
224
  route.expireAt = undefined; // remove expiry since we updated
225
+ if (prev.list.length > this.maxRelaysPerTarget) {
226
+ prev.list.length = this.maxRelaysPerTarget;
227
+ }
228
+ this.pruneTargets(from, fromMap);
229
+ this.pruneFromMaps();
144
230
  return isNewRemoteSession ? "restart" : "updated";
145
231
  }
146
232
  }
@@ -156,12 +242,18 @@ export class Routes {
156
242
  distance,
157
243
  session,
158
244
  hash: neighbour,
245
+ updatedAt: +new Date(),
159
246
  expireAt: isOldSession
160
247
  ? +new Date() + this.routeMaxRetentionPeriod
161
248
  : undefined,
162
249
  });
163
250
  sortRoutes(prev.list);
251
+ if (prev.list.length > this.maxRelaysPerTarget) {
252
+ prev.list.length = this.maxRelaysPerTarget;
253
+ }
164
254
  }
255
+ this.pruneTargets(from, fromMap);
256
+ this.pruneFromMaps();
165
257
  return exist ? (isNewRemoteSession ? "restart" : "updated") : "new";
166
258
  }
167
259
  /**
@@ -215,6 +307,33 @@ export class Routes {
215
307
  findNeighbor(from, target) {
216
308
  return this.routes.get(from)?.get(target);
217
309
  }
310
+ getRouteHints(from, target) {
311
+ const route = this.routes.get(from)?.get(target);
312
+ if (!route) {
313
+ return [];
314
+ }
315
+ const now = Date.now();
316
+ const out = [];
317
+ for (const next of route.list) {
318
+ if (next.expireAt != null && next.expireAt < now) {
319
+ continue;
320
+ }
321
+ out.push({
322
+ kind: "directstream-ack",
323
+ from,
324
+ target,
325
+ nextHop: next.hash,
326
+ distance: next.distance,
327
+ session: next.session,
328
+ updatedAt: next.updatedAt,
329
+ expiresAt: next.expireAt,
330
+ });
331
+ }
332
+ return out;
333
+ }
334
+ getBestRouteHint(from, target) {
335
+ return this.getRouteHints(from, target)[0];
336
+ }
218
337
  isReachable(from, target, maxDistance = MAX_ROUTE_DISTANCE) {
219
338
  const remoteInfo = this.remoteInfo.get(target);
220
339
  const routeInfo = this.routes.get(from)?.get(target);
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/routes.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC;AAE9D,MAAM,wBAAwB,GAAG,IAAI,CAAC;AACtC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAC5C,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAezC,MAAM,UAAU,GAAG,CAAC,MAAmB,EAAE,EAAE;IAC1C,+EAA+E;IAE/E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnC,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC;YACV,CAAC;YACD,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO,CAAC,CAAC,CAAC;YACX,CAAC;YACD,OAAO,CAAC,CAAC;QACV,CAAC;QACD,OAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,OAAO,MAAM;IAmBR;IAlBV,8FAA8F;IAC9F,MAAM,GAAwC,IAAI,GAAG,EAAE,CAAC;IAExD,UAAU,GAAsC,IAAI,GAAG,EAAE,CAAC;IAE1D,qEAAqE;IACrE,4DAA4D;IAC5D,uBAAuB,CAAS;IAEhC,MAAM,CAAe;IAEb,oBAAoB,GAA6B,IAAI,GAAG,EAAE,CAAC;IAC3D,YAAY,CAAiC;IAC7C,cAAc,CAAS;IACvB,iBAAiB,CAAS;IAC1B,kBAAkB,CAAS;IAEnC,YACU,EAAU,EACnB,OAMC;QAPQ,OAAE,GAAF,EAAE,CAAQ;QASnB,IAAI,CAAC,uBAAuB;YAC3B,OAAO,EAAE,uBAAuB,IAAI,EAAE,GAAG,IAAI,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAC7B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,IAAI,wBAAwB,CAAC,CAC/D,CAAC;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAChC,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,iBAAiB,IAAI,4BAA4B,CAAC,CACtE,CAAC;QACF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,GAAG,CACjC,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,kBAAkB,IAAI,6BAA6B,CAAC,CACxE,CAAC;IACH,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAC/B,CAAC;IAEO,cAAc,CAAC,IAAY,EAAE,EAAU;QAC9C,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO;QACjC,IAAI,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAC5B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,gFAAgF;QAChF,6EAA6E;QAC7E,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAC9B,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAC1C,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,EAAE,CAAC;YACtC,KAAK,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtC,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;oBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC9B,CAAC;YACF,CAAC;QACF,CAAC,EAAE,IAAI,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAC;IACxC,CAAC;IAEO,aAAa;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc;YAAE,OAAO;QAEpD,8EAA8E;QAC9E,iDAAiD;QACjD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAA2B,CAAC;YACrE,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,IAAI,MAAM,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC3B,SAAS;gBACV,CAAC;gBACD,8DAA8D;gBAC9D,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACjC,SAAS;YACV,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAEO,YAAY,CAAC,IAAY,EAAE,OAA+B;QACjE,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,iBAAiB;YAAE,OAAO;QACnD,OAAO,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAA2B,CAAC;YACvE,IAAI,CAAC,YAAY;gBAAE,MAAM;YACzB,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACF,CAAC;IAEO,OAAO,CAAC,IAAY,EAAE,EAAU;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,IAAI,GAAG,EAAE,CAAC;gBACT,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,UAAU,GAAgB,EAAE,CAAC;gBACnC,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC9B,kCAAkC;oBAClC,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC;wBACpD,UAAU;oBACX,CAAC;yBAAM,CAAC;wBACP,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxB,CAAC;gBACF,CAAC;gBAED,IAAI,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACjD,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBAC7C,CAAC;gBAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC3B,GAAG,CAAC,IAAI,GAAG,UAAU,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACP,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACnB,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;wBACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IACD,GAAG,CACF,IAAY,EACZ,SAAiB,EACjB,MAAc,EACd,QAAgB,EAChB,OAAe,EACf,aAAqB;QAErB,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACP,4BAA4B;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC;QAC3B,MAAM,YAAY,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAEpD,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,EAAiB,EAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACP,8BAA8B;YAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,iBAAiB,GAAG,SAAS,KAAK,MAAM,CAAC;QAC/C,IAAI,iBAAiB,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,kFAAkF;gBAClF,8FAA8F;gBAC9F,QAAQ,GAAG,CAAC,CAAC,CAAC;YACf,CAAC;QACF,CAAC;QAED,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,aAAa,EAAE,CAAC;YACnB,8EAA8E;YAC9E,kBAAkB,GAAG,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,+FAA+F;QAC/F,IAAI,YAAY,EAAE,CAAC;YAClB,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC;YAC5D,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,kCAAkC;gBAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACrB,iBAAiB,GAAG,IAAI,CAAC;oBACzB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBAC3B,CAAC;YACF,CAAC;YAED,mBAAmB;YACnB,IAAI,QAAQ,KAAK,CAAC,CAAC,IAAI,iBAAiB,EAAE,CAAC;gBAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACnC,CAAC;QACF,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACzB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;QAED,mCAAmC;QACnC,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC9B,4DAA4D;gBAC5D,IAAI,YAAY,EAAE,CAAC;oBAClB,IAAI,KAAK,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;wBAC/B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;wBAC1B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;wBACxB,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC9B,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,iCAAiC;wBAC7D,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAChD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;wBAC5C,CAAC;wBACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;wBACjC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,OAAO,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;oBACnD,CAAC;yBAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;wBACxC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;wBACxB,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC9B,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,iCAAiC;wBAC7D,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;4BAChD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;wBAC5C,CAAC;wBACD,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;wBACjC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,OAAO,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;oBACnD,CAAC;gBACF,CAAC;gBAED,KAAK,GAAG,IAAI,CAAC;gBACb,yEAAyE;gBACzE,MAAM;YACP,CAAC;QACF,CAAC;QAED,6BAA6B;QAC7B,iJAAiJ;QACjJ,IAAI,CAAC,KAAK,IAAI,YAAY,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACd,QAAQ;gBACR,OAAO;gBACP,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,CAAC,IAAI,IAAI,EAAE;gBACtB,QAAQ,EAAE,YAAY;oBACrB,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,uBAAuB;oBAC5C,CAAC,CAAC,SAAS;aACZ,CAAC,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAChD,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC5C,CAAC;QACF,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAc;QACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,gBAAgB,GAAgB,IAAI,GAAG,EAAE,CAAC;QAChD,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjD,gBAAgB;YAChB,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/C,aAAa;gBACZ,aAAa,IAAI,CAAC,eAAe,IAAI,UAAU,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;YAE9D,2BAA2B;YAC3B,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,OAAO,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;gBAClE,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC;gBAC3B,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAClC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAEvB,IAAI,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;wBAC5B,oEAAoE;wBACpE,YAAY;wBACZ,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC9B,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/B,IAAI,aAAa,EAAE,CAAC;YACnB,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,GAAG,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,eAAe,CAAC,SAAiB;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAClD,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACrC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;gBAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,MAAc;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,MAAc;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACX,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,GAA+B,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC;gBAClD,SAAS;YACV,CAAC;YACD,GAAG,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,kBAAkB;gBACxB,IAAI;gBACJ,MAAM;gBACN,OAAO,EAAE,IAAI,CAAC,IAAI;gBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAED,gBAAgB,CACf,IAAY,EACZ,MAAc;QAEd,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,IAAY,EAAE,MAAc,EAAE,WAAW,GAAG,kBAAkB;QACzE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACd,CAAC;QACD;QACC,kCAAkC;QAClC,kCAAkC;QAClC,SAAS,CAAC,aAAa,IAAI,SAAS;YACpC,UAAU,CAAC,OAAO,KAAK,SAAS,EAC/B,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,IAAI,SAAS,CAAC,aAAa,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;YAClD,uCAAuC;YACvC,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,CACN,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,WAAW,CACxE,CAAC;IACH,CAAC;IAED,SAAS,CAAC,MAAc;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnB,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,aAAa,CAAC,MAAc,EAAE,OAAgB;QAC7C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,IAAI,UAAU,EAAE,CAAC;YAChB,mFAAmF;YACnF,IAAI,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC/B,OAAO,KAAK,CAAC;YACd,CAAC;YACD,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;gBACpB,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;gBACxB,OAAO,KAAK,CAAC;YACd,CAAC;iBAAM,CAAC;gBACP,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1C,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;oBAC7B,OAAO,IAAI,CAAC;gBACb,CAAC;gBACD,OAAO,KAAK,CAAC;YACd,CAAC;QACF,CAAC;aAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACb,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAED,UAAU,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC7C,CAAC;IAED,UAAU,CAAC,MAAc,EAAE,KAAgB;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC7C,OAAO,QAAQ,EAAE,OAAO,IAAI,IAAI,IAAI,KAAK,CAAC,aAAa,IAAI,QAAQ,CAAC,OAAO,CAAC;IAC7E,CAAC;IAED,YAAY,CAAC,IAAY;QACxB,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,EAAE,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACxD,IAAI,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC5B,SAAS,CAAC,oGAAoG;YAC/G,CAAC;YAED,gCAAgC;YAChC,6CAA6C;YAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3B,SAAS,KAAK,CAAC;YAChB,CAAC;YAED,oCAAoC;YACpC,6CAA6C;YAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtC,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACtC,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;wBAC7B,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC3B,SAAS,KAAK,CAAC;oBAChB,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;QACnB,MAAM,GAAG,GAAgB,IAAI,GAAG,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,GAAG,EAAE,CAAC;YACT,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;gBAC1B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACX,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC3B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC;IACjB,CAAC;IAED,QAAQ;QACP,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;gBAC3B,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YACvB,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED,iBAAiB;IACjB,SAAS,CACR,IAAY,EACZ,GAAa,EACb,UAAkB;QAElB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,SAAS,GAEE,SAAS,CAAC;QAEzB,MAAM,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAElC,iBAAiB;QACjB,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;gBACtB,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;oBACnC,SAAS,CAAC,gCAAgC;gBAC3C,CAAC;gBAED,gDAAgD;gBAChD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9C,IAAI,SAAS,EAAE,CAAC;oBACf,IAAI,YAAY,GAAG,KAAK,CAAC;oBACzB,IAAI,KAAK,GAAG,CAAC,CAAC;oBAEd,IAAI,oBAAoB,GAAG,CAAC,CAAC,CAAC;oBAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAChD,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAE1D,IAAI,QAAQ,EAAE,CAAC;4BACd,0CAA0C;4BAC1C,4DAA4D;4BAC5D,IAAI,CAAC,QAAQ,IAAI,oBAAoB,KAAK,QAAQ,EAAE,CAAC;gCACpD,kDAAkD;gCAElD,SAAS,CAAC,qEAAqE;4BAChF,CAAC;wBACF,CAAC;6BAAM,CAAC;4BACP,oBAAoB,GAAG,QAAQ,CAAC;wBACjC,CAAC;wBAED,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;4BAC5B,MAAM,CAAC,kCAAkC;wBAC1C,CAAC;wBAED,IAAI,MAAM,GAAmD,CAC5D,SAAS,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,CACpC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;4BACb,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;4BACnB,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;wBAC/C,CAAC;wBAED,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;wBAE3C,IACC,QAAQ,IAAI,CAAC;4BACb,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,8FAA8F;0BAC1H,CAAC;4BACF,YAAY,GAAG,IAAI,CAAC;4BACpB,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;gCACrB,MAAM,CAAC,sDAAsD;4BAC9D,CAAC;wBACF,CAAC;wBAED,IAAI,CAAC,QAAQ,EAAE,CAAC;4BACf,qFAAqF;4BACrF,KAAK,EAAE,CAAC;4BACR,IAAI,KAAK,IAAI,UAAU,EAAE,CAAC;gCACzB,MAAM;4BACP,CAAC;wBACF,CAAC;oBACF,CAAC;oBAED,IAAI,CAAC,YAAY,IAAI,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;wBACvC,OAAO,SAAS,CAAC,CAAC,kEAAkE;oBACrF,CAAC;oBAED,SAAS;gBACV,CAAC;gBAED,gDAAgD;gBAChD,OAAO,SAAS,CAAC;YAClB,CAAC;QACF,CAAC;QACD,OAAO,SAAS,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,UAAoB;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,GAAG,EAAE,CAAC;YACT,iDAAiD;YACjD,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE;gBACtC,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,GAAG,EAAE,CAAC;oBACxC,IACC,MAAM,KAAK,SAAS;wBACpB,UAAU,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;wBAC5B,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,EACpC,CAAC;wBACF,OAAO,KAAK,CAAC;oBACd,CAAC;gBACF,CAAC;gBACD,OAAO,IAAI,CAAC;YACb,CAAC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC;IACX,CAAC;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for-event.d.ts","sourceRoot":"","sources":["../../src/wait-for-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAe,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAEvD,wBAAgB,YAAY,CAC3B,OAAO,SAAS,iBAAiB,CAAC,MAAM,CAAC,EACzC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,SAAS,iBAAiB,CACrE,MAAM,CAAC,CACP,GACE,CAAC,GACD,KAAK,EACR,KAAK,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM,EAEzC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,EAAE,EACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACnE,OAAO,CAAC,EAAE;IACT,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GACC,OAAO,CAAC,IAAI,CAAC,CAuDf"}
1
+ {"version":3,"file":"wait-for-event.d.ts","sourceRoot":"","sources":["../../src/wait-for-event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAe,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAEvD,wBAAgB,YAAY,CAC3B,OAAO,SAAS,iBAAiB,CAAC,MAAM,CAAC,EACzC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,SAAS,iBAAiB,CACrE,MAAM,CAAC,CACP,GACE,CAAC,GACD,KAAK,EACR,KAAK,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM,EAEzC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,KAAK,EAAE,EACf,QAAQ,EAAE,CAAC,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACnE,OAAO,CAAC,EAAE;IACT,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GACC,OAAO,CAAC,IAAI,CAAC,CAoEf"}
@@ -1,6 +1,8 @@
1
1
  import { AbortError, TimeoutError } from "@peerbit/time";
2
2
  import pDefer, {} from "p-defer";
3
3
  export function waitForEvent(emitter, events, resolver, options) {
4
+ const traceEnabled = globalThis?.process?.env?.PEERBIT_WAITFOREVENT_TRACE === "1";
5
+ const callsite = traceEnabled ? new Error("waitForEvent callsite").stack : undefined;
4
6
  const deferred = pDefer();
5
7
  const abortFn = (e) => {
6
8
  if (e instanceof Error) {
@@ -14,13 +16,16 @@ export function waitForEvent(emitter, events, resolver, options) {
14
16
  };
15
17
  const checkIsReady = (...args) => resolver(deferred);
16
18
  let timeout = undefined;
17
- deferred.promise.finally(() => {
19
+ void deferred.promise
20
+ .finally(() => {
18
21
  for (const event of events) {
19
22
  emitter.removeEventListener(event, checkIsReady);
20
23
  }
21
24
  timeout && clearTimeout(timeout);
22
25
  options?.signals?.forEach((signal) => signal.removeEventListener("abort", abortFn));
23
- });
26
+ })
27
+ // Avoid triggering an unhandled rejection from the `.finally()` return promise.
28
+ .catch(() => { });
24
29
  const abortedSignal = options?.signals?.find((signal) => signal.aborted);
25
30
  if (abortedSignal) {
26
31
  deferred.reject(abortedSignal.reason ??
@@ -31,7 +36,13 @@ export function waitForEvent(emitter, events, resolver, options) {
31
36
  for (const event of events) {
32
37
  emitter.addEventListener(event, checkIsReady);
33
38
  }
34
- timeout = setTimeout(() => abortFn(new TimeoutError("Timeout waiting for event")), options?.timeout ?? 10 * 1000);
39
+ timeout = setTimeout(() => {
40
+ const err = new TimeoutError("Timeout waiting for event");
41
+ if (callsite && err.stack) {
42
+ err.stack += `\n\n${callsite}`;
43
+ }
44
+ abortFn(err);
45
+ }, options?.timeout ?? 10 * 1000);
35
46
  options?.signals?.forEach((signal) => signal.addEventListener("abort", abortFn));
36
47
  resolver(deferred);
37
48
  return deferred.promise;
@@ -1 +1 @@
1
- {"version":3,"file":"wait-for-event.js","sourceRoot":"","sources":["../../src/wait-for-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,MAAM,EAAE,EAAwB,MAAM,SAAS,CAAC;AAEvD,MAAM,UAAU,YAAY,CAS3B,OAAgB,EAChB,MAAe,EACf,QAAmE,EACnE,OAGC;IAED,MAAM,QAAQ,GAAG,MAAM,EAAQ,CAAC;IAChC,MAAM,OAAO,GAAG,CAAC,CAAW,EAAE,EAAE;QAC/B,IAAI,CAAC,YAAY,KAAK,EAAE,CAAC;YACxB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,OAAO;QACR,CAAC;QAED,MAAM,MAAM,GAAI,CAAS,EAAE,MAAM,EAAE,MAAM,CAAC;QAC1C,QAAQ,CAAC,MAAM,CACd,MAAM;YACL,IAAI,UAAU,CACb,6BAA6B;gBAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC1D,CACF,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,OAAO,GAA8C,SAAS,CAAC;IAEnE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5B,OAAO,CAAC,mBAAmB,CAAC,KAAY,EAAE,YAAmB,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzE,IAAI,aAAa,EAAE,CAAC;QACnB,QAAQ,CAAC,MAAM,CACd,aAAa,CAAC,MAAM;YACnB,IAAI,UAAU,CACb,6BAA6B;gBAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAC1D,CACF,CAAC;QACF,OAAO,QAAQ,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,gBAAgB,CAAC,KAAY,EAAE,YAAmB,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,GAAG,UAAU,CACnB,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC,EAC5D,OAAO,EAAE,OAAO,IAAI,EAAE,GAAG,IAAI,CAC7B,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CACzC,CAAC;IACD,QAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5B,OAAO,QAAQ,CAAC,OAAO,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"wait-for-event.js","sourceRoot":"","sources":["../../src/wait-for-event.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/stream",
3
- "version": "4.6.0",
3
+ "version": "5.0.0-06e7585",
4
4
  "description": "A building block for direct streaming protocols",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -69,11 +69,11 @@
69
69
  "dao.xyz"
70
70
  ],
71
71
  "devDependencies": {
72
+ "@peerbit/libp2p-test-utils": "3.0.0-06e7585",
72
73
  "@types/fast-fifo": "^1.0.2",
73
74
  "@types/sinon": "^10.0.20",
74
75
  "sinon": "^21.0.0",
75
- "@libp2p/crypto": "^5.1.10",
76
- "@peerbit/libp2p-test-utils": "2.2.0"
76
+ "@libp2p/crypto": "^5.1.10"
77
77
  },
78
78
  "dependencies": {
79
79
  "@chainsafe/libp2p-noise": "^17.0.0",
@@ -98,14 +98,14 @@
98
98
  "uint8arraylist": "^2.4.8",
99
99
  "uint8arrays": "^5.1.0",
100
100
  "yallist": "^5.0.0",
101
- "@peerbit/cache": "2.2.0",
102
- "@peerbit/crypto": "2.4.1",
103
- "@peerbit/logger": "2.0.0",
104
- "@peerbit/time": "2.3.0",
105
- "@peerbit/stream-interface": "5.4.0"
101
+ "@peerbit/cache": "3.0.0-06e7585",
102
+ "@peerbit/crypto": "3.0.0-06e7585",
103
+ "@peerbit/logger": "2.0.0-06e7585",
104
+ "@peerbit/stream-interface": "6.0.0-06e7585",
105
+ "@peerbit/time": "3.0.0-06e7585"
106
106
  },
107
107
  "scripts": {
108
- "bench": "node --loader ts-node/esm ./benchmark/index.ts",
108
+ "bench": "TS_NODE_PROJECT=../../../tsconfig.json node --loader ts-node/esm ./benchmark/index.ts",
109
109
  "clean": "aegir clean",
110
110
  "build": "aegir build --no-bundle",
111
111
  "test": "aegir test --target node",
@@ -0,0 +1,75 @@
1
+ export type SeekRoutingMode =
2
+ | { kind: "seek"; redundancy: number }
3
+ | { kind: "non-seek" };
4
+
5
+ export type ShouldIgnoreDataMessageArgs = {
6
+ signedBySelf: boolean;
7
+ seenBefore: number;
8
+ mode: SeekRoutingMode;
9
+ };
10
+
11
+ export const shouldIgnoreDataMessage = (args: ShouldIgnoreDataMessageArgs) => {
12
+ if (args.signedBySelf) {
13
+ return true;
14
+ }
15
+
16
+ if (args.mode.kind === "seek") {
17
+ return args.seenBefore >= args.mode.redundancy;
18
+ }
19
+
20
+ return args.seenBefore > 0;
21
+ };
22
+
23
+ export type SelectSeekRelayTargetsArgs<T, Id extends string | number> = {
24
+ candidates: Iterable<T>;
25
+ getCandidateId: (candidate: T) => Id;
26
+ inboundId: Id;
27
+ hasSigned: (candidateId: Id) => boolean;
28
+ };
29
+
30
+ export const selectSeekRelayTargets = <T, Id extends string | number>(
31
+ args: SelectSeekRelayTargetsArgs<T, Id>,
32
+ ): T[] => {
33
+ const out: T[] = [];
34
+ for (const candidate of args.candidates) {
35
+ const candidateId = args.getCandidateId(candidate);
36
+ if (candidateId === args.inboundId) continue;
37
+ if (args.hasSigned(candidateId)) continue;
38
+ out.push(candidate);
39
+ }
40
+ return out;
41
+ };
42
+
43
+ export type ShouldAcknowledgeDataMessageArgs = {
44
+ isRecipient: boolean;
45
+ seenBefore: number;
46
+ redundancy: number;
47
+ };
48
+
49
+ export const shouldAcknowledgeDataMessage = (
50
+ args: ShouldAcknowledgeDataMessageArgs,
51
+ ) => {
52
+ return args.isRecipient && args.seenBefore < args.redundancy;
53
+ };
54
+
55
+ export type SeekAckRouteUpdate<Id extends string | number> = {
56
+ from: Id;
57
+ neighbour: Id;
58
+ target: Id;
59
+ distance: number;
60
+ };
61
+
62
+ export const computeSeekAckRouteUpdate = <Id extends string | number>(args: {
63
+ current: Id;
64
+ upstream?: Id;
65
+ downstream: Id;
66
+ target: Id;
67
+ distance: number;
68
+ }): SeekAckRouteUpdate<Id> => {
69
+ return {
70
+ from: args.upstream ?? args.current,
71
+ neighbour: args.downstream,
72
+ target: args.target,
73
+ distance: args.distance,
74
+ };
75
+ };