@push.rocks/smartnetwork 3.0.2 → 4.0.0
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_ts/00_commitinfo_data.d.ts +1 -1
- package/dist_ts/00_commitinfo_data.js +5 -5
- package/dist_ts/errors.d.ts +10 -0
- package/dist_ts/errors.js +19 -0
- package/dist_ts/helpers/stats.js +1 -1
- package/dist_ts/index.d.ts +3 -0
- package/dist_ts/index.js +3 -1
- package/dist_ts/logging.d.ts +22 -0
- package/dist_ts/logging.js +15 -0
- package/dist_ts/smartnetwork.classes.cloudflarespeed.d.ts +10 -17
- package/dist_ts/smartnetwork.classes.cloudflarespeed.js +93 -35
- package/dist_ts/smartnetwork.classes.smartnetwork.d.ts +97 -9
- package/dist_ts/smartnetwork.classes.smartnetwork.js +250 -55
- package/dist_ts/smartnetwork.plugins.d.ts +3 -3
- package/dist_ts/smartnetwork.plugins.js +4 -4
- package/npmextra.json +20 -5
- package/package.json +39 -18
- package/readme.hints.md +1 -0
- package/readme.md +167 -45
- package/ts/00_commitinfo_data.ts +4 -4
- package/ts/errors.ts +20 -0
- package/ts/index.ts +3 -0
- package/ts/logging.ts +30 -0
- package/ts/smartnetwork.classes.cloudflarespeed.ts +124 -75
- package/ts/smartnetwork.classes.smartnetwork.ts +287 -54
- package/ts/smartnetwork.plugins.ts +3 -3
|
@@ -1,39 +1,95 @@
|
|
|
1
1
|
import * as plugins from './smartnetwork.plugins.js';
|
|
2
2
|
import { CloudflareSpeed } from './smartnetwork.classes.cloudflarespeed.js';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import { getLogger } from './logging.js';
|
|
4
|
+
import { NetworkError } from './errors.js';
|
|
5
|
+
import * as stats from './helpers/stats.js';
|
|
6
6
|
export class SmartNetwork {
|
|
7
|
+
/** Static registry for external plugins */
|
|
8
|
+
static { this.pluginsRegistry = new Map(); }
|
|
9
|
+
/** Register a plugin by name */
|
|
10
|
+
static registerPlugin(name, ctor) {
|
|
11
|
+
SmartNetwork.pluginsRegistry.set(name, ctor);
|
|
12
|
+
}
|
|
13
|
+
/** Unregister a plugin by name */
|
|
14
|
+
static unregisterPlugin(name) {
|
|
15
|
+
SmartNetwork.pluginsRegistry.delete(name);
|
|
16
|
+
}
|
|
17
|
+
constructor(options) {
|
|
18
|
+
this.options = options || {};
|
|
19
|
+
this.cache = new Map();
|
|
20
|
+
}
|
|
7
21
|
/**
|
|
8
22
|
* get network speed
|
|
9
|
-
* @param
|
|
23
|
+
* @param opts optional speed test parameters
|
|
10
24
|
*/
|
|
11
|
-
async getSpeed() {
|
|
12
|
-
const cloudflareSpeedInstance = new CloudflareSpeed();
|
|
13
|
-
|
|
14
|
-
return test;
|
|
25
|
+
async getSpeed(opts) {
|
|
26
|
+
const cloudflareSpeedInstance = new CloudflareSpeed(opts);
|
|
27
|
+
return cloudflareSpeedInstance.speedTest();
|
|
15
28
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Send ICMP pings to a host. Optionally specify count for multiple pings.
|
|
31
|
+
*/
|
|
32
|
+
async ping(host, opts) {
|
|
33
|
+
const timeout = opts?.timeout ?? 500;
|
|
34
|
+
const count = opts?.count && opts.count > 1 ? opts.count : 1;
|
|
35
|
+
const pinger = new plugins.smartping.Smartping();
|
|
36
|
+
if (count === 1) {
|
|
37
|
+
// single ping: normalize time to number
|
|
38
|
+
const res = await pinger.ping(host, timeout);
|
|
39
|
+
return {
|
|
40
|
+
...res,
|
|
41
|
+
time: typeof res.time === 'number' ? res.time : NaN,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const times = [];
|
|
45
|
+
let aliveCount = 0;
|
|
46
|
+
for (let i = 0; i < count; i++) {
|
|
47
|
+
try {
|
|
48
|
+
const res = await pinger.ping(host, timeout);
|
|
49
|
+
const t = typeof res.time === 'number' ? res.time : NaN;
|
|
50
|
+
if (res.alive)
|
|
51
|
+
aliveCount++;
|
|
52
|
+
times.push(t);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
times.push(NaN);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const valid = times.filter((t) => !isNaN(t));
|
|
59
|
+
const min = valid.length ? Math.min(...valid) : NaN;
|
|
60
|
+
const max = valid.length ? Math.max(...valid) : NaN;
|
|
61
|
+
const avg = valid.length ? stats.average(valid) : NaN;
|
|
62
|
+
const stddev = valid.length
|
|
63
|
+
? Math.sqrt(stats.average(valid.map((v) => (v - avg) ** 2)))
|
|
64
|
+
: NaN;
|
|
65
|
+
const packetLoss = ((count - aliveCount) / count) * 100;
|
|
66
|
+
return {
|
|
67
|
+
host,
|
|
68
|
+
count,
|
|
69
|
+
times,
|
|
70
|
+
min,
|
|
71
|
+
max,
|
|
72
|
+
avg,
|
|
73
|
+
stddev,
|
|
74
|
+
packetLoss,
|
|
75
|
+
alive: aliveCount > 0,
|
|
76
|
+
};
|
|
20
77
|
}
|
|
21
78
|
/**
|
|
22
79
|
* returns a promise with a boolean answer
|
|
23
80
|
* note: false also resolves with false as argument
|
|
24
81
|
* @param port
|
|
25
82
|
*/
|
|
83
|
+
/**
|
|
84
|
+
* Check if a local port is unused (both IPv4 and IPv6)
|
|
85
|
+
*/
|
|
26
86
|
async isLocalPortUnused(port) {
|
|
27
87
|
const doneIpV4 = plugins.smartpromise.defer();
|
|
28
88
|
const doneIpV6 = plugins.smartpromise.defer();
|
|
29
89
|
const net = await import('net'); // creates only one instance of net ;) even on multiple calls
|
|
30
90
|
// test IPv4 space
|
|
31
91
|
const ipv4Test = net.createServer();
|
|
32
|
-
ipv4Test.once('error', (
|
|
33
|
-
if (err.code !== 'EADDRINUSE') {
|
|
34
|
-
doneIpV4.resolve(false);
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
92
|
+
ipv4Test.once('error', () => {
|
|
37
93
|
doneIpV4.resolve(false);
|
|
38
94
|
});
|
|
39
95
|
ipv4Test.once('listening', () => {
|
|
@@ -46,11 +102,7 @@ export class SmartNetwork {
|
|
|
46
102
|
await doneIpV4.promise;
|
|
47
103
|
// test IPv6 space
|
|
48
104
|
const ipv6Test = net.createServer();
|
|
49
|
-
ipv6Test.once('error',
|
|
50
|
-
if (err.code !== 'EADDRINUSE') {
|
|
51
|
-
doneIpV6.resolve(false);
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
105
|
+
ipv6Test.once('error', () => {
|
|
54
106
|
doneIpV6.resolve(false);
|
|
55
107
|
});
|
|
56
108
|
ipv6Test.once('listening', () => {
|
|
@@ -70,30 +122,69 @@ export class SmartNetwork {
|
|
|
70
122
|
* checks wether a remote port is available
|
|
71
123
|
* @param domainArg
|
|
72
124
|
*/
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
125
|
+
/**
|
|
126
|
+
* Check if a remote port is available
|
|
127
|
+
* @param target host or "host:port"
|
|
128
|
+
* @param opts options including port, protocol (only tcp), retries and timeout
|
|
129
|
+
*/
|
|
130
|
+
/**
|
|
131
|
+
* Check if a remote port is available
|
|
132
|
+
* @param target host or "host:port"
|
|
133
|
+
* @param portOrOpts either a port number (deprecated) or options object
|
|
134
|
+
*/
|
|
135
|
+
async isRemotePortAvailable(target, portOrOpts) {
|
|
136
|
+
let hostPart;
|
|
137
|
+
let port;
|
|
138
|
+
let protocol = 'tcp';
|
|
139
|
+
let retries = 1;
|
|
140
|
+
let timeout;
|
|
141
|
+
// preserve old signature (target, port)
|
|
142
|
+
if (typeof portOrOpts === 'number') {
|
|
143
|
+
[hostPart] = target.split(':');
|
|
144
|
+
port = portOrOpts;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
const opts = portOrOpts || {};
|
|
148
|
+
protocol = opts.protocol ?? 'tcp';
|
|
149
|
+
retries = opts.retries ?? 1;
|
|
150
|
+
timeout = opts.timeout;
|
|
151
|
+
[hostPart] = target.split(':');
|
|
152
|
+
const portPart = target.split(':')[1];
|
|
153
|
+
port = opts.port ?? (portPart ? parseInt(portPart, 10) : undefined);
|
|
154
|
+
}
|
|
155
|
+
if (protocol === 'udp') {
|
|
156
|
+
throw new NetworkError('UDP port check not supported', 'ENOTSUP');
|
|
157
|
+
}
|
|
158
|
+
if (!port) {
|
|
159
|
+
throw new NetworkError('Port not specified', 'EINVAL');
|
|
160
|
+
}
|
|
161
|
+
let last = false;
|
|
162
|
+
for (let attempt = 0; attempt < retries; attempt++) {
|
|
163
|
+
const done = plugins.smartpromise.defer();
|
|
164
|
+
plugins.isopen(hostPart, port, (response) => {
|
|
165
|
+
const info = response[port.toString()];
|
|
166
|
+
done.resolve(Boolean(info?.isOpen));
|
|
167
|
+
});
|
|
168
|
+
last = await done.promise;
|
|
169
|
+
if (last)
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
return last;
|
|
88
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* List network interfaces (gateways)
|
|
176
|
+
*/
|
|
89
177
|
async getGateways() {
|
|
90
|
-
const
|
|
91
|
-
|
|
178
|
+
const fetcher = async () => plugins.os.networkInterfaces();
|
|
179
|
+
if (this.options.cacheTtl && this.options.cacheTtl > 0) {
|
|
180
|
+
return this.getCached('gateways', fetcher);
|
|
181
|
+
}
|
|
182
|
+
return fetcher();
|
|
92
183
|
}
|
|
93
184
|
async getDefaultGateway() {
|
|
94
185
|
const defaultGatewayName = await plugins.systeminformation.networkInterfaceDefault();
|
|
95
186
|
if (!defaultGatewayName) {
|
|
96
|
-
|
|
187
|
+
getLogger().warn?.('Cannot determine default gateway');
|
|
97
188
|
return null;
|
|
98
189
|
}
|
|
99
190
|
const gateways = await this.getGateways();
|
|
@@ -103,21 +194,125 @@ export class SmartNetwork {
|
|
|
103
194
|
ipv6: defaultGateway[1],
|
|
104
195
|
};
|
|
105
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Lookup public IPv4 and IPv6
|
|
199
|
+
*/
|
|
106
200
|
async getPublicIps() {
|
|
107
|
-
|
|
108
|
-
v4: await plugins.publicIp.publicIpv4({
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
201
|
+
const fetcher = async () => ({
|
|
202
|
+
v4: await plugins.publicIp.publicIpv4({ timeout: 1000, onlyHttps: true }).catch(() => null),
|
|
203
|
+
v6: await plugins.publicIp.publicIpv6({ timeout: 1000, onlyHttps: true }).catch(() => null),
|
|
204
|
+
});
|
|
205
|
+
if (this.options.cacheTtl && this.options.cacheTtl > 0) {
|
|
206
|
+
return this.getCached('publicIps', fetcher);
|
|
207
|
+
}
|
|
208
|
+
return fetcher();
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Resolve DNS records (A, AAAA, MX)
|
|
212
|
+
*/
|
|
213
|
+
async resolveDns(host) {
|
|
214
|
+
try {
|
|
215
|
+
const dns = await import('dns');
|
|
216
|
+
const { resolve4, resolve6, resolveMx } = dns.promises;
|
|
217
|
+
const [A, AAAA, MX] = await Promise.all([
|
|
218
|
+
resolve4(host).catch(() => []),
|
|
219
|
+
resolve6(host).catch(() => []),
|
|
220
|
+
resolveMx(host).catch(() => []),
|
|
221
|
+
]);
|
|
222
|
+
return { A, AAAA, MX };
|
|
223
|
+
}
|
|
224
|
+
catch (err) {
|
|
225
|
+
throw new NetworkError(err.message, err.code);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Perform a simple HTTP/HTTPS endpoint health check
|
|
230
|
+
*/
|
|
231
|
+
async checkEndpoint(urlString, opts) {
|
|
232
|
+
const start = plugins.perfHooks.performance.now();
|
|
233
|
+
try {
|
|
234
|
+
const url = new URL(urlString);
|
|
235
|
+
const lib = url.protocol === 'https:' ? plugins.https : await import('http');
|
|
236
|
+
return new Promise((resolve, reject) => {
|
|
237
|
+
const req = lib.request(url, { method: 'GET', timeout: opts?.timeout, agent: false }, (res) => {
|
|
238
|
+
res.on('data', () => { });
|
|
239
|
+
res.once('end', () => {
|
|
240
|
+
const rtt = plugins.perfHooks.performance.now() - start;
|
|
241
|
+
const headers = {};
|
|
242
|
+
for (const [k, v] of Object.entries(res.headers)) {
|
|
243
|
+
headers[k] = Array.isArray(v) ? v.join(',') : String(v);
|
|
244
|
+
}
|
|
245
|
+
resolve({ status: res.statusCode, headers, rtt });
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
req.on('error', (err) => reject(new NetworkError(err.message, err.code)));
|
|
249
|
+
req.end();
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
catch (err) {
|
|
253
|
+
throw new NetworkError(err.message, err.code);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Perform a traceroute: hop-by-hop latency using the system traceroute tool.
|
|
258
|
+
* Falls back to a single-hop stub if traceroute is unavailable or errors.
|
|
259
|
+
*/
|
|
260
|
+
async traceroute(host, opts) {
|
|
261
|
+
const maxHops = opts?.maxHops ?? 30;
|
|
262
|
+
const timeout = opts?.timeout;
|
|
263
|
+
try {
|
|
264
|
+
const { exec } = await import('child_process');
|
|
265
|
+
const cmd = `traceroute -n -m ${maxHops} ${host}`;
|
|
266
|
+
const stdout = await new Promise((resolve, reject) => {
|
|
267
|
+
exec(cmd, { encoding: 'utf8', timeout }, (err, stdout) => {
|
|
268
|
+
if (err)
|
|
269
|
+
return reject(err);
|
|
270
|
+
resolve(stdout);
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
const hops = [];
|
|
274
|
+
for (const raw of stdout.split('\n')) {
|
|
275
|
+
const line = raw.trim();
|
|
276
|
+
if (!line || line.startsWith('traceroute'))
|
|
277
|
+
continue;
|
|
278
|
+
const parts = line.split(/\s+/);
|
|
279
|
+
const ttl = parseInt(parts[0], 10);
|
|
280
|
+
let ip;
|
|
281
|
+
let rtt;
|
|
282
|
+
if (parts[1] === '*' || !parts[1]) {
|
|
283
|
+
ip = parts[1] || '';
|
|
284
|
+
rtt = null;
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
ip = parts[1];
|
|
288
|
+
const timePart = parts.find((p, i) => i >= 2 && /^\d+(\.\d+)?$/.test(p));
|
|
289
|
+
rtt = timePart ? parseFloat(timePart) : null;
|
|
290
|
+
}
|
|
291
|
+
hops.push({ ttl, ip, rtt });
|
|
292
|
+
}
|
|
293
|
+
if (hops.length) {
|
|
294
|
+
return hops;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
// traceroute not available or error: fall through to stub
|
|
299
|
+
}
|
|
300
|
+
// fallback stub
|
|
301
|
+
return [{ ttl: 1, ip: host, rtt: null }];
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Internal caching helper
|
|
305
|
+
*/
|
|
306
|
+
async getCached(key, fetcher) {
|
|
307
|
+
const now = Date.now();
|
|
308
|
+
const entry = this.cache.get(key);
|
|
309
|
+
if (entry && entry.expiry > now) {
|
|
310
|
+
return entry.value;
|
|
311
|
+
}
|
|
312
|
+
const value = await fetcher();
|
|
313
|
+
const ttl = this.options.cacheTtl || 0;
|
|
314
|
+
this.cache.set(key, { value, expiry: now + ttl });
|
|
315
|
+
return value;
|
|
121
316
|
}
|
|
122
317
|
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZXR3b3JrLmNsYXNzZXMuc21hcnRuZXR3b3JrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRuZXR3b3JrLmNsYXNzZXMuc21hcnRuZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMkJBQTJCLENBQUM7QUFFckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTVFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFDdkI7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFFBQVE7UUFDbkIsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3RELE1BQU0sSUFBSSxHQUFHLE1BQU0sdUJBQXVCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFlLEVBQUUsYUFBcUIsR0FBRztRQUN6RCxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1RCxNQUFNLFVBQVUsR0FBRyxNQUFNLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDckUsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBWTtRQUN6QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBVyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFXLENBQUM7UUFDdkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw2REFBNkQ7UUFFOUYsa0JBQWtCO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLEdBQUcs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
|
|
318
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZXR3b3JrLmNsYXNzZXMuc21hcnRuZXR3b3JrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRuZXR3b3JrLmNsYXNzZXMuc21hcnRuZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLG9CQUFvQixDQUFDO0FBcUI1QyxNQUFNLE9BQU8sWUFBWTtJQUN2QiwyQ0FBMkM7YUFDN0Isb0JBQWUsR0FBcUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1RCxnQ0FBZ0M7SUFDekIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFZLEVBQUUsSUFBUztRQUNsRCxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELGtDQUFrQztJQUMzQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBWTtRQUN6QyxZQUFZLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBR0QsWUFBWSxPQUE2QjtRQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsUUFBUSxDQUNuQixJQUFzRDtRQUV0RCxNQUFNLHVCQUF1QixHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELE9BQU8sdUJBQXVCLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUksQ0FDZixJQUFZLEVBQ1osSUFBMkM7UUFFM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELE1BQU0sTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqRCxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQix3Q0FBd0M7WUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3QyxPQUFPO2dCQUNMLEdBQUcsR0FBRztnQkFDTixJQUFJLEVBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRzthQUNwRCxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQztnQkFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ3hELElBQUksR0FBRyxDQUFDLEtBQUs7b0JBQUUsVUFBVSxFQUFFLENBQUM7Z0JBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNwRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNwRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU07WUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1AsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUNoRDtZQUNILENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN4RCxPQUFPO1lBQ0wsSUFBSTtZQUNKLEtBQUs7WUFDTCxLQUFLO1lBQ0wsR0FBRztZQUNILEdBQUc7WUFDSCxHQUFHO1lBQ0gsTUFBTTtZQUNOLFVBQVU7WUFDVixLQUFLLEVBQUUsVUFBVSxHQUFHLENBQUM7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0g7O09BRUc7SUFDSSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBWTtRQUN6QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBVyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFXLENBQUM7UUFDdkQsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyw2REFBNkQ7UUFFOUYsa0JBQWtCO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDMUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUM5QixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQzFCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVqQyxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFFdkIsa0JBQWtCO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDMUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRTtZQUM5QixRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQzFCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7WUFDSCxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU1QiwyQkFBMkI7UUFDM0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQzFDLE1BQU0sVUFBVSxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxVQUFVLEtBQUssSUFBSSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUM7UUFDMUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNIOzs7O09BSUc7SUFDSDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLHFCQUFxQixDQUNoQyxNQUFjLEVBQ2QsVUFBcUc7UUFFckcsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksSUFBd0IsQ0FBQztRQUM3QixJQUFJLFFBQVEsR0FBVyxLQUFLLENBQUM7UUFDN0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksT0FBMkIsQ0FBQztRQUNoQyx3Q0FBd0M7UUFDeEMsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUNwQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7WUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztZQUM1QixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN2QixDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksUUFBUSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxZQUFZLENBQUMsOEJBQThCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxZQUFZLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksSUFBSSxHQUFZLEtBQUssQ0FBQztRQUMxQixLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDbkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQVcsQ0FBQztZQUNuRCxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUE2QyxFQUFFLEVBQUU7Z0JBQy9FLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQzFCLElBQUksSUFBSTtnQkFBRSxPQUFPLElBQUksQ0FBQztRQUN4QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsV0FBVztRQUN0QixNQUFNLE9BQU8sR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUI7UUFJNUIsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLGtDQUFrQyxDQUFDLENBQUM7WUFDdkQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEQsT0FBTztZQUNMLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ3hCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsWUFBWTtRQUN2QixNQUFNLE9BQU8sR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0IsRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7WUFDM0YsRUFBRSxFQUFFLE1BQU0sT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDNUYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3ZELE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDdEMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM5QixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQzthQUNoQyxDQUFDLENBQUM7WUFDSCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUN6QixDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsYUFBYSxDQUN4QixTQUFpQixFQUNqQixJQUEyQjtRQUUzQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUM7WUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMvQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FDckIsR0FBRyxFQUNILEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQ3ZELENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ1gsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTt3QkFDbkIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO3dCQUN4RCxNQUFNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO3dCQUMzQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzs0QkFDakQsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsQ0FBQzt3QkFDRCxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDcEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUNGLENBQUM7Z0JBQ0YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9FLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQ3JCLElBQVksRUFDWixJQUE2QztRQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMvQyxNQUFNLEdBQUcsR0FBRyxvQkFBb0IsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xELE1BQU0sTUFBTSxHQUFXLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzNELElBQUksQ0FDRixHQUFHLEVBQ0gsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUM3QixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFDZCxJQUFJLEdBQUc7d0JBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEIsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO29CQUFFLFNBQVM7Z0JBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ25DLElBQUksRUFBVSxDQUFDO2dCQUNmLElBQUksR0FBa0IsQ0FBQztnQkFDdkIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ2xDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwQixHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUNiLENBQUM7cUJBQU0sQ0FBQztvQkFDTixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNkLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekUsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQy9DLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCwwREFBMEQ7UUFDNUQsQ0FBQztRQUNELGdCQUFnQjtRQUNoQixPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssS0FBSyxDQUFDLFNBQVMsQ0FBSSxHQUFXLEVBQUUsT0FBeUI7UUFDL0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDaEMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyJ9
|
|
@@ -2,9 +2,9 @@ import * as os from 'os';
|
|
|
2
2
|
import * as https from 'https';
|
|
3
3
|
import * as perfHooks from 'perf_hooks';
|
|
4
4
|
export { os, https, perfHooks };
|
|
5
|
-
import * as smartping from '@
|
|
6
|
-
import * as smartpromise from '@
|
|
7
|
-
import * as smartstring from '@
|
|
5
|
+
import * as smartping from '@push.rocks/smartping';
|
|
6
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
7
|
+
import * as smartstring from '@push.rocks/smartstring';
|
|
8
8
|
export { smartpromise, smartping, smartstring };
|
|
9
9
|
import isopen from 'isopen';
|
|
10
10
|
import * as publicIp from 'public-ip';
|
|
@@ -4,9 +4,9 @@ import * as https from 'https';
|
|
|
4
4
|
import * as perfHooks from 'perf_hooks';
|
|
5
5
|
export { os, https, perfHooks };
|
|
6
6
|
// @pushrocks scope
|
|
7
|
-
import * as smartping from '@
|
|
8
|
-
import * as smartpromise from '@
|
|
9
|
-
import * as smartstring from '@
|
|
7
|
+
import * as smartping from '@push.rocks/smartping';
|
|
8
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
9
|
+
import * as smartstring from '@push.rocks/smartstring';
|
|
10
10
|
export { smartpromise, smartping, smartstring };
|
|
11
11
|
// @third party scope
|
|
12
12
|
// @ts-ignore
|
|
@@ -15,4 +15,4 @@ import isopen from 'isopen';
|
|
|
15
15
|
import * as publicIp from 'public-ip';
|
|
16
16
|
import * as systeminformation from 'systeminformation';
|
|
17
17
|
export { isopen, publicIp, systeminformation };
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZXR3b3JrLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydG5ldHdvcmsucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlO0FBQ2YsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxLQUFLLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFFaEMsbUJBQW1CO0FBQ25CLE9BQU8sS0FBSyxTQUFTLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxLQUFLLFlBQVksTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBRWhELHFCQUFxQjtBQUNyQixhQUFhO0FBQ2IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLGFBQWE7QUFDYixPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sbUJBQW1CLENBQUM7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyJ9
|
package/npmextra.json
CHANGED
|
@@ -6,12 +6,27 @@
|
|
|
6
6
|
"gitzone": {
|
|
7
7
|
"projectType": "npm",
|
|
8
8
|
"module": {
|
|
9
|
-
"githost": "
|
|
10
|
-
"gitscope": "
|
|
9
|
+
"githost": "code.foss.global",
|
|
10
|
+
"gitscope": "push.rocks",
|
|
11
11
|
"gitrepo": "smartnetwork",
|
|
12
|
-
"description": "network diagnostics",
|
|
13
|
-
"npmPackagename": "@
|
|
14
|
-
"license": "MIT"
|
|
12
|
+
"description": "A toolkit for network diagnostics including speed tests, port availability checks, and more.",
|
|
13
|
+
"npmPackagename": "@push.rocks/smartnetwork",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"network diagnostics",
|
|
17
|
+
"ping",
|
|
18
|
+
"port check",
|
|
19
|
+
"speed test",
|
|
20
|
+
"network interface",
|
|
21
|
+
"public IP retrieval",
|
|
22
|
+
"Cloudflare speed test",
|
|
23
|
+
"network performance",
|
|
24
|
+
"network utility",
|
|
25
|
+
"TypeScript"
|
|
26
|
+
]
|
|
15
27
|
}
|
|
28
|
+
},
|
|
29
|
+
"tsdoc": {
|
|
30
|
+
"legal": "\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. \n\n**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n"
|
|
16
31
|
}
|
|
17
32
|
}
|
package/package.json
CHANGED
|
@@ -1,32 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartnetwork",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0",
|
|
4
4
|
"private": false,
|
|
5
|
-
"description": "network diagnostics",
|
|
5
|
+
"description": "A toolkit for network diagnostics including speed tests, port availability checks, and more.",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
7
7
|
"typings": "dist_ts/index.d.ts",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"author": "Lossless GmbH",
|
|
10
10
|
"license": "MIT",
|
|
11
|
-
"scripts": {
|
|
12
|
-
"test": "(tstest test/)",
|
|
13
|
-
"build": "(tsbuild --web --allowimplicitany)"
|
|
14
|
-
},
|
|
15
11
|
"devDependencies": {
|
|
16
|
-
"@
|
|
17
|
-
"@
|
|
18
|
-
"@
|
|
19
|
-
"@
|
|
20
|
-
"@
|
|
21
|
-
"@types/node": "^
|
|
12
|
+
"@git.zone/tsbuild": "^2.1.61",
|
|
13
|
+
"@git.zone/tsrun": "^1.2.39",
|
|
14
|
+
"@git.zone/tstest": "^1.0.69",
|
|
15
|
+
"@push.rocks/smartenv": "^5.0.0",
|
|
16
|
+
"@push.rocks/tapbundle": "^5.0.3",
|
|
17
|
+
"@types/node": "^22.15.3"
|
|
22
18
|
},
|
|
23
19
|
"dependencies": {
|
|
24
|
-
"@
|
|
25
|
-
"@
|
|
26
|
-
"@
|
|
27
|
-
"@types/default-gateway": "^
|
|
20
|
+
"@push.rocks/smartping": "^1.0.7",
|
|
21
|
+
"@push.rocks/smartpromise": "^4.2.3",
|
|
22
|
+
"@push.rocks/smartstring": "^4.0.2",
|
|
23
|
+
"@types/default-gateway": "^7.2.2",
|
|
28
24
|
"isopen": "^1.3.0",
|
|
29
|
-
"public-ip": "^
|
|
25
|
+
"public-ip": "^7.0.1",
|
|
30
26
|
"systeminformation": "^5.11.9"
|
|
31
27
|
},
|
|
32
28
|
"files": [
|
|
@@ -43,5 +39,30 @@
|
|
|
43
39
|
],
|
|
44
40
|
"browserslist": [
|
|
45
41
|
"last 1 chrome versions"
|
|
46
|
-
]
|
|
42
|
+
],
|
|
43
|
+
"keywords": [
|
|
44
|
+
"network diagnostics",
|
|
45
|
+
"ping",
|
|
46
|
+
"port check",
|
|
47
|
+
"speed test",
|
|
48
|
+
"network interface",
|
|
49
|
+
"public IP retrieval",
|
|
50
|
+
"Cloudflare speed test",
|
|
51
|
+
"network performance",
|
|
52
|
+
"network utility",
|
|
53
|
+
"TypeScript"
|
|
54
|
+
],
|
|
55
|
+
"homepage": "https://code.foss.global/push.rocks/smartnetwork#readme",
|
|
56
|
+
"repository": {
|
|
57
|
+
"type": "git",
|
|
58
|
+
"url": "https://code.foss.global/push.rocks/smartnetwork.git"
|
|
59
|
+
},
|
|
60
|
+
"bugs": {
|
|
61
|
+
"url": "https://code.foss.global/push.rocks/smartnetwork/issues"
|
|
62
|
+
},
|
|
63
|
+
"scripts": {
|
|
64
|
+
"test": "(tstest test/)",
|
|
65
|
+
"build": "(tsbuild --web --allowimplicitany)",
|
|
66
|
+
"buildDocs": "tsdoc"
|
|
67
|
+
}
|
|
47
68
|
}
|
package/readme.hints.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|