@serve.zone/dcrouter 18.2.1 → 18.4.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/deno.json +1 -1
- package/dist_serve/bundle.js +2986 -2954
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.js +4 -1
- package/dist_ts/db/documents/classes.cached.email.d.ts +61 -4
- package/dist_ts/db/documents/classes.cached.email.js +126 -9
- package/dist_ts/email/classes.accepted-email-spool.d.ts +1 -8
- package/dist_ts/email/classes.accepted-email-spool.js +18 -52
- package/dist_ts/email/classes.mail-egress-coordinator.js +10 -1
- package/dist_ts/email/helpers.email-log-traffic.d.ts +19 -0
- package/dist_ts/email/helpers.email-log-traffic.js +79 -0
- package/dist_ts/email/helpers.inbound-security.d.ts +8 -0
- package/dist_ts/email/helpers.inbound-security.js +35 -0
- package/dist_ts/email/index.d.ts +2 -0
- package/dist_ts/email/index.js +3 -1
- package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +6 -0
- package/dist_ts/opsserver/handlers/email-ops.handler.js +162 -17
- package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +4 -0
- package/dist_ts/remoteingress/classes.tunnel-manager.js +10 -1
- package/dist_ts_interfaces/requests/email-ops.d.ts +85 -0
- package/dist_ts_migrations/index.js +147 -14
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate/email-ops.d.ts +27 -1
- package/dist_ts_web/appstate/email-ops.js +100 -4
- package/dist_ts_web/appstate/runtime.js +11 -3
- package/dist_ts_web/elements/email/ops-view-email-security.d.ts +2 -0
- package/dist_ts_web/elements/email/ops-view-email-security.js +58 -16
- package/dist_ts_web/elements/email/ops-view-emails.d.ts +14 -2
- package/dist_ts_web/elements/email/ops-view-emails.js +128 -4
- package/package.json +6 -6
- package/readme.md +19 -0
- package/readme.plan.md +22 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +7 -0
- package/ts/db/documents/classes.cached.email.ts +199 -7
- package/ts/email/classes.accepted-email-spool.ts +25 -66
- package/ts/email/classes.mail-egress-coordinator.ts +8 -0
- package/ts/email/helpers.email-log-traffic.ts +117 -0
- package/ts/email/helpers.inbound-security.ts +45 -0
- package/ts/email/index.ts +2 -0
- package/ts/opsserver/handlers/email-ops.handler.ts +214 -15
- package/ts/remoteingress/classes.tunnel-manager.ts +14 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate/email-ops.ts +129 -3
- package/ts_web/appstate/runtime.ts +13 -2
- package/ts_web/elements/email/ops-view-email-security.ts +56 -16
- package/ts_web/elements/email/ops-view-emails.ts +130 -2
- package/ts_web/readme.md +7 -0
|
@@ -35,6 +35,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
|
|
|
35
35
|
import * as plugins from '../../plugins.js';
|
|
36
36
|
import { DcRouterDb } from '../classes.dcrouter-db.js';
|
|
37
37
|
const TTL = plugins.smartdata.smartdataTtlValues;
|
|
38
|
+
const DB_OPERATION_TIMEOUT_MS = 5_000;
|
|
38
39
|
/**
|
|
39
40
|
* Helper to get the smartdata database instance
|
|
40
41
|
*/
|
|
@@ -102,6 +103,9 @@ let CachedEmail = (() => {
|
|
|
102
103
|
let _inboundSecurityResults_decorators;
|
|
103
104
|
let _inboundSecurityResults_initializers = [];
|
|
104
105
|
let _inboundSecurityResults_extraInitializers = [];
|
|
106
|
+
let _inboundSecurityDisposition_decorators;
|
|
107
|
+
let _inboundSecurityDisposition_initializers = [];
|
|
108
|
+
let _inboundSecurityDisposition_extraInitializers = [];
|
|
105
109
|
let _attempts_decorators;
|
|
106
110
|
let _attempts_initializers = [];
|
|
107
111
|
let _attempts_extraInitializers = [];
|
|
@@ -162,6 +166,7 @@ let CachedEmail = (() => {
|
|
|
162
166
|
_status_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
|
|
163
167
|
_attachmentCount_decorators = [plugins.smartdata.svDb()];
|
|
164
168
|
_inboundSecurityResults_decorators = [plugins.smartdata.svDb()];
|
|
169
|
+
_inboundSecurityDisposition_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
|
|
165
170
|
_attempts_decorators = [plugins.smartdata.svDb()];
|
|
166
171
|
_maxAttempts_decorators = [plugins.smartdata.svDb()];
|
|
167
172
|
_nextAttempt_decorators = [plugins.smartdata.svDb()];
|
|
@@ -171,7 +176,7 @@ let CachedEmail = (() => {
|
|
|
171
176
|
_senderDomain_decorators = [plugins.smartdata.svDb()];
|
|
172
177
|
_direction_decorators = [plugins.smartdata.svDb()];
|
|
173
178
|
_recipientDomains_decorators = [plugins.smartdata.svDb()];
|
|
174
|
-
_acceptedAt_decorators = [plugins.smartdata.svDb()];
|
|
179
|
+
_acceptedAt_decorators = [plugins.smartdata.index(), plugins.smartdata.svDb()];
|
|
175
180
|
_priority_decorators = [plugins.smartdata.svDb()];
|
|
176
181
|
_routeData_decorators = [plugins.smartdata.svDb()];
|
|
177
182
|
_dkimSigned_decorators = [plugins.smartdata.svDb()];
|
|
@@ -192,6 +197,7 @@ let CachedEmail = (() => {
|
|
|
192
197
|
__esDecorate(null, null, _status_decorators, { kind: "field", name: "status", static: false, private: false, access: { has: obj => "status" in obj, get: obj => obj.status, set: (obj, value) => { obj.status = value; } }, metadata: _metadata }, _status_initializers, _status_extraInitializers);
|
|
193
198
|
__esDecorate(null, null, _attachmentCount_decorators, { kind: "field", name: "attachmentCount", static: false, private: false, access: { has: obj => "attachmentCount" in obj, get: obj => obj.attachmentCount, set: (obj, value) => { obj.attachmentCount = value; } }, metadata: _metadata }, _attachmentCount_initializers, _attachmentCount_extraInitializers);
|
|
194
199
|
__esDecorate(null, null, _inboundSecurityResults_decorators, { kind: "field", name: "inboundSecurityResults", static: false, private: false, access: { has: obj => "inboundSecurityResults" in obj, get: obj => obj.inboundSecurityResults, set: (obj, value) => { obj.inboundSecurityResults = value; } }, metadata: _metadata }, _inboundSecurityResults_initializers, _inboundSecurityResults_extraInitializers);
|
|
200
|
+
__esDecorate(null, null, _inboundSecurityDisposition_decorators, { kind: "field", name: "inboundSecurityDisposition", static: false, private: false, access: { has: obj => "inboundSecurityDisposition" in obj, get: obj => obj.inboundSecurityDisposition, set: (obj, value) => { obj.inboundSecurityDisposition = value; } }, metadata: _metadata }, _inboundSecurityDisposition_initializers, _inboundSecurityDisposition_extraInitializers);
|
|
195
201
|
__esDecorate(null, null, _attempts_decorators, { kind: "field", name: "attempts", static: false, private: false, access: { has: obj => "attempts" in obj, get: obj => obj.attempts, set: (obj, value) => { obj.attempts = value; } }, metadata: _metadata }, _attempts_initializers, _attempts_extraInitializers);
|
|
196
202
|
__esDecorate(null, null, _maxAttempts_decorators, { kind: "field", name: "maxAttempts", static: false, private: false, access: { has: obj => "maxAttempts" in obj, get: obj => obj.maxAttempts, set: (obj, value) => { obj.maxAttempts = value; } }, metadata: _metadata }, _maxAttempts_initializers, _maxAttempts_extraInitializers);
|
|
197
203
|
__esDecorate(null, null, _nextAttempt_decorators, { kind: "field", name: "nextAttempt", static: false, private: false, access: { has: obj => "nextAttempt" in obj, get: obj => obj.nextAttempt, set: (obj, value) => { obj.nextAttempt = value; } }, metadata: _metadata }, _nextAttempt_initializers, _nextAttempt_extraInitializers);
|
|
@@ -260,10 +266,12 @@ let CachedEmail = (() => {
|
|
|
260
266
|
attachmentCount = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _attachmentCount_initializers, void 0));
|
|
261
267
|
/** JSON-serialized inbound SPF/DKIM/DMARC verdicts from the SMTP session. */
|
|
262
268
|
inboundSecurityResults = (__runInitializers(this, _attachmentCount_extraInitializers), __runInitializers(this, _inboundSecurityResults_initializers, void 0));
|
|
269
|
+
/** Authentication disposition, kept separate from delivery/lifecycle status. */
|
|
270
|
+
inboundSecurityDisposition = (__runInitializers(this, _inboundSecurityResults_extraInitializers), __runInitializers(this, _inboundSecurityDisposition_initializers, void 0));
|
|
263
271
|
/**
|
|
264
272
|
* Number of delivery attempts
|
|
265
273
|
*/
|
|
266
|
-
attempts = (__runInitializers(this,
|
|
274
|
+
attempts = (__runInitializers(this, _inboundSecurityDisposition_extraInitializers), __runInitializers(this, _attempts_initializers, 0));
|
|
267
275
|
/**
|
|
268
276
|
* Maximum number of delivery attempts
|
|
269
277
|
*/
|
|
@@ -348,6 +356,9 @@ let CachedEmail = (() => {
|
|
|
348
356
|
if (this.rawContentObjectKey) {
|
|
349
357
|
delete savableObject.rawContent;
|
|
350
358
|
}
|
|
359
|
+
if (this.inboundSecurityDisposition === undefined) {
|
|
360
|
+
delete savableObject.inboundSecurityDisposition;
|
|
361
|
+
}
|
|
351
362
|
return savableObject;
|
|
352
363
|
}
|
|
353
364
|
static async findBySubmissionIdempotencyKey(credentialIdArg, idempotencyKeyArg) {
|
|
@@ -418,18 +429,124 @@ let CachedEmail = (() => {
|
|
|
418
429
|
await cursor.close();
|
|
419
430
|
}
|
|
420
431
|
}
|
|
432
|
+
static getNativeCollection() {
|
|
433
|
+
return getDb().mongoDb.collection('CachedEmail');
|
|
434
|
+
}
|
|
435
|
+
static buildListQuery(filterArg) {
|
|
436
|
+
const query = {};
|
|
437
|
+
if (filterArg.direction) {
|
|
438
|
+
query.direction = filterArg.direction;
|
|
439
|
+
}
|
|
440
|
+
if (filterArg.recipientDomain) {
|
|
441
|
+
query.recipientDomains = filterArg.recipientDomain.toLowerCase();
|
|
442
|
+
}
|
|
443
|
+
if (filterArg.search) {
|
|
444
|
+
if (typeof filterArg.search !== 'string' || filterArg.search.length > 200) {
|
|
445
|
+
throw new Error('Invalid CachedEmail search');
|
|
446
|
+
}
|
|
447
|
+
const escapedSearch = filterArg.search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
448
|
+
query.$or = [
|
|
449
|
+
{ from: { $regex: escapedSearch, $options: 'i' } },
|
|
450
|
+
{ to: { $regex: escapedSearch, $options: 'i' } },
|
|
451
|
+
{ subject: { $regex: escapedSearch, $options: 'i' } },
|
|
452
|
+
{ messageId: { $regex: escapedSearch, $options: 'i' } },
|
|
453
|
+
];
|
|
454
|
+
}
|
|
455
|
+
if (filterArg.from !== undefined || filterArg.to !== undefined) {
|
|
456
|
+
const from = filterArg.from;
|
|
457
|
+
const to = filterArg.to;
|
|
458
|
+
if (!Number.isSafeInteger(from)
|
|
459
|
+
|| !Number.isSafeInteger(to)
|
|
460
|
+
|| from < 0
|
|
461
|
+
|| to < from) {
|
|
462
|
+
throw new Error('Invalid CachedEmail time range');
|
|
463
|
+
}
|
|
464
|
+
query.acceptedAt = { $gte: from, $lte: to };
|
|
465
|
+
}
|
|
466
|
+
return query;
|
|
467
|
+
}
|
|
421
468
|
/**
|
|
422
469
|
* Find the most recently accepted emails, newest first.
|
|
423
470
|
*/
|
|
424
471
|
static async findRecent(limit = 200, filter = {}) {
|
|
425
|
-
const query =
|
|
426
|
-
|
|
427
|
-
|
|
472
|
+
const query = CachedEmail.buildListQuery(filter);
|
|
473
|
+
return await CachedEmail.findLimited(query, limit, { acceptedAt: -1 });
|
|
474
|
+
}
|
|
475
|
+
static async findOldestAcceptedAt(filterArg, cutoffArg) {
|
|
476
|
+
if (!Number.isSafeInteger(cutoffArg) || cutoffArg < 0) {
|
|
477
|
+
throw new Error('CachedEmail.findOldestAcceptedAt requires a valid cutoff');
|
|
428
478
|
}
|
|
429
|
-
|
|
430
|
-
|
|
479
|
+
const query = CachedEmail.buildListQuery(filterArg);
|
|
480
|
+
query.acceptedAt = { $gte: cutoffArg };
|
|
481
|
+
const collection = await CachedEmail.getNativeCollection();
|
|
482
|
+
const row = await collection.findOne(query, {
|
|
483
|
+
projection: { acceptedAt: 1 },
|
|
484
|
+
sort: { acceptedAt: 1 },
|
|
485
|
+
timeoutMS: DB_OPERATION_TIMEOUT_MS,
|
|
486
|
+
});
|
|
487
|
+
const acceptedAt = Number(row?.acceptedAt);
|
|
488
|
+
return Number.isSafeInteger(acceptedAt) && acceptedAt >= 0 ? acceptedAt : null;
|
|
489
|
+
}
|
|
490
|
+
static async aggregateEmailLogTraffic(filterArg, windowStartArg, windowEndArg, bucketSizeMsArg) {
|
|
491
|
+
if (!Number.isSafeInteger(windowStartArg)
|
|
492
|
+
|| !Number.isSafeInteger(windowEndArg)
|
|
493
|
+
|| !Number.isSafeInteger(bucketSizeMsArg)
|
|
494
|
+
|| windowStartArg < 0
|
|
495
|
+
|| windowEndArg < windowStartArg
|
|
496
|
+
|| bucketSizeMsArg <= 0) {
|
|
497
|
+
throw new Error('CachedEmail.aggregateEmailLogTraffic received an invalid window');
|
|
431
498
|
}
|
|
432
|
-
|
|
499
|
+
const query = CachedEmail.buildListQuery(filterArg);
|
|
500
|
+
query.acceptedAt = { $gte: windowStartArg, $lte: windowEndArg };
|
|
501
|
+
const collection = await CachedEmail.getNativeCollection();
|
|
502
|
+
const cursor = collection.find(query, {
|
|
503
|
+
projection: { acceptedAt: 1, direction: 1, status: 1 },
|
|
504
|
+
batchSize: 1000,
|
|
505
|
+
timeoutMS: DB_OPERATION_TIMEOUT_MS,
|
|
506
|
+
});
|
|
507
|
+
try {
|
|
508
|
+
const buckets = new Map();
|
|
509
|
+
while (await cursor.hasNext()) {
|
|
510
|
+
const row = await cursor.next();
|
|
511
|
+
if (!row) {
|
|
512
|
+
continue;
|
|
513
|
+
}
|
|
514
|
+
const acceptedAt = Number(row.acceptedAt);
|
|
515
|
+
if (!Number.isSafeInteger(acceptedAt)) {
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
const bucketStart = Math.floor(acceptedAt / bucketSizeMsArg) * bucketSizeMsArg;
|
|
519
|
+
let bucket = buckets.get(bucketStart);
|
|
520
|
+
if (!bucket) {
|
|
521
|
+
bucket = { bucketStart, sent: 0, received: 0, failed: 0 };
|
|
522
|
+
buckets.set(bucketStart, bucket);
|
|
523
|
+
}
|
|
524
|
+
if (row.status === 'failed' || row.status === 'rejected') {
|
|
525
|
+
bucket.failed++;
|
|
526
|
+
}
|
|
527
|
+
else if (row.direction === 'outbound') {
|
|
528
|
+
bucket.sent++;
|
|
529
|
+
}
|
|
530
|
+
else if (row.direction === 'inbound') {
|
|
531
|
+
bucket.received++;
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
return [...buckets.values()].sort((firstArg, secondArg) => (firstArg.bucketStart - secondArg.bucketStart));
|
|
535
|
+
}
|
|
536
|
+
finally {
|
|
537
|
+
await cursor.close({ timeoutMS: DB_OPERATION_TIMEOUT_MS });
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
static async findRecentSecurityCandidates(limitArg, cutoffArg) {
|
|
541
|
+
const safeLimit = Math.min(Math.max(Math.floor(limitArg), 1), 1000);
|
|
542
|
+
if (!Number.isSafeInteger(cutoffArg) || cutoffArg < 0) {
|
|
543
|
+
throw new Error('CachedEmail.findRecentSecurityCandidates requires a valid cutoff');
|
|
544
|
+
}
|
|
545
|
+
return await CachedEmail.findLimited({
|
|
546
|
+
direction: 'inbound',
|
|
547
|
+
inboundSecurityDisposition: { $in: ['flagged', 'rejected'] },
|
|
548
|
+
acceptedAt: { $gte: cutoffArg },
|
|
549
|
+
}, safeLimit, { acceptedAt: -1 });
|
|
433
550
|
}
|
|
434
551
|
/**
|
|
435
552
|
* Find emails addressed to a recipient domain
|
|
@@ -518,4 +635,4 @@ let CachedEmail = (() => {
|
|
|
518
635
|
return CachedEmail = _classThis;
|
|
519
636
|
})();
|
|
520
637
|
export { CachedEmail };
|
|
521
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5jYWNoZWQuZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7QUE2RGpEOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBRXJEOzs7OztHQUtHO0lBRVUsV0FBVzs0QkFEdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ1gsT0FBTyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBQWpELFNBQVEsV0FBc0Q7Ozs7OEJBSXBGLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQ3ZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7OEJBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzhCQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsrQkFNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVB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
|
|
638
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5jYWNoZWQuZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9kYi9kb2N1bWVudHMvY2xhc3Nlcy5jYWNoZWQuZW1haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXZELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUM7QUFDakQsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUM7QUFnSHRDOztHQUVHO0FBQ0gsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBRXJEOzs7OztHQUtHO0lBRVUsV0FBVzs0QkFEdkIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7Ozs7c0JBQ1gsT0FBTyxDQUFDLFNBQVMsQ0FBQyx1QkFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBQWpELFNBQVEsV0FBc0Q7Ozs7OEJBSXBGLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQ3ZCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtnQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7OEJBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzhCQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsrQkFNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7bUNBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3NDQUl4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTsrQ0FJeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7MENBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2tEQUl4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtvREFJeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7NENBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFOzRDQUl4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtrQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7MkNBSXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2tEQUl4QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtzREFJeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFDekIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7b0NBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3VDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt1Q0FTeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7K0NBT3hCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTt1Q0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7d0NBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO3FDQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTs0Q0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7c0NBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQ3pCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO29DQU14QixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRTtxQ0FNeEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7c0NBTXhCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBdEt6Qix3SkFBTyxFQUFFLDZCQUFGLEVBQUUsK0VBQVU7WUFNbkIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBTTFCLDhKQUFPLElBQUksNkJBQUosSUFBSSxtRkFBVTtZQU1yQix3SkFBTyxFQUFFLDZCQUFGLEVBQUUsK0VBQVk7WUFNckIsd0pBQU8sRUFBRSw2QkFBRixFQUFFLCtFQUFZO1lBTXJCLDJKQUFPLEdBQUcsNkJBQUgsR0FBRyxpRkFBWTtZQU10Qix1S0FBTyxPQUFPLDZCQUFQLE9BQU8seUZBQVU7WUFJeEIsZ0xBQU8sVUFBVSw2QkFBVixVQUFVLCtGQUFVO1lBSTNCLDJNQUFPLG1CQUFtQiw2QkFBbkIsbUJBQW1CLGlIQUFVO1lBSXBDLDRMQUFPLGNBQWMsNkJBQWQsY0FBYyx1R0FBYTtZQUlsQyxvTkFBTyxzQkFBc0IsNkJBQXRCLHNCQUFzQix1SEFBVTtZQUl2QywwTkFBTyx3QkFBd0IsNkJBQXhCLHdCQUF3QiwySEFBVTtZQUl6QyxrTUFBTyxnQkFBZ0IsNkJBQWhCLGdCQUFnQiwyR0FBVTtZQUlqQyxrTUFBTyxnQkFBZ0IsNkJBQWhCLGdCQUFnQiwyR0FBcUM7WUFPNUQsb0tBQU8sTUFBTSw2QkFBTixNQUFNLHVGQUFzQjtZQUluQywrTEFBTyxlQUFlLDZCQUFmLGVBQWUseUdBQVU7WUFJaEMsb05BQU8sc0JBQXNCLDZCQUF0QixzQkFBc0IsdUhBQVU7WUFLdkMsZ09BQU8sMEJBQTBCLDZCQUExQiwwQkFBMEIsK0hBQW1DO1lBTXBFLDBLQUFPLFFBQVEsNkJBQVIsUUFBUSwyRkFBYTtZQU01QixtTEFBTyxXQUFXLDZCQUFYLFdBQVcsaUdBQWE7WUFTL0IsbUxBQU8sV0FBVyw2QkFBWCxXQUFXLGlHQUFRO1lBTzFCLDJNQUFPLG1CQUFtQiw2QkFBbkIsbUJBQW1CLGlIQUFRO1lBTWxDLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBVTtZQU0xQixtTEFBTyxXQUFXLDZCQUFYLFdBQVcsaUdBQVE7WUFNMUIsc0xBQU8sWUFBWSw2QkFBWixZQUFZLG1HQUFVO1lBTTdCLDZLQUFPLFNBQVMsNkJBQVQsU0FBUyw2RkFBcUM7WUFNckQsa01BQU8sZ0JBQWdCLDZCQUFoQixnQkFBZ0IsMkdBQWdCO1lBT3ZDLGdMQUFPLFVBQVUsNkJBQVYsVUFBVSwrRkFBYTtZQU05QiwwS0FBTyxRQUFRLDZCQUFSLFFBQVEsMkZBQWE7WUFNNUIsNktBQU8sU0FBUyw2QkFBVCxTQUFTLDZGQUFVO1lBTTFCLGdMQUFPLFVBQVUsNkJBQVYsVUFBVSwrRkFBa0I7WUE3S3JDLDZLQStoQkM7OztZQS9oQlksdURBQVc7O1FBQ3RCOztXQUVHO1FBR0ksRUFBRSxxREFBVTtRQUVuQjs7V0FFRztRQUVJLFNBQVMsOEdBQVU7UUFFMUI7O1dBRUc7UUFFSSxJQUFJLGdIQUFVO1FBRXJCOztXQUVHO1FBRUksRUFBRSx5R0FBWTtRQUVyQjs7V0FFRztRQUVJLEVBQUUsdUdBQVk7UUFFckI7O1dBRUc7UUFFSSxHQUFHLHdHQUFZO1FBRXRCOztXQUVHO1FBRUksT0FBTyw2R0FBVTtRQUV4QiwwRUFBMEU7UUFFbkUsVUFBVSxvSEFBVTtRQUUzQixnRUFBZ0U7UUFFekQsbUJBQW1CLGdJQUFVO1FBRXBDLHdDQUF3QztRQUVqQyxjQUFjLDJIQUFXLENBQUMsR0FBQztRQUVsQywyRUFBMkU7UUFFcEUsc0JBQXNCLHVJQUFVO1FBRXZDLGlGQUFpRjtRQUUxRSx3QkFBd0IsaUpBQVU7UUFFekMsdUVBQXVFO1FBRWhFLGdCQUFnQiwySUFBVTtRQUVqQyxxRUFBcUU7UUFFOUQsZ0JBQWdCLDBIQUFrQyxFQUFFLEdBQUM7UUFFNUQ7O1dBRUc7UUFHSSxNQUFNLHlIQUFzQjtRQUVuQyxzRUFBc0U7UUFFL0QsZUFBZSx3SEFBVTtRQUVoQyw2RUFBNkU7UUFFdEUsc0JBQXNCLHdJQUFVO1FBRXZDLGdGQUFnRjtRQUd6RSwwQkFBMEIsbUpBQW1DO1FBRXBFOztXQUVHO1FBRUksUUFBUSw0SEFBVyxDQUFDLEdBQUM7UUFFNUI7O1dBRUc7UUFFSSxXQUFXLDZHQUFXLENBQUMsR0FBQztRQUUvQjs7Ozs7V0FLRztRQUVJLFdBQVcseUhBQVE7UUFFMUI7OztXQUdHO1FBRUksbUJBQW1CLGlJQUFRO1FBRWxDOztXQUVHO1FBRUksU0FBUywrSEFBVTtRQUUxQjs7V0FFRztRQUVJLFdBQVcsdUhBQVE7UUFFMUI7O1dBRUc7UUFFSSxZQUFZLDBIQUFVO1FBRTdCOztXQUVHO1FBRUksU0FBUywrR0FBMEIsVUFBVSxHQUFDO1FBRXJEOztXQUVHO1FBRUksZ0JBQWdCLG1IQUFhLEVBQUUsR0FBQztRQUV2Qzs7V0FFRztRQUdJLFVBQVUsb0hBQVcsQ0FBQyxHQUFDO1FBRTlCOztXQUVHO1FBRUksUUFBUSw0R0FBVyxDQUFDLEdBQUM7UUFFNUI7O1dBRUc7UUFFSSxTQUFTLG9IQUFVO1FBRTFCOztXQUVHO1FBRUksVUFBVSw2R0FBWSxLQUFLLEdBQUM7UUFFbkM7WUFDRSxLQUFLLEVBQUUsQ0FBQzs7WUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtZQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztZQUN4QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7U0FDZjtRQUVlLEtBQUssQ0FBQyxtQkFBbUI7WUFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN4RCxNQUFNLGdCQUFnQixHQUFHO2dCQUN2QixJQUFJLENBQUMsc0JBQXNCO2dCQUMzQixJQUFJLENBQUMsd0JBQXdCO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCO2FBQ3RCLENBQUM7WUFDRixJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pFLE9BQU8sYUFBYSxDQUFDLHNCQUFzQixDQUFDO2dCQUM1QyxPQUFPLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztnQkFDOUMsT0FBTyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxJQUNMLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixLQUFLLFFBQVE7bUJBQzVDLENBQUMscUNBQXFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzttQkFDeEUsT0FBTyxJQUFJLENBQUMsd0JBQXdCLEtBQUssUUFBUTttQkFDakQsQ0FBQyxzQ0FBc0MsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO21CQUMzRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRO21CQUN6QyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFDdkQsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7WUFDNUUsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzdCLE9BQU8sYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2xELE9BQU8sYUFBYSxDQUFDLDBCQUEwQixDQUFDO1lBQ2xELENBQUM7WUFDRCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsQ0FDaEQsZUFBdUIsRUFDdkIsaUJBQXlCO1lBRXpCLElBQ0UsT0FBTyxlQUFlLEtBQUssUUFBUTttQkFDaEMsQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO21CQUM1RCxPQUFPLGlCQUFpQixLQUFLLFFBQVE7bUJBQ3JDLENBQUMsc0NBQXNDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2dCQUNsRSxNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7WUFDNUUsT0FBTyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ25DLHNCQUFzQixFQUFFLGVBQWU7Z0JBQ3ZDLHdCQUF3QixFQUFFLGlCQUFpQjthQUM1QyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsU0FBUztZQUNyQixNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLEtBQUssQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRDs7V0FFRztRQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQVU7WUFDckMsT0FBTyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ25DLEVBQUU7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUEwQjtZQUN6RCxPQUFPLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQztnQkFDcEMsTUFBTTthQUNQLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRDs7V0FFRztRQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbkQsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixPQUFPLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQztnQkFDbkMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsRUFBRTtnQkFDdEQsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTthQUMzQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ1osQ0FBQztRQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxHQUFHLEVBQUU7WUFDbEQsT0FBTyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUM7Z0JBQ25DLE1BQU0sRUFBRSxRQUFRO2FBQ2pCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDWixDQUFDO1FBRU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQzlCLE1BQTJCLEVBQzNCLEtBQWEsRUFDYixJQUE2QjtZQUU3QixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQUksV0FFbEIsQ0FBQyxVQUFVLENBQUM7WUFDZCxNQUFNLE1BQU0sR0FBRyxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQ3ZDLE1BQU0sRUFDTixXQUFpRSxDQUNsRSxDQUFDO1lBQ0YsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxDQUFDO1lBQ0QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsQ0FBQztvQkFBUyxDQUFDO2dCQUNULE1BQU0sTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO1FBRU8sTUFBTSxDQUFDLG1CQUFtQjtZQUNoQyxPQUFPLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVPLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBaUM7WUFDN0QsTUFBTSxLQUFLLEdBQXdCLEVBQUUsQ0FBQztZQUN0QyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDeEIsS0FBSyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkUsQ0FBQztZQUNELElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixJQUFJLE9BQU8sU0FBUyxDQUFDLE1BQU0sS0FBSyxRQUFRLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7b0JBQzFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztnQkFDRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDOUUsS0FBSyxDQUFDLEdBQUcsR0FBRztvQkFDVixFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNsRCxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNoRCxFQUFFLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFO29CQUNyRCxFQUFFLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFO2lCQUN4RCxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDL0QsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDNUIsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDeEIsSUFDRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO3VCQUN4QixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO3VCQUN4QixJQUFlLEdBQUcsQ0FBQzt1QkFDbkIsRUFBYSxHQUFJLElBQWUsRUFDcEMsQ0FBQztvQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQ0QsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzlDLENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRDs7V0FFRztRQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUM1QixLQUFLLEdBQUcsR0FBRyxFQUNYLFNBQWlDLEVBQUU7WUFFbkMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRCxPQUFPLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FDdEMsU0FBaUMsRUFDakMsU0FBaUI7WUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLDBEQUEwRCxDQUFDLENBQUM7WUFDOUUsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEQsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUN2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzNELE1BQU0sR0FBRyxHQUFHLE1BQU0sVUFBVSxDQUFDLE9BQU8sQ0FDbEMsS0FBSyxFQUNMO2dCQUNFLFVBQVUsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7Z0JBQzdCLElBQUksRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUU7Z0JBQ3ZCLFNBQVMsRUFBRSx1QkFBdUI7YUFDbkMsQ0FDRixDQUFDO1lBQ0YsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMzQyxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDakYsQ0FBQztRQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQzFDLFNBQWlDLEVBQ2pDLGNBQXNCLEVBQ3RCLFlBQW9CLEVBQ3BCLGVBQXVCO1lBRXZCLElBQ0UsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQzttQkFDbEMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQzttQkFDbkMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQzttQkFDdEMsY0FBYyxHQUFHLENBQUM7bUJBQ2xCLFlBQVksR0FBRyxjQUFjO21CQUM3QixlQUFlLElBQUksQ0FBQyxFQUN2QixDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztZQUNyRixDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwRCxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDaEUsTUFBTSxVQUFVLEdBQUcsTUFBTSxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUM1QixLQUFLLEVBQ0w7Z0JBQ0UsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUU7Z0JBQ3RELFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSx1QkFBdUI7YUFDbkMsQ0FDRixDQUFDO1lBQ0YsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFxQyxDQUFDO2dCQUM3RCxPQUFPLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7b0JBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNoQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ1QsU0FBUztvQkFDWCxDQUFDO29CQUNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQ3RDLFNBQVM7b0JBQ1gsQ0FBQztvQkFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsR0FBRyxlQUFlLENBQUM7b0JBQy9FLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQzt3QkFDWixNQUFNLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQzt3QkFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ25DLENBQUM7b0JBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUN6RCxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xCLENBQUM7eUJBQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUN4QyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ2hCLENBQUM7eUJBQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO3dCQUN2QyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3BCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUN6RCxRQUFRLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQzdDLENBQUMsQ0FBQztZQUNMLENBQUM7b0JBQVMsQ0FBQztnQkFDVCxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUM7UUFDSCxDQUFDO1FBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FDOUMsUUFBZ0IsRUFDaEIsU0FBaUI7WUFFakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7WUFDdEYsQ0FBQztZQUNELE9BQU8sTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDO2dCQUNuQyxTQUFTLEVBQUUsU0FBUztnQkFDcEIsMEJBQTBCLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQzVELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7YUFDaEMsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRDs7V0FFRztRQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsTUFBYztZQUN0RCxPQUFPLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FBQztnQkFDcEMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTthQUNuRCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQWM7WUFDbkQsT0FBTyxNQUFNLFdBQVcsQ0FBQyxZQUFZLENBQUM7Z0JBQ3BDLFlBQVksRUFBRSxNQUFNO2FBQ3JCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRDs7V0FFRztRQUNJLGFBQWE7WUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2hDLENBQUM7UUFFRDs7O1dBR0c7UUFDSSxVQUFVLENBQUMsV0FBbUI7WUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7WUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzlCLHNFQUFzRTtZQUN0RSx3Q0FBd0M7WUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBRUQ7O1dBRUc7UUFDSSxVQUFVLENBQUMsS0FBYTtZQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO1FBRU0scUJBQXFCLENBQUMsY0FBMkM7WUFDdEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUN2RCxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsRUFBRSxDQUN0RCxDQUFDO1lBQ0YsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRDs7V0FFRztRQUNJLGFBQWEsQ0FBQyxVQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7WUFDbEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1lBRWxELDBDQUEwQztZQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsSUFBSSxDQUFDLFdBQVcsV0FBVyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDO1FBRUQ7O1dBRUc7UUFDSSxrQkFBa0I7WUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzdDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVEOztXQUVHO1FBQ0ksc0JBQXNCO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7WUFDbEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN2QyxDQUFDOzs7O1NBOWhCVSxXQUFXIn0=
|
|
@@ -3,14 +3,7 @@ import { CachedEmail } from '../db/index.js';
|
|
|
3
3
|
import type { ICachedEmailSmtpTransaction, TCachedEmailDirection } from '../db/documents/classes.cached.email.js';
|
|
4
4
|
import type { IAcceptEnvelopeContext, IExtendedSmtpSession, IMessageAcceptanceContext, IMessageAcceptanceDecision, UnifiedEmailServer } from '@push.rocks/smartmta';
|
|
5
5
|
import type { DcRouter } from '../classes.dcrouter.js';
|
|
6
|
-
|
|
7
|
-
export interface IInboundAcceptanceEvaluation {
|
|
8
|
-
status: 'accepted' | 'flagged';
|
|
9
|
-
doubts: string[];
|
|
10
|
-
dmarcReject: boolean;
|
|
11
|
-
dmarcDomain?: string;
|
|
12
|
-
}
|
|
13
|
-
export declare function evaluateInboundAcceptance(securityResults: any): IInboundAcceptanceEvaluation;
|
|
6
|
+
export { evaluateInboundAcceptance, type IInboundAcceptanceEvaluation, } from './helpers.inbound-security.js';
|
|
14
7
|
export declare const DCROUTER_CACHE_ID_HEADER = "X-Dcrouter-Cached-Email-Id";
|
|
15
8
|
/**
|
|
16
9
|
* Permanent per-email storage failure: the raw RFC822 payload of an accepted
|