@privacyscrubber/mcp-server 2.3.8 → 2.3.9
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/README.md +1 -1
- package/index.js +120 -135
- package/manifest.json +1 -1
- package/package.json +1 -2
- package/ps-license-manager.cjs +1 -1
- package/ps-pii-engine.cjs +92 -20
- package/ps-pii-engine.js +92 -20
- package/server.json +2 -2
- package/bundle.mcpb +0 -0
package/README.md
CHANGED
|
@@ -443,7 +443,7 @@ Returns a visual dashboard showing your current tier, session request count, act
|
|
|
443
443
|
* **Response Example (Free Tier):**
|
|
444
444
|
```
|
|
445
445
|
╔══════════════════════════════════════════════════╗
|
|
446
|
-
║ PrivacyScrubber MCP Server v2.3.
|
|
446
|
+
║ PrivacyScrubber MCP Server v2.3.8 ║
|
|
447
447
|
╠══════════════════════════════════════════════════╣
|
|
448
448
|
║ 🔓 Tier: FREE ║
|
|
449
449
|
║ 📊 Session requests: 5 ║
|
package/index.js
CHANGED
|
@@ -331,6 +331,118 @@ function buildCisoAuditTelemetry(currentTokenMap = {}) {
|
|
|
331
331
|
};
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
+
// ── PSR-2 Receipt Integrity (real SHA-256; parity with src/modules/receipt-integrity.js) ──
|
|
335
|
+
const PSR2_VERSION = 'PSR-2';
|
|
336
|
+
const PSR2_STATEMENTS = {
|
|
337
|
+
measured: [
|
|
338
|
+
'Token Manifest SHA-256: digest of the sorted token labels held in this session (original values are never hashed or exported).',
|
|
339
|
+
'Entity counts per type.',
|
|
340
|
+
'Receipt SHA-256: digest of the canonical field string, so edits to this receipt are detectable.'
|
|
341
|
+
],
|
|
342
|
+
byDesign: [
|
|
343
|
+
'The sanitization engine runs locally in process memory and does not transmit prompt content. This is an architectural property and is not measured by this receipt.',
|
|
344
|
+
'Token-to-original mappings are held in volatile memory for the session. This receipt does not record their contents.'
|
|
345
|
+
],
|
|
346
|
+
limits: [
|
|
347
|
+
'This receipt is not a digital signature and does not prove who generated it or when.',
|
|
348
|
+
'No final output digest is recorded by this export (Output SHA-256: not recorded).',
|
|
349
|
+
'Detection is pattern-based. Free-text narrative can contain indirect identifiers that remain after sanitization; review output before sharing.',
|
|
350
|
+
'Regulatory references are informational technical-safeguard mappings, not a legal determination of compliance.'
|
|
351
|
+
]
|
|
352
|
+
};
|
|
353
|
+
function psr2Sha256(input) {
|
|
354
|
+
return crypto.createHash('sha256').update(String(input == null ? '' : input), 'utf8').digest('hex');
|
|
355
|
+
}
|
|
356
|
+
function buildPsr2Receipt(tokenMap, timestamp = new Date().toISOString()) {
|
|
357
|
+
const labels = (tokenMap && typeof tokenMap === 'object' ? Object.keys(tokenMap) : []).slice().sort();
|
|
358
|
+
const counts = {};
|
|
359
|
+
for (const t of labels) {
|
|
360
|
+
const m = t.match(/\[([A-Z_]+)_\d+\]/);
|
|
361
|
+
const type = m ? m[1] : 'CUSTOM';
|
|
362
|
+
counts[type] = (counts[type] || 0) + 1;
|
|
363
|
+
}
|
|
364
|
+
const entityCounts = Object.keys(counts).sort().map(k => `${k}=${counts[k]}`).join(',') || 'none';
|
|
365
|
+
const manifestSha256 = psr2Sha256(labels.join('\n'));
|
|
366
|
+
const canonical = [PSR2_VERSION, timestamp, 'none', manifestSha256, entityCounts, 'na'].join('|');
|
|
367
|
+
return { version: PSR2_VERSION, timestamp, outputSha256: null, manifestSha256, entityCounts, tokensTotal: labels.length, tokensPresentInOutput: null, canonical, receiptSha256: psr2Sha256(canonical) };
|
|
368
|
+
}
|
|
369
|
+
function psr2Lines(r) {
|
|
370
|
+
return [
|
|
371
|
+
`Receipt Version: ${r.version}`,
|
|
372
|
+
`Timestamp (UTC): ${r.timestamp}`,
|
|
373
|
+
`Output SHA-256: not recorded`,
|
|
374
|
+
`Token Manifest SHA-256: ${r.manifestSha256}`,
|
|
375
|
+
`Entity Counts: ${r.entityCounts}`,
|
|
376
|
+
`Tokens In Final Output: not recorded`,
|
|
377
|
+
`Canonical: ${r.canonical}`,
|
|
378
|
+
`Receipt SHA-256: ${r.receiptSha256}`
|
|
379
|
+
];
|
|
380
|
+
}
|
|
381
|
+
function formatPsr2Report({ format, receipt, telemetry, company_name, department, utmSource, utmMedium }) {
|
|
382
|
+
const entitySummary = Object.entries(telemetry.entities).map(([t, count]) => `[${t}]: ${count}`).join(', ') || 'None (Clean)';
|
|
383
|
+
const teamsUrl = `https://privacyscrubber.com/teams?tier=teams&utm_source=${utmSource}&utm_medium=${utmMedium}&utm_campaign=teams_upgrade`;
|
|
384
|
+
const sdkUrl = `https://privacyscrubber.com/sdk/?tier=sdk&utm_source=${utmSource}&utm_medium=${utmMedium}&utm_campaign=sdk_pipeline`;
|
|
385
|
+
if (format === 'json') {
|
|
386
|
+
return JSON.stringify({
|
|
387
|
+
protocol: 'Zero-Trust Data Sanitization (ZTDS)',
|
|
388
|
+
receipt_version: receipt.version,
|
|
389
|
+
company: company_name,
|
|
390
|
+
department,
|
|
391
|
+
timestamp: receipt.timestamp,
|
|
392
|
+
output_sha256: null,
|
|
393
|
+
token_manifest_sha256: receipt.manifestSha256,
|
|
394
|
+
entity_counts: receipt.entityCounts,
|
|
395
|
+
canonical: receipt.canonical,
|
|
396
|
+
receipt_sha256: receipt.receiptSha256,
|
|
397
|
+
risk_level: telemetry.riskLevel,
|
|
398
|
+
frameworks_referenced: telemetry.frameworksList,
|
|
399
|
+
total_masked_tokens: telemetry.totalCount,
|
|
400
|
+
entities_breakdown: telemetry.entities,
|
|
401
|
+
scope: { measured: PSR2_STATEMENTS.measured, by_design_not_measured: PSR2_STATEMENTS.byDesign, limits: PSR2_STATEMENTS.limits },
|
|
402
|
+
verification_url: 'https://privacyscrubber.com/features/audit-receipt/#verify',
|
|
403
|
+
licensing_and_governance: { teams_governance_url: teamsUrl, sdk_pipeline_url: sdkUrl }
|
|
404
|
+
}, null, 2);
|
|
405
|
+
}
|
|
406
|
+
if (format === 'summary') {
|
|
407
|
+
return `[PrivacyScrubber SHA-256 Receipt] ${receipt.version} | Receipt SHA-256: ${receipt.receiptSha256.substring(0, 16)}... | Organization: ${company_name} | Masked Tokens: ${telemetry.totalCount} | Risk: ${telemetry.riskLevel} | Frameworks (informational): ${telemetry.frameworksList.join(', ')}`;
|
|
408
|
+
}
|
|
409
|
+
return `# Zero-Trust Data Sanitization Receipt
|
|
410
|
+
**Organization:** ${company_name} (${department})
|
|
411
|
+
**Timestamp:** ${receipt.timestamp}
|
|
412
|
+
**Receipt Format:** ${receipt.version} (SHA-256 digests; not a digital signature)
|
|
413
|
+
|
|
414
|
+
---
|
|
415
|
+
|
|
416
|
+
### Sanitization Metrics & Risk Assessment
|
|
417
|
+
* **Overall Risk Rating:** **${telemetry.riskLevel}**
|
|
418
|
+
* **Total Sensitive Entities Masked:** \`${telemetry.totalCount}\`
|
|
419
|
+
* **Entity Breakdown:** ${entitySummary}
|
|
420
|
+
|
|
421
|
+
### Informational Framework References
|
|
422
|
+
${telemetry.frameworksList.map(f => `- ${f}`).join('\n')}
|
|
423
|
+
|
|
424
|
+
These are technical-safeguard mappings, not a legal determination of compliance.
|
|
425
|
+
|
|
426
|
+
### Receipt Integrity (${receipt.version})
|
|
427
|
+
\`\`\`text
|
|
428
|
+
${psr2Lines(receipt).join('\n')}
|
|
429
|
+
\`\`\`
|
|
430
|
+
|
|
431
|
+
### Scope of This Receipt
|
|
432
|
+
**Measured:** ${PSR2_STATEMENTS.measured.join(' ')}
|
|
433
|
+
|
|
434
|
+
**Stated by design, not measured:** ${PSR2_STATEMENTS.byDesign.join(' ')}
|
|
435
|
+
|
|
436
|
+
**Limits:** ${PSR2_STATEMENTS.limits.join(' ')}
|
|
437
|
+
|
|
438
|
+
### Enterprise & Team Governance
|
|
439
|
+
* **Team Governance & Encrypted Handoff:** Centrally deploy redaction rules and encrypted session handoff with **PrivacyScrubber TEAMS** ($99/mo flat): [privacyscrubber.com/teams](${teamsUrl})
|
|
440
|
+
* **Backend Microservices & RAG Pipelines:** Integrate in-memory sanitization (<1ms) into your Node.js/Python infrastructure with **Developer SDK** ($299/mo): [privacyscrubber.com/sdk](${sdkUrl})
|
|
441
|
+
|
|
442
|
+
*Generated locally by PrivacyScrubber Engine v${MCP_VERSION}*
|
|
443
|
+
*Verify locally (paste this receipt): https://privacyscrubber.com/features/audit-receipt/#verify*`;
|
|
444
|
+
}
|
|
445
|
+
|
|
334
446
|
function formatAuditReceipt(telemetry, compact = false, wasTruncated = false, charLimit = 15000) {
|
|
335
447
|
const isCompact = compact === true || process.env.PRIVACYSCRUBBER_COMPACT_RECEIPT === '1' || process.env.PRIVACYSCRUBBER_COMPACT_RECEIPT === 'true';
|
|
336
448
|
const truncationLine = wasTruncated
|
|
@@ -360,7 +472,7 @@ function formatAuditReceipt(telemetry, compact = false, wasTruncated = false, ch
|
|
|
360
472
|
|
|
361
473
|
const icon = telemetry.riskLevel.includes('CRITICAL') ? '🔴' : (telemetry.riskLevel.includes('MODERATE') ? '🟠' : '🟢');
|
|
362
474
|
|
|
363
|
-
return `\n\n> 🛡️ **PrivacyScrubber Audit Receipt**\n> * **Risk Level:** ${icon} ${telemetry.riskLevel}\n> * **
|
|
475
|
+
return `\n\n> 🛡️ **PrivacyScrubber Audit Receipt**\n> * **Risk Level:** ${icon} ${telemetry.riskLevel}\n> * **Framework References (informational):** ${telemetry.frameworksList.join(', ')}\n> * **Tokens Masked:** ${telemetry.totalCount} (${entitiesList})\n${truncationLine}> * ⭐ **Star on GitHub:** [moxno/privacyscrubber-mcp](https://github.com/moxno/privacyscrubber-mcp) (\`gh repo star moxno/privacyscrubber-mcp\`) | **SDK & Enterprise:** [privacyscrubber.com/sdk](https://privacyscrubber.com/sdk/?tier=sdk&utm_source=mcp&utm_medium=audit_receipt&utm_campaign=sdk_pipeline)\n`;
|
|
364
476
|
}
|
|
365
477
|
|
|
366
478
|
function formatCefEvent(eventData = {}) {
|
|
@@ -461,7 +573,7 @@ function formatJsonlEvent(eventData = {}) {
|
|
|
461
573
|
frameworks,
|
|
462
574
|
session_hash: sessionHash,
|
|
463
575
|
zero_egress: true,
|
|
464
|
-
|
|
576
|
+
processing_mode: "local in-memory (by design, not measured)",
|
|
465
577
|
...(organization && { organization }),
|
|
466
578
|
...(department && { department }),
|
|
467
579
|
...(executionMs && { execution_ms: executionMs }),
|
|
@@ -2313,82 +2425,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
2313
2425
|
const { format = "markdown", company_name = "PrivacyScrubber Client", department = "SecOps / Compliance" } = args || {};
|
|
2314
2426
|
const telemetry = buildCisoAuditTelemetry(sessionMap);
|
|
2315
2427
|
|
|
2316
|
-
const
|
|
2317
|
-
.update(JSON.stringify(sessionMap) + Date.now().toString())
|
|
2318
|
-
.digest('hex');
|
|
2319
|
-
|
|
2320
|
-
const timestamp = new Date().toISOString();
|
|
2321
|
-
const entitySummary = Object.entries(telemetry.entities)
|
|
2322
|
-
.map(([t, count]) => `[${t}]: ${count}`)
|
|
2323
|
-
.join(', ') || 'None (Clean)';
|
|
2324
|
-
|
|
2325
|
-
if (format === "json") {
|
|
2326
|
-
const jsonReport = {
|
|
2327
|
-
protocol: "Zero-Trust Data Sanitization (ZTDS)",
|
|
2328
|
-
certificate: `ZTDS-CERT-${sessionHash.substring(0, 16).toUpperCase()}`,
|
|
2329
|
-
company: company_name,
|
|
2330
|
-
department: department,
|
|
2331
|
-
timestamp: timestamp,
|
|
2332
|
-
session_hash: sessionHash,
|
|
2333
|
-
verification_mode: "100% Offline (Local In-Memory RAM)",
|
|
2334
|
-
compliance_status: "VERIFIED PASS",
|
|
2335
|
-
risk_level: telemetry.riskLevel,
|
|
2336
|
-
frameworks_enforced: telemetry.frameworksList,
|
|
2337
|
-
total_masked_tokens: telemetry.totalCount,
|
|
2338
|
-
entities_breakdown: telemetry.entities,
|
|
2339
|
-
zero_egress_verified: true,
|
|
2340
|
-
verification_url: `https://privacyscrubber.com/features/audit-receipt/#verify?hash=${sessionHash.substring(0, 16)}`,
|
|
2341
|
-
licensing_and_governance: {
|
|
2342
|
-
teams_governance_url: "https://privacyscrubber.com/teams?src=mcp_compliance_json",
|
|
2343
|
-
sdk_pipeline_url: "https://privacyscrubber.com/sdk/?src=mcp_compliance_json"
|
|
2344
|
-
}
|
|
2345
|
-
};
|
|
2346
|
-
|
|
2347
|
-
return {
|
|
2348
|
-
content: [{ type: "text", text: JSON.stringify(jsonReport, null, 2) }]
|
|
2349
|
-
};
|
|
2350
|
-
}
|
|
2351
|
-
|
|
2352
|
-
if (format === "summary") {
|
|
2353
|
-
const summaryText = `[PrivacyScrubber Compliance Certificate] ID: ZTDS-${sessionHash.substring(0, 8).toUpperCase()} | Organization: ${company_name} | Masked Tokens: ${telemetry.totalCount} | Risk: ${telemetry.riskLevel} | Frameworks: ${telemetry.frameworksList.join(', ')} | Status: PASS (100% Air-Gapped)`;
|
|
2354
|
-
return {
|
|
2355
|
-
content: [{ type: "text", text: summaryText }]
|
|
2356
|
-
};
|
|
2357
|
-
}
|
|
2358
|
-
|
|
2359
|
-
// Default: Comprehensive Markdown Certificate
|
|
2360
|
-
const mdReport = `# 🛡️ Zero-Trust Data Sanitization Compliance Certificate
|
|
2361
|
-
**Certificate ID:** \`ZTDS-CERT-${sessionHash.substring(0, 16).toUpperCase()}\`
|
|
2362
|
-
**Organization:** ${company_name} (${department})
|
|
2363
|
-
**Timestamp:** ${timestamp}
|
|
2364
|
-
**Verification Mode:** 100% Local In-Memory Processing (Air-Gapped)
|
|
2365
|
-
**Status:** **VERIFIED PASS** (Zero Network Egress)
|
|
2366
|
-
|
|
2367
|
-
---
|
|
2368
|
-
|
|
2369
|
-
### 📊 Sanitization Metrics & Risk Assessment
|
|
2370
|
-
* **Overall Risk Rating:** **${telemetry.riskLevel}**
|
|
2371
|
-
* **Total Sensitive Entities Masked:** \`${telemetry.totalCount}\`
|
|
2372
|
-
* **Entity Breakdown:** ${entitySummary}
|
|
2373
|
-
* **Network Data Transmitted:** \`0.00 KB (Zero-Trust Local RAM)\`
|
|
2374
|
-
|
|
2375
|
-
### 📜 Regulatory Frameworks Enforced
|
|
2376
|
-
${telemetry.frameworksList.map(f => `- **${f}**`).join('\n')}
|
|
2377
|
-
|
|
2378
|
-
### 🔒 CISO Compliance Declaration
|
|
2379
|
-
1. **EU AI Act (Art. 50) & GDPR (Art. 25 & 32):** Data minimization and local pseudonymization enforced prior to model interaction.
|
|
2380
|
-
2. **HIPAA Safe Harbor (§164.514) / SOC 2 Type II:** All direct and indirect identifiers sanitized locally without cloud processor liability.
|
|
2381
|
-
3. **Cryptographic Verification:** Tamper-evident session verification hash: \`${sessionHash}\`
|
|
2382
|
-
|
|
2383
|
-
### 🏢 Enterprise & Team Governance
|
|
2384
|
-
* **Team Governance & Encrypted Handoff:** Centrally deploy redaction rules, audit logs, and zero-knowledge session handoff with **PrivacyScrubber TEAMS** ($99/mo flat): [privacyscrubber.com/teams](https://privacyscrubber.com/teams?src=mcp_compliance_report)
|
|
2385
|
-
* **Backend Microservices & RAG Pipelines:** Integrate in-memory sanitization (<1ms) into your Node.js/Python infrastructure with **Developer SDK** ($299/mo): [privacyscrubber.com/sdk](https://privacyscrubber.com/sdk/?src=mcp_compliance_report)
|
|
2386
|
-
|
|
2387
|
-
*Certified Offline by PrivacyScrubber Engine v${MCP_VERSION}*
|
|
2388
|
-
*Verify at: https://privacyscrubber.com/features/audit-receipt/* | ⭐ *Star on GitHub: https://github.com/moxno/privacyscrubber-mcp*`;
|
|
2389
|
-
|
|
2428
|
+
const receipt = buildPsr2Receipt(sessionMap);
|
|
2390
2429
|
return {
|
|
2391
|
-
content: [{ type: "text", text:
|
|
2430
|
+
content: [{ type: "text", text: formatPsr2Report({ format, receipt, telemetry, company_name, department, utmSource: 'mcp_compliance_report', utmMedium: format === 'json' ? 'json' : 'markdown' }) }]
|
|
2392
2431
|
};
|
|
2393
2432
|
}
|
|
2394
2433
|
|
|
@@ -2971,11 +3010,9 @@ Before reading sensitive files, running terminal commands that may print credent
|
|
|
2971
3010
|
|
|
2972
3011
|
const telemetry = buildCisoAuditTelemetry(targetSession);
|
|
2973
3012
|
|
|
2974
|
-
const sessionHash = crypto.createHash('sha256')
|
|
2975
|
-
.update(JSON.stringify(targetSession) + Date.now().toString())
|
|
2976
|
-
.digest('hex');
|
|
2977
|
-
|
|
2978
3013
|
const timestamp = new Date().toISOString();
|
|
3014
|
+
const receipt = buildPsr2Receipt(targetSession, timestamp);
|
|
3015
|
+
const sessionHash = receipt.receiptSha256;
|
|
2979
3016
|
|
|
2980
3017
|
let outputText = "";
|
|
2981
3018
|
const eventData = {
|
|
@@ -2996,60 +3033,8 @@ Before reading sensitive files, running terminal commands that may print credent
|
|
|
2996
3033
|
outputText = formatCefEvent(eventData);
|
|
2997
3034
|
} else if (format === "syslog") {
|
|
2998
3035
|
outputText = formatSyslogEvent(eventData);
|
|
2999
|
-
} else if (format === "json") {
|
|
3000
|
-
outputText =
|
|
3001
|
-
protocol: "Zero-Trust Data Sanitization (ZTDS)",
|
|
3002
|
-
certificate: `ZTDS-CERT-${sessionHash.substring(0, 16).toUpperCase()}`,
|
|
3003
|
-
company: company_name,
|
|
3004
|
-
department,
|
|
3005
|
-
timestamp,
|
|
3006
|
-
session_hash: sessionHash,
|
|
3007
|
-
verification_mode: "100% Offline (Local In-Memory RAM)",
|
|
3008
|
-
compliance_status: "VERIFIED PASS",
|
|
3009
|
-
risk_level: telemetry.riskLevel,
|
|
3010
|
-
frameworks_enforced: telemetry.frameworksList,
|
|
3011
|
-
total_masked_tokens: telemetry.totalCount,
|
|
3012
|
-
entities_breakdown: telemetry.entities,
|
|
3013
|
-
zero_egress_verified: true,
|
|
3014
|
-
verification_url: `https://privacyscrubber.com/features/audit-receipt/#verify?hash=${sessionHash.substring(0, 16)}`,
|
|
3015
|
-
licensing_and_governance: {
|
|
3016
|
-
teams_governance_url: "https://privacyscrubber.com/teams?tier=teams&utm_source=mcp_audit_export&utm_medium=json&utm_campaign=teams_upgrade",
|
|
3017
|
-
sdk_pipeline_url: "https://privacyscrubber.com/sdk/?tier=sdk&utm_source=mcp_audit_export&utm_medium=json&utm_campaign=sdk_pipeline"
|
|
3018
|
-
}
|
|
3019
|
-
}, null, 2);
|
|
3020
|
-
} else if (format === "markdown") {
|
|
3021
|
-
const entitySummary = Object.entries(telemetry.entities)
|
|
3022
|
-
.map(([t, count]) => `[${t}]: ${count}`)
|
|
3023
|
-
.join(', ') || 'None (Clean)';
|
|
3024
|
-
outputText = `# 🛡️ Zero-Trust Data Sanitization Compliance Certificate
|
|
3025
|
-
**Certificate ID:** \`ZTDS-CERT-${sessionHash.substring(0, 16).toUpperCase()}\`
|
|
3026
|
-
**Organization:** ${company_name} (${department})
|
|
3027
|
-
**Timestamp:** ${timestamp}
|
|
3028
|
-
**Verification Mode:** 100% Local In-Memory Processing (Air-Gapped)
|
|
3029
|
-
**Status:** **VERIFIED PASS** (Zero Network Egress)
|
|
3030
|
-
|
|
3031
|
-
---
|
|
3032
|
-
|
|
3033
|
-
### 📊 Sanitization Metrics & Risk Assessment
|
|
3034
|
-
* **Overall Risk Rating:** **${telemetry.riskLevel}**
|
|
3035
|
-
* **Total Sensitive Entities Masked:** \`${telemetry.totalCount}\`
|
|
3036
|
-
* **Entity Breakdown:** ${entitySummary}
|
|
3037
|
-
* **Network Data Transmitted:** \`0.00 KB (Zero-Trust Local RAM)\`
|
|
3038
|
-
|
|
3039
|
-
### 📜 Regulatory Frameworks Enforced
|
|
3040
|
-
${telemetry.frameworksList.map(f => `- **${f}**`).join('\n')}
|
|
3041
|
-
|
|
3042
|
-
### 🔒 CISO Compliance Declaration
|
|
3043
|
-
1. **EU AI Act (Art. 50) & GDPR (Art. 25 & 32):** Data minimization and local pseudonymization enforced prior to model interaction.
|
|
3044
|
-
2. **HIPAA Safe Harbor (§164.514) / SOC 2 Type II:** All direct and indirect identifiers sanitized locally without cloud processor liability.
|
|
3045
|
-
3. **Cryptographic Verification:** Tamper-evident session verification hash: \`${sessionHash}\`
|
|
3046
|
-
|
|
3047
|
-
### 🏢 Enterprise & Team Governance
|
|
3048
|
-
* **Team Governance & Encrypted Handoff:** Centrally deploy redaction rules, audit logs, and zero-knowledge session handoff with **PrivacyScrubber TEAMS** ($99/mo flat): [privacyscrubber.com/teams](https://privacyscrubber.com/teams?tier=teams&utm_source=mcp_audit_export&utm_medium=markdown&utm_campaign=teams_upgrade)
|
|
3049
|
-
* **Backend Microservices & RAG Pipelines:** Integrate in-memory sanitization (<1ms) into your Node.js/Python infrastructure with **Developer SDK** ($299/mo): [privacyscrubber.com/sdk](https://privacyscrubber.com/sdk/?tier=sdk&utm_source=mcp_audit_export&utm_medium=markdown&utm_campaign=sdk_pipeline)
|
|
3050
|
-
|
|
3051
|
-
*Certified Offline by PrivacyScrubber Engine v${MCP_VERSION}*
|
|
3052
|
-
*Verify at: https://privacyscrubber.com/features/audit-receipt/* | ⭐ *Star on GitHub: https://github.com/moxno/privacyscrubber-mcp*`;
|
|
3036
|
+
} else if (format === "json" || format === "markdown") {
|
|
3037
|
+
outputText = formatPsr2Report({ format, receipt, telemetry, company_name, department, utmSource: 'mcp_audit_export', utmMedium: format });
|
|
3053
3038
|
} else {
|
|
3054
3039
|
// Default: jsonl
|
|
3055
3040
|
outputText = formatJsonlEvent(eventData);
|
package/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "privacyscrubber/pii-masking-mcp",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.9",
|
|
5
5
|
"description": "CISO-Approved Zero-Trust PII & Secrets Redaction MCP Server for Cursor, Windsurf, and Claude Desktop. Prevent API leaks and comply with HIPAA/SOC 2 locally.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "PrivacyScrubber",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@privacyscrubber/mcp-server",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.9",
|
|
4
4
|
"mcpName": "io.github.moxno/privacyscrubber-mcp",
|
|
5
5
|
"description": "CISO-Approved Zero-Trust PII & Secrets Redaction MCP Server for Cursor, Windsurf, and Claude Desktop. Prevent API leaks and comply with HIPAA/SOC 2 locally.",
|
|
6
6
|
"main": "index.js",
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
"smithery.yaml",
|
|
22
22
|
"server.json",
|
|
23
23
|
"manifest.json",
|
|
24
|
-
"bundle.mcpb",
|
|
25
24
|
".well-known"
|
|
26
25
|
],
|
|
27
26
|
"bin": {
|
package/ps-license-manager.cjs
CHANGED
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
* via any medium, is strictly prohibited. Protected by international copyright
|
|
9
9
|
* laws and treaties.
|
|
10
10
|
*/
|
|
11
|
-
function _0x31b8(_0x2f6d19,_0x2fefd1){_0x2f6d19=_0x2f6d19-0x1a1;const _0x25fd97=_0x25fd();let _0x31b8db=_0x25fd97[_0x2f6d19];if(_0x31b8['OlqvTu']===undefined){var _0x44bd40=function(_0x315d3c){const _0x2617b7='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x162c86='',_0x4aca2e='';for(let _0xc6fbb0=0x0,_0x4a2d8d,_0x2c06f6,_0x8d6a2=0x0;_0x2c06f6=_0x315d3c['charAt'](_0x8d6a2++);~_0x2c06f6&&(_0x4a2d8d=_0xc6fbb0%0x4?_0x4a2d8d*0x40+_0x2c06f6:_0x2c06f6,_0xc6fbb0++%0x4)?_0x162c86+=String['fromCharCode'](0xff&_0x4a2d8d>>(-0x2*_0xc6fbb0&0x6)):0x0){_0x2c06f6=_0x2617b7['indexOf'](_0x2c06f6);}for(let _0x4b07ce=0x0,_0x1690cd=_0x162c86['length'];_0x4b07ce<_0x1690cd;_0x4b07ce++){_0x4aca2e+='%'+('00'+_0x162c86['charCodeAt'](_0x4b07ce)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4aca2e);};_0x31b8['aSTWLn']=_0x44bd40,_0x31b8['PiaBJK']={},_0x31b8['OlqvTu']=!![];}const _0x4c11d0=_0x25fd97[0x0],_0x26f77c=_0x2f6d19+_0x4c11d0,_0x49a25e=_0x31b8['PiaBJK'][_0x26f77c];return!_0x49a25e?(_0x31b8db=_0x31b8['aSTWLn'](_0x31b8db),_0x31b8['PiaBJK'][_0x26f77c]=_0x31b8db):_0x31b8db=_0x49a25e,_0x31b8db;}const _0x3aa646=_0x31b8,_0x2ab7f7=_0x31b8;(function(_0x28e9f4,_0x253280){const _0x42033c={_0x3dc3b7:0x1e5,_0x280e09:0x1db,_0x16e772:0x251,_0xa4476f:0x245,_0x4f56ba:0x224,_0x7e1688:0x1cb,_0x1940b6:0x252,_0x35ec97:0x26d},_0x190232=_0x31b8,_0x126962=_0x31b8,_0x388664=_0x28e9f4();while(!![]){try{const _0x59f84d=-parseInt(_0x190232(0x2ad))/0x1*(parseInt(_0x126962(0x1f5))/0x2)+parseInt(_0x126962(_0x42033c._0x3dc3b7))/0x3*(-parseInt(_0x190232(_0x42033c._0x280e09))/0x4)+parseInt(_0x190232(_0x42033c._0x16e772))/0x5*(-parseInt(_0x126962(0x1da))/0x6)+-parseInt(_0x190232(_0x42033c._0xa4476f))/0x7*(parseInt(_0x126962(_0x42033c._0x4f56ba))/0x8)+parseInt(_0x190232(0x1a2))/0x9*(-parseInt(_0x126962(_0x42033c._0x7e1688))/0xa)+-parseInt(_0x190232(_0x42033c._0x1940b6))/0xb*(parseInt(_0x190232(0x272))/0xc)+parseInt(_0x126962(_0x42033c._0x35ec97))/0xd;if(_0x59f84d===_0x253280)break;else _0x388664['push'](_0x388664['shift']());}catch(_0x1f8435){_0x388664['push'](_0x388664['shift']());}}}(_0x25fd,0x4f46f),function(_0x145722){const _0x355778={_0x1976b3:0x281,_0x2463d3:0x249,_0x1e9f8a:0x1c6,_0x593549:0x274,_0x529ae2:0x2af,_0x571a59:0x273,_0x2b6459:0x22e,_0x2277fb:0x22c,_0x177623:0x234,_0x4f34a1:0x286,_0xcff481:0x2bb,_0x221c23:0x1b4,_0x5d77d9:0x231,_0x5a9a8a:0x259,_0x1373cf:0x23d,_0x15b0f8:0x215,_0x1f0ca6:0x202,_0xc75aa3:0x1dd,_0xb8998d:0x1cc,_0x5ca3ef:0x1f1,_0x50a6d3:0x258,_0x54683c:0x276,_0x492852:0x211,_0x335899:0x2ba,_0xad33ba:0x1a9,_0x1b191a:0x256,_0x30af40:0x23e,_0x1289ef:0x205,_0x1ebc4b:0x1bc,_0x3690b5:0x1e9,_0x1a11f0:0x1cf,_0x4089a9:0x218,_0x487d4b:0x1df,_0x4b44d5:0x299,_0x3c41a8:0x1e8,_0x139a03:0x295,_0x1dc6f8:0x20d,_0x19b140:0x1fa,_0x3a4eae:0x223,_0x399162:0x21d,_0x5d98ec:0x25f,_0x36e14a:0x209,_0x2df4c1:0x1e2,_0x19d7f8:0x1f9,_0x4e0d10:0x1ec,_0x1b45a0:0x1b7,_0x2440b2:0x1af,_0xf24eab:0x22f,_0x2e38f4:0x263,_0x3149e3:0x26b,_0x5ab7bf:0x225,_0xfa3603:0x244,_0x59c028:0x250,_0x2b5982:0x27c,_0x1af69c:0x2c9,_0x2fad4d:0x2b3,_0x4d61d0:0x24e,_0x3f06db:0x2c0,_0x5e9b24:0x1dc,_0x117c3e:0x1e3,_0x17829d:0x20a,_0x374804:0x1e0,_0x2d90ae:0x257,_0x4a4217:0x1e4,_0x42f08d:0x1f2,_0x17a6e8:0x1c9,_0x472ed7:0x25a,_0x4c24de:0x207,_0x429816:0x1e1,_0x30d28b:0x2c2,_0x55ddd:0x1ad,_0x4ca088:0x2a7,_0x3f7051:0x1b9,_0x3df955:0x297,_0x4fd0af:0x1f3,_0xe86e0f:0x1d3,_0x374343:0x25c,_0x18cef3:0x2a2,_0x5e7676:0x233,_0x257f6a:0x2ca,_0x28dfe0:0x1ce,_0x2b0921:0x217,_0xafa465:0x213,_0x2e9807:0x219,_0x52e41b:0x210,_0x53f2f5:0x287,_0x344b4f:0x2b8,_0x5910e9:0x268,_0x27f993:0x285,_0x558668:0x25d,_0x712fb1:0x279,_0x389da0:0x28d,_0x3dbc98:0x2cb,_0x1c23a5:0x1c5,_0x2a9cfc:0x24c,_0x9a113d:0x28b,_0x4b4952:0x21b,_0x1f6441:0x1bf,_0x2e7438:0x227,_0x1ee148:0x241,_0x3247b7:0x222,_0x339bdb:0x2bf,_0xccd834:0x24d,_0x50c910:0x1eb,_0x2d623b:0x1a1,_0x12391d:0x1fe,_0x359b86:0x2b1,_0x180510:0x214,_0x64e0e2:0x293,_0x25a798:0x2ce,_0x3cda55:0x254,_0x22c663:0x29b,_0x2a1945:0x29e,_0x2a5a90:0x20e,_0x3636bb:0x1be,_0x5e6a58:0x1b8,_0x33330a:0x262,_0x45b3d9:0x2ae,_0x1c74df:0x289,_0x1f3ae9:0x1d2,_0x3e556d:0x1ca,_0xf95364:0x2ac,_0x36d9b9:0x1bb,_0x305ef7:0x1c8,_0x390ed2:0x1f6,_0x2f9c1e:0x208,_0x323b0c:0x1f0,_0xc96fb:0x229,_0x3486ba:0x240,_0x99d0d9:0x22e,_0x319ad2:0x1d4,_0x304b6b:0x2b6,_0x18afe4:0x1c1,_0x18c3f9:0x240,_0x11923c:0x1d4,_0x3d0f6b:0x2b6,_0x818133:0x22e,_0xe5ecf5:0x1c1,_0x283320:0x22e,_0x458684:0x29f,_0x6fa0d8:0x235,_0x1a5b89:0x235,_0x10b28a:0x203,_0x51f941:0x2b6},_0x41e941={_0x23d5f3:0x1a7,_0x4bc4d6:0x2d0,_0x39c720:0x1d6,_0x3c8a5c:0x246,_0xf40f45:0x267,_0x2c997f:0x20f,_0x30a3a0:0x24b,_0x260d26:0x206,_0x2b9927:0x22b,_0x259835:0x2a8,_0x3ee4a5:0x271,_0xfdf2f5:0x2a9,_0x111a69:0x1cd,_0x15014b:0x1bd,_0x3c89da:0x1bd,_0x48b0d4:0x278,_0x371238:0x27a,_0x16283a:0x296,_0x8d3bd3:0x283,_0x24c1cb:0x2a8,_0x32e237:0x23f,_0x4690e:0x2a8,_0x5b2d44:0x1c2,_0x39f364:0x228,_0x319866:0x228,_0x281fd1:0x2a0,_0x4572fb:0x2b2,_0xc01655:0x1b0,_0x5819b2:0x29d,_0x45c201:0x2ab,_0x17a9e8:0x238,_0x3efe6e:0x291,_0x27efdf:0x229,_0x431dfc:0x240,_0x17128c:0x22e,_0x57f41c:0x28a,_0x79346f:0x1c4,_0x3f57ee:0x25b,_0x806701:0x282,_0x2bc642:0x1c0,_0x24bb40:0x232,_0xbef654:0x23c,_0x162103:0x2a1,_0x24b3e9:0x1c0,_0xfa841a:0x23f,_0x43858c:0x27b,_0x19217e:0x243,_0x2df03c:0x1d1,_0x3604b6:0x274,_0x4ecc09:0x26f,_0x15a82a:0x1a6,_0x5be1b2:0x1d0,_0x4954f2:0x1ba,_0x377657:0x248,_0x5aa45:0x281,_0x420708:0x248,_0x562397:0x242,_0x219ef8:0x280,_0xb8f6c0:0x20c,_0x32a7a2:0x2b5,_0x24f06e:0x260,_0x61ed9a:0x2b4,_0x2c6ec9:0x255,_0x2070f6:0x1c0,_0x514fda:0x22a,_0x10693d:0x232,_0x3136a4:0x1d1,_0x54c2c4:0x1aa,_0x41c2ec:0x28a,_0x3aec84:0x29a,_0x593d6f:0x248,_0x3421da:0x281,_0x272efb:0x1a3,_0x4579f0:0x1c7,_0x3ed4c9:0x29c,_0x37b7cc:0x1b1,_0x23bc90:0x2a3,_0x51af69:0x2a5,_0x3387c7:0x237,_0x46d2d8:0x1c0,_0x549f43:0x2b7,_0x589662:0x1ed,_0x32be7d:0x23b,_0x1d088b:0x239,_0x4c5ee5:0x2aa,_0xdeac86:0x24f,_0x2e5f9f:0x1b2,_0x15634a:0x274,_0x36151a:0x23c,_0x19e96a:0x243,_0x1d863d:0x200,_0x180d58:0x22b,_0x4df5de:0x22b,_0x1e133b:0x298,_0x5dbbde:0x201,_0x46c6cc:0x27e,_0x148436:0x23c,_0x357f8a:0x27b,_0x16c2ac:0x1d1,_0x4f5404:0x21a,_0x24fcdd:0x23f,_0x55a17f:0x2cf,_0x5e67eb:0x1f7,_0x403dff:0x201,_0x75ef53:0x298,_0x21826d:0x201,_0x500a18:0x1d8,_0x194c6a:0x1ea,_0x4c556f:0x1ea,_0x23e945:0x290,_0x459ec0:0x1ea,_0xd292f3:0x248,_0x1e5e15:0x281,_0x5b5dc5:0x248,_0x32f291:0x281,_0x25e12b:0x2c7,_0x231aa7:0x29c,_0x52c900:0x1b1,_0x5b87e4:0x2c7,_0x3068c1:0x1fd,_0x33c454:0x28f},_0x4278f0={_0x276b3b:0x1ae,_0xe92fa4:0x26c,_0x3300dd:0x1c0,_0x228cfc:0x226,_0x1267c1:0x1ef,_0x12a03d:0x27d,_0x2ba035:0x284,_0x2f2f62:0x28e,_0x4b058f:0x1ee,_0x2d24c8:0x1c3,_0x43895b:0x26c,_0xc95d8c:0x28c,_0x12efb0:0x22d,_0x200ee2:0x1c3,_0x23047f:0x26a,_0x535f2d:0x27b},_0x4f162b={_0x5463ba:0x2a1,_0xd6ea7:0x1c0,_0x1be6fe:0x232,_0x573076:0x23c,_0x2dec3e:0x27b,_0x3a2fb1:0x243},_0x56aa25={_0x386b2e:0x23f,_0x1100ec:0x27b,_0x78be36:0x229,_0x3f7b88:0x2a6,_0x3a27ca:0x1c0,_0x28beaa:0x1c0,_0x1369c0:0x2cd,_0x3a1db5:0x23c,_0x3f996d:0x1d0},_0x3b9c90={_0x3e4b0c:0x2a6},_0x1dce29=_0x31b8,_0x4e5564=_0x31b8,_0x540145={'EzXqP':function(_0x18d9f5,_0x190f45){return _0x18d9f5%_0x190f45;},'rIKSe':function(_0x474e4a,_0x86126f){return _0x474e4a!==_0x86126f;},'Fvxrn':function(_0x5bf0ba,_0x505a20){return _0x5bf0ba<_0x505a20;},'tfxSG':function(_0xc746c4,_0x4e29ef,_0x57b5cc){return _0xc746c4(_0x4e29ef,_0x57b5cc);},'QcqfX':function(_0x2a6e5f,_0x2e6a62,_0x487fdf){return _0x2a6e5f(_0x2e6a62,_0x487fdf);},'diGBL':function(_0x106261,_0xf0f85){return _0x106261*_0xf0f85;},'kyBdx':function(_0x4294f6,_0x4227eb){return _0x4294f6/_0x4227eb;},'CCtLS':function(_0x3ca534,_0x5a76c8){return _0x3ca534>>_0x5a76c8;},'CPFgC':function(_0x3475b0,_0x240999){return _0x3475b0%_0x240999;},'tvvWe':function(_0x590bc2,_0x26be8a){return _0x590bc2+_0x26be8a;},'HhsZv':function(_0x3bf085,_0x4ffab3){return _0x3bf085^_0x4ffab3;},'msMzP':function(_0xdd5c81,_0x2a82cf){return _0xdd5c81>>>_0x2a82cf;},'mYtmN':function(_0x3840f5,_0x2bf3e1){return _0x3840f5^_0x2bf3e1;},'tDWPB':function(_0x42a7f9,_0x38cf7b,_0x6f9c78){return _0x42a7f9(_0x38cf7b,_0x6f9c78);},'Eywbt':function(_0x55bf8f,_0x512525){return _0x55bf8f|_0x512525;},'KFHhJ':function(_0x3c1ba8,_0x34b6aa){return _0x3c1ba8===_0x34b6aa;},'tFTDP':_0x1dce29(0x242)+_0x1dce29(0x221)+_0x4e5564(_0x355778._0x1976b3)+'d','lyfcv':_0x1dce29(_0x355778._0x2463d3)+_0x4e5564(_0x355778._0x1e9f8a),'QxuMA':function(_0x2a9491,_0x5c1a7b){return _0x2a9491(_0x5c1a7b);},'KQZKt':function(_0xc268f3,_0x2d84cc){return _0xc268f3<_0x2d84cc;},'xnDSf':function(_0x1373b0,_0x257054){return _0x1373b0+_0x257054;},'jnZcb':_0x4e5564(_0x355778._0x593549)+_0x1dce29(_0x355778._0x529ae2)+'-','TcCxw':_0x4e5564(0x1f4),'mUSqv':function(_0x182ccb,_0x44b6a4){return _0x182ccb+_0x44b6a4;},'xxfMS':function(_0x384fc7,_0x42e21a){return _0x384fc7<_0x42e21a;},'IyRpo':function(_0x528c1c,_0x362fa5){return _0x528c1c+_0x362fa5;},'yYeHP':function(_0x372b23,_0x4e0a93,_0x239983,_0x3d6abe){return _0x372b23(_0x4e0a93,_0x239983,_0x3d6abe);},'kbmCf':_0x4e5564(_0x355778._0x571a59),'cwLjQ':_0x4e5564(0x240)+_0x4e5564(_0x355778._0x2b6459)+'d'},_0x277bbd=BigInt(_0x1dce29(_0x355778._0x2277fb)+_0x4e5564(_0x355778._0x177623)+_0x1dce29(_0x355778._0x4f34a1)+_0x4e5564(0x2b0)+_0x1dce29(_0x355778._0xcff481)+_0x1dce29(_0x355778._0x221c23)+_0x4e5564(_0x355778._0x5d77d9)+_0x4e5564(_0x355778._0x5a9a8a)+_0x4e5564(_0x355778._0x1373cf)+_0x1dce29(0x1ab)+_0x1dce29(_0x355778._0x15b0f8)+_0x4e5564(_0x355778._0x1f0ca6)+_0x1dce29(0x277)+_0x4e5564(_0x355778._0xc75aa3)+_0x4e5564(_0x355778._0xb8998d)+_0x4e5564(_0x355778._0x5ca3ef)+_0x1dce29(0x21f)+_0x1dce29(_0x355778._0x50a6d3)+_0x4e5564(_0x355778._0x54683c)+_0x1dce29(_0x355778._0x492852)+_0x1dce29(0x294)+_0x1dce29(_0x355778._0x335899)+_0x4e5564(_0x355778._0xad33ba)+_0x4e5564(_0x355778._0x1b191a)+_0x4e5564(_0x355778._0x30af40)+_0x4e5564(_0x355778._0x1289ef)+_0x4e5564(_0x355778._0x1ebc4b)+_0x4e5564(0x27f)+_0x4e5564(_0x355778._0x3690b5)+_0x4e5564(0x1ff)+_0x1dce29(_0x355778._0x1a11f0)+_0x1dce29(_0x355778._0x4089a9)+_0x4e5564(_0x355778._0x487d4b)+_0x1dce29(_0x355778._0x4b44d5)+_0x1dce29(_0x355778._0x3c41a8)+_0x1dce29(_0x355778._0x139a03)+_0x4e5564(_0x355778._0x1dc6f8)+_0x1dce29(_0x355778._0x19b140)+_0x4e5564(_0x355778._0x3a4eae)+_0x1dce29(_0x355778._0x399162)+_0x4e5564(_0x355778._0x5d98ec)+_0x1dce29(0x1e7)+_0x4e5564(_0x355778._0x36e14a)+_0x4e5564(_0x355778._0x2df4c1)+_0x4e5564(_0x355778._0x19d7f8)+_0x1dce29(0x20b)+_0x4e5564(0x2bd)+_0x1dce29(_0x355778._0x4e0d10)+_0x4e5564(0x1a5)+_0x1dce29(_0x355778._0x1b45a0)+_0x4e5564(0x288)+_0x4e5564(_0x355778._0x2440b2)+_0x4e5564(_0x355778._0xf24eab)+_0x1dce29(0x270)+_0x4e5564(_0x355778._0x2e38f4)+_0x1dce29(0x2a4)+_0x4e5564(_0x355778._0x3149e3)+_0x1dce29(_0x355778._0x5ab7bf)+_0x1dce29(_0x355778._0xfa3603)+_0x1dce29(0x1fb)+_0x4e5564(0x212)+_0x1dce29(_0x355778._0x59c028)+_0x4e5564(_0x355778._0x2b5982)+_0x4e5564(_0x355778._0x1af69c)+_0x4e5564(_0x355778._0x2fad4d)+_0x4e5564(_0x355778._0x4d61d0)+_0x1dce29(_0x355778._0x3f06db)+_0x1dce29(_0x355778._0x5e9b24)+_0x4e5564(_0x355778._0x117c3e)+_0x4e5564(0x253)+_0x4e5564(_0x355778._0x17829d)+_0x4e5564(0x2be)+_0x4e5564(_0x355778._0x374804)+_0x4e5564(_0x355778._0x2d90ae)+_0x1dce29(0x216)+_0x4e5564(_0x355778._0x4a4217)+_0x4e5564(0x254)+_0x1dce29(_0x355778._0x42f08d)+_0x1dce29(_0x355778._0x17a6e8)+_0x4e5564(_0x355778._0x472ed7)+_0x4e5564(_0x355778._0x4c24de)+_0x4e5564(_0x355778._0x429816)+_0x1dce29(_0x355778._0x30d28b)+_0x1dce29(_0x355778._0x55ddd)+_0x1dce29(_0x355778._0x4ca088)+_0x4e5564(0x2c6)+_0x1dce29(_0x355778._0x3f7051)+_0x1dce29(_0x355778._0x3df955)+_0x1dce29(_0x355778._0x4fd0af)+_0x4e5564(_0x355778._0xe86e0f)+_0x1dce29(0x292)+_0x1dce29(_0x355778._0x374343)+_0x4e5564(0x1d5)+_0x4e5564(_0x355778._0x18cef3)+_0x4e5564(_0x355778._0x5e7676)+_0x4e5564(_0x355778._0x257f6a)+_0x4e5564(_0x355778._0x28dfe0)+_0x4e5564(_0x355778._0x2b0921)+_0x1dce29(0x21e)+_0x1dce29(_0x355778._0xafa465)+_0x1dce29(_0x355778._0x2e9807)+_0x1dce29(0x1d9)+_0x4e5564(_0x355778._0x52e41b)+_0x4e5564(0x1b3)+_0x4e5564(0x23a)+_0x1dce29(_0x355778._0x53f2f5)+_0x4e5564(0x1ac)+_0x4e5564(0x247)+_0x1dce29(_0x355778._0x344b4f)+_0x1dce29(_0x355778._0x5910e9)+_0x4e5564(_0x355778._0x27f993)+_0x1dce29(_0x355778._0x558668)+_0x1dce29(0x2c4)+_0x1dce29(0x2c5)+_0x1dce29(_0x355778._0x712fb1)+_0x1dce29(0x1f8)+_0x1dce29(_0x355778._0x389da0)+_0x4e5564(_0x355778._0x3dbc98)+_0x1dce29(_0x355778._0x1c23a5)+_0x1dce29(_0x355778._0x2a9cfc)+_0x4e5564(_0x355778._0x9a113d)+_0x4e5564(_0x355778._0x4b4952)+_0x4e5564(_0x355778._0x1f6441)+_0x4e5564(_0x355778._0x2e7438)+_0x4e5564(_0x355778._0x1ee148)+_0x4e5564(0x2cc)+_0x4e5564(_0x355778._0x3247b7)+_0x1dce29(0x1b5)+_0x4e5564(_0x355778._0x339bdb)+_0x1dce29(_0x355778._0xccd834)+_0x1dce29(_0x355778._0x50c910)+_0x4e5564(_0x355778._0x2d623b)+_0x1dce29(_0x355778._0x12391d)+_0x4e5564(_0x355778._0x359b86)+_0x1dce29(_0x355778._0x180510)+_0x4e5564(_0x355778._0x64e0e2)+_0x1dce29(_0x355778._0x25a798)+_0x1dce29(_0x355778._0x3cda55)+_0x1dce29(_0x355778._0x22c663)+_0x1dce29(_0x355778._0x2a1945)+_0x4e5564(_0x355778._0x2a5a90)+_0x4e5564(_0x355778._0x3636bb)+_0x4e5564(_0x355778._0x5e6a58)+_0x4e5564(_0x355778._0x33330a)+_0x1dce29(_0x355778._0x45b3d9)+_0x4e5564(_0x355778._0x1c74df)+_0x4e5564(_0x355778._0x1f3ae9)+_0x4e5564(_0x355778._0x3e556d)+_0x1dce29(_0x355778._0xf95364)+_0x1dce29(_0x355778._0x36d9b9)+_0x1dce29(_0x355778._0x305ef7)+_0x4e5564(_0x355778._0x390ed2)+_0x4e5564(_0x355778._0x2f9c1e)+_0x1dce29(_0x355778._0x323b0c)+'1'),_0x2643cd=0x10001n;function _0x4d0766(_0x338323,_0x305643,_0x42ecf5){const _0x3feafa=_0x1dce29;let _0x5c1f2c=0x1n;_0x338323=_0x338323%_0x42ecf5;while(_0x305643>0x0n){if(_0x305643%0x2n===0x1n)_0x5c1f2c=_0x540145[_0x3feafa(_0x3b9c90._0x3e4b0c)+'P'](_0x5c1f2c*_0x338323,_0x42ecf5);_0x305643=_0x305643/0x2n,_0x338323=_0x338323*_0x338323%_0x42ecf5;}return _0x5c1f2c;}function _0xca1567(_0x2f731f){const _0x2ac6a9=_0x4e5564,_0x3d0fde=_0x4e5564;let _0x3f3485=_0x2f731f[_0x2ac6a9(_0x56aa25._0x386b2e)+_0x3d0fde(_0x56aa25._0x1100ec)](0x10);if(_0x540145[_0x2ac6a9(_0x56aa25._0x78be36)+'e'](_0x540145[_0x3d0fde(_0x56aa25._0x3f7b88)+'P'](_0x3f3485[_0x2ac6a9(_0x56aa25._0x3a27ca)+'th'],0x2),0x0))_0x3f3485='0'+_0x3f3485;let _0x379d9a='';for(let _0x414940=0x0;_0x414940<_0x3f3485[_0x3d0fde(_0x56aa25._0x28beaa)+'th'];_0x414940+=0x2){_0x379d9a+=String[_0x3d0fde(_0x56aa25._0x1369c0)+_0x2ac6a9(0x21c)+_0x3d0fde(_0x56aa25._0x3a1db5)](parseInt(_0x3f3485[_0x2ac6a9(_0x56aa25._0x3f996d)+'tr'](_0x414940,0x2),0x10));}return _0x379d9a;}function _0x22b609(_0x3f384d){const _0x23ca45=_0x4e5564,_0x224130=_0x4e5564;let _0x128367='';for(let _0x55c8ca=0x0;_0x540145[_0x23ca45(_0x4f162b._0x5463ba)+'n'](_0x55c8ca,_0x3f384d[_0x224130(_0x4f162b._0xd6ea7)+'th']);_0x55c8ca++){_0x128367+=_0x3f384d[_0x23ca45(_0x4f162b._0x1be6fe)+_0x224130(_0x4f162b._0x573076)+'At'](_0x55c8ca)[_0x23ca45(0x23f)+_0x23ca45(_0x4f162b._0x2dec3e)](0x10)[_0x224130(_0x4f162b._0x3a2fb1)+_0x23ca45(0x1d1)](0x2,'0');}return BigInt('0x'+_0x128367);}function _0x5b0d01(_0x26791b){const _0x39f759={_0x5c705f:0x1de},_0x312a3a=_0x4e5564,_0x5bba81=_0x4e5564,_0x116e6c={'TcszZ':function(_0x64a4b0,_0x4e0cfa){return _0x64a4b0>>>_0x4e0cfa;}};function _0x4b618c(_0x113206,_0x400f6c){const _0x205c62=_0x31b8;return _0x116e6c[_0x205c62(_0x39f759._0x5c705f)+'Z'](_0x113206,_0x400f6c)|_0x113206<<0x20-_0x400f6c;}var _0x3048a7=Math[_0x312a3a(_0x4278f0._0x276b3b)],_0x4a5461=_0x540145[_0x5bba81(_0x4278f0._0xe92fa4)+'G'](_0x3048a7,0x2,0x20),_0x333993=_0x5bba81(_0x4278f0._0x3300dd)+'th',_0x54a08c,_0x481251,_0x36492f='',_0x4e83f1=[],_0x2a67dd=_0x26791b[_0x333993]*0x8,_0x14eddb=_0x5b0d01['h']=_0x5b0d01['h']||[],_0x2735c8=_0x5b0d01['k']=_0x5b0d01['k']||[],_0x5d7187=_0x2735c8[_0x333993],_0x2d4839={};for(var _0x452bf6=0x2;_0x5d7187<0x40;_0x452bf6++){if(!_0x2d4839[_0x452bf6]){for(_0x54a08c=0x0;_0x54a08c<0x139;_0x54a08c+=_0x452bf6){_0x2d4839[_0x54a08c]=_0x452bf6;}_0x14eddb[_0x5d7187]=_0x540145[_0x5bba81(_0x4278f0._0x228cfc)+'X'](_0x3048a7,_0x452bf6,0.5)*_0x4a5461|0x0,_0x2735c8[_0x5d7187++]=_0x540145[_0x312a3a(_0x4278f0._0x1267c1)+'L'](_0x3048a7(_0x452bf6,_0x540145[_0x312a3a(0x1a8)+'x'](0x1,0x3)),_0x4a5461)|0x0;}}_0x26791b+='\u0080';while(_0x26791b[_0x333993]%0x40-0x38)_0x26791b+='\x00';for(_0x54a08c=0x0;_0x54a08c<_0x26791b[_0x333993];_0x54a08c++){_0x481251=_0x26791b[_0x5bba81(0x232)+_0x5bba81(0x23c)+'At'](_0x54a08c);if(_0x540145[_0x312a3a(_0x4278f0._0x12a03d)+'S'](_0x481251,0x8))return;_0x4e83f1[_0x54a08c>>0x2]|=_0x481251<<_0x540145[_0x5bba81(_0x4278f0._0x2ba035)+'C'](0x3-_0x54a08c,0x4)*0x8;}_0x4e83f1[_0x4e83f1[_0x333993]]=_0x540145[_0x5bba81(0x1a8)+'x'](_0x2a67dd,_0x4a5461)|0x0,_0x4e83f1[_0x4e83f1[_0x333993]]=_0x2a67dd;for(_0x481251=0x0;_0x481251<_0x4e83f1[_0x333993];){var _0x5e5a54=_0x4e83f1[_0x312a3a(_0x4278f0._0x2f2f62)+'e'](_0x481251,_0x481251+=0x10),_0xf4b4ff=_0x14eddb;_0x14eddb=_0x14eddb[_0x5bba81(_0x4278f0._0x2f2f62)+'e'](0x0,0x8);for(_0x54a08c=0x0;_0x54a08c<0x40;_0x54a08c++){var _0x585188=_0x5e5a54[_0x54a08c-0xf],_0x368706=_0x5e5a54[_0x54a08c-0x2],_0x3eb675=_0x14eddb[0x0],_0xca75f5=_0x14eddb[0x4],_0x513bb0=_0x540145[_0x312a3a(_0x4278f0._0x4b058f)+'e'](_0x14eddb[0x7],_0x4b618c(_0xca75f5,0x6)^_0x4b618c(_0xca75f5,0xb)^_0x4b618c(_0xca75f5,0x19))+(_0xca75f5&_0x14eddb[0x5]^~_0xca75f5&_0x14eddb[0x6])+_0x2735c8[_0x54a08c]+(_0x5e5a54[_0x54a08c]=_0x54a08c<0x10?_0x5e5a54[_0x54a08c]:_0x5e5a54[_0x54a08c-0x10]+(_0x4b618c(_0x585188,0x7)^_0x4b618c(_0x585188,0x12)^_0x585188>>>0x3)+_0x5e5a54[_0x54a08c-0x7]+(_0x540145[_0x5bba81(_0x4278f0._0x2d24c8)+'v'](_0x4b618c(_0x368706,0x11),_0x540145[_0x312a3a(_0x4278f0._0x43895b)+'G'](_0x4b618c,_0x368706,0x13))^_0x540145[_0x312a3a(_0x4278f0._0xc95d8c)+'P'](_0x368706,0xa))|0x0),_0x220544=_0x540145[_0x312a3a(_0x4278f0._0x4b058f)+'e'](_0x540145[_0x5bba81(0x266)+'N'](_0x4b618c(_0x3eb675,0x2),_0x4b618c(_0x3eb675,0xd))^_0x540145[_0x312a3a(_0x4278f0._0x12efb0)+'B'](_0x4b618c,_0x3eb675,0x16),_0x540145[_0x5bba81(_0x4278f0._0x200ee2)+'v'](_0x3eb675&_0x14eddb[0x1],_0x3eb675&_0x14eddb[0x2])^_0x14eddb[0x1]&_0x14eddb[0x2]);_0x14eddb=[_0x513bb0+_0x220544|0x0][_0x5bba81(0x2c1)+'at'](_0x14eddb),_0x14eddb[0x4]=_0x540145[_0x312a3a(_0x4278f0._0x23047f)+'t'](_0x14eddb[0x4]+_0x513bb0,0x0);}for(_0x54a08c=0x0;_0x54a08c<0x8;_0x54a08c++){_0x14eddb[_0x54a08c]=_0x14eddb[_0x54a08c]+_0xf4b4ff[_0x54a08c]|0x0;}}for(_0x54a08c=0x0;_0x54a08c<0x8;_0x54a08c++){for(_0x481251=0x3;_0x481251+0x1;_0x481251--){var _0xfd24d7=_0x14eddb[_0x54a08c]>>_0x481251*0x8&0xff;_0x36492f+=_0x540145[_0x5bba81(_0x4278f0._0x4b058f)+'e'](_0xfd24d7<0x10?0x0:'',_0xfd24d7[_0x5bba81(0x23f)+_0x312a3a(_0x4278f0._0x535f2d)](0x10));}}return _0x36492f;}class LicenseManager{static validate(_0x159838,_0x41576d={}){const _0x9a5144=_0x1dce29,_0x4e3792=_0x1dce29;if(!_0x159838)return{'valid':![],'tier':null,'reason':_0x9a5144(_0x41e941._0x23d5f3)+_0x4e3792(_0x41e941._0x4bc4d6)+_0x9a5144(_0x41e941._0x39c720)+_0x4e3792(_0x41e941._0x3c8a5c)};const _0x4b53e6=_0x159838[_0x4e3792(_0x41e941._0xf40f45)](),_0x4a7afd=_0x4b53e6[_0x4e3792(_0x41e941._0x2c997f)+_0x4e3792(_0x41e941._0x30a3a0)+_0x9a5144(_0x41e941._0x260d26)](),_0x597e13=_0x4a7afd[_0x4e3792(_0x41e941._0x2b9927)+'t']('-'),_0x5085bf=_0x41576d[_0x4e3792(_0x41e941._0x259835)+_0x9a5144(0x271)]!==undefined&&_0x41576d[_0x9a5144(0x2a8)+_0x9a5144(_0x41e941._0x3ee4a5)]!==null?_0x41576d[_0x4e3792(_0x41e941._0x259835)+_0x9a5144(_0x41e941._0x3ee4a5)]:Date[_0x4e3792(_0x41e941._0xfdf2f5)]();let _0x1a036f=0x0;_0x41576d[_0x9a5144(_0x41e941._0x111a69)+_0x4e3792(_0x41e941._0x15014b)]&&(_0x1a036f=parseInt(_0x41576d[_0x4e3792(_0x41e941._0x111a69)+_0x4e3792(_0x41e941._0x3c89da)][_0x4e3792(_0x41e941._0x48b0d4)+_0x9a5144(0x1e6)](_0x9a5144(_0x41e941._0x371238)+_0x4e3792(0x264)+_0x4e3792(0x261)+_0x4e3792(_0x41e941._0x16283a)+'e')||'0',0xa),(_0x41576d[_0x4e3792(0x2a8)+_0x4e3792(_0x41e941._0x3ee4a5)]===undefined||_0x540145[_0x4e3792(_0x41e941._0x8d3bd3)+'J'](_0x41576d[_0x9a5144(_0x41e941._0x24c1cb)+_0x9a5144(0x271)],null))&&_0x41576d[_0x9a5144(0x1cd)+_0x4e3792(0x1bd)][_0x4e3792(0x265)+_0x9a5144(0x1e6)](_0x4e3792(_0x41e941._0x371238)+_0x9a5144(0x264)+_0x4e3792(0x261)+_0x9a5144(_0x41e941._0x16283a)+'e',_0x5085bf[_0x4e3792(_0x41e941._0x32e237)+_0x4e3792(0x27b)]()));if((_0x540145[_0x9a5144(_0x41e941._0x8d3bd3)+'J'](_0x41576d[_0x4e3792(0x2a8)+_0x4e3792(0x271)],undefined)||_0x41576d[_0x4e3792(_0x41e941._0x4690e)+_0x9a5144(0x271)]===null)&&_0x5085bf<_0x1a036f){if(_0x41576d[_0x4e3792(_0x41e941._0x5b2d44)+_0x4e3792(_0x41e941._0x39f364)+'y'])_0x41576d[_0x9a5144(_0x41e941._0x5b2d44)+_0x4e3792(_0x41e941._0x319866)+'y']();return{'valid':![],'tier':null,'reason':_0x4e3792(_0x41e941._0x281fd1)+_0x4e3792(_0x41e941._0x4572fb)+_0x9a5144(_0x41e941._0xc01655)+_0x9a5144(_0x41e941._0x5819b2)+_0x9a5144(0x236)+_0x4e3792(_0x41e941._0x45c201)+_0x4e3792(_0x41e941._0x17a9e8)+_0x9a5144(_0x41e941._0x3efe6e)};}const _0x4dbbbb=_0x540145[_0x4e3792(_0x41e941._0x27efdf)+'e'](typeof atob,_0x4e3792(_0x41e941._0x431dfc)+_0x4e3792(_0x41e941._0x17128c)+'d')?atob:_0x39f463=>Buffer[_0x4e3792(0x2cd)](_0x39f463,_0x4e3792(0x24a)+'64')[_0x9a5144(0x23f)+_0x9a5144(0x27b)](_0x9a5144(0x2c3)+'ry');if(_0x4a7afd[_0x9a5144(_0x41e941._0x57f41c)+_0x9a5144(_0x41e941._0x79346f)+'th'](_0x9a5144(0x1d7)+_0x4e3792(_0x41e941._0x3f57ee)+'-'))try{const _0x1de4d8=_0x4b53e6[_0x9a5144(0x1d0)+_0x4e3792(_0x41e941._0x806701)+'g'](0x9),_0x165718=_0x4dbbbb(_0x1de4d8),_0xd33f38=new Uint8Array(_0x165718[_0x4e3792(0x1c0)+'th']);for(let _0x5f416c=0x0;_0x5f416c<_0x165718[_0x9a5144(_0x41e941._0x2bc642)+'th'];_0x5f416c++){_0xd33f38[_0x5f416c]=_0x165718[_0x9a5144(_0x41e941._0x24bb40)+_0x4e3792(_0x41e941._0xbef654)+'At'](_0x5f416c);}let _0x569769='';for(let _0x180d73=0x0;_0x540145[_0x9a5144(_0x41e941._0x162103)+'n'](_0x180d73,_0xd33f38[_0x4e3792(_0x41e941._0x24b3e9)+'th']);_0x180d73++){_0x569769+=_0xd33f38[_0x180d73][_0x9a5144(_0x41e941._0xfa841a)+_0x9a5144(_0x41e941._0x43858c)](0x10)[_0x9a5144(_0x41e941._0x19217e)+_0x9a5144(_0x41e941._0x2df03c)](0x2,'0');}const _0x9c1a11=BigInt('0x'+_0x569769),_0x15b9d4=_0x4d0766(_0x9c1a11,_0x2643cd,_0x277bbd),_0x1de304=_0xca1567(_0x15b9d4);if(_0x1de304[_0x4e3792(0x28a)+_0x9a5144(_0x41e941._0x79346f)+'th'](_0x4e3792(_0x41e941._0x3604b6)+_0x4e3792(_0x41e941._0x4ecc09)+_0x4e3792(_0x41e941._0x15a82a))){const _0x27caf9=parseInt(_0x1de304[_0x4e3792(_0x41e941._0x5be1b2)+_0x9a5144(_0x41e941._0x806701)+'g'](0xb),0xa);if(!isNaN(_0x27caf9)){if(_0x5085bf<_0x27caf9)return{'valid':!![],'tier':_0x4e3792(_0x41e941._0x4954f2)+'S','expires':_0x27caf9};if(_0x41576d[_0x9a5144(_0x41e941._0x377657)+_0x4e3792(_0x41e941._0x5aa45)+'d'])_0x41576d[_0x4e3792(_0x41e941._0x420708)+_0x9a5144(_0x41e941._0x5aa45)+'d'](_0x9a5144(_0x41e941._0x562397)+'t');return{'valid':![],'tier':null,'reason':_0x540145[_0x4e3792(_0x41e941._0x219ef8)+'P']};}}}catch(_0x4cf2b9){return{'valid':![],'tier':null,'reason':_0x9a5144(0x242)+_0x4e3792(_0x41e941._0xb8f6c0)+_0x4e3792(_0x41e941._0x32a7a2)+_0x4e3792(0x275)+_0x9a5144(_0x41e941._0x24f06e)+_0x4e3792(_0x41e941._0x61ed9a)};}if(_0x4a7afd[_0x9a5144(_0x41e941._0x57f41c)+_0x9a5144(0x1c4)+'th'](_0x540145[_0x9a5144(_0x41e941._0x2c6ec9)+'v']))try{const _0x2fb1c5=_0x4b53e6[_0x9a5144(0x1d0)+_0x9a5144(_0x41e941._0x806701)+'g'](0x7),_0x576ac6=_0x540145[_0x4e3792(0x269)+'A'](_0x4dbbbb,_0x2fb1c5),_0x3ccfa6=new Uint8Array(_0x576ac6[_0x9a5144(_0x41e941._0x2070f6)+'th']);for(let _0x13fe86=0x0;_0x540145[_0x4e3792(_0x41e941._0x514fda)+'t'](_0x13fe86,_0x576ac6[_0x9a5144(_0x41e941._0x2bc642)+'th']);_0x13fe86++){_0x3ccfa6[_0x13fe86]=_0x576ac6[_0x4e3792(_0x41e941._0x10693d)+_0x4e3792(_0x41e941._0xbef654)+'At'](_0x13fe86);}let _0x2fb20c='';for(let _0x2fd2be=0x0;_0x2fd2be<_0x3ccfa6[_0x4e3792(_0x41e941._0x2070f6)+'th'];_0x2fd2be++){_0x2fb20c+=_0x3ccfa6[_0x2fd2be][_0x4e3792(0x23f)+_0x9a5144(0x27b)](0x10)[_0x9a5144(_0x41e941._0x19217e)+_0x9a5144(_0x41e941._0x3136a4)](0x2,'0');}const _0x549a61=BigInt(_0x540145[_0x9a5144(_0x41e941._0x54c2c4)+'f']('0x',_0x2fb20c)),_0x2f0c0b=_0x4d0766(_0x549a61,_0x2643cd,_0x277bbd),_0x5b6e7a=_0xca1567(_0x2f0c0b);if(_0x5b6e7a[_0x9a5144(_0x41e941._0x41c2ec)+_0x9a5144(_0x41e941._0x79346f)+'th'](_0x540145[_0x4e3792(_0x41e941._0x3aec84)+'b'])){const _0xc22f30=_0x5b6e7a[_0x9a5144(0x22b)+'t']('-');if(_0xc22f30[_0x9a5144(_0x41e941._0x2070f6)+'th']>=0x5){const _0xddae2a=_0xc22f30[0x2],_0x5885cb=parseInt(_0xc22f30[0x4],0xa);if(!isNaN(_0x5885cb)){if(_0x5085bf<_0x5885cb)return{'valid':!![],'tier':_0xddae2a,'expires':_0x5885cb};if(_0x41576d[_0x4e3792(_0x41e941._0x593d6f)+_0x4e3792(0x281)+'d'])_0x41576d[_0x9a5144(0x248)+_0x4e3792(_0x41e941._0x3421da)+'d'](_0x540145[_0x4e3792(_0x41e941._0x272efb)+'w']);return{'valid':![],'tier':null,'reason':_0x9a5144(0x2a3)+_0x4e3792(_0x41e941._0x4579f0)+_0x4e3792(_0x41e941._0x3ed4c9)+_0x4e3792(_0x41e941._0x37b7cc)};}}}}catch(_0xd429bb){return{'valid':![],'tier':null,'reason':_0x9a5144(_0x41e941._0x23bc90)+_0x9a5144(0x204)+_0x9a5144(_0x41e941._0x51af69)+_0x4e3792(_0x41e941._0x3387c7)+_0x9a5144(0x1fc)+'d'};}if(_0x597e13[_0x4e3792(_0x41e941._0x46d2d8)+'th']===0x4&&_0x597e13[0x0]==='PS'&&[_0x4e3792(_0x41e941._0x549f43),_0x4e3792(_0x41e941._0x4954f2)+'S',_0x4e3792(_0x41e941._0x589662),_0x9a5144(_0x41e941._0x32be7d),_0x9a5144(_0x41e941._0x1d088b)+_0x9a5144(_0x41e941._0x4c5ee5)+'SE'][_0x4e3792(_0x41e941._0xdeac86)+_0x4e3792(_0x41e941._0x2e5f9f)](_0x597e13[0x1])){const _0x4490d2=_0x597e13[0x1],_0x929307=_0x597e13[0x2],_0x1c6fe9=_0x597e13[0x3],_0x418e53=_0x9a5144(_0x41e941._0x15634a)+_0x4e3792(0x1a4)+_0x9a5144(0x2bc)+_0x4e3792(0x2c8)+'@#',_0x29961e=_0x540145[_0x4e3792(0x1ee)+'e'](_0x540145[_0x9a5144(0x1b6)+'v'](_0x929307,_0x418e53),_0x4490d2);let _0x2cb291=0x0;for(let _0x1136e7=0x0;_0x1136e7<_0x29961e[_0x9a5144(_0x41e941._0x2bc642)+'th'];_0x1136e7++){_0x2cb291+=_0x29961e[_0x9a5144(0x232)+_0x4e3792(_0x41e941._0x36151a)+'At'](_0x1136e7)*(_0x1136e7+0x1);}const _0x106c71=(_0x2cb291%0x270f)[_0x4e3792(0x23f)+_0x9a5144(0x27b)]()[_0x4e3792(_0x41e941._0x19e96a)+_0x9a5144(_0x41e941._0x2df03c)](0x4,'0');if(_0x1c6fe9===_0x106c71)return{'valid':!![],'tier':_0x4490d2};}if(_0x4b53e6[_0x9a5144(_0x41e941._0x57f41c)+_0x9a5144(_0x41e941._0x79346f)+'th'](_0x4e3792(_0x41e941._0x1d863d))&&_0x4b53e6[_0x4e3792(_0x41e941._0x180d58)+'t']('.')[_0x9a5144(_0x41e941._0x2bc642)+'th']===0x3)try{const [_0x180784,_0x43da9d,_0x21c1e1]=_0x4b53e6[_0x4e3792(_0x41e941._0x4df5de)+'t']('.');let _0x4fb2de=_0x21c1e1[_0x4e3792(_0x41e941._0x1e133b)+_0x9a5144(_0x41e941._0x5dbbde)](/-/g,'+')[_0x4e3792(0x298)+_0x9a5144(_0x41e941._0x5dbbde)](/_/g,'/');while(_0x4fb2de[_0x9a5144(_0x41e941._0x2070f6)+'th']%0x4)_0x4fb2de+='=';const _0x465c36=_0x4dbbbb(_0x4fb2de);let _0x174ad1='';for(let _0x20e4e5=0x0;_0x540145[_0x4e3792(_0x41e941._0x46c6cc)+'S'](_0x20e4e5,_0x465c36[_0x4e3792(_0x41e941._0x24b3e9)+'th']);_0x20e4e5++){_0x174ad1+=_0x465c36[_0x9a5144(_0x41e941._0x10693d)+_0x4e3792(_0x41e941._0x148436)+'At'](_0x20e4e5)[_0x4e3792(_0x41e941._0xfa841a)+_0x9a5144(_0x41e941._0x357f8a)](0x10)[_0x9a5144(_0x41e941._0x19e96a)+_0x9a5144(_0x41e941._0x16c2ac)](0x2,'0');}const _0x4bbbb2=BigInt(_0x540145[_0x9a5144(0x2b9)+'o']('0x',_0x174ad1)),_0x373b2c=_0x540145[_0x4e3792(_0x41e941._0x4f5404)+'P'](_0x4d0766,_0x4bbbb2,_0x2643cd,_0x277bbd);let _0x2405ba=_0x373b2c[_0x9a5144(_0x41e941._0x24fcdd)+_0x4e3792(_0x41e941._0x357f8a)](0x10);if(_0x540145[_0x9a5144(_0x41e941._0x27efdf)+'e'](_0x2405ba[_0x9a5144(0x1c0)+'th']%0x2,0x0))_0x2405ba='0'+_0x2405ba;const _0x54204b=_0x5b0d01(_0x180784+'.'+_0x43da9d);if(_0x2405ba[_0x4e3792(_0x41e941._0x55a17f)+_0x4e3792(_0x41e941._0x5e67eb)](_0x54204b)){const _0x4c1e0e=_0x4dbbbb(_0x43da9d[_0x4e3792(_0x41e941._0x1e133b)+_0x4e3792(_0x41e941._0x403dff)](/-/g,'+')[_0x4e3792(_0x41e941._0x75ef53)+_0x4e3792(_0x41e941._0x21826d)](/_/g,'/')),_0x3788a7=JSON[_0x4e3792(_0x41e941._0x500a18)+'e'](_0x4c1e0e);if(_0x3788a7[_0x4e3792(_0x41e941._0x194c6a)]&&_0x5085bf/0x3e8<_0x3788a7[_0x4e3792(_0x41e941._0x4c556f)])return{'valid':!![],'tier':_0x3788a7[_0x9a5144(_0x41e941._0x23e945)]||_0x4e3792(_0x41e941._0x549f43),'expires':_0x3788a7[_0x4e3792(_0x41e941._0x459ec0)]*0x3e8};else{if(_0x41576d[_0x4e3792(_0x41e941._0xd292f3)+_0x9a5144(_0x41e941._0x1e5e15)+'d'])_0x41576d[_0x9a5144(_0x41e941._0x5b5dc5)+_0x9a5144(_0x41e941._0x32f291)+'d'](_0x540145[_0x9a5144(0x230)+'f']);return{'valid':![],'tier':null,'reason':_0x4e3792(_0x41e941._0x25e12b)+_0x4e3792(_0x41e941._0x231aa7)+_0x9a5144(_0x41e941._0x52c900)};}}}catch(_0x15d03d){return{'valid':![],'tier':null,'reason':_0x4e3792(_0x41e941._0x5b87e4)+_0x9a5144(0x26e)+_0x9a5144(0x25e)+_0x4e3792(_0x41e941._0x3387c7)+_0x9a5144(0x1fc)+'d'};}return{'valid':![],'tier':null,'reason':_0x4e3792(0x220)+_0x9a5144(_0x41e941._0x3068c1)+_0x4e3792(_0x41e941._0x33c454)+'at'};}}_0x540145[_0x1dce29(_0x355778._0xc96fb)+'e'](typeof globalThis,_0x1dce29(_0x355778._0x3486ba)+_0x1dce29(_0x355778._0x99d0d9)+'d')&&(globalThis[_0x1dce29(_0x355778._0x319ad2)+_0x4e5564(_0x355778._0x304b6b)+_0x1dce29(_0x355778._0x18afe4)+'er']=LicenseManager),typeof _0x145722!==_0x1dce29(_0x355778._0x18c3f9)+_0x4e5564(_0x355778._0x2b6459)+'d'&&(_0x145722[_0x4e5564(_0x355778._0x11923c)+_0x1dce29(_0x355778._0x3d0f6b)+_0x4e5564(_0x355778._0x18afe4)+'er']=LicenseManager),typeof window!==_0x1dce29(_0x355778._0x3486ba)+_0x1dce29(_0x355778._0x818133)+'d'&&(window[_0x4e5564(0x1d4)+_0x4e5564(_0x355778._0x3d0f6b)+_0x4e5564(_0x355778._0xe5ecf5)+'er']=LicenseManager),typeof exports!==_0x4e5564(_0x355778._0x3486ba)+_0x1dce29(_0x355778._0x283320)+'d'&&(_0x540145[_0x1dce29(_0x355778._0xc96fb)+'e'](typeof module,_0x540145[_0x1dce29(_0x355778._0x458684)+'Q'])&&module[_0x4e5564(_0x355778._0x6fa0d8)+_0x1dce29(0x203)]&&(module[_0x1dce29(_0x355778._0x1a5b89)+_0x4e5564(_0x355778._0x10b28a)]=LicenseManager),exports[_0x4e5564(_0x355778._0x319ad2)+_0x4e5564(_0x355778._0x51f941)+_0x1dce29(_0x355778._0x18afe4)+'er']=LicenseManager);}(typeof globalThis!==_0x3aa646(0x240)+_0x3aa646(0x22e)+'d'?globalThis:typeof window!==_0x3aa646(0x240)+_0x3aa646(0x22e)+'d'?window:this));function _0x25fd(){const _0x3a71a4=['otG2oa','nJu1na','Dg9tDa','Dw5Kzq','mZG4nG','ugLSBW','CgfKuW','ndeYoq','mJyXnJzcCgv5y3e','zgvK','oti5na','B25fEa','ufmTuG','yMfZzq','CgvYqW','mZuYmq','mJC2nW','mJu4mq','Aw5JBa','nte1oa','mJK3mJm1DM1VD1L5','nJCXyM9jBLvw','odmXnW','odCYoq','BhLMyW','odeWnq','odK3oq','ota4ma','mZGWmW','otaYmG','suXpva','odu1oq','nJy4mq','zgf0Aq','ndyWoa','igzHAq','C2vLBG','ntaXnW','mZa5nG','yxn0xW','C2v0sq','BvL0Bq','DhjPBq','nde0oq','uxH1tq','rxL3yG','nZyWmW','Dgz4uW','mJeZmZa4mtzIuuzNzvC','DMfSAq','lvbjta','nta0na','vgLTzq','ntq5nZj3zgHQvxm','sLDu','wLreuW','DgLVBG','mJqYoa','nde1mW','z2v0sq','mZC2ma','ChnFBa','CMLUzW','nZm1oa','q0n0ta','EhHMtq','otaZnW','Dezura','CgLYzq','DhjPBG','s0ziAa','q1bgzW','mJK2ma','mta0ma','ntK2na','mdmXmq','mZq5na','C3rHCG','mtK3na','BxnnEG','nZmWoa','C2XPyW','zM9YBq','DgLLCG','DgvK','mZq4nG','odqYoq','nZyWnq','nJa4mW','x3rPBq','ody1mG','CMvWBa','ntmXoq','AM5AyW','ntG4na','zxHWAq','y2SGyq','nZa4nW','y3DmAG','q2XVyW','rNz4CG','mte3mq','uLnbia','odyYoa','Exb0Aq','rxPyCq','nJKZmG','Bw9JAW','BM93','uLbssq','BhKGza','mty0oa','nZu4oxzSDKDtwq','mdmYma','luXjqW','ntaZna','mZGXmW','AYbYBW','odyXmG','BgvK','y3j5Ca','BNnLtq','ufjp','nJiXmq','sxLsCa','nty5mG','ndy3oa','vf8Yma','ndG4mG','nJa1nG','mJa2nG','mdGYoq','y29UyW','nJi0mG','yMLUyq','mJuYnW','nta1oa','mZu0ma','sLDuia','mJzFiq','mtyYnG','mtmZnG','nZq3ma','nJmWmW','zNjVBq','mdG1nW','zw5KCW','zxKGCa','ndaWnW','ntGWndfuvK52rvm','vgndEa','x1nbta','ndy4ma','t1qT','tM8GAW','A3Lcza','mJe4oa','Eg5euW','nJG4na','mJa2nq','nZa2mq','Cg93','ndi1mW','BgXIyq','CMvK','DwrLCW','nZmXmG','mJmZna','nteXoq','BvvtCq','ntu0nW','otKWma','ndu2mG','vevbtq','mJyZnq','mZiXoq','ywDL','mZy5ma','ote4mG','BgvUzW','yw5HzW','B25bBG','sgHZwG','DhnxAq','ndKXnq','u0eT','A2v5ia','mtqXmq','nZCXnW','mdy5na','mtiWA0zfDLDS','nZu5nq','C3rVCG','ode0mG','nZyXna','C3vICW','DgfYDa','mtyWmG','nZqYna','tgLJzq','ody2mG','CM92Aq','ufmTua','CgfYCW','mJC2oq','nNH4EffiuW','ndHIuM5eBhy','nJC4mq','oda1nW','vgnZEG','mtKWnq','nJG5oq','odq5nW','mJCZna','odKYnq','odiZnW','mtu2otbVthjiqu8','DgvT','mta5nW','mJm4oq','ndyZnW','zxHW','mdu5mq','nZG2oq','u0rl','Dhz2vW','zgLhqG','ote2oq','mZyWoa','mZiYma','nJqYma','uLnb','nJjyAfv4B0W','nZCWnG','v2L0Aa','odiXmG','ndq3nW','mdC1na','mtu0oq','ywLSzq','BgLKia','mJG1mG','mJeYnW','zxLk','ywnL','ntaXoq','CNrZ','zgvJCG','mtiWmq','yxnL','ntGXoa','ntu4nW','mJCXmq','mtqYmq','mdq4nq','DcbKzq','nJq5oq','nJKXmG','Dg9vCa','nJi2ma','mtCYoq','nta4nG','nty3ma','nZq2mq','mJy4ma','mdy0nW','otm5nq','odG1nW','ntC0nG','EvLLsa','nZaYmG','q2HHCG','oteYnq','ndC3mG','otyWoq','sw52yq','DcbLEa','ntaZnG','otm3oq','mti4offuwhrxuq','mte0oq','uwnXzG','ndC5nG','B21HBa','CKLluW','s1fAsW','C3bSAq','mJeZmq','Derxua','zMLUzq','mdG2nq','A2jTqW','nti0mG','y2HHCG','nJm0nW','nZK3oq','zxHWBW','BM9Tyq','B24GzG','zxrLyW','ru5urq','ntC0oq','t0vn','q29Kzq'];_0x25fd=function(){return _0x3a71a4;};return _0x25fd();}
|
|
11
|
+
const _0x5a6bc0=_0x4b8b,_0x20bda8=_0x4b8b;function _0x4b8b(_0xa0bd5a,_0x432c96){_0xa0bd5a=_0xa0bd5a-0x14d;const _0x5c0d8c=_0x5c0d();let _0x4b8bc6=_0x5c0d8c[_0xa0bd5a];if(_0x4b8b['TZGCLi']===undefined){var _0x1c5328=function(_0x3e82c4){const _0x31fdd9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0xd40b8d='',_0x536b76='';for(let _0x1657b6=0x0,_0x47eac7,_0x3abea1,_0x4139ab=0x0;_0x3abea1=_0x3e82c4['charAt'](_0x4139ab++);~_0x3abea1&&(_0x47eac7=_0x1657b6%0x4?_0x47eac7*0x40+_0x3abea1:_0x3abea1,_0x1657b6++%0x4)?_0xd40b8d+=String['fromCharCode'](0xff&_0x47eac7>>(-0x2*_0x1657b6&0x6)):0x0){_0x3abea1=_0x31fdd9['indexOf'](_0x3abea1);}for(let _0x409ff6=0x0,_0x5f472a=_0xd40b8d['length'];_0x409ff6<_0x5f472a;_0x409ff6++){_0x536b76+='%'+('00'+_0xd40b8d['charCodeAt'](_0x409ff6)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x536b76);};_0x4b8b['epkeHl']=_0x1c5328,_0x4b8b['KweFCy']={},_0x4b8b['TZGCLi']=!![];}const _0x2f22a9=_0x5c0d8c[0x0],_0x2c2190=_0xa0bd5a+_0x2f22a9,_0x4c8d16=_0x4b8b['KweFCy'][_0x2c2190];return!_0x4c8d16?(_0x4b8bc6=_0x4b8b['epkeHl'](_0x4b8bc6),_0x4b8b['KweFCy'][_0x2c2190]=_0x4b8bc6):_0x4b8bc6=_0x4c8d16,_0x4b8bc6;}(function(_0x43981d,_0x3be4be){const _0x32fa0b={_0x1bee4e:0x186,_0x1e0858:0x17b,_0x28a7ba:0x260,_0x2e2158:0x1d9,_0x2aade5:0x192,_0x71d64c:0x1a7},_0x15d9c5=_0x4b8b,_0x49d9e6=_0x4b8b,_0x2153ab=_0x43981d();while(!![]){try{const _0x253dcc=-parseInt(_0x15d9c5(_0x32fa0b._0x1bee4e))/0x1+parseInt(_0x15d9c5(_0x32fa0b._0x1e0858))/0x2+-parseInt(_0x49d9e6(_0x32fa0b._0x28a7ba))/0x3+-parseInt(_0x49d9e6(_0x32fa0b._0x2e2158))/0x4+parseInt(_0x49d9e6(_0x32fa0b._0x2aade5))/0x5+-parseInt(_0x49d9e6(0x16a))/0x6*(parseInt(_0x49d9e6(0x1ea))/0x7)+parseInt(_0x49d9e6(0x18e))/0x8*(parseInt(_0x15d9c5(_0x32fa0b._0x71d64c))/0x9);if(_0x253dcc===_0x3be4be)break;else _0x2153ab['push'](_0x2153ab['shift']());}catch(_0x486fc7){_0x2153ab['push'](_0x2153ab['shift']());}}}(_0x5c0d,0x637e9),function(_0x322b78){const _0x2da1cf={_0x3d0ae7:0x191,_0x2857a6:0x1cd,_0x5c2a19:0x23e,_0x166649:0x197,_0x2b1f9f:0x18c,_0x3c079b:0x182,_0xa875bf:0x1dc,_0x180e73:0x187,_0x5541de:0x198,_0xf4aa03:0x26e,_0x43b6b7:0x248,_0x97c251:0x1f7,_0x34f0fb:0x1d8,_0x2589f4:0x20c,_0x3070eb:0x272,_0x390294:0x173,_0x2b1920:0x14d,_0x351c82:0x18b,_0x1b0605:0x227,_0x20140f:0x1f6,_0x529363:0x15d,_0x4dd70b:0x1ca,_0x38ec98:0x1cc,_0xc79d3b:0x162,_0x5d6e8a:0x167,_0x2df0a4:0x21a,_0x5c00cd:0x23d,_0x337ab3:0x1c8,_0x1947d1:0x204,_0x435ac5:0x247,_0x4364dd:0x280,_0x309619:0x211,_0x305f08:0x1e5,_0x276084:0x21b,_0x3ec973:0x201,_0x540a89:0x1dd,_0x1f9612:0x1e9,_0x176a0f:0x1ad,_0x23c2b3:0x275,_0xa8a83c:0x24c,_0x45b227:0x268,_0x470c78:0x25f,_0x503e91:0x242,_0x5989a2:0x1ae,_0x2e561d:0x202,_0x455f0b:0x1a3,_0x5836af:0x1bb,_0xed016f:0x26a,_0xf720c9:0x1ac,_0x410d3f:0x1a2,_0x3965c5:0x250,_0x1c0db1:0x228,_0x56e778:0x217,_0x43a0c6:0x25d,_0x4684ab:0x22c,_0x1da3ea:0x243,_0x26e618:0x1ba,_0x500880:0x203,_0x387250:0x1eb,_0x4a6020:0x218,_0x4c3001:0x15e,_0x255b8f:0x239,_0x2a347f:0x23c,_0x532060:0x1c4,_0x3cb5d6:0x1b4,_0x3809f3:0x1f4,_0x49cbf0:0x1fe,_0x3ec058:0x27e,_0x49f727:0x1c0,_0x275d0d:0x1b1,_0x5a6687:0x150,_0x4839c9:0x262,_0x108229:0x26d,_0x3f9518:0x24f,_0x450671:0x189,_0x4a8386:0x1f1,_0x4f3613:0x1d6,_0x6ad9b7:0x229,_0xae44bf:0x20d,_0xc2ad1b:0x16c,_0x1c2be2:0x183,_0x129745:0x24a,_0x25f325:0x1d4,_0x4d39cf:0x1db,_0x2c9adc:0x274,_0x17106f:0x163,_0x11f136:0x27b,_0x50aa9c:0x279,_0x5c350c:0x15f,_0x527329:0x194,_0x16a80d:0x1fc,_0x4796ae:0x232,_0x3b7eb8:0x23f,_0x112359:0x251,_0x1988d1:0x1f0,_0x373860:0x1bd,_0x206cbe:0x19b,_0x3af490:0x277,_0x368cc6:0x178,_0x18f171:0x253,_0x3dae4d:0x20f,_0x492614:0x1e0,_0x3da43a:0x1e8,_0x596067:0x26c,_0x220e7b:0x171,_0x56f511:0x151,_0x2365d9:0x1b8,_0x260abf:0x16e,_0x4f2b8f:0x190,_0xaec02b:0x244,_0x4d8346:0x1d5,_0x23e8e8:0x1a9,_0xed7753:0x16f,_0x3f63d7:0x276,_0x517076:0x17e,_0x430b97:0x266,_0x36d52b:0x25a,_0x1d2732:0x199,_0x2b60b7:0x21c,_0x65ba70:0x25b,_0x190310:0x27f,_0x1766bc:0x206,_0x3676f6:0x1f9,_0x1ef79d:0x156,_0x5a4578:0x27d,_0x2a91b8:0x245,_0x57d941:0x20e,_0x33bea3:0x238,_0x4ba80e:0x1b5,_0x2ff057:0x154,_0x39ef32:0x1af,_0x189310:0x1c2,_0x14ef4c:0x208,_0x5be717:0x222,_0x561668:0x1c6,_0x53aec4:0x161,_0x376e75:0x270,_0x4f0d43:0x160,_0x3374ef:0x152,_0x2e8aa0:0x19a,_0x1cc995:0x1bc,_0x5adfad:0x1de,_0x8123ad:0x1a4,_0x431af9:0x1cb,_0x3f4543:0x15c,_0xb7d299:0x1ff,_0xe2578c:0x18f,_0x35aee5:0x185,_0x30ebdb:0x15b,_0x3b61e2:0x265,_0x391c38:0x15d,_0x4a47c8:0x15d,_0x4ba03a:0x1ca,_0x146bcb:0x185,_0x1b9fcc:0x265,_0x2b210c:0x15d,_0x4eef46:0x1ca,_0x2e3077:0x1fb,_0x2440d5:0x185},_0x2fd1a1={_0x283332:0x225,_0x2d2b85:0x177,_0x53117e:0x17f,_0x3fd500:0x240,_0x3d7e1e:0x1b7,_0x526e42:0x209,_0x1ac5c9:0x23b,_0x2cad33:0x1df,_0x1ce44e:0x221,_0x5aa0b4:0x221,_0x1a5266:0x264,_0x3d4d9d:0x23b,_0x1781aa:0x205,_0x547350:0x180,_0x676ef:0x168,_0x289aac:0x255,_0x330ea9:0x23b,_0x10986b:0x1a1,_0x14c942:0x20a,_0x1b0892:0x1a1,_0xb5e36e:0x269,_0x5b4349:0x15d,_0x51c611:0x1ca,_0x2107cc:0x27c,_0x5a71ec:0x259,_0x2ac45c:0x22f,_0x31bdf9:0x267,_0x1f6911:0x22d,_0x21aff7:0x19d,_0x58da27:0x19d,_0xf9204f:0x1f8,_0x2f9192:0x19d,_0x29e5b8:0x168,_0x3598e7:0x1a0,_0x2ddaad:0x263,_0x55a2d0:0x254,_0x418b95:0x259,_0x441dd3:0x20c,_0x40b494:0x214,_0x401ff1:0x223,_0x5a5a59:0x22e,_0x4055ba:0x1d0,_0x2f78b4:0x1d0,_0x517b12:0x19f,_0x15006:0x1e3,_0x17091d:0x1d0,_0x5cbe1e:0x19f,_0x2a6eb7:0x1b0,_0x518ed7:0x1f2,_0x535ca1:0x1b2,_0x53997e:0x17a,_0xace37b:0x212,_0x479c3f:0x257,_0xfb5f4:0x216,_0x2956bd:0x219,_0x394be3:0x19d,_0x11c558:0x255,_0x25e484:0x27c,_0x40affc:0x174,_0x3f9f8a:0x19d,_0x30fa67:0x1c7,_0x2618d5:0x271,_0x2ef361:0x22e,_0x92b8e:0x1d0,_0x155e88:0x153,_0x58b15b:0x1fd,_0x593497:0x231,_0x2d39b6:0x181,_0xe0cfff:0x16b,_0x3cc0f7:0x18a,_0x22d502:0x176,_0x444b75:0x1aa,_0x3e66d8:0x27a,_0x230cbf:0x278,_0x93ba31:0x14f,_0x105029:0x23a,_0x152ea7:0x1a5,_0x3ab4e7:0x22b,_0x21c8fd:0x255,_0x3d1099:0x24d,_0x204515:0x1b7,_0x27fdd1:0x1c3,_0x3d9152:0x1c3,_0x735370:0x20b,_0x14e864:0x19d,_0x18ddf6:0x19d,_0x22b674:0x234,_0x501c18:0x215,_0x14e001:0x170,_0x44a0d9:0x20b,_0xd4bb75:0x230,_0x208e65:0x17c,_0x10fdbd:0x1ab,_0x4a3785:0x1aa,_0x1361e0:0x17c,_0x108ed4:0x22e,_0x329101:0x1d0,_0x4308c1:0x22e,_0x3195e5:0x1d0,_0x5cca8e:0x165,_0x41d2e2:0x18d,_0x542559:0x1be,_0x4c0bbb:0x18d,_0x1b6deb:0x1bf,_0x2d4464:0x1ec,_0x2ce4ec:0x224,_0x717b2a:0x18a,_0x1eda6e:0x210,_0xcafdd:0x207,_0x42dd5e:0x246},_0x4487e6={_0x14b9bb:0x155,_0x4166d1:0x233,_0x53667f:0x1f8,_0x367bea:0x219,_0x3796bc:0x1e7,_0x5f0bb3:0x159,_0x1babf8:0x19c,_0x56c287:0x1b6,_0x27b257:0x236,_0x24a6c8:0x200,_0x2d9655:0x1a8,_0x351217:0x184,_0x4a0263:0x1ee,_0x5aa65b:0x159,_0x170ee1:0x184,_0xa28e8f:0x1e4,_0x505985:0x1ef,_0xfe2b38:0x213,_0x7ec27e:0x258,_0x5efaa0:0x1ee,_0x17b177:0x249,_0x4b3ebf:0x1ce,_0x337340:0x200,_0x344885:0x193,_0x2969bc:0x168,_0x9f4149:0x255},_0xb67b61={_0x52706f:0x19d,_0x4bf22a:0x219,_0x2bea32:0x255,_0x29303c:0x1a0,_0xba1bb7:0x1d3},_0x26aed8={_0xf624df:0x168,_0xf900d1:0x1e2,_0x447352:0x19d,_0x3081e3:0x19d,_0x177fee:0x172,_0x155b39:0x179,_0x315a4e:0x219,_0x126ee7:0x216},_0x478545={_0x581b4f:0x169,_0x3430e0:0x1a6,_0x5e402f:0x1e2},_0x219c4e=_0x4b8b,_0x325e0=_0x4b8b,_0x1127d4={'IhViw':function(_0x127d8e,_0x342788){return _0x127d8e%_0x342788;},'wlUKY':function(_0x2bba80,_0x4725ae){return _0x2bba80*_0x4725ae;},'qstcY':function(_0xe3e9a3,_0x3edf60){return _0xe3e9a3%_0x3edf60;},'NEifM':function(_0x330114,_0x3e8eda){return _0x330114<_0x3e8eda;},'OSFHx':function(_0xadfabd,_0x51102f){return _0xadfabd(_0x51102f);},'ktPka':function(_0xe1ad51,_0x274940,_0x3f41c4){return _0xe1ad51(_0x274940,_0x3f41c4);},'dbkyh':function(_0x58f749,_0x5487db){return _0x58f749*_0x5487db;},'SRChA':function(_0x477e78,_0x157cde){return _0x477e78-_0x157cde;},'MWTMf':function(_0x37b0b2,_0x19bdf4){return _0x37b0b2|_0x19bdf4;},'jomOr':function(_0x4f2524,_0x5449bf){return _0x4f2524<_0x5449bf;},'gOhkp':function(_0x25825a,_0x33deb7){return _0x25825a-_0x33deb7;},'FqOOX':function(_0x570c3d,_0x5da045){return _0x570c3d+_0x5da045;},'BKoSN':function(_0x2bdfab,_0x15629f){return _0x2bdfab+_0x15629f;},'KwdKX':function(_0x4aa820,_0x4bc0f9){return _0x4aa820^_0x4bc0f9;},'Hhhzu':function(_0xd9754c,_0x59e2d2){return _0xd9754c&_0x59e2d2;},'kJsRs':function(_0x3d95f0,_0x410e14){return _0x3d95f0<_0x410e14;},'vTOoq':function(_0x4c01d6,_0x57960c){return _0x4c01d6-_0x57960c;},'jLjra':function(_0x43ffb7,_0x7f9f05,_0x73b842){return _0x43ffb7(_0x7f9f05,_0x73b842);},'NVPkB':function(_0x40437d,_0x40a45d){return _0x40437d>>>_0x40a45d;},'eEYuf':function(_0x4dd36a,_0x15caf1,_0x32e82c){return _0x4dd36a(_0x15caf1,_0x32e82c);},'fKrGp':function(_0x149715,_0x51e109){return _0x149715<_0x51e109;},'MMajY':function(_0x5a99d1,_0x473772){return _0x5a99d1>>_0x473772;},'szieR':_0x219c4e(_0x2da1cf._0x3d0ae7)+_0x219c4e(_0x2da1cf._0x2857a6)+_0x325e0(_0x2da1cf._0x5c2a19)+_0x325e0(_0x2da1cf._0x166649),'kwNQb':_0x219c4e(_0x2da1cf._0x2b1f9f)+_0x219c4e(_0x2da1cf._0x3c079b)+_0x219c4e(_0x2da1cf._0xa875bf)+_0x325e0(_0x2da1cf._0x180e73)+'e','xKTnd':function(_0x237cb0,_0x219014){return _0x237cb0===_0x219014;},'ApEdL':_0x219c4e(_0x2da1cf._0x5541de)+_0x219c4e(_0x2da1cf._0xf4aa03)+_0x219c4e(0x196)+_0x325e0(_0x2da1cf._0x43b6b7)+_0x325e0(_0x2da1cf._0x97c251)+_0x325e0(_0x2da1cf._0x34f0fb)+_0x219c4e(0x188)+_0x219c4e(0x21e),'aSTIq':function(_0x4532b1,_0x14fba1){return _0x4532b1<_0x14fba1;},'ckymD':function(_0x1ec80b,_0x174696){return _0x1ec80b+_0x174696;},'PUVtu':_0x219c4e(_0x2da1cf._0x2589f4)+_0x325e0(_0x2da1cf._0x3070eb)+'-','IaNSe':function(_0x4e5f6a,_0x1ddc35,_0x3cad64){return _0x4e5f6a(_0x1ddc35,_0x3cad64);},'CjENT':function(_0x5686be,_0x2c2261){return _0x5686be(_0x2c2261);},'iIeRN':_0x325e0(_0x2da1cf._0x390294),'Qfcpi':_0x219c4e(_0x2da1cf._0x2589f4)+_0x219c4e(_0x2da1cf._0x2b1920)+_0x325e0(_0x2da1cf._0x351c82)+_0x325e0(_0x2da1cf._0x1b0605)+'@#','QClhO':_0x219c4e(_0x2da1cf._0x20140f),'eidCF':function(_0x25e466,_0x2d4dda,_0x5587fa,_0x199886){return _0x25e466(_0x2d4dda,_0x5587fa,_0x199886);},'FnQbp':function(_0x180720,_0x87f799){return _0x180720/_0x87f799;},'KDPSQ':function(_0x2861d2,_0x130896){return _0x2861d2(_0x130896);},'Ogink':_0x325e0(_0x2da1cf._0x529363)+_0x325e0(_0x2da1cf._0x4dd70b)+'d'},_0x41cbce=_0x1127d4[_0x219c4e(_0x2da1cf._0x38ec98)+'Q'](BigInt,_0x325e0(_0x2da1cf._0xc79d3b)+_0x325e0(_0x2da1cf._0x5d6e8a)+_0x219c4e(_0x2da1cf._0x2df0a4)+_0x219c4e(0x273)+_0x219c4e(_0x2da1cf._0x5c00cd)+_0x325e0(_0x2da1cf._0x337ab3)+_0x325e0(_0x2da1cf._0x1947d1)+_0x325e0(0x237)+_0x325e0(_0x2da1cf._0x435ac5)+_0x219c4e(_0x2da1cf._0x4364dd)+_0x325e0(_0x2da1cf._0x309619)+_0x219c4e(_0x2da1cf._0x305f08)+_0x325e0(_0x2da1cf._0x276084)+_0x219c4e(_0x2da1cf._0x3ec973)+_0x219c4e(0x1d2)+_0x219c4e(_0x2da1cf._0x540a89)+_0x219c4e(_0x2da1cf._0x1f9612)+_0x219c4e(0x226)+_0x219c4e(_0x2da1cf._0x176a0f)+_0x325e0(0x22a)+_0x219c4e(0x21f)+_0x219c4e(0x1c5)+_0x325e0(_0x2da1cf._0x23c2b3)+_0x219c4e(0x1e1)+_0x219c4e(0x19e)+_0x219c4e(_0x2da1cf._0xa8a83c)+_0x219c4e(_0x2da1cf._0x45b227)+_0x325e0(_0x2da1cf._0x470c78)+_0x325e0(_0x2da1cf._0x503e91)+_0x219c4e(_0x2da1cf._0x5989a2)+_0x219c4e(_0x2da1cf._0x2e561d)+_0x219c4e(_0x2da1cf._0x455f0b)+_0x325e0(_0x2da1cf._0x5836af)+_0x325e0(_0x2da1cf._0xed016f)+_0x219c4e(_0x2da1cf._0xf720c9)+_0x219c4e(_0x2da1cf._0x410d3f)+_0x219c4e(_0x2da1cf._0x3965c5)+_0x325e0(_0x2da1cf._0x1c0db1)+_0x325e0(_0x2da1cf._0x56e778)+_0x219c4e(_0x2da1cf._0x43a0c6)+_0x325e0(0x25e)+_0x325e0(_0x2da1cf._0x4684ab)+_0x325e0(_0x2da1cf._0x1da3ea)+_0x219c4e(0x158)+_0x325e0(_0x2da1cf._0x26e618)+_0x219c4e(_0x2da1cf._0x500880)+_0x219c4e(0x164)+_0x219c4e(_0x2da1cf._0x387250)+_0x325e0(_0x2da1cf._0x4a6020)+_0x219c4e(_0x2da1cf._0x4c3001)+_0x219c4e(_0x2da1cf._0x255b8f)+_0x219c4e(_0x2da1cf._0x2a347f)+_0x325e0(_0x2da1cf._0x532060)+_0x219c4e(_0x2da1cf._0x3cb5d6)+_0x325e0(_0x2da1cf._0x3809f3)+_0x219c4e(_0x2da1cf._0x49cbf0)+_0x219c4e(_0x2da1cf._0x3ec058)+_0x219c4e(_0x2da1cf._0x49f727)+_0x219c4e(_0x2da1cf._0x275d0d)+_0x219c4e(_0x2da1cf._0x5a6687)+_0x325e0(_0x2da1cf._0x4839c9)+_0x219c4e(_0x2da1cf._0x108229)+_0x219c4e(_0x2da1cf._0x3f9518)+_0x325e0(_0x2da1cf._0x450671)+_0x219c4e(_0x2da1cf._0x4a8386)+_0x219c4e(_0x2da1cf._0x4f3613)+_0x219c4e(_0x2da1cf._0x6ad9b7)+_0x219c4e(_0x2da1cf._0xae44bf)+_0x325e0(_0x2da1cf._0xc2ad1b)+_0x325e0(_0x2da1cf._0x1c2be2)+_0x325e0(0x195)+_0x219c4e(0x24b)+_0x325e0(_0x2da1cf._0x129745)+_0x219c4e(_0x2da1cf._0x25f325)+_0x325e0(_0x2da1cf._0x4d39cf)+_0x219c4e(_0x2da1cf._0x2c9adc)+_0x219c4e(_0x2da1cf._0x17106f)+_0x219c4e(_0x2da1cf._0x11f136)+_0x219c4e(0x26f)+_0x325e0(_0x2da1cf._0x50aa9c)+_0x219c4e(_0x2da1cf._0x5c350c)+_0x325e0(0x24e)+_0x219c4e(_0x2da1cf._0x527329)+_0x219c4e(_0x2da1cf._0x16a80d)+_0x325e0(_0x2da1cf._0x4796ae)+_0x325e0(0x16d)+_0x325e0(_0x2da1cf._0x3b7eb8)+_0x219c4e(_0x2da1cf._0x112359)+_0x325e0(0x26b)+_0x219c4e(0x1ed)+_0x219c4e(_0x2da1cf._0x1988d1)+_0x325e0(_0x2da1cf._0x373860)+_0x219c4e(_0x2da1cf._0x206cbe)+_0x325e0(_0x2da1cf._0x3af490)+_0x219c4e(_0x2da1cf._0x368cc6)+_0x325e0(0x1e6)+_0x219c4e(_0x2da1cf._0x18f171)+_0x325e0(_0x2da1cf._0x3dae4d)+_0x325e0(0x17d)+_0x219c4e(_0x2da1cf._0x492614)+_0x325e0(_0x2da1cf._0x3da43a)+_0x219c4e(_0x2da1cf._0x596067)+_0x325e0(_0x2da1cf._0x220e7b)+_0x325e0(0x1d7)+_0x325e0(_0x2da1cf._0x56f511)+_0x325e0(_0x2da1cf._0x2365d9)+_0x219c4e(0x261)+_0x219c4e(_0x2da1cf._0x260abf)+_0x219c4e(_0x2da1cf._0x4f2b8f)+_0x219c4e(_0x2da1cf._0xaec02b)+_0x325e0(_0x2da1cf._0x4d8346)+_0x219c4e(_0x2da1cf._0x23e8e8)+_0x325e0(_0x2da1cf._0xed7753)+_0x325e0(_0x2da1cf._0x3f63d7)+_0x219c4e(_0x2da1cf._0x517076)+_0x325e0(_0x2da1cf._0x430b97)+_0x325e0(0x1fa)+_0x219c4e(_0x2da1cf._0x36d52b)+_0x325e0(_0x2da1cf._0x1d2732)+_0x219c4e(_0x2da1cf._0x2b60b7)+_0x219c4e(0x252)+_0x219c4e(_0x2da1cf._0x65ba70)+_0x325e0(0x241)+_0x325e0(_0x2da1cf._0x190310)+_0x219c4e(_0x2da1cf._0x1766bc)+_0x219c4e(_0x2da1cf._0x3676f6)+_0x219c4e(_0x2da1cf._0x1ef79d)+_0x325e0(_0x2da1cf._0x5a4578)+_0x325e0(_0x2da1cf._0x2a91b8)+_0x219c4e(_0x2da1cf._0x57d941)+_0x219c4e(_0x2da1cf._0x33bea3)+_0x325e0(_0x2da1cf._0x4ba80e)+_0x219c4e(_0x2da1cf._0x2ff057)+_0x325e0(_0x2da1cf._0x39ef32)+_0x219c4e(_0x2da1cf._0x189310)+_0x219c4e(_0x2da1cf._0x14ef4c)+_0x219c4e(_0x2da1cf._0x5be717)+_0x219c4e(_0x2da1cf._0x17106f)+_0x219c4e(_0x2da1cf._0x561668)+_0x325e0(0x256)+_0x219c4e(_0x2da1cf._0x53aec4)+_0x325e0(_0x2da1cf._0x376e75)+_0x219c4e(_0x2da1cf._0x4f0d43)+_0x325e0(_0x2da1cf._0x3374ef)+_0x219c4e(_0x2da1cf._0x2e8aa0)+_0x219c4e(_0x2da1cf._0x1cc995)+_0x325e0(0x166)+_0x325e0(_0x2da1cf._0x5adfad)+_0x219c4e(_0x2da1cf._0x8123ad)+_0x219c4e(_0x2da1cf._0x431af9)+_0x219c4e(0x1d1)+_0x325e0(_0x2da1cf._0x3f4543)+_0x219c4e(_0x2da1cf._0xb7d299)+_0x219c4e(_0x2da1cf._0xe2578c)+'1'),_0x316a68=0x10001n;function _0xb2ad95(_0x174784,_0xdd7b4d,_0x101298){const _0x5bbaa7=_0x219c4e,_0xe268c0=_0x219c4e;let _0xdc9b2e=0x1n;_0x174784=_0x1127d4[_0x5bbaa7(_0x478545._0x581b4f)+'w'](_0x174784,_0x101298);while(_0xdd7b4d>0x0n){if(_0x1127d4[_0x5bbaa7(0x169)+'w'](_0xdd7b4d,0x2n)===0x1n)_0xdc9b2e=_0x1127d4[_0x5bbaa7(_0x478545._0x3430e0)+'Y'](_0xdc9b2e,_0x174784)%_0x101298;_0xdd7b4d=_0xdd7b4d/0x2n,_0x174784=_0x1127d4[_0xe268c0(_0x478545._0x5e402f)+'Y'](_0x174784*_0x174784,_0x101298);}return _0xdc9b2e;}function _0x546a55(_0x35e3c8){const _0x35a39d=_0x325e0,_0x42be04=_0x325e0;let _0x169d63=_0x35e3c8[_0x35a39d(_0x26aed8._0xf624df)+_0x35a39d(0x255)](0x10);if(_0x1127d4[_0x35a39d(_0x26aed8._0xf900d1)+'Y'](_0x169d63[_0x35a39d(_0x26aed8._0x447352)+'th'],0x2)!==0x0)_0x169d63='0'+_0x169d63;let _0x238f1f='';for(let _0xd2bbea=0x0;_0xd2bbea<_0x169d63[_0x35a39d(_0x26aed8._0x3081e3)+'th'];_0xd2bbea+=0x2){_0x238f1f+=String[_0x42be04(_0x26aed8._0x177fee)+_0x42be04(_0x26aed8._0x155b39)+_0x42be04(_0x26aed8._0x315a4e)](parseInt(_0x169d63[_0x35a39d(_0x26aed8._0x126ee7)+'tr'](_0xd2bbea,0x2),0x10));}return _0x238f1f;}function _0x268f6f(_0x2a0451){const _0x6eeb76=_0x219c4e,_0x2519da=_0x219c4e;let _0x510d18='';for(let _0xe85f0d=0x0;_0x1127d4[_0x6eeb76(0x157)+'M'](_0xe85f0d,_0x2a0451[_0x2519da(_0xb67b61._0x52706f)+'th']);_0xe85f0d++){_0x510d18+=_0x2a0451[_0x6eeb76(0x1f8)+_0x2519da(_0xb67b61._0x4bf22a)+'At'](_0xe85f0d)[_0x6eeb76(0x168)+_0x2519da(_0xb67b61._0x2bea32)](0x10)[_0x2519da(_0xb67b61._0x29303c)+_0x6eeb76(0x263)](0x2,'0');}return _0x1127d4[_0x6eeb76(_0xb67b61._0xba1bb7)+'x'](BigInt,'0x'+_0x510d18);}function _0x29e9b6(_0x3922f9){const _0x1abb18=_0x219c4e,_0x2e6a30=_0x219c4e;function _0x47b66a(_0x37e3c7,_0x2505be){return _0x37e3c7>>>_0x2505be|_0x37e3c7<<0x20-_0x2505be;}var _0x484066=Math[_0x1abb18(_0x4487e6._0x14b9bb)],_0xb8feab=_0x484066(0x2,0x20),_0xdf4b21=_0x1abb18(0x19d)+'th',_0x18b21d,_0x3dde9c,_0x113eeb='',_0xa4435d=[],_0x505729=_0x3922f9[_0xdf4b21]*0x8,_0x1db25a=_0x29e9b6['h']=_0x29e9b6['h']||[],_0x262c74=_0x29e9b6['k']=_0x29e9b6['k']||[],_0x18798b=_0x262c74[_0xdf4b21],_0x1432cf={};for(var _0x22370c=0x2;_0x18798b<0x40;_0x22370c++){if(!_0x1432cf[_0x22370c]){for(_0x18b21d=0x0;_0x18b21d<0x139;_0x18b21d+=_0x22370c){_0x1432cf[_0x18b21d]=_0x22370c;}_0x1db25a[_0x18798b]=_0x1127d4[_0x2e6a30(_0x4487e6._0x4166d1)+'a'](_0x484066,_0x22370c,0.5)*_0xb8feab|0x0,_0x262c74[_0x18798b++]=_0x484066(_0x22370c,0x1/0x3)*_0xb8feab|0x0;}}_0x3922f9+='\u0080';while(_0x3922f9[_0xdf4b21]%0x40-0x38)_0x3922f9+='\x00';for(_0x18b21d=0x0;_0x18b21d<_0x3922f9[_0xdf4b21];_0x18b21d++){_0x3dde9c=_0x3922f9[_0x1abb18(_0x4487e6._0x53667f)+_0x2e6a30(_0x4487e6._0x367bea)+'At'](_0x18b21d);if(_0x3dde9c>>0x8)return;_0xa4435d[_0x18b21d>>0x2]|=_0x3dde9c<<_0x1127d4[_0x1abb18(_0x4487e6._0x3796bc)+'h'](_0x1127d4[_0x1abb18(0x1b9)+'A'](0x3,_0x18b21d)%0x4,0x8);}_0xa4435d[_0xa4435d[_0xdf4b21]]=_0x1127d4[_0x2e6a30(_0x4487e6._0x5f0bb3)+'f'](_0x505729/_0xb8feab,0x0),_0xa4435d[_0xa4435d[_0xdf4b21]]=_0x505729;for(_0x3dde9c=0x0;_0x1127d4[_0x1abb18(_0x4487e6._0x1babf8)+'r'](_0x3dde9c,_0xa4435d[_0xdf4b21]);){var _0x4d3918=_0xa4435d[_0x1abb18(_0x4487e6._0x56c287)+'e'](_0x3dde9c,_0x3dde9c+=0x10),_0x5da73c=_0x1db25a;_0x1db25a=_0x1db25a[_0x2e6a30(0x1b6)+'e'](0x0,0x8);for(_0x18b21d=0x0;_0x18b21d<0x40;_0x18b21d++){var _0x1da569=_0x4d3918[_0x18b21d-0xf],_0x2bf740=_0x4d3918[_0x1127d4[_0x2e6a30(_0x4487e6._0x27b257)+'p'](_0x18b21d,0x2)],_0x36dd35=_0x1db25a[0x0],_0x3a3ce7=_0x1db25a[0x4],_0x1116a7=_0x1127d4[_0x2e6a30(_0x4487e6._0x24a6c8)+'X'](_0x1127d4[_0x1abb18(_0x4487e6._0x2d9655)+'N'](_0x1db25a[0x7]+(_0x1127d4[_0x2e6a30(_0x4487e6._0x351217)+'X'](_0x47b66a(_0x3a3ce7,0x6),_0x47b66a(_0x3a3ce7,0xb))^_0x47b66a(_0x3a3ce7,0x19)),_0x1127d4[_0x2e6a30(_0x4487e6._0x4a0263)+'u'](_0x3a3ce7,_0x1db25a[0x5])^~_0x3a3ce7&_0x1db25a[0x6])+_0x262c74[_0x18b21d],_0x4d3918[_0x18b21d]=_0x1127d4[_0x2e6a30(0x1da)+'s'](_0x18b21d,0x10)?_0x4d3918[_0x18b21d]:_0x1127d4[_0x2e6a30(_0x4487e6._0x5aa65b)+'f'](_0x1127d4[_0x2e6a30(_0x4487e6._0x2d9655)+'N'](_0x4d3918[_0x18b21d-0x10]+_0x1127d4[_0x1abb18(_0x4487e6._0x170ee1)+'X'](_0x1127d4[_0x2e6a30(_0x4487e6._0x351217)+'X'](_0x47b66a(_0x1da569,0x7),_0x47b66a(_0x1da569,0x12)),_0x1da569>>>0x3),_0x4d3918[_0x1127d4[_0x2e6a30(_0x4487e6._0xa28e8f)+'q'](_0x18b21d,0x7)])+(_0x1127d4[_0x2e6a30(_0x4487e6._0x505985)+'a'](_0x47b66a,_0x2bf740,0x11)^_0x47b66a(_0x2bf740,0x13)^_0x1127d4[_0x1abb18(_0x4487e6._0xfe2b38)+'B'](_0x2bf740,0xa)),0x0)),_0x569d47=(_0x47b66a(_0x36dd35,0x2)^_0x1127d4[_0x2e6a30(_0x4487e6._0x7ec27e)+'f'](_0x47b66a,_0x36dd35,0xd)^_0x1127d4[_0x1abb18(0x1ef)+'a'](_0x47b66a,_0x36dd35,0x16))+(_0x36dd35&_0x1db25a[0x1]^_0x1127d4[_0x1abb18(_0x4487e6._0x5efaa0)+'u'](_0x36dd35,_0x1db25a[0x2])^_0x1db25a[0x1]&_0x1db25a[0x2]);_0x1db25a=[_0x1116a7+_0x569d47|0x0][_0x1abb18(_0x4487e6._0x17b177)+'at'](_0x1db25a),_0x1db25a[0x4]=_0x1db25a[0x4]+_0x1116a7|0x0;}for(_0x18b21d=0x0;_0x1127d4[_0x2e6a30(_0x4487e6._0x4b3ebf)+'p'](_0x18b21d,0x8);_0x18b21d++){_0x1db25a[_0x18b21d]=_0x1db25a[_0x18b21d]+_0x5da73c[_0x18b21d]|0x0;}}for(_0x18b21d=0x0;_0x18b21d<0x8;_0x18b21d++){for(_0x3dde9c=0x3;_0x1127d4[_0x2e6a30(_0x4487e6._0x337340)+'X'](_0x3dde9c,0x1);_0x3dde9c--){var _0x328ffd=_0x1127d4[_0x1abb18(_0x4487e6._0x5efaa0)+'u'](_0x1127d4[_0x2e6a30(_0x4487e6._0x344885)+'Y'](_0x1db25a[_0x18b21d],_0x3dde9c*0x8),0xff);_0x113eeb+=_0x1127d4[_0x2e6a30(0x200)+'X'](_0x1127d4[_0x1abb18(0x19c)+'r'](_0x328ffd,0x10)?0x0:'',_0x328ffd[_0x1abb18(_0x4487e6._0x2969bc)+_0x2e6a30(_0x4487e6._0x9f4149)](0x10));}}return _0x113eeb;}class LicenseManager{static validate(_0x31b7e8,_0x2d202f={}){const _0x730a9=_0x325e0,_0x2697a0=_0x325e0;if(!_0x31b7e8)return{'valid':![],'tier':null,'reason':_0x1127d4[_0x730a9(_0x2fd1a1._0x283332)+'R']};const _0x10e0c1=_0x31b7e8[_0x730a9(_0x2fd1a1._0x2d2b85)](),_0x437b45=_0x10e0c1[_0x2697a0(_0x2fd1a1._0x53117e)+_0x2697a0(0x25c)+_0x2697a0(_0x2fd1a1._0x3fd500)](),_0x3c088e=_0x437b45[_0x2697a0(_0x2fd1a1._0x3d7e1e)+'t']('-'),_0x4c49c3=_0x2d202f[_0x2697a0(_0x2fd1a1._0x526e42)+_0x730a9(_0x2fd1a1._0x1ac5c9)]!==undefined&&_0x2d202f[_0x2697a0(_0x2fd1a1._0x526e42)+_0x2697a0(_0x2fd1a1._0x1ac5c9)]!==null?_0x2d202f[_0x730a9(_0x2fd1a1._0x526e42)+_0x730a9(_0x2fd1a1._0x1ac5c9)]:Date[_0x730a9(0x1b3)]();let _0x68379f=0x0;_0x2d202f[_0x2697a0(_0x2fd1a1._0x2cad33)+_0x730a9(_0x2fd1a1._0x1ce44e)]&&(_0x68379f=parseInt(_0x2d202f[_0x730a9(_0x2fd1a1._0x2cad33)+_0x2697a0(_0x2fd1a1._0x5aa0b4)][_0x730a9(_0x2fd1a1._0x1a5266)+_0x2697a0(0x180)](_0x1127d4[_0x2697a0(0x15a)+'b'])||'0',0xa),(_0x2d202f[_0x2697a0(_0x2fd1a1._0x526e42)+_0x2697a0(_0x2fd1a1._0x1ac5c9)]===undefined||_0x2d202f[_0x2697a0(0x209)+_0x2697a0(_0x2fd1a1._0x3d4d9d)]===null)&&_0x2d202f[_0x2697a0(_0x2fd1a1._0x2cad33)+_0x2697a0(_0x2fd1a1._0x5aa0b4)][_0x2697a0(_0x2fd1a1._0x1781aa)+_0x2697a0(_0x2fd1a1._0x547350)](_0x1127d4[_0x730a9(0x15a)+'b'],_0x4c49c3[_0x2697a0(_0x2fd1a1._0x676ef)+_0x2697a0(_0x2fd1a1._0x289aac)]()));if((_0x2d202f[_0x730a9(0x209)+_0x2697a0(_0x2fd1a1._0x3d4d9d)]===undefined||_0x1127d4[_0x2697a0(0x176)+'d'](_0x2d202f[_0x2697a0(_0x2fd1a1._0x526e42)+_0x2697a0(_0x2fd1a1._0x330ea9)],null))&&_0x4c49c3<_0x68379f){if(_0x2d202f[_0x730a9(0x20a)+_0x730a9(_0x2fd1a1._0x10986b)+'y'])_0x2d202f[_0x730a9(_0x2fd1a1._0x14c942)+_0x730a9(_0x2fd1a1._0x1b0892)+'y']();return{'valid':![],'tier':null,'reason':_0x1127d4[_0x2697a0(_0x2fd1a1._0xb5e36e)+'L']};}const _0xbc480c=typeof atob!==_0x730a9(_0x2fd1a1._0x5b4349)+_0x2697a0(_0x2fd1a1._0x51c611)+'d'?atob:_0x5f0bbc=>Buffer[_0x2697a0(0x172)](_0x5f0bbc,_0x730a9(0x1f3)+'64')[_0x2697a0(0x168)+_0x730a9(0x255)](_0x730a9(0x1cf)+'ry');if(_0x437b45[_0x2697a0(_0x2fd1a1._0x2107cc)+_0x730a9(_0x2fd1a1._0x5a71ec)+'th'](_0x730a9(_0x2fd1a1._0x2ac45c)+_0x730a9(_0x2fd1a1._0x31bdf9)+'-'))try{const _0x20ac4f=_0x10e0c1[_0x2697a0(0x216)+_0x730a9(_0x2fd1a1._0x1f6911)+'g'](0x9),_0x505992=_0xbc480c(_0x20ac4f),_0x3b2120=new Uint8Array(_0x505992[_0x2697a0(_0x2fd1a1._0x21aff7)+'th']);for(let _0x311963=0x0;_0x1127d4[_0x730a9(0x1c1)+'q'](_0x311963,_0x505992[_0x2697a0(_0x2fd1a1._0x58da27)+'th']);_0x311963++){_0x3b2120[_0x311963]=_0x505992[_0x2697a0(_0x2fd1a1._0xf9204f)+_0x2697a0(0x219)+'At'](_0x311963);}let _0x5ab5b6='';for(let _0x1307d7=0x0;_0x1307d7<_0x3b2120[_0x2697a0(_0x2fd1a1._0x2f9192)+'th'];_0x1307d7++){_0x5ab5b6+=_0x3b2120[_0x1307d7][_0x730a9(_0x2fd1a1._0x29e5b8)+_0x730a9(_0x2fd1a1._0x289aac)](0x10)[_0x2697a0(_0x2fd1a1._0x3598e7)+_0x2697a0(_0x2fd1a1._0x2ddaad)](0x2,'0');}const _0x58e1c6=BigInt(_0x1127d4[_0x2697a0(_0x2fd1a1._0x55a2d0)+'D']('0x',_0x5ab5b6)),_0x28eea0=_0xb2ad95(_0x58e1c6,_0x316a68,_0x41cbce),_0x4ce590=_0x546a55(_0x28eea0);if(_0x4ce590[_0x2697a0(_0x2fd1a1._0x2107cc)+_0x730a9(_0x2fd1a1._0x418b95)+'th'](_0x730a9(_0x2fd1a1._0x441dd3)+_0x2697a0(_0x2fd1a1._0x40b494)+_0x2697a0(0x1f5))){const _0x5e9bf4=parseInt(_0x4ce590[_0x730a9(0x216)+_0x730a9(0x22d)+'g'](0xb),0xa);if(!isNaN(_0x5e9bf4)){if(_0x4c49c3<_0x5e9bf4)return{'valid':!![],'tier':_0x2697a0(_0x2fd1a1._0x401ff1)+'S','expires':_0x5e9bf4};if(_0x2d202f[_0x730a9(_0x2fd1a1._0x5a5a59)+_0x2697a0(_0x2fd1a1._0x4055ba)+'d'])_0x2d202f[_0x730a9(0x22e)+_0x730a9(_0x2fd1a1._0x2f78b4)+'d'](_0x730a9(0x19f)+'t');return{'valid':![],'tier':null,'reason':_0x730a9(_0x2fd1a1._0x517b12)+_0x2697a0(_0x2fd1a1._0x15006)+_0x2697a0(_0x2fd1a1._0x17091d)+'d'};}}}catch(_0x12becf){return{'valid':![],'tier':null,'reason':_0x730a9(_0x2fd1a1._0x5cbe1e)+_0x2697a0(_0x2fd1a1._0x2a6eb7)+_0x2697a0(_0x2fd1a1._0x518ed7)+_0x730a9(_0x2fd1a1._0x535ca1)+_0x2697a0(_0x2fd1a1._0x53997e)+_0x730a9(0x235)};}if(_0x437b45[_0x730a9(_0x2fd1a1._0x2107cc)+_0x2697a0(_0x2fd1a1._0x5a71ec)+'th'](_0x2697a0(_0x2fd1a1._0xace37b)+_0x2697a0(_0x2fd1a1._0x479c3f)))try{const _0x2fa0b7=_0x10e0c1[_0x2697a0(_0x2fd1a1._0xfb5f4)+_0x730a9(_0x2fd1a1._0x1f6911)+'g'](0x7),_0x4f57fe=_0xbc480c(_0x2fa0b7),_0x1e4c32=new Uint8Array(_0x4f57fe[_0x730a9(_0x2fd1a1._0x2f9192)+'th']);for(let _0x594270=0x0;_0x1127d4[_0x730a9(0x157)+'M'](_0x594270,_0x4f57fe[_0x730a9(0x19d)+'th']);_0x594270++){_0x1e4c32[_0x594270]=_0x4f57fe[_0x2697a0(_0x2fd1a1._0xf9204f)+_0x730a9(_0x2fd1a1._0x2956bd)+'At'](_0x594270);}let _0x4b1c14='';for(let _0x56285f=0x0;_0x56285f<_0x1e4c32[_0x730a9(_0x2fd1a1._0x394be3)+'th'];_0x56285f++){_0x4b1c14+=_0x1e4c32[_0x56285f][_0x2697a0(_0x2fd1a1._0x29e5b8)+_0x2697a0(_0x2fd1a1._0x11c558)](0x10)[_0x730a9(_0x2fd1a1._0x3598e7)+_0x2697a0(_0x2fd1a1._0x2ddaad)](0x2,'0');}const _0x1781b5=BigInt('0x'+_0x4b1c14),_0x49d926=_0xb2ad95(_0x1781b5,_0x316a68,_0x41cbce),_0x4d8517=_0x546a55(_0x49d926);if(_0x4d8517[_0x2697a0(_0x2fd1a1._0x25e484)+_0x730a9(_0x2fd1a1._0x5a71ec)+'th'](_0x1127d4[_0x2697a0(_0x2fd1a1._0x40affc)+'u'])){const _0x385910=_0x4d8517[_0x730a9(0x1b7)+'t']('-');if(_0x385910[_0x730a9(_0x2fd1a1._0x3f9f8a)+'th']>=0x5){const _0x21d5ba=_0x385910[0x2],_0x298b5d=_0x1127d4[_0x2697a0(_0x2fd1a1._0x30fa67)+'e'](parseInt,_0x385910[0x4],0xa);if(!_0x1127d4[_0x730a9(_0x2fd1a1._0x2618d5)+'T'](isNaN,_0x298b5d)){if(_0x4c49c3<_0x298b5d)return{'valid':!![],'tier':_0x21d5ba,'expires':_0x298b5d};if(_0x2d202f[_0x2697a0(_0x2fd1a1._0x2ef361)+_0x2697a0(_0x2fd1a1._0x92b8e)+'d'])_0x2d202f[_0x730a9(0x22e)+_0x730a9(_0x2fd1a1._0x17091d)+'d'](_0x730a9(_0x2fd1a1._0x155e88));return{'valid':![],'tier':null,'reason':_0x2697a0(_0x2fd1a1._0x58b15b)+_0x730a9(_0x2fd1a1._0x593497)+_0x2697a0(0x1be)+_0x730a9(_0x2fd1a1._0x2d39b6)};}}}}catch(_0x1caba3){return{'valid':![],'tier':null,'reason':_0x2697a0(0x1fd)+_0x730a9(0x14e)+_0x730a9(_0x2fd1a1._0xe0cfff)+_0x2697a0(0x224)+_0x730a9(_0x2fd1a1._0x3cc0f7)+'d'};}if(_0x3c088e[_0x2697a0(_0x2fd1a1._0x3f9f8a)+'th']===0x4&&_0x1127d4[_0x2697a0(_0x2fd1a1._0x22d502)+'d'](_0x3c088e[0x0],'PS')&&[_0x730a9(_0x2fd1a1._0x444b75),_0x2697a0(_0x2fd1a1._0x401ff1)+'S',_0x730a9(_0x2fd1a1._0x3e66d8),_0x1127d4[_0x2697a0(_0x2fd1a1._0x230cbf)+'N'],_0x730a9(_0x2fd1a1._0x93ba31)+_0x2697a0(_0x2fd1a1._0x105029)+'SE'][_0x2697a0(_0x2fd1a1._0x152ea7)+_0x2697a0(_0x2fd1a1._0x3ab4e7)](_0x3c088e[0x1])){const _0x5a9339=_0x3c088e[0x1],_0x276c4f=_0x3c088e[0x2],_0x104538=_0x3c088e[0x3],_0x69149f=_0x1127d4[_0x2697a0(0x21d)+'i'],_0x56868b=_0x276c4f+_0x69149f+_0x5a9339;let _0x1dbf2d=0x0;for(let _0x495c8d=0x0;_0x495c8d<_0x56868b[_0x730a9(_0x2fd1a1._0x2f9192)+'th'];_0x495c8d++){_0x1dbf2d+=_0x56868b[_0x2697a0(_0x2fd1a1._0xf9204f)+_0x2697a0(0x219)+'At'](_0x495c8d)*(_0x495c8d+0x1);}const _0x1ff00d=(_0x1dbf2d%0x270f)[_0x730a9(0x168)+_0x730a9(_0x2fd1a1._0x21c8fd)]()[_0x730a9(_0x2fd1a1._0x3598e7)+_0x2697a0(_0x2fd1a1._0x2ddaad)](0x4,'0');if(_0x104538===_0x1ff00d)return{'valid':!![],'tier':_0x5a9339};}if(_0x10e0c1[_0x730a9(_0x2fd1a1._0x25e484)+_0x2697a0(0x259)+'th'](_0x1127d4[_0x730a9(_0x2fd1a1._0x3d1099)+'O'])&&_0x10e0c1[_0x730a9(_0x2fd1a1._0x204515)+'t']('.')[_0x730a9(0x19d)+'th']===0x3)try{const [_0x238d77,_0x4587b9,_0x281f3e]=_0x10e0c1[_0x2697a0(_0x2fd1a1._0x3d7e1e)+'t']('.');let _0x35b482=_0x281f3e[_0x730a9(_0x2fd1a1._0x27fdd1)+_0x730a9(0x20b)](/-/g,'+')[_0x730a9(_0x2fd1a1._0x3d9152)+_0x730a9(_0x2fd1a1._0x735370)](/_/g,'/');while(_0x35b482[_0x2697a0(_0x2fd1a1._0x14e864)+'th']%0x4)_0x35b482+='=';const _0x16bcf5=_0x1127d4[_0x2697a0(0x271)+'T'](_0xbc480c,_0x35b482);let _0x5d134a='';for(let _0x42b38a=0x0;_0x42b38a<_0x16bcf5[_0x730a9(_0x2fd1a1._0x18ddf6)+'th'];_0x42b38a++){_0x5d134a+=_0x16bcf5[_0x2697a0(_0x2fd1a1._0xf9204f)+_0x730a9(_0x2fd1a1._0x2956bd)+'At'](_0x42b38a)[_0x730a9(0x168)+_0x2697a0(_0x2fd1a1._0x11c558)](0x10)[_0x2697a0(0x1a0)+_0x2697a0(_0x2fd1a1._0x2ddaad)](0x2,'0');}const _0x2d6cda=BigInt('0x'+_0x5d134a),_0x3a0bf9=_0x1127d4[_0x2697a0(_0x2fd1a1._0x22b674)+'F'](_0xb2ad95,_0x2d6cda,_0x316a68,_0x41cbce);let _0x1e28ff=_0x3a0bf9[_0x2697a0(0x168)+_0x2697a0(_0x2fd1a1._0x289aac)](0x10);if(_0x1e28ff[_0x730a9(0x19d)+'th']%0x2!==0x0)_0x1e28ff='0'+_0x1e28ff;const _0x50e9d7=_0x29e9b6(_0x238d77+'.'+_0x4587b9);if(_0x1e28ff[_0x2697a0(_0x2fd1a1._0x501c18)+_0x2697a0(_0x2fd1a1._0x14e001)](_0x50e9d7)){const _0xc060dc=_0xbc480c(_0x4587b9[_0x2697a0(0x1c3)+_0x2697a0(_0x2fd1a1._0x735370)](/-/g,'+')[_0x730a9(0x1c3)+_0x730a9(_0x2fd1a1._0x44a0d9)](/_/g,'/')),_0x300dd9=JSON[_0x730a9(_0x2fd1a1._0xd4bb75)+'e'](_0xc060dc);if(_0x300dd9[_0x730a9(0x17c)]&&_0x1127d4[_0x2697a0(0x1c9)+'p'](_0x4c49c3,0x3e8)<_0x300dd9[_0x730a9(_0x2fd1a1._0x208e65)])return{'valid':!![],'tier':_0x300dd9[_0x730a9(_0x2fd1a1._0x10fdbd)]||_0x730a9(_0x2fd1a1._0x4a3785),'expires':_0x300dd9[_0x730a9(_0x2fd1a1._0x1361e0)]*0x3e8};else{if(_0x2d202f[_0x730a9(_0x2fd1a1._0x108ed4)+_0x2697a0(_0x2fd1a1._0x329101)+'d'])_0x2d202f[_0x2697a0(_0x2fd1a1._0x4308c1)+_0x730a9(_0x2fd1a1._0x3195e5)+'d'](_0x730a9(_0x2fd1a1._0x5cca8e));return{'valid':![],'tier':null,'reason':_0x2697a0(_0x2fd1a1._0x41d2e2)+_0x2697a0(_0x2fd1a1._0x542559)+_0x730a9(0x181)};}}}catch(_0x35063b){return{'valid':![],'tier':null,'reason':_0x2697a0(_0x2fd1a1._0x4c0bbb)+_0x730a9(_0x2fd1a1._0x1b6deb)+_0x2697a0(_0x2fd1a1._0x2d4464)+_0x2697a0(_0x2fd1a1._0x2ce4ec)+_0x2697a0(_0x2fd1a1._0x717b2a)+'d'};}return{'valid':![],'tier':null,'reason':_0x730a9(_0x2fd1a1._0x1eda6e)+_0x730a9(_0x2fd1a1._0xcafdd)+_0x730a9(_0x2fd1a1._0x42dd5e)+'at'};}}typeof globalThis!==_0x325e0(0x15d)+_0x219c4e(0x1ca)+'d'&&(globalThis[_0x325e0(_0x2da1cf._0x35aee5)+_0x325e0(_0x2da1cf._0x30ebdb)+_0x219c4e(_0x2da1cf._0x3b61e2)+'er']=LicenseManager),typeof _0x322b78!==_0x219c4e(_0x2da1cf._0x391c38)+_0x219c4e(_0x2da1cf._0x4dd70b)+'d'&&(_0x322b78[_0x219c4e(0x185)+_0x325e0(0x15b)+_0x219c4e(0x265)+'er']=LicenseManager),typeof window!==_0x325e0(_0x2da1cf._0x4a47c8)+_0x325e0(_0x2da1cf._0x4ba03a)+'d'&&(window[_0x325e0(_0x2da1cf._0x146bcb)+_0x219c4e(_0x2da1cf._0x30ebdb)+_0x219c4e(_0x2da1cf._0x1b9fcc)+'er']=LicenseManager),typeof exports!==_0x219c4e(_0x2da1cf._0x2b210c)+_0x325e0(_0x2da1cf._0x4eef46)+'d'&&(typeof module!==_0x1127d4[_0x325e0(0x220)+'k']&&module[_0x219c4e(_0x2da1cf._0x2e3077)+_0x325e0(0x175)]&&(module[_0x219c4e(_0x2da1cf._0x2e3077)+_0x219c4e(0x175)]=LicenseManager),exports[_0x325e0(_0x2da1cf._0x2440d5)+_0x325e0(_0x2da1cf._0x30ebdb)+_0x325e0(_0x2da1cf._0x3b61e2)+'er']=LicenseManager);}(typeof globalThis!==_0x5a6bc0(0x15d)+_0x20bda8(0x1ca)+'d'?globalThis:typeof window!==_0x5a6bc0(0x15d)+_0x20bda8(0x1ca)+'d'?window:this));function _0x5c0d(){const _0x4e0afc=['C3vICW','otm3oq','ndy4ma','q29Kzq','mta0ma','nde1mW','mZuYmq','uwzJCa','DgvK','nZyWnq','t2DPBG','ywDL','mdG1nW','vevbtq','B24GzG','C3PPzq','ota4ma','mJzFiq','mdC1na','mdGYoq','mtCYoq','DwrLCW','mta5nW','DhjPBG','B25fEa','ufmTua','CgfYCW','A2v5ia','nJKZmG','A3rqAW','zwLKqW','BgvK','z09OAW','mZGWmW','mdu5mq','mdmXmq','uLbssq','vgLTzq','ndi1mW','ndy3oa','CM92Aq','ndu2mG','yxnL','ote4mG','ndyZnW','mJCXmq','nde0oq','mJa2nG','zM9YBq','otG2oa','y2SGyq','y29UyW','nJG5oq','nJa1nG','mtiWmq','uunSAa','odq5nW','nZm1oa','nJq5oq','ody1mG','mtK3na','ode0mG','y2T5Bq','CMLUzW','nZa4nW','u0eT','zuvzDq','DhnxAq','nZq3ma','nZaYmG','CgvYqW','oteYnq','ndyWoa','otaZnW','mJa4ndf3r2f4qK8','mJa2nq','nta4nG','DgfYDa','z2v0sq','yw5HzW','odiXmG','suXpva','mZiXoq','qxbfza','ntmXoq','nJqYma','mJC2oq','nte1oa','AYbYBW','nZCXnW','mZy5ma','q2PftG','luXjqW','ntaZna','odiZnW','mJe4oa','nta1oa','mte3mq','AuLLuG','otaYmG','u0rl','mZiYma','C3rHCG','nteXoq','nZyWmW','ndC5nG','nJG4na','x1nbta','zgvJCG','ru5urq','mtu0oq','ntC0oq','ntaXnW','uLnb','mJG1mG','Cg93','ntaZnG','tKvPzG','mJCZna','tvDutq','A3Douq','BNnLtq','nZCWnG','Dw5Kzq','ntu0nW','ntGXoa','otKWma','nJKXmG','mJeZmq','odCYoq','ndG4mG','sLDu','mtyWmG','nZK3oq','Dg9tDa','swHwAq','mJiYnKTYzwrtzW','Exb0Aq','odKYnq','mZu0ma','oti5na','mJuYnW','v2L0Aa','nJi2ma','zNjVBq','t0vn','ufvwDa','CNrZ','EeTuBG','DhjPBq','nJm0nW','q2HHCG','igzHAq','mteZnZC5oeL5uhzTEa','zxHW','ndC3mG','mZC2ma','Dg9vCa','DgvT','CMvK','yxn0xW','odmXnW','s3DKsW','tgLJzq','nde5mdy4u0P1EuTA','x3rPBq','zxrLyW','mtyYnG','ywLSzq','vf8Yma','ChnFBa','sLDuia','ndq1ntjqqLLpsxi','ote2oq','nJiXmq','tM8GAW','mti0ntG2nvP3C0TcBq','tu1HAG','nJi0mG','mtqYmq','BgXIyq','zgvK','q2XVyW','ndKXnq','mdmYma','ody2mG','AM9TtW','BgvUzW','nJu1na','ugLSBW','CgfKuW','B21HBa','nJa4mW','odG1nW','mty0oa','Aw5JBa','D2XvsW','mtiXnvHkCffPua','qKTVuW','nJy4mq','ufjp','DgLLCG','mJm4oq','mJqYoa','mJeYnW','mZGXmW','DcbKzq','ndeYoq','DgLVBG','BM93','nta0na','ndaWnW','C2XPyW','C3bSAq','ntK2na','u1jdAa','ndq3nW','mtKWnq','mZq5na','odu1oq','zxHWAq','DMfSAq','mte0oq','yvnusq','nZq2mq','CMvWBa','mdG2nq','nty5mG','ntG4na','swfouW','mJmZna','rM5ryG','zMLUzq','mJyZnq','s0rquW','zxKGCa','zKTYrW','yMLUyq','CgLYzq','mtqXmq','nZu5nq','t1ngsa','odK3oq','mJK2ma','mJu4mq','nZmXmG','BhKGza','mtG5nJe4nencDgjfwa','A0PZuG','mdy0nW','C2vLBG','mZyWoa','mdy5na','C3rVCG','nty3ma','odeWnq','Cxn0yW','DcbLEa','DLrpBW','ntaXoq','mtmZnG','zgjREq','ntC0nG','otyWoq','ndK0ow1VueH5Ba','nZG2oq','zgf0Aq','nZqYna','sgHOEG','AKXQCG','mZq4nG','odyXmG','y3j5Ca','yMfZzq','mZa5nG','t1qT','zxLk','BM9Tyq','y2HHCG','nJmWmW','nZmWoa','zxHWBW','nZa2mq','uLnbia','odyYoa','ntu4nW','rNfptW','oda1nW','nZyXna','mdq4nq','nti0mG','C2v0sq','mZG4nG','BgLKia','odqYoq','Bw9JAW','B25bBG','ywnL','wLreuW','nJC4mq','mJC2nW','otm5nq','sw52yq','mJy4ma','ufmTuG','tLzqAW','lvbjta','zw5KCW'];_0x5c0d=function(){return _0x4e0afc;};return _0x5c0d();}
|
package/ps-pii-engine.cjs
CHANGED
|
@@ -253,8 +253,8 @@ let REGEX_RULES = [
|
|
|
253
253
|
let PROFILE_RULES = {
|
|
254
254
|
general: [],
|
|
255
255
|
legal: [
|
|
256
|
-
// Legal Party & Role-Prefixed Names (Claimant, Respondent, Plaintiff, Defendant, Petitioner, Appellant, Principal, Grantor, Attorney-in-Fact, Counsel)
|
|
257
|
-
{ type: 'NAME', isContextName: true, regex: /(?<=^|[^\p{L}\p{N}_])(?:(?:Senior\s+)?Managing\s+Partner|Lead\s+Counsel|Co-Counsel|Special\s+Counsel|Of\s+Counsel|Counsel(?:\s+for\s+(?:the\s+)?(?:Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Debtor|Creditor|Party))?|Attorney(?:\s+for\s+(?:the\s+)?(?:Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Debtor|Creditor|Party))?|Registered\s+Representative|Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Principal|Grantor
|
|
256
|
+
// Legal Party & Role-Prefixed Names (Claimant, Respondent, Plaintiff, Defendant, Petitioner, Appellant, Principal, Grantor, Settlor, Trustee, Beneficiary, Attorney-in-Fact, Counsel)
|
|
257
|
+
{ type: 'NAME', isContextName: true, regex: /(?<=^|[^\p{L}\p{N}_])(?:(?:Senior\s+)?Managing\s+Partner|Lead\s+Counsel|Co-Counsel|Special\s+Counsel|Of\s+Counsel|Counsel(?:\s+for\s+(?:the\s+)?(?:Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Debtor|Creditor|Party))?|Attorney(?:\s+for\s+(?:the\s+)?(?:Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Debtor|Creditor|Party))?|Registered\s+Representative|Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Principal|Grantor[s]?|Grantee|Trustee[s]?|Co-Trustee[s]?|Successor\s+Trustee[s]?|Alternate\s+Trustee|Independent\s+Trustee|Settlor[s]?|Trustor[s]?|Beneficiar(?:y|ies)|Primary\s+Beneficiary|Contingent\s+Beneficiary|Remainder\s+Beneficiary|Trust\s+Protector|Protector|Fiduciar(?:y|ies)|Attorney-in-Fact|Designated\s+Attorney-in-Fact|Client\s*(?:\/\s*Principal)?|Escrow\s+(?:Trust\s+)?Officer)\s*[:#,]?\s*(?:(?:Dr|Mr|Mrs|Ms|Prof)\.?\s+)?((?:(?:d['’]|l['’]|(?:(?:van|von|de|di|da|do|dos|das|la|le|del|dels|du|der|den|ten|ter|af|av)\s+)+)\s*)?\p{Lu}[\p{L}'’–-]*(?:-[\p{Lu}\p{Ll}'’–-]+)*(?:,\s+(?:(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]+)(?:\s+\p{Lu}\.?)?(?:,\s*(?:Jr\.?|Sr\.?|III|IV|II))?|\s+(?:(?:van|von|de|di|da|do|dos|das|la|le|del|du|der|d['’]|l['’]|de\s+la|de\s+los|von\s+der)\s+)?(?:(?:\p{Lu}\.?\s+)?(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]*(?:-[\p{Lu}\p{Ll}'’–-]+)*))(?:\s+(?:y|i)\s+(?:(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]+))?|[A-Z\p{Lu}]{2,}(?:[\s'-]+[A-Z\p{Lu}]{2,}){1,3})/giu },
|
|
258
258
|
{ type: 'LEGAL', regex: /\bCASE[-_][A-Z0-9_-]{4,}\b/gi },
|
|
259
259
|
{ type: 'LEGAL', regex: /\bMATTER[-_][A-Z0-9_-]{4,}\b/gi },
|
|
260
260
|
{ type: 'LEGAL', regex: /\b[A-Z]{2,4}[- ]?\d{2}[- ]?\d{4,}\b/g },
|
|
@@ -361,8 +361,8 @@ let PROFILE_RULES = {
|
|
|
361
361
|
{ type: 'ID', regex: /\b(?:LEI|LEGAL[\s-]ENTITY[\s-]IDENTIFIER)[:\s#-]*[0-9A-Z]{20}\b/gi },
|
|
362
362
|
{ type: 'ID', regex: /\bBBG[0-9A-Z]{9}\b/g },
|
|
363
363
|
{ type: 'FINANCIAL', regex: /(?<=\b(?:Settlement(?:\s+Amount)?|Wire(?:\s+(?:Transfer|Amount))?|Direct\s+Wire|Transaction(?:\s+Amount)?|Payment(?:\s+Amount)?)[ \t:]+)(?:(?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))/gi },
|
|
364
|
-
{ type: 'FINANCIAL', regex: /(?<=(?:^|[\r\n\t.;])\s*(?<!\b(?:Trade(?:\s+execution)?|Net|Gross|Base|Loan|Transfer)\s+)(?:Wire(?:\s+(?:Transfer|Amount))?|Direct\s+Wire|Balance|Deposit|Withdrawal|Settlement|Principal|Interest|Remittance|Payout|Transaction(?:\s+Amount)?|Payment(?:\s+Amount)?|Total(?:\s+Due)?|Amount(?:\s+Due)?)[:\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]{3,}\b)/gi },
|
|
365
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
364
|
+
{ type: 'FINANCIAL', regex: /(?<=(?:^|[\r\n\t.;])\s*(?<!\b(?:Trade(?:\s+execution)?|Net|Gross|Base|Loan|Transfer)\s+)(?:Wire(?:\s+(?:Transfer|Amount))?|Direct\s+Wire|Balance|Deposit|Withdrawal|Settlement|Principal|Interest|Remittance|Payout|(?:Capital\s+|Annual\s+)?Distribution(?:s)?|Transaction(?:\s+Amount)?|Payment(?:\s+Amount)?|Total(?:\s+Due)?|Amount(?:\s+Due)?)[:\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]{3,}\b)/gi },
|
|
365
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi },
|
|
366
366
|
// Corporate Financial Performance, P&L Statements, Balance Sheets & Earnings
|
|
367
367
|
{ type: 'FINANCIAL', regex: /(?<=\b(?<!\b(?:EV|Debt|Net\s+Debt)\/)(?:Revenue|Total\s+Revenue|Sales\s+Revenue|Cost\s+of\s+Goods(?:\s+Sold)?|COGS|Gross\s+Profit|Operating\s+Expenses?|OpEx|Operating\s+Income(?:\s*\([^)]*\))?|Operating\s+Loss|Net\s+Income(?:\s*[/()]*\s*Loss)?|Net\s+Loss|Foreign\s+Exchange(?:\s+Loss)?|FX\s+Loss|Retained\s+Earnings|Total\s+Equity|Shareholders?'?\s+Equity|Total\s+Assets|Total\s+Liabilities|Accounts\s+Payable|Accounts\s+Receivable|Cash|Cash\s+Flow|Free\s+Cash\s+Flow|Capital\s+Expenditures?|CapEx|Dividends?|EBITDA|EBIT|Balance|Loss|Profit)[:|\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]*\d\b)(?![ \t\xA0]*(?:%|[xX]\b|times\b|bps\b))/gi },
|
|
368
368
|
// Interbank Wire Transcripts & Payment Messaging
|
|
@@ -1190,9 +1190,9 @@ let PROFILE_RULES = {
|
|
|
1190
1190
|
{ type: 'FINANCIAL', regex: /\b(?:Account|Acct\.?)[:\s#]*\d{4}[-\s]?\d{4}[-\s]?\d{2,6}\b/gi },
|
|
1191
1191
|
{ type: 'FINANCIAL', regex: /\b(?:Policy|Contract)\s*(?:No\.?|Number|#)[:\s]+[A-Z0-9][A-Z0-9\-]{3,14}\b/gi },
|
|
1192
1192
|
{ type: 'ID', regex: /\bCRD\s*#?\s*\d{4,8}\b/gi },
|
|
1193
|
-
{ type: 'FINANCIAL', regex:
|
|
1193
|
+
{ type: 'FINANCIAL', regex: /(?<=\b(?:(?:Capital\s+|Annual\s+)?(?:Distribution|Withdrawal)s?|RMD|Required\s+Minimum\s+Distribution)[:\s]+)(?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[0-9,.'’\u2018\u2019]*\d[KMB]?\b/gi },
|
|
1194
1194
|
{ type: 'FINANCIAL', regex: /(?<=\b(?:Portfolio(?:\s+[Vv]alue)?|Market\s+Value|Net\s+Worth|AUM|Total\s+Assets|Cash\s+Balance|Account\s+Value|Capital\s+Gains?|Unrealized\s+(?:Gain|Loss)|Realized\s+(?:Gain|Loss)|Dividend\s+Income)[:\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]{3,}\b)/gi },
|
|
1195
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
1195
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi },
|
|
1196
1196
|
{ type: 'FINANCIAL', regex: /\b(?:Roth\s+)?(?:IRA|401k|401\(k\)|403b|403\(b\)|SEP|SIMPLE)\s*(?:Account|Acct|Plan)?\s*(?:(?:No\.?|Number|#)[:\s#]*|[:#]\s*)([A-Z0-9-]{4,20})\b/gi },
|
|
1197
1197
|
{ type: 'ID', regex: /\bCUSIP[:\s#]*([0-9A-Z]{9})\b/gi },
|
|
1198
1198
|
{ type: 'ID', regex: /\bISIN[:\s#]*([A-Z]{2}[0-9A-Z]{9}[0-9])\b/gi },
|
|
@@ -1205,6 +1205,37 @@ let PROFILE_RULES = {
|
|
|
1205
1205
|
{ type: 'FINANCIAL', regex: /\b(?:Vanguard)(?:\s+(?:Account|Acct|Brokerage))*\s*(?:Number|Num|No\.?|#)?[:\s#]+(\d{8}[-\s]?\d|\d{8,9})\b/gi },
|
|
1206
1206
|
{ type: 'ID', regex: /\b(?:DTC|DTC\s+Participant|Clearing\s+Participant)\s*(?:Number|Num|No\.?|#|Code)?[:\s#]+(\d{4})\b/gi },
|
|
1207
1207
|
// Family Office & Trust Governance
|
|
1208
|
+
// 1. Trust & Estate Role-Prefixed Names (Grantor, Settlor, Trustee, Beneficiary, Executor, Fiduciary, etc.)
|
|
1209
|
+
{
|
|
1210
|
+
type: 'NAME',
|
|
1211
|
+
isContextName: true,
|
|
1212
|
+
regex: /(?<=^|[^\p{L}\p{N}_])(?:Grantor[s]?|Trustor[s]?|Settlor[s]?|Trustee[s]?|Co-Trustee[s]?|Successor\s+Trustee[s]?|Alternate\s+Trustee|Independent\s+Trustee|Beneficiar(?:y|ies)|Primary\s+Beneficiary|Contingent\s+Beneficiary|Remainder\s+Beneficiary|Income\s+Beneficiary|Trust\s+Protector|Protector|Fiduciar(?:y|ies)|Custodian[s]?|Executor[s]?|Executrix|Personal\s+Representative|Power\s+of\s+Attorney|Attorney-in-Fact|Health\s+Care\s+(?:Agent|Proxy))\s*[:=#,\/\t-]*\s*(?:(?:Dr|Mr|Mrs|Ms|Prof)\.?\s+)?((?:(?:d['’]|l['’]|(?:(?:van|von|de|di|da|do|dos|das|la|le|del|dels|du|der|den|ten|ter|af|av)\s+)+)\s*)?\p{Lu}[\p{L}'’–-]*(?:-[\p{Lu}\p{Ll}'’–-]+)*(?:,\s+(?:(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]+)(?:\s+\p{Lu}\.?)?(?:,\s*(?:Jr\.?|Sr\.?|III|IV|II))?|\s+(?:(?:van|von|de|di|da|do|dos|das|la|le|del|du|der|d['’]|l['’]|de\s+la|de\s+los|von\s+der)\s+)?(?:(?:\p{Lu}\.?\s+)?(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]*(?:-[\p{Lu}\p{Ll}'’–-]+)*))(?:\s+(?:y|i)\s+(?:(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]+))?|[A-Z\p{Lu}]{2,}(?:[\s'-]+[A-Z\p{Lu}]{2,}){1,3})/giu
|
|
1213
|
+
},
|
|
1214
|
+
// 2. FBO (For Benefit Of) Client Account / Wire / Trust Beneficiary Names
|
|
1215
|
+
{
|
|
1216
|
+
type: 'NAME',
|
|
1217
|
+
isContextName: true,
|
|
1218
|
+
regex: /\b(?:FBO|F\/B\/O|f\/b\/o|For\s+(?:the\s+)?Benefit\s+Of)\s*[:=#]?\s*([A-Z\p{Lu}][A-Za-z'’.-]*(?:[ \t\xA0]+[A-Z\p{Lu}][A-Za-z'’.-]*){1,3}|[A-Z\p{Lu}]{2,}(?:[\s'-]+[A-Z\p{Lu}]{2,}){1,3})/giu
|
|
1219
|
+
},
|
|
1220
|
+
// 3. Declarative Trust Statement Openings ("wherein I, [NAME]...", "I, [NAME], of [CITY], as Settlor...")
|
|
1221
|
+
{
|
|
1222
|
+
type: 'NAME',
|
|
1223
|
+
isContextName: true,
|
|
1224
|
+
regex: /\b(?:wherein\s+I|I|We),\s*([A-Z\p{Lu}][A-Za-z'’.-]*(?:[ \t\xA0]+[A-Z\p{Lu}][A-Za-z'’.-]*){1,3}|[A-Z\p{Lu}]{2,}(?:[\s'.-]+[A-Z\p{Lu}]{2,}){1,3})(?:,\s*(?:Jr\.?|Sr\.?|III|IV|II))?,?\s*(?:of\s+[^,]+,\s*[^,]+,?\s*)?(?:as\s+(?:Grantor|Settlor|Trustor|Trustee|Co-Trustee|Testator)|make\s+this|hereby\s+(?:create|establish|declare)|declare\s+that)\b/giu
|
|
1225
|
+
},
|
|
1226
|
+
// 4. Trust Names, Family Trusts, Living Trusts & Estates (Title Case & ALL-CAPS)
|
|
1227
|
+
{
|
|
1228
|
+
type: 'LEGAL',
|
|
1229
|
+
regex: /\b(?:The[ \t\xA0]+)?(?!\b(?:This|That|These|Those|Such|Said|Each|Every|Any|Some|Our|Your|Their|My|His|Her|A|An|Uniform|Delaware|California|Nevada|Florida|New\s+York)\b)([A-Z\p{Lu}][\p{L}'’–-]*(?:[ \t\xA0]+(?:and|&)[ \t\xA0]+[A-Z\p{Lu}][\p{L}'’–-]*|[ \t\xA0]+[A-Z\p{Lu}][\p{L}'’–-]*){0,4}[ \t\xA0]+(?:Family[ \t\xA0]+)?(?:Revocable|Irrevocable|Living|Dynasty|Asset[ \t\xA0]+Protection|Charitable[ \t\xA0]+(?:Remainder|Lead)|Special[ \t\xA0]+Needs|Generation-Skipping|QTIP|GRAT|GRUT|Testamentary)?[ \t\xA0]*Trust(?![ \t\xA0]+(?:Act|Code|Statute|Law|Indenture|Department|Officer|Company|Corp|Bank|Accounting))\b)/gu
|
|
1230
|
+
},
|
|
1231
|
+
{
|
|
1232
|
+
type: 'LEGAL',
|
|
1233
|
+
regex: /\b(?:THE[ \t\xA0]+)?(?!\b(?:THIS|THAT|THESE|THOSE|SUCH|SAID|EACH|EVERY|ANY|SOME|OUR|YOUR|THEIR|MY|HIS|HER|A|AN|UNIFORM)\b)([A-Z\p{Lu}0-9&'’.,-]{2,}(?:[ \t\xA0]+[A-Z\p{Lu}0-9&'’.,-]{2,}){0,4}[ \t\xA0]+(?:FAMILY[ \t\xA0]+)?(?:REVOCABLE|IRREVOCABLE|LIVING|DYNASTY|ASSET[ \t\xA0]+PROTECTION|CHARITABLE|TESTAMENTARY)?[ \t\xA0]*TRUST(?![ \t\xA0]+(?:ACT|CODE|STATUTE|LAW|INDENTURE|DEPARTMENT|OFFICER|COMPANY|CORP|BANK))\b)/g
|
|
1234
|
+
},
|
|
1235
|
+
{
|
|
1236
|
+
type: 'LEGAL',
|
|
1237
|
+
regex: /\b(?:Trust[ \t\xA0]+(?:Name|Title)|Title[ \t\xA0]+of[ \t\xA0]+Trust)[ \t\xA0]*[:#=]+[ \t\xA0]*([A-Za-z0-9&'’., \t\xA0-]+?[ \t\xA0]+(?:Family[ \t\xA0]+)?(?:Revocable|Irrevocable|Living|Dynasty|Asset[ \t\xA0]+Protection|Charitable|Special[ \t\xA0]+Needs|Testamentary)?[ \t\xA0]*Trust)(?![ \t\xA0]+(?:Act|Code|Statute|Law|Indenture))\b/gi
|
|
1238
|
+
},
|
|
1208
1239
|
{ type: 'ID', regex: /\b(?:Grantor|Trustor|Trustee|Beneficiary|Primary\s+Beneficiary|Contingent\s+Beneficiary)\s*(?:ID|Code|No\.?|Number|#)[:\s#-]+([A-Za-z0-9-]{3,20})\b/gi },
|
|
1209
1240
|
{ type: 'ID', regex: /\b(?:Trust\s+(?:EIN|TIN|Tax\s+ID)|Estate\s+EIN)[:\s#]*(\d{2}-\d{7})\b/gi }
|
|
1210
1241
|
],
|
|
@@ -1248,11 +1279,11 @@ let PROFILE_RULES = {
|
|
|
1248
1279
|
regex: /\b(?:Incurred\s+Loss(?:es)?|Paid\s+Loss(?:es)?|Case\s+Reserve|Outstanding\s+Reserve|IBNR(?:\s+Reserve)?|Loss\s+Reserve|Self-Insured\s+Retention|SIR\s+(?:Amount|Limit)|Policy\s+Limit|Per\s+Occurrence\s+Limit|Aggregate\s+Limit|Excess\s+Limit|Underlying\s+Limit|Attachment\s+Point|Treaty\s+Limit|Cession\s+Amount)\s*[:=]\s*((?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’]*\d[KMB]?\b|\b\d[0-9,.'’]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹])))/gi
|
|
1249
1280
|
},
|
|
1250
1281
|
// Existing core insurance patterns
|
|
1251
|
-
{ type: 'FINANCIAL', regex:
|
|
1252
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
1282
|
+
{ type: 'FINANCIAL', regex: /(?<=\b(?:Loss|Claim\s+Amount|Claim\s+Settlement|Settlement|(?<!\b(?:Case|Outstanding|IBNR|Loss)\s+)Reserve|Indemnity)[:\s]+)(?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[0-9,.'’\u2018\u2019]*\d[KMB]?\b/gi },
|
|
1283
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi },
|
|
1253
1284
|
{ type: 'ID', regex: /\b(?:(?:Assigned\s+)?Adjuster\s+(?:ID|No)|Claim\s+Rep(?:\.|resentative)?)[:\s#]*[-A-Z0-9]{4,15}\b/gi },
|
|
1254
1285
|
{ type: 'ID', regex: /\bNAIC(?:\s+(?:Company\s+)?(?:Code|CoCode|No\.?|Number|#))?[:\s#]*(\d{5})\b/gi },
|
|
1255
|
-
{ type: 'FINANCIAL', regex:
|
|
1286
|
+
{ type: 'FINANCIAL', regex: /(?<=\b(?:Deductible|Premium|Coverage\s+Amount)[:\s]+)(?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[0-9,.'’\u2018\u2019]*\d[KMB]?\b/gi },
|
|
1256
1287
|
{ type: 'ID', regex: /\b[A-HJ-NPR-Z0-9]{17}\b/g },
|
|
1257
1288
|
{ type: 'ID', regex: /\b(?<!\bAdditional\s+)(?:Insured|Named\s+Insured)[:\s]+[A-Z][a-z]+(?:[ \t\xA0]+[A-Z][a-z]+)+/g },
|
|
1258
1289
|
{ type: 'ID', regex: /\b(?:Agent|Producer)\s*(?:Code|No|ID)[:\s#]*[-A-Z0-9]{4,15}\b/gi },
|
|
@@ -1281,9 +1312,9 @@ let PROFILE_RULES = {
|
|
|
1281
1312
|
{ type: 'ID', regex: /\bGL[-_\s]*(?:Account|Acct|Code)?[:\s#]*\d{3,10}(?:[-_]\d{2,6})+\b|\bGL[-_\s]*(?:Account|Acct|Code)?[:\s#]*\d{4,10}\b/gi },
|
|
1282
1313
|
{ type: 'ID', regex: /\b(?:Cost\s+Center|CC)[-_\s]*(?:ID|Code|#)?[:\s#]*[A-Z0-9_-]*\d[A-Z0-9_-]*\b/gi },
|
|
1283
1314
|
{ type: 'ID', regex: /\b(?:Invoice|Inv|Purchase\s+Order|PO|Bill|Check|Voucher|Remittance)\s*(?:Number|Num|No\.?|#)?[:\s#]+([A-Za-z0-9_-]{4,25})\b/gi },
|
|
1284
|
-
{ type: 'FINANCIAL', regex: /(?<=\b(?<!\b(?:EV|Debt|Net\s+Debt)\/)(?:Invoice(?:\s+Total)?|Amount\s+Due|Total
|
|
1315
|
+
{ type: 'FINANCIAL', regex: /(?<=\b(?<!\b(?:EV|Debt|Net\s+Debt)\/)(?:Invoice(?:\s+Total)?|Amount\s+Due|Total(?:\s+Due)?|Payment(?:\s+Amount)?|Ledger\s+Balance|Credit|Debit|Net\s+Amount|Total\s+Paid|Billed|Remittance|Total\s+Revenue|Revenue|Cost\s+of\s+Goods(?:\s+Sold)?|COGS|Gross\s+Profit|Operating\s+Expenses?|OpEx|Operating\s+Income(?:\s*\([^)]*\))?|Operating\s+Loss|Net\s+Income(?:\s*[/()]*\s*Loss)?|Net\s+Loss|Foreign\s+Exchange(?:\s+Loss)?|FX\s+Loss|Retained\s+Earnings|Total\s+Equity|Shareholders?'?\s+Equity|Total\s+Assets|Total\s+Liabilities|Accounts\s+Payable|Accounts\s+Receivable|Cash|Cash\s+Flow|Free\s+Cash\s+Flow|Capital\s+Expenditures?|CapEx|Dividends?|(?:Capital\s+|Annual\s+)?Distribution(?:s)?|Withdrawal(?:s)?|Settlement(?:s)?|Sales\s+Revenue|EBITDA|EBIT|Balance|Loss|Profit)[:|\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]*\d\b)(?![ \t\xA0]*(?:%|[xX]\b|times\b|bps\b))/gi },
|
|
1285
1316
|
{ type: 'FINANCIAL', regex: /(?<=\|\s*)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹])))(?=\s*\|)/gi },
|
|
1286
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
1317
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi }
|
|
1287
1318
|
],
|
|
1288
1319
|
pharma: [
|
|
1289
1320
|
// Contextual Clinical, Regulatory & Pharmacovigilance Personnel
|
|
@@ -1567,7 +1598,7 @@ let PROFILE_RULES = {
|
|
|
1567
1598
|
{ type: 'ID', regex: /\b(?:Ineligible\s+AR|Eligible\s+AR|Collateral\s+Account)(?:\s+(?:Account|Acct|ID|Ref|No\.?|Number|#))*\s*[:#-]\s*([A-Za-z0-9-]{4,20})\b/gi },
|
|
1568
1599
|
{ type: 'ID', regex: /\b(?:Merchant\s+Cash\s+Advance|MCA)[ \t\xA0]*(?:Agreement|Contract)?[ \t\xA0]*(?:ID|Ref|No\.?|Number|#)?[ \t\xA0]*[:#-][ \t\xA0]*(?!Agreement\b)([A-Za-z0-9-]{4,25})\b/gi },
|
|
1569
1600
|
{ type: 'FINANCIAL', regex: /(?<=(?:^|[\r\n\t.;])[ \t\xA0]*(?:Daily|Weekly)(?:[ \t\xA0]+(?:ACH|Remittance|Debit|Payment|Transfer|Split(?:[ \t\xA0]+Funding)?|Holdback))+[ \t\xA0]*[:=][ \t\xA0]*)((?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[\d,.'’]+)/gi },
|
|
1570
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
1601
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi },
|
|
1571
1602
|
{ type: 'NAME', isContextName: true, isCorporateName: true, regex: /(?:MCA\s+Funder|Funder|ISO\s+Broker|Funding\s+Partner)[ \t\xA0]*[:#][ \t\xA0]*([A-Za-z0-9&.,\s'-]{2,40}?)(?=\r?\n|$|\s{3,}|\t|Rate|Factor|Advance|Amount|Terms)/gi }
|
|
1572
1603
|
]
|
|
1573
1604
|
};
|
|
@@ -1847,7 +1878,7 @@ let NOT_NAME_WORDS = new Set([
|
|
|
1847
1878
|
// Common Resume / Business Phrases
|
|
1848
1879
|
'results-driven', 'data-driven', 'customer-centric', 'detail-oriented', 'cross-functional', 'self-motivated', 'time-management', 'problem-solving', 'fast-paced', 'year-over-year',
|
|
1849
1880
|
// Legal & Trust terms
|
|
1850
|
-
'trust', 'trustee', 'co-trustee', 'settlor', 'grantor', 'beneficiary', 'agreement', 'will', 'estate', 'witness', 'declaration', 'signatory', 'testator', 'notary', 'commission', 'county', 'state', 'court', 'article', 'section', 'paragraph', 'schedule', 'exhibit', 'amendment', 'addendum', 'power', 'attorney', 'guardian', 'executor', 'administrator', 'survivor', 'predecessor', 'successor', 'whereof', 'hereby', 'thereby', 'herein', 'therein', 'witnesseth', 'whereas', 'therefore', 'now', 'dated', 'effective', 'matter', 'case', 'cases', 'docket', 'dockets', 'number', 'numbers', 'firm', 'firms', 'lawyer', 'lawyers', 'counsel', 'counsels', 'counselstack', 'tier', 'tiers', 'finding', 'findings', 'connector', 'connectors', 'platform', 'platforms',
|
|
1881
|
+
'trust', 'trustee', 'trustees', 'co-trustee', 'co-trustees', 'settlor', 'settlors', 'grantor', 'grantors', 'trustor', 'trustors', 'beneficiary', 'beneficiaries', 'revocable', 'irrevocable', 'dynasty', 'testamentary', 'fbo', 'agreement', 'will', 'estate', 'witness', 'declaration', 'signatory', 'testator', 'notary', 'commission', 'county', 'state', 'court', 'article', 'section', 'paragraph', 'schedule', 'exhibit', 'amendment', 'addendum', 'power', 'attorney', 'guardian', 'executor', 'administrator', 'survivor', 'predecessor', 'successor', 'whereof', 'hereby', 'thereby', 'herein', 'therein', 'witnesseth', 'whereas', 'therefore', 'now', 'dated', 'effective', 'matter', 'case', 'cases', 'docket', 'dockets', 'number', 'numbers', 'firm', 'firms', 'lawyer', 'lawyers', 'counsel', 'counsels', 'counselstack', 'tier', 'tiers', 'finding', 'findings', 'connector', 'connectors', 'platform', 'platforms',
|
|
1851
1882
|
// Medical & Clinical terms
|
|
1852
1883
|
'clinical', 'note', 'notes', 'dx', 'rx', 'tx', 'hx', 'px', 'sx', 'type', 'diabetes', 'referred', 'referral', 'diagnosed', 'diagnosis', 'patient', 'insurance', 'bcbs', 'mrn', 'dob',
|
|
1853
1884
|
// Tax & Payroll terms
|
|
@@ -1867,7 +1898,9 @@ let NOT_NAME_WORDS = new Set([
|
|
|
1867
1898
|
'accord', 'contrat', 'contrato', 'acuerdo', 'avenant', 'convention', 'protocole', 'prestation', 'confidentialite', 'confidentialité',
|
|
1868
1899
|
'f.3d', 'f.supp', 'u.s.c.', 'v.', 'plaintiff', 'defendant', 'v', 'u.s.', 'court', 'app.', 'reporter', 'cir.',
|
|
1869
1900
|
'civ', 'crim', 'evid', 'bankr', 'proc',
|
|
1870
|
-
'marine', 'inland', 'ocean', 'comp', 'workers', 'actuarial', 'actuary', 'underwriting', 'syndicate', 'lloyd', 'lloyds', 'pcs'
|
|
1901
|
+
'marine', 'inland', 'ocean', 'comp', 'workers', 'actuarial', 'actuary', 'underwriting', 'syndicate', 'lloyd', 'lloyds', 'pcs',
|
|
1902
|
+
// Dutch role / job-title nouns (prevent sentence-initial role words from being absorbed into NAME tokens)
|
|
1903
|
+
'medewerker', 'medewerkers', 'medewerkster', 'collega', 'collegas', 'werknemer', 'werknemers', 'klant', 'klanten', 'cliënt', 'client', 'cliënten', 'patiënt', 'patiënten', 'directeur', 'aanvrager', 'contactpersoon', 'huisarts', 'adviseur', 'consulent', 'beheerder', 'sollicitant', 'kandidaat', 'verzekerde', 'dossierhouder', 'behandelaar', 'zaakbehandelaar', 'burgerservicenummer', 'sofinummer']);
|
|
1871
1904
|
|
|
1872
1905
|
// Nobiliary particles and conjunctions that should never trigger name disqualification
|
|
1873
1906
|
const NOBILIARY_PARTICLES = new Set([
|
|
@@ -3034,6 +3067,25 @@ const PROFILE_JARGON = {
|
|
|
3034
3067
|
restoredCount++;
|
|
3035
3068
|
return lookup.get(upper);
|
|
3036
3069
|
}
|
|
3070
|
+
// Normalized lookup: strip outer brackets/delimiters, normalize whitespace, collapse leading zeros
|
|
3071
|
+
const inner = match.replace(/^(\[|<|\{\{|__)\s*|\s*(\]|>|\}\}|__)$/g, '').trim();
|
|
3072
|
+
const normMatch = inner.match(/^([A-Za-z_А-Яа-яЁё0-9]+?)[-_\s]+0*(\d+)$/);
|
|
3073
|
+
if (normMatch) {
|
|
3074
|
+
const normLabel = normMatch[1].replace(/[\s_-]+/g, '_').toUpperCase();
|
|
3075
|
+
const normIdx = parseInt(normMatch[2], 10);
|
|
3076
|
+
const candidates = [
|
|
3077
|
+
normLabel + '_' + normIdx,
|
|
3078
|
+
'[' + normLabel + '_' + normIdx + ']',
|
|
3079
|
+
normLabel + ' ' + normIdx,
|
|
3080
|
+
normLabel + '-' + normIdx
|
|
3081
|
+
];
|
|
3082
|
+
for (let c = 0; c < candidates.length; c++) {
|
|
3083
|
+
if (lookup.has(candidates[c])) {
|
|
3084
|
+
restoredCount++;
|
|
3085
|
+
return lookup.get(candidates[c]);
|
|
3086
|
+
}
|
|
3087
|
+
}
|
|
3088
|
+
}
|
|
3037
3089
|
const possMatch = match.match(/^([\s\S]+?)('s|’s|s|[а-яёА-ЯЁ]{1,3})$/);
|
|
3038
3090
|
if (possMatch) {
|
|
3039
3091
|
const base = possMatch[1];
|
|
@@ -3079,12 +3131,32 @@ const PROFILE_JARGON = {
|
|
|
3079
3131
|
} else if (lookup.has(match.toUpperCase())) {
|
|
3080
3132
|
rawVal = lookup.get(match.toUpperCase());
|
|
3081
3133
|
} else {
|
|
3082
|
-
const
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3134
|
+
const inner = match.replace(/^(\[|<|\{\{|__)\s*|\s*(\]|>|\}\}|__)$/g, '').trim();
|
|
3135
|
+
const normMatch = inner.match(/^([A-Za-z_А-Яа-яЁё0-9]+?)[-_\s]+0*(\d+)$/);
|
|
3136
|
+
if (normMatch) {
|
|
3137
|
+
const normLabel = normMatch[1].replace(/[\s_-]+/g, '_').toUpperCase();
|
|
3138
|
+
const normIdx = parseInt(normMatch[2], 10);
|
|
3139
|
+
const candidates = [
|
|
3140
|
+
normLabel + '_' + normIdx,
|
|
3141
|
+
'[' + normLabel + '_' + normIdx + ']',
|
|
3142
|
+
normLabel + ' ' + normIdx,
|
|
3143
|
+
normLabel + '-' + normIdx
|
|
3144
|
+
];
|
|
3145
|
+
for (let c = 0; c < candidates.length; c++) {
|
|
3146
|
+
if (lookup.has(candidates[c])) {
|
|
3147
|
+
rawVal = lookup.get(candidates[c]);
|
|
3148
|
+
break;
|
|
3149
|
+
}
|
|
3150
|
+
}
|
|
3151
|
+
}
|
|
3152
|
+
if (rawVal === null) {
|
|
3153
|
+
const possMatch = match.match(/^([\s\S]+?)('s|’s|s|[а-яёА-ЯЁ]{1,3})$/);
|
|
3154
|
+
if (possMatch) {
|
|
3155
|
+
const base = possMatch[1];
|
|
3156
|
+
suffix = possMatch[2];
|
|
3157
|
+
if (lookup.has(base)) rawVal = lookup.get(base);
|
|
3158
|
+
else if (lookup.has(base.toUpperCase())) rawVal = lookup.get(base.toUpperCase());
|
|
3159
|
+
}
|
|
3088
3160
|
}
|
|
3089
3161
|
}
|
|
3090
3162
|
if (rawVal !== null) {
|
package/ps-pii-engine.js
CHANGED
|
@@ -253,8 +253,8 @@ let REGEX_RULES = [
|
|
|
253
253
|
let PROFILE_RULES = {
|
|
254
254
|
general: [],
|
|
255
255
|
legal: [
|
|
256
|
-
// Legal Party & Role-Prefixed Names (Claimant, Respondent, Plaintiff, Defendant, Petitioner, Appellant, Principal, Grantor, Attorney-in-Fact, Counsel)
|
|
257
|
-
{ type: 'NAME', isContextName: true, regex: /(?<=^|[^\p{L}\p{N}_])(?:(?:Senior\s+)?Managing\s+Partner|Lead\s+Counsel|Co-Counsel|Special\s+Counsel|Of\s+Counsel|Counsel(?:\s+for\s+(?:the\s+)?(?:Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Debtor|Creditor|Party))?|Attorney(?:\s+for\s+(?:the\s+)?(?:Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Debtor|Creditor|Party))?|Registered\s+Representative|Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Principal|Grantor
|
|
256
|
+
// Legal Party & Role-Prefixed Names (Claimant, Respondent, Plaintiff, Defendant, Petitioner, Appellant, Principal, Grantor, Settlor, Trustee, Beneficiary, Attorney-in-Fact, Counsel)
|
|
257
|
+
{ type: 'NAME', isContextName: true, regex: /(?<=^|[^\p{L}\p{N}_])(?:(?:Senior\s+)?Managing\s+Partner|Lead\s+Counsel|Co-Counsel|Special\s+Counsel|Of\s+Counsel|Counsel(?:\s+for\s+(?:the\s+)?(?:Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Debtor|Creditor|Party))?|Attorney(?:\s+for\s+(?:the\s+)?(?:Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Debtor|Creditor|Party))?|Registered\s+Representative|Claimant|Respondent|Plaintiff|Defendant|Petitioner|Appellant|Appellee|Principal|Grantor[s]?|Grantee|Trustee[s]?|Co-Trustee[s]?|Successor\s+Trustee[s]?|Alternate\s+Trustee|Independent\s+Trustee|Settlor[s]?|Trustor[s]?|Beneficiar(?:y|ies)|Primary\s+Beneficiary|Contingent\s+Beneficiary|Remainder\s+Beneficiary|Trust\s+Protector|Protector|Fiduciar(?:y|ies)|Attorney-in-Fact|Designated\s+Attorney-in-Fact|Client\s*(?:\/\s*Principal)?|Escrow\s+(?:Trust\s+)?Officer)\s*[:#,]?\s*(?:(?:Dr|Mr|Mrs|Ms|Prof)\.?\s+)?((?:(?:d['’]|l['’]|(?:(?:van|von|de|di|da|do|dos|das|la|le|del|dels|du|der|den|ten|ter|af|av)\s+)+)\s*)?\p{Lu}[\p{L}'’–-]*(?:-[\p{Lu}\p{Ll}'’–-]+)*(?:,\s+(?:(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]+)(?:\s+\p{Lu}\.?)?(?:,\s*(?:Jr\.?|Sr\.?|III|IV|II))?|\s+(?:(?:van|von|de|di|da|do|dos|das|la|le|del|du|der|d['’]|l['’]|de\s+la|de\s+los|von\s+der)\s+)?(?:(?:\p{Lu}\.?\s+)?(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]*(?:-[\p{Lu}\p{Ll}'’–-]+)*))(?:\s+(?:y|i)\s+(?:(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]+))?|[A-Z\p{Lu}]{2,}(?:[\s'-]+[A-Z\p{Lu}]{2,}){1,3})/giu },
|
|
258
258
|
{ type: 'LEGAL', regex: /\bCASE[-_][A-Z0-9_-]{4,}\b/gi },
|
|
259
259
|
{ type: 'LEGAL', regex: /\bMATTER[-_][A-Z0-9_-]{4,}\b/gi },
|
|
260
260
|
{ type: 'LEGAL', regex: /\b[A-Z]{2,4}[- ]?\d{2}[- ]?\d{4,}\b/g },
|
|
@@ -361,8 +361,8 @@ let PROFILE_RULES = {
|
|
|
361
361
|
{ type: 'ID', regex: /\b(?:LEI|LEGAL[\s-]ENTITY[\s-]IDENTIFIER)[:\s#-]*[0-9A-Z]{20}\b/gi },
|
|
362
362
|
{ type: 'ID', regex: /\bBBG[0-9A-Z]{9}\b/g },
|
|
363
363
|
{ type: 'FINANCIAL', regex: /(?<=\b(?:Settlement(?:\s+Amount)?|Wire(?:\s+(?:Transfer|Amount))?|Direct\s+Wire|Transaction(?:\s+Amount)?|Payment(?:\s+Amount)?)[ \t:]+)(?:(?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))/gi },
|
|
364
|
-
{ type: 'FINANCIAL', regex: /(?<=(?:^|[\r\n\t.;])\s*(?<!\b(?:Trade(?:\s+execution)?|Net|Gross|Base|Loan|Transfer)\s+)(?:Wire(?:\s+(?:Transfer|Amount))?|Direct\s+Wire|Balance|Deposit|Withdrawal|Settlement|Principal|Interest|Remittance|Payout|Transaction(?:\s+Amount)?|Payment(?:\s+Amount)?|Total(?:\s+Due)?|Amount(?:\s+Due)?)[:\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]{3,}\b)/gi },
|
|
365
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
364
|
+
{ type: 'FINANCIAL', regex: /(?<=(?:^|[\r\n\t.;])\s*(?<!\b(?:Trade(?:\s+execution)?|Net|Gross|Base|Loan|Transfer)\s+)(?:Wire(?:\s+(?:Transfer|Amount))?|Direct\s+Wire|Balance|Deposit|Withdrawal|Settlement|Principal|Interest|Remittance|Payout|(?:Capital\s+|Annual\s+)?Distribution(?:s)?|Transaction(?:\s+Amount)?|Payment(?:\s+Amount)?|Total(?:\s+Due)?|Amount(?:\s+Due)?)[:\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]{3,}\b)/gi },
|
|
365
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi },
|
|
366
366
|
// Corporate Financial Performance, P&L Statements, Balance Sheets & Earnings
|
|
367
367
|
{ type: 'FINANCIAL', regex: /(?<=\b(?<!\b(?:EV|Debt|Net\s+Debt)\/)(?:Revenue|Total\s+Revenue|Sales\s+Revenue|Cost\s+of\s+Goods(?:\s+Sold)?|COGS|Gross\s+Profit|Operating\s+Expenses?|OpEx|Operating\s+Income(?:\s*\([^)]*\))?|Operating\s+Loss|Net\s+Income(?:\s*[/()]*\s*Loss)?|Net\s+Loss|Foreign\s+Exchange(?:\s+Loss)?|FX\s+Loss|Retained\s+Earnings|Total\s+Equity|Shareholders?'?\s+Equity|Total\s+Assets|Total\s+Liabilities|Accounts\s+Payable|Accounts\s+Receivable|Cash|Cash\s+Flow|Free\s+Cash\s+Flow|Capital\s+Expenditures?|CapEx|Dividends?|EBITDA|EBIT|Balance|Loss|Profit)[:|\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]*\d\b)(?![ \t\xA0]*(?:%|[xX]\b|times\b|bps\b))/gi },
|
|
368
368
|
// Interbank Wire Transcripts & Payment Messaging
|
|
@@ -1190,9 +1190,9 @@ let PROFILE_RULES = {
|
|
|
1190
1190
|
{ type: 'FINANCIAL', regex: /\b(?:Account|Acct\.?)[:\s#]*\d{4}[-\s]?\d{4}[-\s]?\d{2,6}\b/gi },
|
|
1191
1191
|
{ type: 'FINANCIAL', regex: /\b(?:Policy|Contract)\s*(?:No\.?|Number|#)[:\s]+[A-Z0-9][A-Z0-9\-]{3,14}\b/gi },
|
|
1192
1192
|
{ type: 'ID', regex: /\bCRD\s*#?\s*\d{4,8}\b/gi },
|
|
1193
|
-
{ type: 'FINANCIAL', regex:
|
|
1193
|
+
{ type: 'FINANCIAL', regex: /(?<=\b(?:(?:Capital\s+|Annual\s+)?(?:Distribution|Withdrawal)s?|RMD|Required\s+Minimum\s+Distribution)[:\s]+)(?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[0-9,.'’\u2018\u2019]*\d[KMB]?\b/gi },
|
|
1194
1194
|
{ type: 'FINANCIAL', regex: /(?<=\b(?:Portfolio(?:\s+[Vv]alue)?|Market\s+Value|Net\s+Worth|AUM|Total\s+Assets|Cash\s+Balance|Account\s+Value|Capital\s+Gains?|Unrealized\s+(?:Gain|Loss)|Realized\s+(?:Gain|Loss)|Dividend\s+Income)[:\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]{3,}\b)/gi },
|
|
1195
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
1195
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi },
|
|
1196
1196
|
{ type: 'FINANCIAL', regex: /\b(?:Roth\s+)?(?:IRA|401k|401\(k\)|403b|403\(b\)|SEP|SIMPLE)\s*(?:Account|Acct|Plan)?\s*(?:(?:No\.?|Number|#)[:\s#]*|[:#]\s*)([A-Z0-9-]{4,20})\b/gi },
|
|
1197
1197
|
{ type: 'ID', regex: /\bCUSIP[:\s#]*([0-9A-Z]{9})\b/gi },
|
|
1198
1198
|
{ type: 'ID', regex: /\bISIN[:\s#]*([A-Z]{2}[0-9A-Z]{9}[0-9])\b/gi },
|
|
@@ -1205,6 +1205,37 @@ let PROFILE_RULES = {
|
|
|
1205
1205
|
{ type: 'FINANCIAL', regex: /\b(?:Vanguard)(?:\s+(?:Account|Acct|Brokerage))*\s*(?:Number|Num|No\.?|#)?[:\s#]+(\d{8}[-\s]?\d|\d{8,9})\b/gi },
|
|
1206
1206
|
{ type: 'ID', regex: /\b(?:DTC|DTC\s+Participant|Clearing\s+Participant)\s*(?:Number|Num|No\.?|#|Code)?[:\s#]+(\d{4})\b/gi },
|
|
1207
1207
|
// Family Office & Trust Governance
|
|
1208
|
+
// 1. Trust & Estate Role-Prefixed Names (Grantor, Settlor, Trustee, Beneficiary, Executor, Fiduciary, etc.)
|
|
1209
|
+
{
|
|
1210
|
+
type: 'NAME',
|
|
1211
|
+
isContextName: true,
|
|
1212
|
+
regex: /(?<=^|[^\p{L}\p{N}_])(?:Grantor[s]?|Trustor[s]?|Settlor[s]?|Trustee[s]?|Co-Trustee[s]?|Successor\s+Trustee[s]?|Alternate\s+Trustee|Independent\s+Trustee|Beneficiar(?:y|ies)|Primary\s+Beneficiary|Contingent\s+Beneficiary|Remainder\s+Beneficiary|Income\s+Beneficiary|Trust\s+Protector|Protector|Fiduciar(?:y|ies)|Custodian[s]?|Executor[s]?|Executrix|Personal\s+Representative|Power\s+of\s+Attorney|Attorney-in-Fact|Health\s+Care\s+(?:Agent|Proxy))\s*[:=#,\/\t-]*\s*(?:(?:Dr|Mr|Mrs|Ms|Prof)\.?\s+)?((?:(?:d['’]|l['’]|(?:(?:van|von|de|di|da|do|dos|das|la|le|del|dels|du|der|den|ten|ter|af|av)\s+)+)\s*)?\p{Lu}[\p{L}'’–-]*(?:-[\p{Lu}\p{Ll}'’–-]+)*(?:,\s+(?:(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]+)(?:\s+\p{Lu}\.?)?(?:,\s*(?:Jr\.?|Sr\.?|III|IV|II))?|\s+(?:(?:van|von|de|di|da|do|dos|das|la|le|del|du|der|d['’]|l['’]|de\s+la|de\s+los|von\s+der)\s+)?(?:(?:\p{Lu}\.?\s+)?(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]*(?:-[\p{Lu}\p{Ll}'’–-]+)*))(?:\s+(?:y|i)\s+(?:(?:d['’]|l['’])?\p{Lu}[\p{L}'’–-]+))?|[A-Z\p{Lu}]{2,}(?:[\s'-]+[A-Z\p{Lu}]{2,}){1,3})/giu
|
|
1213
|
+
},
|
|
1214
|
+
// 2. FBO (For Benefit Of) Client Account / Wire / Trust Beneficiary Names
|
|
1215
|
+
{
|
|
1216
|
+
type: 'NAME',
|
|
1217
|
+
isContextName: true,
|
|
1218
|
+
regex: /\b(?:FBO|F\/B\/O|f\/b\/o|For\s+(?:the\s+)?Benefit\s+Of)\s*[:=#]?\s*([A-Z\p{Lu}][A-Za-z'’.-]*(?:[ \t\xA0]+[A-Z\p{Lu}][A-Za-z'’.-]*){1,3}|[A-Z\p{Lu}]{2,}(?:[\s'-]+[A-Z\p{Lu}]{2,}){1,3})/giu
|
|
1219
|
+
},
|
|
1220
|
+
// 3. Declarative Trust Statement Openings ("wherein I, [NAME]...", "I, [NAME], of [CITY], as Settlor...")
|
|
1221
|
+
{
|
|
1222
|
+
type: 'NAME',
|
|
1223
|
+
isContextName: true,
|
|
1224
|
+
regex: /\b(?:wherein\s+I|I|We),\s*([A-Z\p{Lu}][A-Za-z'’.-]*(?:[ \t\xA0]+[A-Z\p{Lu}][A-Za-z'’.-]*){1,3}|[A-Z\p{Lu}]{2,}(?:[\s'.-]+[A-Z\p{Lu}]{2,}){1,3})(?:,\s*(?:Jr\.?|Sr\.?|III|IV|II))?,?\s*(?:of\s+[^,]+,\s*[^,]+,?\s*)?(?:as\s+(?:Grantor|Settlor|Trustor|Trustee|Co-Trustee|Testator)|make\s+this|hereby\s+(?:create|establish|declare)|declare\s+that)\b/giu
|
|
1225
|
+
},
|
|
1226
|
+
// 4. Trust Names, Family Trusts, Living Trusts & Estates (Title Case & ALL-CAPS)
|
|
1227
|
+
{
|
|
1228
|
+
type: 'LEGAL',
|
|
1229
|
+
regex: /\b(?:The[ \t\xA0]+)?(?!\b(?:This|That|These|Those|Such|Said|Each|Every|Any|Some|Our|Your|Their|My|His|Her|A|An|Uniform|Delaware|California|Nevada|Florida|New\s+York)\b)([A-Z\p{Lu}][\p{L}'’–-]*(?:[ \t\xA0]+(?:and|&)[ \t\xA0]+[A-Z\p{Lu}][\p{L}'’–-]*|[ \t\xA0]+[A-Z\p{Lu}][\p{L}'’–-]*){0,4}[ \t\xA0]+(?:Family[ \t\xA0]+)?(?:Revocable|Irrevocable|Living|Dynasty|Asset[ \t\xA0]+Protection|Charitable[ \t\xA0]+(?:Remainder|Lead)|Special[ \t\xA0]+Needs|Generation-Skipping|QTIP|GRAT|GRUT|Testamentary)?[ \t\xA0]*Trust(?![ \t\xA0]+(?:Act|Code|Statute|Law|Indenture|Department|Officer|Company|Corp|Bank|Accounting))\b)/gu
|
|
1230
|
+
},
|
|
1231
|
+
{
|
|
1232
|
+
type: 'LEGAL',
|
|
1233
|
+
regex: /\b(?:THE[ \t\xA0]+)?(?!\b(?:THIS|THAT|THESE|THOSE|SUCH|SAID|EACH|EVERY|ANY|SOME|OUR|YOUR|THEIR|MY|HIS|HER|A|AN|UNIFORM)\b)([A-Z\p{Lu}0-9&'’.,-]{2,}(?:[ \t\xA0]+[A-Z\p{Lu}0-9&'’.,-]{2,}){0,4}[ \t\xA0]+(?:FAMILY[ \t\xA0]+)?(?:REVOCABLE|IRREVOCABLE|LIVING|DYNASTY|ASSET[ \t\xA0]+PROTECTION|CHARITABLE|TESTAMENTARY)?[ \t\xA0]*TRUST(?![ \t\xA0]+(?:ACT|CODE|STATUTE|LAW|INDENTURE|DEPARTMENT|OFFICER|COMPANY|CORP|BANK))\b)/g
|
|
1234
|
+
},
|
|
1235
|
+
{
|
|
1236
|
+
type: 'LEGAL',
|
|
1237
|
+
regex: /\b(?:Trust[ \t\xA0]+(?:Name|Title)|Title[ \t\xA0]+of[ \t\xA0]+Trust)[ \t\xA0]*[:#=]+[ \t\xA0]*([A-Za-z0-9&'’., \t\xA0-]+?[ \t\xA0]+(?:Family[ \t\xA0]+)?(?:Revocable|Irrevocable|Living|Dynasty|Asset[ \t\xA0]+Protection|Charitable|Special[ \t\xA0]+Needs|Testamentary)?[ \t\xA0]*Trust)(?![ \t\xA0]+(?:Act|Code|Statute|Law|Indenture))\b/gi
|
|
1238
|
+
},
|
|
1208
1239
|
{ type: 'ID', regex: /\b(?:Grantor|Trustor|Trustee|Beneficiary|Primary\s+Beneficiary|Contingent\s+Beneficiary)\s*(?:ID|Code|No\.?|Number|#)[:\s#-]+([A-Za-z0-9-]{3,20})\b/gi },
|
|
1209
1240
|
{ type: 'ID', regex: /\b(?:Trust\s+(?:EIN|TIN|Tax\s+ID)|Estate\s+EIN)[:\s#]*(\d{2}-\d{7})\b/gi }
|
|
1210
1241
|
],
|
|
@@ -1248,11 +1279,11 @@ let PROFILE_RULES = {
|
|
|
1248
1279
|
regex: /\b(?:Incurred\s+Loss(?:es)?|Paid\s+Loss(?:es)?|Case\s+Reserve|Outstanding\s+Reserve|IBNR(?:\s+Reserve)?|Loss\s+Reserve|Self-Insured\s+Retention|SIR\s+(?:Amount|Limit)|Policy\s+Limit|Per\s+Occurrence\s+Limit|Aggregate\s+Limit|Excess\s+Limit|Underlying\s+Limit|Attachment\s+Point|Treaty\s+Limit|Cession\s+Amount)\s*[:=]\s*((?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’]*\d[KMB]?\b|\b\d[0-9,.'’]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹])))/gi
|
|
1249
1280
|
},
|
|
1250
1281
|
// Existing core insurance patterns
|
|
1251
|
-
{ type: 'FINANCIAL', regex:
|
|
1252
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
1282
|
+
{ type: 'FINANCIAL', regex: /(?<=\b(?:Loss|Claim\s+Amount|Claim\s+Settlement|Settlement|(?<!\b(?:Case|Outstanding|IBNR|Loss)\s+)Reserve|Indemnity)[:\s]+)(?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[0-9,.'’\u2018\u2019]*\d[KMB]?\b/gi },
|
|
1283
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi },
|
|
1253
1284
|
{ type: 'ID', regex: /\b(?:(?:Assigned\s+)?Adjuster\s+(?:ID|No)|Claim\s+Rep(?:\.|resentative)?)[:\s#]*[-A-Z0-9]{4,15}\b/gi },
|
|
1254
1285
|
{ type: 'ID', regex: /\bNAIC(?:\s+(?:Company\s+)?(?:Code|CoCode|No\.?|Number|#))?[:\s#]*(\d{5})\b/gi },
|
|
1255
|
-
{ type: 'FINANCIAL', regex:
|
|
1286
|
+
{ type: 'FINANCIAL', regex: /(?<=\b(?:Deductible|Premium|Coverage\s+Amount)[:\s]+)(?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[0-9,.'’\u2018\u2019]*\d[KMB]?\b/gi },
|
|
1256
1287
|
{ type: 'ID', regex: /\b[A-HJ-NPR-Z0-9]{17}\b/g },
|
|
1257
1288
|
{ type: 'ID', regex: /\b(?<!\bAdditional\s+)(?:Insured|Named\s+Insured)[:\s]+[A-Z][a-z]+(?:[ \t\xA0]+[A-Z][a-z]+)+/g },
|
|
1258
1289
|
{ type: 'ID', regex: /\b(?:Agent|Producer)\s*(?:Code|No|ID)[:\s#]*[-A-Z0-9]{4,15}\b/gi },
|
|
@@ -1281,9 +1312,9 @@ let PROFILE_RULES = {
|
|
|
1281
1312
|
{ type: 'ID', regex: /\bGL[-_\s]*(?:Account|Acct|Code)?[:\s#]*\d{3,10}(?:[-_]\d{2,6})+\b|\bGL[-_\s]*(?:Account|Acct|Code)?[:\s#]*\d{4,10}\b/gi },
|
|
1282
1313
|
{ type: 'ID', regex: /\b(?:Cost\s+Center|CC)[-_\s]*(?:ID|Code|#)?[:\s#]*[A-Z0-9_-]*\d[A-Z0-9_-]*\b/gi },
|
|
1283
1314
|
{ type: 'ID', regex: /\b(?:Invoice|Inv|Purchase\s+Order|PO|Bill|Check|Voucher|Remittance)\s*(?:Number|Num|No\.?|#)?[:\s#]+([A-Za-z0-9_-]{4,25})\b/gi },
|
|
1284
|
-
{ type: 'FINANCIAL', regex: /(?<=\b(?<!\b(?:EV|Debt|Net\s+Debt)\/)(?:Invoice(?:\s+Total)?|Amount\s+Due|Total
|
|
1315
|
+
{ type: 'FINANCIAL', regex: /(?<=\b(?<!\b(?:EV|Debt|Net\s+Debt)\/)(?:Invoice(?:\s+Total)?|Amount\s+Due|Total(?:\s+Due)?|Payment(?:\s+Amount)?|Ledger\s+Balance|Credit|Debit|Net\s+Amount|Total\s+Paid|Billed|Remittance|Total\s+Revenue|Revenue|Cost\s+of\s+Goods(?:\s+Sold)?|COGS|Gross\s+Profit|Operating\s+Expenses?|OpEx|Operating\s+Income(?:\s*\([^)]*\))?|Operating\s+Loss|Net\s+Income(?:\s*[/()]*\s*Loss)?|Net\s+Loss|Foreign\s+Exchange(?:\s+Loss)?|FX\s+Loss|Retained\s+Earnings|Total\s+Equity|Shareholders?'?\s+Equity|Total\s+Assets|Total\s+Liabilities|Accounts\s+Payable|Accounts\s+Receivable|Cash|Cash\s+Flow|Free\s+Cash\s+Flow|Capital\s+Expenditures?|CapEx|Dividends?|(?:Capital\s+|Annual\s+)?Distribution(?:s)?|Withdrawal(?:s)?|Settlement(?:s)?|Sales\s+Revenue|EBITDA|EBIT|Balance|Loss|Profit)[:|\s]+)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹]))|[0-9,.'’]*\d\b)(?![ \t\xA0]*(?:%|[xX]\b|times\b|bps\b))/gi },
|
|
1285
1316
|
{ type: 'FINANCIAL', regex: /(?<=\|\s*)(?:(?:\((?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]+[KMB]?\)|(?:[$€£¥₪₽₹]\s*)\([0-9,.'’\u2018\u2019]+[KMB]?\))|(?:[-−](?:[$€£¥₪₽₹]\s*)?[0-9,.'’\u2018\u2019]*\d[KMB]?\b|(?:[$€£¥₪₽₹]\s*)[-−][0-9,.'’\u2018\u2019]*\d[KMB]?\b)|(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB)\b|[$€£¥₪₽₹])))(?=\s*\|)/gi },
|
|
1286
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
1317
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi }
|
|
1287
1318
|
],
|
|
1288
1319
|
pharma: [
|
|
1289
1320
|
// Contextual Clinical, Regulatory & Pharmacovigilance Personnel
|
|
@@ -1567,7 +1598,7 @@ let PROFILE_RULES = {
|
|
|
1567
1598
|
{ type: 'ID', regex: /\b(?:Ineligible\s+AR|Eligible\s+AR|Collateral\s+Account)(?:\s+(?:Account|Acct|ID|Ref|No\.?|Number|#))*\s*[:#-]\s*([A-Za-z0-9-]{4,20})\b/gi },
|
|
1568
1599
|
{ type: 'ID', regex: /\b(?:Merchant\s+Cash\s+Advance|MCA)[ \t\xA0]*(?:Agreement|Contract)?[ \t\xA0]*(?:ID|Ref|No\.?|Number|#)?[ \t\xA0]*[:#-][ \t\xA0]*(?!Agreement\b)([A-Za-z0-9-]{4,25})\b/gi },
|
|
1569
1600
|
{ type: 'FINANCIAL', regex: /(?<=(?:^|[\r\n\t.;])[ \t\xA0]*(?:Daily|Weekly)(?:[ \t\xA0]+(?:ACH|Remittance|Debit|Payment|Transfer|Split(?:[ \t\xA0]+Funding)?|Holdback))+[ \t\xA0]*[:=][ \t\xA0]*)((?:[$€£¥₪₽₹]|(?:USD|EUR|GBP|CHF|ILS|RUB)\s?)[\d,.'’]+)/gi },
|
|
1570
|
-
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:EUR|GBP|CHF|ILS|RUB)\s*|[
|
|
1601
|
+
{ type: 'FINANCIAL', regex: /(?:(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\s*|[$€£¥₪₽₹]\s*)[0-9,.'’\u2018\u2019]*\d[KMB]?(?:\s*(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY|[$€£¥₪₽₹]))?\b|\b\d[0-9,.'’\u2018\u2019]*\d?[KMB]?\s*(?:\b(?:USD|EUR|GBP|CHF|ILS|RUB|CAD|AUD|JPY)\b|[$€£¥₪₽₹]))/gi },
|
|
1571
1602
|
{ type: 'NAME', isContextName: true, isCorporateName: true, regex: /(?:MCA\s+Funder|Funder|ISO\s+Broker|Funding\s+Partner)[ \t\xA0]*[:#][ \t\xA0]*([A-Za-z0-9&.,\s'-]{2,40}?)(?=\r?\n|$|\s{3,}|\t|Rate|Factor|Advance|Amount|Terms)/gi }
|
|
1572
1603
|
]
|
|
1573
1604
|
};
|
|
@@ -1847,7 +1878,7 @@ let NOT_NAME_WORDS = new Set([
|
|
|
1847
1878
|
// Common Resume / Business Phrases
|
|
1848
1879
|
'results-driven', 'data-driven', 'customer-centric', 'detail-oriented', 'cross-functional', 'self-motivated', 'time-management', 'problem-solving', 'fast-paced', 'year-over-year',
|
|
1849
1880
|
// Legal & Trust terms
|
|
1850
|
-
'trust', 'trustee', 'co-trustee', 'settlor', 'grantor', 'beneficiary', 'agreement', 'will', 'estate', 'witness', 'declaration', 'signatory', 'testator', 'notary', 'commission', 'county', 'state', 'court', 'article', 'section', 'paragraph', 'schedule', 'exhibit', 'amendment', 'addendum', 'power', 'attorney', 'guardian', 'executor', 'administrator', 'survivor', 'predecessor', 'successor', 'whereof', 'hereby', 'thereby', 'herein', 'therein', 'witnesseth', 'whereas', 'therefore', 'now', 'dated', 'effective', 'matter', 'case', 'cases', 'docket', 'dockets', 'number', 'numbers', 'firm', 'firms', 'lawyer', 'lawyers', 'counsel', 'counsels', 'counselstack', 'tier', 'tiers', 'finding', 'findings', 'connector', 'connectors', 'platform', 'platforms',
|
|
1881
|
+
'trust', 'trustee', 'trustees', 'co-trustee', 'co-trustees', 'settlor', 'settlors', 'grantor', 'grantors', 'trustor', 'trustors', 'beneficiary', 'beneficiaries', 'revocable', 'irrevocable', 'dynasty', 'testamentary', 'fbo', 'agreement', 'will', 'estate', 'witness', 'declaration', 'signatory', 'testator', 'notary', 'commission', 'county', 'state', 'court', 'article', 'section', 'paragraph', 'schedule', 'exhibit', 'amendment', 'addendum', 'power', 'attorney', 'guardian', 'executor', 'administrator', 'survivor', 'predecessor', 'successor', 'whereof', 'hereby', 'thereby', 'herein', 'therein', 'witnesseth', 'whereas', 'therefore', 'now', 'dated', 'effective', 'matter', 'case', 'cases', 'docket', 'dockets', 'number', 'numbers', 'firm', 'firms', 'lawyer', 'lawyers', 'counsel', 'counsels', 'counselstack', 'tier', 'tiers', 'finding', 'findings', 'connector', 'connectors', 'platform', 'platforms',
|
|
1851
1882
|
// Medical & Clinical terms
|
|
1852
1883
|
'clinical', 'note', 'notes', 'dx', 'rx', 'tx', 'hx', 'px', 'sx', 'type', 'diabetes', 'referred', 'referral', 'diagnosed', 'diagnosis', 'patient', 'insurance', 'bcbs', 'mrn', 'dob',
|
|
1853
1884
|
// Tax & Payroll terms
|
|
@@ -1867,7 +1898,9 @@ let NOT_NAME_WORDS = new Set([
|
|
|
1867
1898
|
'accord', 'contrat', 'contrato', 'acuerdo', 'avenant', 'convention', 'protocole', 'prestation', 'confidentialite', 'confidentialité',
|
|
1868
1899
|
'f.3d', 'f.supp', 'u.s.c.', 'v.', 'plaintiff', 'defendant', 'v', 'u.s.', 'court', 'app.', 'reporter', 'cir.',
|
|
1869
1900
|
'civ', 'crim', 'evid', 'bankr', 'proc',
|
|
1870
|
-
'marine', 'inland', 'ocean', 'comp', 'workers', 'actuarial', 'actuary', 'underwriting', 'syndicate', 'lloyd', 'lloyds', 'pcs'
|
|
1901
|
+
'marine', 'inland', 'ocean', 'comp', 'workers', 'actuarial', 'actuary', 'underwriting', 'syndicate', 'lloyd', 'lloyds', 'pcs',
|
|
1902
|
+
// Dutch role / job-title nouns (prevent sentence-initial role words from being absorbed into NAME tokens)
|
|
1903
|
+
'medewerker', 'medewerkers', 'medewerkster', 'collega', 'collegas', 'werknemer', 'werknemers', 'klant', 'klanten', 'cliënt', 'client', 'cliënten', 'patiënt', 'patiënten', 'directeur', 'aanvrager', 'contactpersoon', 'huisarts', 'adviseur', 'consulent', 'beheerder', 'sollicitant', 'kandidaat', 'verzekerde', 'dossierhouder', 'behandelaar', 'zaakbehandelaar', 'burgerservicenummer', 'sofinummer']);
|
|
1871
1904
|
|
|
1872
1905
|
// Nobiliary particles and conjunctions that should never trigger name disqualification
|
|
1873
1906
|
const NOBILIARY_PARTICLES = new Set([
|
|
@@ -3034,6 +3067,25 @@ const PROFILE_JARGON = {
|
|
|
3034
3067
|
restoredCount++;
|
|
3035
3068
|
return lookup.get(upper);
|
|
3036
3069
|
}
|
|
3070
|
+
// Normalized lookup: strip outer brackets/delimiters, normalize whitespace, collapse leading zeros
|
|
3071
|
+
const inner = match.replace(/^(\[|<|\{\{|__)\s*|\s*(\]|>|\}\}|__)$/g, '').trim();
|
|
3072
|
+
const normMatch = inner.match(/^([A-Za-z_А-Яа-яЁё0-9]+?)[-_\s]+0*(\d+)$/);
|
|
3073
|
+
if (normMatch) {
|
|
3074
|
+
const normLabel = normMatch[1].replace(/[\s_-]+/g, '_').toUpperCase();
|
|
3075
|
+
const normIdx = parseInt(normMatch[2], 10);
|
|
3076
|
+
const candidates = [
|
|
3077
|
+
normLabel + '_' + normIdx,
|
|
3078
|
+
'[' + normLabel + '_' + normIdx + ']',
|
|
3079
|
+
normLabel + ' ' + normIdx,
|
|
3080
|
+
normLabel + '-' + normIdx
|
|
3081
|
+
];
|
|
3082
|
+
for (let c = 0; c < candidates.length; c++) {
|
|
3083
|
+
if (lookup.has(candidates[c])) {
|
|
3084
|
+
restoredCount++;
|
|
3085
|
+
return lookup.get(candidates[c]);
|
|
3086
|
+
}
|
|
3087
|
+
}
|
|
3088
|
+
}
|
|
3037
3089
|
const possMatch = match.match(/^([\s\S]+?)('s|’s|s|[а-яёА-ЯЁ]{1,3})$/);
|
|
3038
3090
|
if (possMatch) {
|
|
3039
3091
|
const base = possMatch[1];
|
|
@@ -3079,12 +3131,32 @@ const PROFILE_JARGON = {
|
|
|
3079
3131
|
} else if (lookup.has(match.toUpperCase())) {
|
|
3080
3132
|
rawVal = lookup.get(match.toUpperCase());
|
|
3081
3133
|
} else {
|
|
3082
|
-
const
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3134
|
+
const inner = match.replace(/^(\[|<|\{\{|__)\s*|\s*(\]|>|\}\}|__)$/g, '').trim();
|
|
3135
|
+
const normMatch = inner.match(/^([A-Za-z_А-Яа-яЁё0-9]+?)[-_\s]+0*(\d+)$/);
|
|
3136
|
+
if (normMatch) {
|
|
3137
|
+
const normLabel = normMatch[1].replace(/[\s_-]+/g, '_').toUpperCase();
|
|
3138
|
+
const normIdx = parseInt(normMatch[2], 10);
|
|
3139
|
+
const candidates = [
|
|
3140
|
+
normLabel + '_' + normIdx,
|
|
3141
|
+
'[' + normLabel + '_' + normIdx + ']',
|
|
3142
|
+
normLabel + ' ' + normIdx,
|
|
3143
|
+
normLabel + '-' + normIdx
|
|
3144
|
+
];
|
|
3145
|
+
for (let c = 0; c < candidates.length; c++) {
|
|
3146
|
+
if (lookup.has(candidates[c])) {
|
|
3147
|
+
rawVal = lookup.get(candidates[c]);
|
|
3148
|
+
break;
|
|
3149
|
+
}
|
|
3150
|
+
}
|
|
3151
|
+
}
|
|
3152
|
+
if (rawVal === null) {
|
|
3153
|
+
const possMatch = match.match(/^([\s\S]+?)('s|’s|s|[а-яёА-ЯЁ]{1,3})$/);
|
|
3154
|
+
if (possMatch) {
|
|
3155
|
+
const base = possMatch[1];
|
|
3156
|
+
suffix = possMatch[2];
|
|
3157
|
+
if (lookup.has(base)) rawVal = lookup.get(base);
|
|
3158
|
+
else if (lookup.has(base.toUpperCase())) rawVal = lookup.get(base.toUpperCase());
|
|
3159
|
+
}
|
|
3088
3160
|
}
|
|
3089
3161
|
}
|
|
3090
3162
|
if (rawVal !== null) {
|
package/server.json
CHANGED
|
@@ -6,12 +6,12 @@
|
|
|
6
6
|
"url": "https://github.com/moxno/privacyscrubber-mcp",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "2.3.
|
|
9
|
+
"version": "2.3.9",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"identifier": "@privacyscrubber/mcp-server",
|
|
14
|
-
"version": "2.3.
|
|
14
|
+
"version": "2.3.9",
|
|
15
15
|
"transport": {
|
|
16
16
|
"type": "stdio"
|
|
17
17
|
},
|
package/bundle.mcpb
DELETED
|
Binary file
|