@anonympins/fingerprint 0.3.0 → 0.3.2
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 +110 -4
- package/fingerprint.builder.js +6 -2
- package/fingerprint.client.js +76 -21
- package/fingerprint.client.obfuscated.js +1 -0
- package/fingerprint.js +3294 -3157
- package/library.js +2 -0
- package/package.json +11 -4
- package/pow.solver.inline.js +255 -0
- package/public/fp.wasm +0 -0
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|

|
|
6
6
|
[](https://github.com/anonympins/fingerprint/watchers)
|
|
7
7
|
|
|
8
|
-
An HTTP(S) client mitigation and anti-bot protection library for Node.js/Express, based on digital fingerprinting and dynamic Proof-of-Work (PoW) challenges.
|
|
8
|
+
An HTTP(S) client mitigation and anti-bot protection library for both PHP and Node.js/Express, based on digital fingerprinting and dynamic Proof-of-Work (PoW) challenges.
|
|
9
9
|
|
|
10
10
|
## How It Works
|
|
11
11
|
|
|
@@ -47,18 +47,105 @@ For API clients, the challenge is delivered as a `404` JSON response, and the cl
|
|
|
47
47
|
- **Timing Attack Protection**: Uses `crypto.timingSafeEqual` for secure validation of tickets and other signatures.
|
|
48
48
|
- **Bot Whitelisting**: Includes a DNS-based verification mechanism to reliably identify and whitelist legitimate crawlers like Googlebot and Bingbot, preventing them from being challenged. The results are cached for optimal performance.
|
|
49
49
|
- **Automatic Parameter Tuning**: Includes a genetic algorithm-based optimizer (`startThresholdAutoTuning`) that analyzes real traffic to dynamically adjust suspicion thresholds, weights, and behavioral pattern detection parameters, improving accuracy and reducing false positives over time. The tuner is hardened against data poisoning attempts.
|
|
50
|
+
- **Optional WASM Acceleration**: The client-side library can be accelerated with a WebAssembly module for high-performance hashing. The build process handles this optionally, and the client gracefully falls back to a pure JavaScript implementation if WASM is unavailable.
|
|
50
51
|
- **Hardened Security**: Protects against various attacks, including DoS via memory exhaustion, invalid nonce submission, and uses cryptographically secure randomness for all sensitive operations.
|
|
51
52
|
|
|
52
53
|
## Installation and Usage
|
|
53
54
|
|
|
54
|
-
This
|
|
55
|
+
This library is available for both **Node.js** and **PHP**.
|
|
56
|
+
|
|
57
|
+
* [PHP Quickstart](#php-quickstart)
|
|
58
|
+
* [Node.js Quickstart](#nodejs-quickstart)
|
|
55
59
|
|
|
56
60
|
### Prerequisites
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
* **PHP 7.4+**
|
|
63
|
+
* The **GMP** extension (`php-gmp`) is required for handling the large-integer arithmetic used in cryptographic challenges.
|
|
64
|
+
* **Composer** for package management.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
<a id="php-quickstart"></a>
|
|
69
|
+
|
|
70
|
+
## PHP Quickstart (Direct Integration)
|
|
71
|
+
|
|
72
|
+
This guide shows the simplest way to integrate the library into any PHP application, without requiring a framework. It interacts directly with PHP's native functions and superglobals.
|
|
73
|
+
|
|
74
|
+
### Prerequisites
|
|
75
|
+
|
|
76
|
+
* **PHP 7.4+**
|
|
77
|
+
* The **GMP** extension (`php-gmp`) is required for handling the large-integer arithmetic used in cryptographic challenges.
|
|
78
|
+
* **Composer** for package management.
|
|
79
|
+
|
|
80
|
+
### Installation
|
|
81
|
+
|
|
82
|
+
Install the main library via Composer:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
composer require anonympins/fingerprint
|
|
86
|
+
```
|
|
59
87
|
|
|
60
88
|
### Configuration
|
|
61
89
|
|
|
90
|
+
Define a secret key for signing Proof-of-Work tickets in your environment variables or your `.env` file. This is **required** for production environments.
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
POW_SECRET="your_secret_key_of_at_least_32_characters"
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Integration Example
|
|
97
|
+
|
|
98
|
+
This example shows how to protect an application's entry point (e.g., `index.php`) by calling the `protect()` method at the very beginning of your script.
|
|
99
|
+
|
|
100
|
+
```php
|
|
101
|
+
<?php
|
|
102
|
+
|
|
103
|
+
declare(strict_types=1);
|
|
104
|
+
|
|
105
|
+
require_once __DIR__ . '/vendor/autoload.php';
|
|
106
|
+
|
|
107
|
+
use Anonympins\Fingerprint\Config\SecurityProfiles;
|
|
108
|
+
use Anonympins\Fingerprint\DirectFingerprint;
|
|
109
|
+
|
|
110
|
+
// 1. Choose a security profile and customize it if necessary.
|
|
111
|
+
$securityConfig = SecurityProfiles::createSecurityProfile('balanced', [
|
|
112
|
+
// Enable verbose mode for development
|
|
113
|
+
'verbose' => true,
|
|
114
|
+
]);
|
|
115
|
+
|
|
116
|
+
// IMPORTANT: For PHP environments, TLS fingerprinting (JA3/JA4) requires a reverse proxy
|
|
117
|
+
// (like Nginx, HAProxy, or a cloud load balancer) to inspect the TLS handshake and
|
|
118
|
+
// pass the fingerprint hashes to the PHP application via HTTP headers
|
|
119
|
+
// (e.g., `X-JA3-Hash`, `X-JA4-Hash`).
|
|
120
|
+
|
|
121
|
+
// 2. Create an instance of the DirectFingerprint protector.
|
|
122
|
+
$protector = new DirectFingerprint($securityConfig);
|
|
123
|
+
|
|
124
|
+
// 3. Protect the script.
|
|
125
|
+
// This method will analyze the request. If it's suspicious, it will
|
|
126
|
+
// send a challenge or block response and then call `exit()`.
|
|
127
|
+
// If the request is allowed, it returns the fingerprint data.
|
|
128
|
+
$fingerprint = $protector->protect();
|
|
129
|
+
|
|
130
|
+
// --- If the script continues, the request was allowed ---
|
|
131
|
+
|
|
132
|
+
$score = $fingerprint['score'] ?? 0;
|
|
133
|
+
|
|
134
|
+
header('Content-Type: text/html; charset=utf-8');
|
|
135
|
+
echo "<h1>Welcome to the protected page!</h1>";
|
|
136
|
+
echo "<p>Your suspicion score was: " . round($score, 2) . "</p>";
|
|
137
|
+
|
|
138
|
+
?>
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
<a id="nodejs-quickstart"></a>
|
|
142
|
+
## NodeJS Configuration
|
|
143
|
+
|
|
144
|
+
### Prerequisites for Node.js
|
|
145
|
+
|
|
146
|
+
Ensure you have middleware for parsing cookies (like `cookie-parser`) and request bodies (like `express.json` and `express.urlencoded`) set up in your Express application *before* the `powMiddleware`.
|
|
147
|
+
|
|
148
|
+
### Configuration
|
|
62
149
|
Define a secret key for signing PoW tickets in your environment variables.
|
|
63
150
|
|
|
64
151
|
```bash
|
|
@@ -173,7 +260,7 @@ const securityConfig = {
|
|
|
173
260
|
},
|
|
174
261
|
cpu: {
|
|
175
262
|
minDifficultyBits: 8,
|
|
176
|
-
maxDifficultyBits:
|
|
263
|
+
maxDifficultyBits: 32,
|
|
177
264
|
},
|
|
178
265
|
// (Optional) Configure the duration (in milliseconds) for various temporary data.
|
|
179
266
|
ticketMaxAge: 3600000, // 1 hour. Duration for which a solved challenge ticket is valid.
|
|
@@ -250,6 +337,11 @@ const securityConfig = {
|
|
|
250
337
|
'/api/v1/webhooks/trusted-source', // Exact path
|
|
251
338
|
'/api/v2/public/*', // All paths starting with /api/v2/public/
|
|
252
339
|
]},
|
|
340
|
+
|
|
341
|
+
// Allows a specific GraphQL query and all mutations•
|
|
342
|
+
{type: 'graphql_operation_allowlist',entries: [
|
|
343
|
+
'query:GetPublicPosts',
|
|
344
|
+
'mutation:*']},
|
|
253
345
|
// Option 2: DNS-verified bots (e.g., search engine crawlers).
|
|
254
346
|
// This uses a secure DNS lookup (reverse then forward) to verify the bot's identity.
|
|
255
347
|
// The result is cached per IP to avoid repeated DNS lookups.
|
|
@@ -274,6 +366,10 @@ const securityConfig = {
|
|
|
274
366
|
enableUsefulWork: true,
|
|
275
367
|
usefulWorkConfigPath: './path/to/your/problems.config.json' // (Optional) Path to the useful work configuration.
|
|
276
368
|
};
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
// Create an instance of the middleware with your security configuration.
|
|
372
|
+
const powMiddlewareInstance = powMiddleware(securityConfig);
|
|
277
373
|
```
|
|
278
374
|
|
|
279
375
|
|
|
@@ -531,6 +627,11 @@ initializeClient({
|
|
|
531
627
|
// (Optional) An array of `name` attributes for hidden form fields that act as bot traps.
|
|
532
628
|
honeypots: ['email_confirm', 'user_nickname', 'website_url'],
|
|
533
629
|
|
|
630
|
+
// (Optional) Path to the WebAssembly loader script (`fp.js`) for accelerated hashing.
|
|
631
|
+
// If provided, the client will attempt to load the WASM module. If it fails or is not available,
|
|
632
|
+
// it will gracefully fall back to the pure JavaScript implementation.
|
|
633
|
+
wasmPath: '/fp.js',
|
|
634
|
+
|
|
534
635
|
// (Optional) Enables automatic protection for `fetch` requests.
|
|
535
636
|
// If the `fetch` object is present, the protection is active.
|
|
536
637
|
fetch: {
|
|
@@ -656,6 +757,11 @@ app.get('/api/problems/solutions', (req, res) => {
|
|
|
656
757
|
|
|
657
758
|
```
|
|
658
759
|
|
|
760
|
+
#### `getBestTuningSolution()`
|
|
761
|
+
|
|
762
|
+
Returns the last best solution object found by the auto-tuner. This is particularly useful for "FinOps" or for auditing the tuner's performance, as it allows you to log the exact configuration that the genetic algorithm identified as optimal.
|
|
763
|
+
|
|
764
|
+
* **Returns**: (`object|null`) The best solution object `{ solution, objectives }` or `null` if no tuning cycle has completed yet. The `solution` property contains the optimized `weights`, `thresholds`, and `patterns`, while `objectives` contains the performance scores (e.g., false positive/negative rates) for that solution.
|
|
659
765
|
|
|
660
766
|
#### `problemManager.updateProblemPayload(problemId, newPayload)`
|
|
661
767
|
|
package/fingerprint.builder.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Algorithme de hachage cyrb53 (rapide et faible taux de collision).
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
// Exporté pour être utilisé comme fallback par fingerprint.client.js
|
|
5
|
+
export const cyrb53 = (str, seed = 0) => {
|
|
5
6
|
let h1 = 0xdeadbeef ^ seed,
|
|
6
7
|
h2 = 0x41c6ce57 ^ seed;
|
|
7
8
|
for (let i = 0, ch; i < str.length; i++) {
|
|
@@ -24,7 +25,10 @@ export const cyrb53 = (str, seed = 0) => {
|
|
|
24
25
|
*/
|
|
25
26
|
export class FingerprintBuilder {
|
|
26
27
|
constructor() {
|
|
28
|
+
// Le hasher est maintenant une propriété pour pouvoir être surchargé par le client WASM.
|
|
27
29
|
this.components = new Map();
|
|
30
|
+
// FIX: Initialiser le hasher par défaut à l'implémentation JS.
|
|
31
|
+
this.hasher = cyrb53;
|
|
28
32
|
}
|
|
29
33
|
|
|
30
34
|
/**
|
|
@@ -35,7 +39,7 @@ export class FingerprintBuilder {
|
|
|
35
39
|
add(group, value) {
|
|
36
40
|
if (value === undefined || value === null) return this;
|
|
37
41
|
// On hash la valeur individuellement pour l'anonymiser et réduire sa taille
|
|
38
|
-
this.components.set(group,
|
|
42
|
+
this.components.set(group, this.hasher(String(value)));
|
|
39
43
|
return this;
|
|
40
44
|
}
|
|
41
45
|
|
package/fingerprint.client.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import { cyrb53, FingerprintBuilder } from './fingerprint.builder.js';
|
|
1
|
+
import { cyrb53 as jsCyrb53, FingerprintBuilder } from './fingerprint.builder.js';
|
|
2
2
|
import { solveChallenge } from './pow.solver.js';
|
|
3
3
|
|
|
4
|
+
// Variable pour stocker la fonction de hachage active.
|
|
5
|
+
// Par défaut, c'est l'implémentation JavaScript.
|
|
6
|
+
let activeCyrb53 = jsCyrb53;
|
|
7
|
+
|
|
4
8
|
const ClientLibrary = {
|
|
5
9
|
// Cache pour éviter de recalculer les constantes (Hardware, etc.)
|
|
6
10
|
_cachedBuilder: null,
|
|
11
|
+
/**
|
|
12
|
+
* Wrapper interne pour la fonction de hachage.
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
_hasher: (str, seed) => activeCyrb53(str, seed),
|
|
16
|
+
|
|
7
17
|
/**
|
|
8
18
|
* Génère l'empreinte de l'appareil actuel.
|
|
9
19
|
*/
|
|
@@ -12,7 +22,7 @@ const ClientLibrary = {
|
|
|
12
22
|
console.error("getDeviceFingerprint can only be called on the client-side.");
|
|
13
23
|
return "";
|
|
14
24
|
}
|
|
15
|
-
|
|
25
|
+
|
|
16
26
|
if (!this._cachedBuilder) {
|
|
17
27
|
const nav = window.navigator;
|
|
18
28
|
const screen = window.screen;
|
|
@@ -21,7 +31,7 @@ const ClientLibrary = {
|
|
|
21
31
|
|
|
22
32
|
// 1. Hardware (Très stable) : Cœurs, RAM, GPU (si dispo via canvas), Touch
|
|
23
33
|
this._cachedBuilder.add(
|
|
24
|
-
"hw",
|
|
34
|
+
"hw", // Utilise maintenant le hasher actif
|
|
25
35
|
`${nav.hardwareConcurrency}_${nav.deviceMemory}_${nav.maxTouchPoints}`,
|
|
26
36
|
);
|
|
27
37
|
|
|
@@ -111,7 +121,7 @@ const ClientLibrary = {
|
|
|
111
121
|
.sort()
|
|
112
122
|
.map((k) => `${k}=${payload[k]}`)
|
|
113
123
|
.join("&");
|
|
114
|
-
const payloadHash =
|
|
124
|
+
const payloadHash = this._hasher(sortedPayload);
|
|
115
125
|
return `${deviceFp}|req:${payloadHash}`;
|
|
116
126
|
},
|
|
117
127
|
|
|
@@ -138,6 +148,8 @@ const ClientLibrary = {
|
|
|
138
148
|
* Resets the cached fingerprint builder. Used for testing purposes.
|
|
139
149
|
*/
|
|
140
150
|
_resetCache() {
|
|
151
|
+
// Réinitialise le hasher à l'implémentation JS par défaut.
|
|
152
|
+
activeCyrb53 = jsCyrb53;
|
|
141
153
|
this._cachedBuilder = null;
|
|
142
154
|
},
|
|
143
155
|
|
|
@@ -345,7 +357,7 @@ const ClientLibrary = {
|
|
|
345
357
|
};
|
|
346
358
|
|
|
347
359
|
this.addFetchInterceptor(fingerprintInterceptor);
|
|
348
|
-
},
|
|
360
|
+
}, // <-- VIRGULE AJOUTÉE ICI
|
|
349
361
|
|
|
350
362
|
/**
|
|
351
363
|
* Intercepte une réponse de challenge JSON, le résout, et réessaie la requête.
|
|
@@ -388,18 +400,11 @@ const ClientLibrary = {
|
|
|
388
400
|
console.error('[Fingerprint] Failed to solve or retry challenge:', e);
|
|
389
401
|
return response; // Retourne la réponse 429 originale en cas d'échec
|
|
390
402
|
}
|
|
391
|
-
},
|
|
392
|
-
/**
|
|
393
|
-
* @typedef {object} ClientConfig
|
|
394
|
-
* @property {boolean} [mouse=true] - Activer le suivi de l'entropie de la souris.
|
|
395
|
-
* @property {boolean} [keystrokes=true] - Activer le suivi de la dynamique de frappe.
|
|
396
|
-
* @property {string[]} [honeypots] - Noms des champs de formulaire honeypot à initialiser.
|
|
397
|
-
* @property {object} [fetch] - Configuration pour l'interception de fetch.
|
|
398
|
-
* @property {string[]} [fetch.targetDomains] - Domaines à protéger. Si non fourni, protège les requêtes de même origine.
|
|
399
|
-
*/
|
|
403
|
+
}, // <-- VIRGULE AJOUTÉE ICI
|
|
400
404
|
|
|
401
405
|
/**
|
|
402
406
|
* Initialise toutes les protections côté client en une seule fois.
|
|
407
|
+
* Tente également de charger le module WASM si `wasmPath` est fourni.
|
|
403
408
|
* C'est la méthode d'initialisation recommandée.
|
|
404
409
|
* @param {ClientConfig} [config={}] - L'objet de configuration.
|
|
405
410
|
*/
|
|
@@ -408,9 +413,15 @@ const ClientLibrary = {
|
|
|
408
413
|
mouse = true,
|
|
409
414
|
keystrokes = true,
|
|
410
415
|
honeypots = [],
|
|
411
|
-
|
|
416
|
+
wasmPath, // Nouveau paramètre
|
|
417
|
+
fetch: fetchConfig = {}
|
|
412
418
|
} = config;
|
|
413
419
|
|
|
420
|
+
// Tentative de chargement du WASM si le chemin est fourni
|
|
421
|
+
if (wasmPath) {
|
|
422
|
+
this.initializeWasm(wasmPath);
|
|
423
|
+
}
|
|
424
|
+
|
|
414
425
|
if (mouse) {
|
|
415
426
|
this.startMouseEntropyTracker();
|
|
416
427
|
}
|
|
@@ -426,14 +437,57 @@ const ClientLibrary = {
|
|
|
426
437
|
|
|
427
438
|
// Ajoute l'intercepteur pour la résolution de challenge
|
|
428
439
|
if (fetchConfig.handleChallenges !== false) {
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
440
|
+
this.addFetchInterceptor(async (resource, options, next) => {
|
|
441
|
+
const originalResponse = await next(resource, options);
|
|
442
|
+
// On clone la réponse pour que la lecture du corps par solveChallengeAndRetry ne la consomme pas pour l'appelant original.
|
|
443
|
+
return this.solveChallengeAndRetry(originalResponse.clone(), resource, options);
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
},
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Tente de charger et d'initialiser le module WebAssembly pour un hachage plus rapide.
|
|
451
|
+
* Si le chargement échoue, il se rabat silencieusement sur l'implémentation JS.
|
|
452
|
+
* @param {string} wasmPath - Le chemin vers le script de chargement du module WASM (ex: '/fp.js').
|
|
453
|
+
*/
|
|
454
|
+
async initializeWasm(wasmPath) {
|
|
455
|
+
try {
|
|
456
|
+
// 1. Injecter le script qui charge le module WASM
|
|
457
|
+
const script = document.createElement('script');
|
|
458
|
+
script.src = wasmPath;
|
|
459
|
+
await new Promise((resolve, reject) => {
|
|
460
|
+
script.onload = resolve;
|
|
461
|
+
script.onerror = reject;
|
|
462
|
+
document.head.appendChild(script);
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
// 2. Attendre que la fonction globale `createFingerprintModule` soit disponible
|
|
466
|
+
if (typeof window.createFingerprintModule !== 'function') {
|
|
467
|
+
throw new Error('WASM loader script did not expose createFingerprintModule.');
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
// 3. Initialiser le module
|
|
471
|
+
const wasmModule = await window.createFingerprintModule();
|
|
472
|
+
if (typeof wasmModule._hash_string !== 'function') {
|
|
473
|
+
throw new Error('WASM module did not export _hash_string.');
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// 4. Remplacer la fonction de hachage par la version WASM
|
|
477
|
+
activeCyrb53 = (str) => {
|
|
478
|
+
// La fonction C++ attend un pointeur, Emscripten gère la conversion
|
|
479
|
+
return wasmModule._hash_string(str);
|
|
480
|
+
};
|
|
481
|
+
|
|
482
|
+
console.log('[Fingerprint] WASM module loaded successfully. Using fast hashing.');
|
|
483
|
+
// NOUVEAU: Ajoute un indicateur à l'empreinte pour que le serveur sache que le WASM est actif.
|
|
484
|
+
if (this._cachedBuilder) {
|
|
485
|
+
this._cachedBuilder.addRaw('wasm', 'true');
|
|
486
|
+
}
|
|
487
|
+
} catch (error) {
|
|
488
|
+
console.warn('[Fingerprint] WASM module failed to load. Falling back to JS implementation. Error:', error);
|
|
434
489
|
}
|
|
435
490
|
}
|
|
436
|
-
}
|
|
437
491
|
};
|
|
438
492
|
|
|
439
493
|
/**
|
|
@@ -477,6 +531,7 @@ export const addFetchInterceptor = ClientLibrary.addFetchInterceptor.bind(Client
|
|
|
477
531
|
export const patchGlobalFetch = ClientLibrary.patchGlobalFetch.bind(ClientLibrary);
|
|
478
532
|
export const initializeFetch = ClientLibrary.initializeFetch.bind(ClientLibrary);
|
|
479
533
|
export const initializeClient = ClientLibrary.initializeClient.bind(ClientLibrary);
|
|
534
|
+
export const initializeWasm = ClientLibrary.initializeWasm.bind(ClientLibrary);
|
|
480
535
|
export const solveChallengeAndRetry = ClientLibrary.solveChallengeAndRetry.bind(ClientLibrary);
|
|
481
536
|
|
|
482
537
|
// Export the internal object for testing purposes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const _0x36a6f6=_0x3ded;(function(_0xd469c7,_0x539490){const _0x2197dc=_0x3ded,_0x1c4904=_0xd469c7();while(!![]){try{const _0x5bb030=-parseInt(_0x2197dc(0x196))/0x1*(parseInt(_0x2197dc(0xc2))/0x2)+-parseInt(_0x2197dc(0xe0))/0x3+parseInt(_0x2197dc(0x199))/0x4*(parseInt(_0x2197dc(0x169))/0x5)+-parseInt(_0x2197dc(0xfd))/0x6+-parseInt(_0x2197dc(0x19c))/0x7+-parseInt(_0x2197dc(0x177))/0x8*(parseInt(_0x2197dc(0x12b))/0x9)+parseInt(_0x2197dc(0x10f))/0xa;if(_0x5bb030===_0x539490)break;else _0x1c4904['push'](_0x1c4904['shift']());}catch(_0x114096){_0x1c4904['push'](_0x1c4904['shift']());}}}(_0x1767,0x8b1d5));import{cyrb53,FingerprintBuilder}from'./fingerprint.builder.js';import{solveChallenge}from'./pow.solver.js';const ClientLibrary={'_cachedBuilder':null,'getDeviceFingerprint'(){const _0x1702f1=_0x3ded,_0x206c6={'cULNl':_0x1702f1(0xdf),'VzKMM':'#f60','pTLFs':'fingerprint','JhsGL':_0x1702f1(0x16d),'jFsJk':function(_0x3ae839,_0x3e3e21){return _0x3ae839>=_0x3e3e21;},'MOqXj':'X-Device-Fingerprint','HYzKb':_0x1702f1(0x174),'ShXUn':_0x1702f1(0x120),'fDyok':function(_0x1b1506,_0x2cb101){return _0x1b1506===_0x2cb101;},'JGbxj':_0x1702f1(0xbd),'QAfih':function(_0xb2c742,_0x2a9037){return _0xb2c742===_0x2a9037;},'ZPEDq':_0x1702f1(0x166),'CqBVe':_0x1702f1(0xdb),'ZJikv':_0x1702f1(0x195),'SMoNd':_0x1702f1(0x12d),'ludee':_0x1702f1(0x11d),'qEBDQ':_0x1702f1(0x18c),'DHlHG':function(_0x2648f4,_0x32ef13){return _0x2648f4!==_0x32ef13;},'poDMc':_0x1702f1(0x183),'GXVFN':_0x1702f1(0x151),'djlzo':_0x1702f1(0x110),'TpGlv':_0x1702f1(0x143),'Dszxr':'cvs','WFqZN':_0x1702f1(0x19b),'nmBda':_0x1702f1(0xce),'KhHvl':_0x1702f1(0xed),'GvfQC':_0x1702f1(0x14e),'FkIBk':'EAwSu','ozxdT':_0x1702f1(0xc6),'zMAjP':'true'};if(_0x206c6[_0x1702f1(0x113)](typeof window,_0x206c6[_0x1702f1(0x158)])){if(_0x206c6[_0x1702f1(0x112)](_0x1702f1(0x19d),_0x1702f1(0x19d)))return console[_0x1702f1(0xf2)](_0x206c6[_0x1702f1(0x129)]),'';else{const _0x58ba0a=_0x481887['createElement'](_0x1702f1(0xdb)),_0x21dd30=_0x58ba0a['getContext']('2d');if(_0x21dd30){const _0x5968d1=_0x206c6['cULNl']['split']('|');let _0x5e1339=0x0;while(!![]){switch(_0x5968d1[_0x5e1339++]){case'0':this[_0x1702f1(0xc7)]['add']('cvs',_0x58ba0a['toDataURL']());continue;case'1':_0x58ba0a['height']=0x32;continue;case'2':_0x21dd30[_0x1702f1(0x1a7)]='rgba(102,\x20204,\x200,\x200.7)';continue;case'3':_0x58ba0a[_0x1702f1(0x173)]=0xc8;continue;case'4':_0x21dd30['fillStyle']=_0x206c6[_0x1702f1(0x13a)];continue;case'5':_0x21dd30['fillStyle']='#069';continue;case'6':_0x21dd30[_0x1702f1(0x15e)](_0x1702f1(0x153),0x4,0x11);continue;case'7':_0x21dd30[_0x1702f1(0x1ae)]='alphabetic';continue;case'8':_0x21dd30[_0x1702f1(0x15e)](_0x206c6[_0x1702f1(0x19f)],0x2,0xf);continue;case'9':_0x21dd30[_0x1702f1(0x13b)]=_0x206c6[_0x1702f1(0x15b)];continue;case'10':_0x21dd30[_0x1702f1(0x132)](0x7d,0x1,0x3e,0x14);continue;}break;}}}}if(!this[_0x1702f1(0xc7)]){const _0x300990=window[_0x1702f1(0x172)],_0x223aa0=window[_0x1702f1(0x181)];this[_0x1702f1(0xc7)]=new FingerprintBuilder(),this['_cachedBuilder'][_0x1702f1(0xd9)]('hw',_0x300990[_0x1702f1(0x101)]+'_'+_0x300990[_0x1702f1(0x108)]+'_'+_0x300990[_0x1702f1(0x145)]),this[_0x1702f1(0xc7)]['add']('geo',Intl[_0x1702f1(0xe8)]()[_0x1702f1(0x16b)]()[_0x1702f1(0xff)]+'_'+_0x300990['language']+'_'+new Date()[_0x1702f1(0x123)]()),this[_0x1702f1(0xc7)][_0x1702f1(0xd9)](_0x1702f1(0x17b),_0x223aa0[_0x1702f1(0x173)]+'x'+_0x223aa0[_0x1702f1(0x19a)]+'_'+_0x223aa0['colorDepth']),this[_0x1702f1(0xc7)][_0x1702f1(0xd9)]('os',_0x300990[_0x1702f1(0x150)]);try{const _0x1821c6=document['createElement'](_0x206c6['CqBVe']),_0x15d87e=_0x1821c6[_0x1702f1(0x178)](_0x206c6[_0x1702f1(0x1a8)])||_0x1821c6[_0x1702f1(0x178)](_0x1702f1(0x176));if(_0x15d87e){const _0x1c97ce=_0x15d87e['getExtension'](_0x206c6[_0x1702f1(0xd6)]);if(_0x1c97ce){if(_0x206c6['fDyok'](_0x206c6[_0x1702f1(0x1a2)],_0x206c6[_0x1702f1(0x146)]))_0x206c6[_0x1702f1(0x180)](_0xde990b[_0x1702f1(0xf0)],_0x2a29f7)&&_0x49e695[_0x1702f1(0xf8)](),_0x9066e8[_0x1702f1(0x126)](_0x36aa17);else{const _0x226d11=_0x15d87e[_0x1702f1(0x106)](_0x1c97ce[_0x1702f1(0x133)]),_0x2693d4=_0x15d87e[_0x1702f1(0x106)](_0x1c97ce[_0x1702f1(0x131)]);this[_0x1702f1(0xc7)][_0x1702f1(0xd9)](_0x206c6[_0x1702f1(0xde)],_0x226d11+'_'+_0x2693d4);}}}}catch(_0x25780a){}try{const _0x229958=document[_0x1702f1(0x139)](_0x1702f1(0xdb)),_0x3630a7=_0x229958['getContext']('2d');if(_0x3630a7){if(_0x206c6[_0x1702f1(0x107)](_0x206c6['poDMc'],_0x206c6[_0x1702f1(0x11f)])){const _0x5b6782=this[_0x1702f1(0x13f)](),_0x3937e1=this['getClientBehaviorMetrics'](),_0x16c4d2=new _0x66fa7a(_0x289c58[_0x1702f1(0xc5)]||{});_0x16c4d2[_0x1702f1(0x105)](_0x206c6[_0x1702f1(0xd2)],_0x5b6782),_0x16c4d2['set'](_0x206c6['HYzKb'],_0x2b30c3['stringify'](_0x3937e1)),_0x259285[_0x1702f1(0xc5)]=_0x16c4d2;}else{const _0xbd617b=_0x206c6['GXVFN'][_0x1702f1(0xda)]('|');let _0x1f4bdc=0x0;while(!![]){switch(_0xbd617b[_0x1f4bdc++]){case'0':_0x229958[_0x1702f1(0x173)]=0xc8;continue;case'1':_0x3630a7[_0x1702f1(0x1a7)]=_0x206c6['djlzo'];continue;case'2':_0x3630a7[_0x1702f1(0x1a7)]=_0x206c6[_0x1702f1(0x13a)];continue;case'3':_0x3630a7['fillRect'](0x7d,0x1,0x3e,0x14);continue;case'4':_0x3630a7[_0x1702f1(0x13b)]=_0x206c6[_0x1702f1(0x15b)];continue;case'5':_0x3630a7[_0x1702f1(0x1ae)]=_0x1702f1(0xdc);continue;case'6':_0x3630a7[_0x1702f1(0x1a7)]=_0x206c6[_0x1702f1(0xc4)];continue;case'7':this[_0x1702f1(0xc7)][_0x1702f1(0xd9)](_0x206c6[_0x1702f1(0x148)],_0x229958[_0x1702f1(0x18d)]());continue;case'8':_0x3630a7['fillText'](_0x206c6[_0x1702f1(0x19f)],0x2,0xf);continue;case'9':_0x3630a7[_0x1702f1(0x15e)](_0x206c6['pTLFs'],0x4,0x11);continue;case'10':_0x229958[_0x1702f1(0x19a)]=0x32;continue;}break;}}}}catch(_0x221dd9){}const _0x30a162=[_0x206c6[_0x1702f1(0x179)],_0x206c6[_0x1702f1(0x116)],_0x1702f1(0x19e),_0x206c6[_0x1702f1(0x16c)],_0x1702f1(0xb9),_0x1702f1(0x16a)];if(_0x30a162[_0x1702f1(0xf5)](_0x1d0c81=>window[_0x1d0c81])){if(_0x206c6['GvfQC']===_0x206c6[_0x1702f1(0xfc)]){const _0x56bad4=_0xee0031[_0x1702f1(0x106)](_0x472262['UNMASKED_VENDOR_WEBGL']),_0x411c06=_0x44242a[_0x1702f1(0x106)](_0x2ec280[_0x1702f1(0x131)]);this[_0x1702f1(0xc7)]['add'](_0x206c6[_0x1702f1(0xde)],_0x56bad4+'_'+_0x411c06);}else this[_0x1702f1(0xc7)][_0x1702f1(0xd9)](_0x206c6[_0x1702f1(0xbe)],_0x1702f1(0x11a));}if(_0x300990['webdriver'])this[_0x1702f1(0xc7)][_0x1702f1(0xd9)](_0x1702f1(0xf4),_0x206c6[_0x1702f1(0x14b)]);}return this[_0x1702f1(0xc7)][_0x1702f1(0xeb)]();},'generateRequestSignature'(_0x1180f7={}){const _0x8684b8=_0x3ded,_0x279c8d={'WpxuB':function(_0x45c206,_0x741d5){return _0x45c206(_0x741d5);}},_0x1d0a00=this[_0x8684b8(0x13f)](),_0x5b4dfb=Object[_0x8684b8(0xd4)](_0x1180f7)['sort']()[_0x8684b8(0x147)](_0x177013=>_0x177013+'='+_0x1180f7[_0x177013])[_0x8684b8(0x135)]('&'),_0x1765cd=_0x279c8d['WpxuB'](cyrb53,_0x5b4dfb);return _0x1d0a00+_0x8684b8(0x1a4)+_0x1765cd;},async 'generateClientSideSignature'(_0x5665d4,_0x371982){const _0x5e4c38=_0x3ded,_0x5e8f0c={'pYzra':_0x5e4c38(0x1ad),'MzpqC':_0x5e4c38(0x17a),'Lfbdu':_0x5e4c38(0x1b1)},_0xb818af=Object[_0x5e4c38(0xd4)](_0x5665d4)[_0x5e4c38(0x1ac)]()[_0x5e4c38(0x147)](_0x326f6a=>_0x326f6a+'='+_0x5665d4[_0x326f6a])[_0x5e4c38(0x135)]('&'),_0x3c7b9a=new TextEncoder(),_0x19d9ac=await window[_0x5e4c38(0xfe)][_0x5e4c38(0x141)][_0x5e4c38(0xe4)]('raw',_0x3c7b9a[_0x5e4c38(0x102)](_0x371982),{'name':_0x5e8f0c['pYzra'],'hash':_0x5e8f0c['MzpqC']},![],[_0x5e8f0c[_0x5e4c38(0xbf)]]),_0x4a5a03=await window['crypto'][_0x5e4c38(0x141)][_0x5e4c38(0x1b1)](_0x5e8f0c[_0x5e4c38(0xd0)],_0x19d9ac,_0x3c7b9a[_0x5e4c38(0x102)](_0xb818af)),_0x5b56e0=Array[_0x5e4c38(0xc8)](new Uint8Array(_0x4a5a03));return _0x5b56e0[_0x5e4c38(0x147)](_0x44530e=>_0x44530e['toString'](0x10)[_0x5e4c38(0x170)](0x2,'0'))[_0x5e4c38(0x135)]('');},'_resetCache'(){this['_cachedBuilder']=null;},'startMouseEntropyTracker'(){const _0xae9632=_0x3ded,_0x51cc6f={'rkTpQ':function(_0x7cab8b,_0x6a2a96){return _0x7cab8b-_0x6a2a96;},'GxZbY':function(_0x1a2294,_0x15c55b){return _0x1a2294+_0x15c55b;},'iWuoK':function(_0x1b04e7,_0x51f681){return _0x1b04e7*_0x51f681;},'RCyvF':function(_0x1891eb,_0xacdbf4){return _0x1891eb>_0xacdbf4;},'HxpKP':_0xae9632(0x124)};if(_0x51cc6f[_0xae9632(0x122)](mouseMovements,0x0))return;document[_0xae9632(0x10b)](_0x51cc6f[_0xae9632(0xe9)],_0x8c9f0e=>{const _0x104cb7=_0xae9632,_0x48a436=_0x51cc6f[_0x104cb7(0x138)](_0x8c9f0e[_0x104cb7(0xba)],lastMousePos['x']),_0x46cb58=_0x8c9f0e[_0x104cb7(0x10e)]-lastMousePos['y'];metrics['mouseEntropy']+=Math['sqrt'](_0x51cc6f[_0x104cb7(0x164)](_0x51cc6f['iWuoK'](_0x48a436,_0x48a436),_0x51cc6f['iWuoK'](_0x46cb58,_0x46cb58))),lastMousePos={'x':_0x8c9f0e[_0x104cb7(0xba)],'y':_0x8c9f0e[_0x104cb7(0x10e)]},mouseMovements++;},{'passive':!![]});},'startKeystrokeDynamicsTracker'(){const _0xa8e5ff=_0x3ded,_0x5175cd={'oIsdC':_0xa8e5ff(0x17c),'txqnf':_0xa8e5ff(0x12e),'ZlsIY':function(_0xaa5cc6,_0x57dc36){return _0xaa5cc6(_0x57dc36);},'yNuZu':function(_0x4c1a54,_0x54254a){return _0x4c1a54!==_0x54254a;},'OYscH':'fDYPp','hcXeO':_0xa8e5ff(0xe5),'UdOnC':'OyjRb','KKGAj':function(_0x307c99,_0x12c84a){return _0x307c99-_0x12c84a;},'HRdIX':function(_0xb42a20,_0x3302f7){return _0xb42a20>_0x3302f7;},'BNjZr':function(_0x5f5c5a,_0x54922f){return _0x5f5c5a<_0x54922f;},'HXQvR':function(_0x194cef,_0x455f39){return _0x194cef>=_0x455f39;},'ramfw':_0xa8e5ff(0x168),'gQdCY':function(_0x20f07d,_0x5d14ab,_0x188c41){return _0x20f07d(_0x5d14ab,_0x188c41);},'mAqrf':function(_0x51bacc){return _0x51bacc();},'snkJf':_0xa8e5ff(0x186)},_0x435c1c=(function(){const _0x576dd2=_0xa8e5ff,_0x581866={'eIiyn':_0x5175cd[_0x576dd2(0xdd)]};if(_0x576dd2(0xd7)!==_0x5175cd['txqnf']){let _0x2e5b43=!![];return function(_0x1c4d6a,_0x5bae42){const _0x4fd58b=_0x2e5b43?function(){const _0x37611d=_0x3ded;if(_0x5bae42){const _0x2dc7f6=_0x5bae42[_0x37611d(0x136)](_0x1c4d6a,arguments);return _0x5bae42=null,_0x2dc7f6;}}:function(){};return _0x2e5b43=![],_0x4fd58b;};}else{const _0x579cbf={'ptAtp':_0x581866[_0x576dd2(0x191)]},_0x49d16c=()=>{const _0x294d3e=_0x576dd2;this[_0x294d3e(0xea)](),_0x29ff90['removeEventListener'](_0x579cbf[_0x294d3e(0xcd)],_0x49d16c);};_0x4658c4[_0x576dd2(0x10b)](_0x581866['eIiyn'],_0x49d16c),_0x584f07[_0x576dd2(0x105)](_0x4456f6,_0x49d16c);}}()),_0x57fa1d=_0x5175cd[_0xa8e5ff(0x194)](_0x435c1c,this,function(){const _0x47e248=_0xa8e5ff,_0x4b4721={'Terov':function(_0x1984cc,_0x2d8d7a){const _0x3dc872=_0x3ded;return _0x5175cd[_0x3dc872(0x17e)](_0x1984cc,_0x2d8d7a);}};if(_0x5175cd['yNuZu']('fDYPp',_0x5175cd[_0x47e248(0x111)])){const _0x527a92=this[_0x47e248(0x13f)](),_0x3ab7d5=_0x247f84[_0x47e248(0xd4)](_0x4e74c4)['sort']()[_0x47e248(0x147)](_0x3507a2=>_0x3507a2+'='+_0x44b23a[_0x3507a2])[_0x47e248(0x135)]('&'),_0x1700f0=_0x4b4721[_0x47e248(0x18e)](_0x6bcbd3,_0x3ab7d5);return _0x527a92+_0x47e248(0x1a4)+_0x1700f0;}else return _0x57fa1d[_0x47e248(0xeb)]()[_0x47e248(0x190)](_0x47e248(0xe5))[_0x47e248(0xeb)]()['constructor'](_0x57fa1d)[_0x47e248(0x190)](_0x5175cd[_0x47e248(0x156)]);});_0x5175cd['mAqrf'](_0x57fa1d);if(_0x5175cd[_0xa8e5ff(0x103)](keystrokeTimestamps['length'],0x0))return;document['addEventListener'](_0x5175cd[_0xa8e5ff(0x1b0)],()=>{const _0x4d368f=_0xa8e5ff,_0x51af92={'uOEag':_0x5175cd[_0x4d368f(0xdd)]};if(_0x4d368f(0x1a5)===_0x5175cd[_0x4d368f(0xee)]){const _0x5079a4=performance[_0x4d368f(0xfa)]();if(keystrokeTimestamps[_0x4d368f(0xf0)]>0x0){const _0x1d5744=keystrokeTimestamps[keystrokeTimestamps[_0x4d368f(0xf0)]-0x1],_0xc534b9=_0x5175cd[_0x4d368f(0x159)](_0x5079a4,_0x1d5744);if(_0x5175cd[_0x4d368f(0x103)](_0xc534b9,0xa)&&_0x5175cd[_0x4d368f(0xd8)](_0xc534b9,0x7d0)){if(_0x5175cd['HXQvR'](keystrokeLatencies['length'],KEYSTROKE_HISTORY_MAX)){if(_0x4d368f(0x14d)!==_0x5175cd['ramfw'])keystrokeLatencies[_0x4d368f(0xf8)]();else{const _0x460e78={'byRYW':_0x51af92[_0x4d368f(0x157)]},_0x2288ab=_0xdf36d7['querySelector']('[name=\x22'+_0x1cc580+'\x22]');if(_0x2288ab){const _0xca8edb=()=>{const _0x3f4dc1=_0x4d368f;this[_0x3f4dc1(0xea)](),_0x2288ab[_0x3f4dc1(0x104)](_0x460e78['byRYW'],_0xca8edb);};_0x2288ab[_0x4d368f(0x10b)](_0x51af92[_0x4d368f(0x157)],_0xca8edb),_0x397ad[_0x4d368f(0x105)](_0x2288ab,_0xca8edb);}}}keystrokeLatencies[_0x4d368f(0x126)](_0xc534b9);}}keystrokeTimestamps['push'](_0x5079a4);}else{const _0x23ee1e=_0x82bc67[_0x4d368f(0x136)](_0x3be78d,arguments);return _0x3cbb8e=null,_0x23ee1e;}},{'passive':!![]});},'initializeHoneypots'(_0x38af96){const _0x3615f0=_0x3ded,_0x4b9490={'eOvPm':_0x3615f0(0x17c),'cMRwi':function(_0x37f550,_0x522001){return _0x37f550-_0x522001;},'wRwUh':function(_0xf484d8,_0x2d0b0f){return _0xf484d8>_0x2d0b0f;},'aoQcr':function(_0x56c98d,_0x3517ad){return _0x56c98d<_0x3517ad;},'xYzDE':function(_0xd8487d,_0x2760a4){return _0xd8487d>=_0x2760a4;},'JHxNo':function(_0x144045,_0x1b5cb4){return _0x144045===_0x1b5cb4;},'nRoBi':function(_0x32761b,_0x58d597){return _0x32761b!==_0x58d597;},'cAdGH':_0x3615f0(0x18b),'GBdER':_0x3615f0(0xe6)};activeHoneypotListeners[_0x3615f0(0xf3)]((_0x125440,_0x5da119)=>{const _0x593db4=_0x3615f0;_0x5da119[_0x593db4(0x104)](_0x4b9490['eOvPm'],_0x125440);}),activeHoneypotListeners[_0x3615f0(0xd5)](),_0x38af96['forEach'](_0x78c4b1=>{const _0x3b6e43=_0x3615f0;if(_0x4b9490['nRoBi']('ZaxJn',_0x4b9490[_0x3b6e43(0x10d)])){const _0x1c5859=document[_0x3b6e43(0xe2)](_0x3b6e43(0xcf)+_0x78c4b1+'\x22]');if(_0x1c5859){if(_0x4b9490['JHxNo'](_0x4b9490[_0x3b6e43(0x149)],_0x3b6e43(0x117))){const _0x342922=_0x37e127[_0x4b9490['cMRwi'](_0xe176fc[_0x3b6e43(0xf0)],0x1)],_0x269156=_0x3fa204-_0x342922;_0x4b9490[_0x3b6e43(0x15f)](_0x269156,0xa)&&_0x4b9490[_0x3b6e43(0x125)](_0x269156,0x7d0)&&(_0x4b9490[_0x3b6e43(0x163)](_0x2ad3ec[_0x3b6e43(0xf0)],_0x21fc3c)&&_0x26a006[_0x3b6e43(0xf8)](),_0x47356e[_0x3b6e43(0x126)](_0x269156));}else{const _0x1c65a5=()=>{const _0x9b08f1=_0x3b6e43;this[_0x9b08f1(0xea)](),_0x1c5859['removeEventListener'](_0x4b9490[_0x9b08f1(0x1b3)],_0x1c65a5);};_0x1c5859[_0x3b6e43(0x10b)](_0x4b9490[_0x3b6e43(0x1b3)],_0x1c65a5),activeHoneypotListeners[_0x3b6e43(0x105)](_0x1c5859,_0x1c65a5);}}}else{const _0xa3923d=new _0x995f19(_0x2eab39,_0x3a553a['location'][_0x3b6e43(0x197)]);_0x251a94=_0x4b9490['JHxNo'](_0x5496a7[_0x3b6e43(0xf0)],0x0)&&_0xa3923d[_0x3b6e43(0x197)]===_0x4cb449[_0x3b6e43(0xc0)][_0x3b6e43(0x197)]||_0x4ffd9d[_0x3b6e43(0xf0)]>0x0&&_0x581ac4[_0x3b6e43(0xbc)](_0xa3923d[_0x3b6e43(0xbb)]);}});},'getClientBehaviorMetrics'(){const _0x5c6f56=_0x3ded,_0x563708={'iNHgS':function(_0x4a5f74,_0x115b16){return _0x4a5f74>_0x115b16;}};metrics[_0x5c6f56(0xca)]=window[_0x5c6f56(0x1a0)][_0x5c6f56(0xf0)],metrics['clientTimestamp']=Date[_0x5c6f56(0xfa)]();mouseMovements>0xa&&(metrics[_0x5c6f56(0x192)]/=mouseMovements);if(_0x563708[_0x5c6f56(0x160)](keystrokeLatencies[_0x5c6f56(0xf0)],0x0)){const _0x1b599c=keystrokeLatencies[_0x5c6f56(0x198)]((_0x20ee4b,_0x3a2f2e)=>_0x20ee4b+_0x3a2f2e,0x0);metrics['keystrokeLatency']=_0x1b599c/keystrokeLatencies[_0x5c6f56(0xf0)];}else metrics[_0x5c6f56(0x1af)]=0x0;return metrics;},async 'protectedFetch'(_0x104340,_0x2f3494={}){const _0x223ade=_0x3ded,_0x1d10d5={'pWtnC':_0x223ade(0x12a),'lRhQp':_0x223ade(0x174),'JiTog':function(_0xd1cc16,_0x33e6ff,_0x11a3e2){return _0xd1cc16(_0x33e6ff,_0x11a3e2);}},_0x146be5=this[_0x223ade(0x13f)](),_0x34fc70=this[_0x223ade(0x114)](),_0x3501e3=new Headers(_0x2f3494[_0x223ade(0xc5)]||{});return _0x3501e3[_0x223ade(0x105)](_0x1d10d5['pWtnC'],_0x146be5),_0x3501e3[_0x223ade(0x105)](_0x1d10d5[_0x223ade(0x1aa)],JSON[_0x223ade(0x1b5)](_0x34fc70)),_0x2f3494[_0x223ade(0xc5)]=_0x3501e3,_0x1d10d5[_0x223ade(0x134)](fetch,_0x104340,_0x2f3494);},'_isFetchPatched':![],'_interceptorChain':[],'_originalFetch':typeof window!==_0x36a6f6(0xbd)?window[_0x36a6f6(0x13c)]['bind'](window):null,'addFetchInterceptor'(_0x41b1d2){const _0x59f2a9=_0x36a6f6,_0x2779aa={'AyNQw':function(_0xfc14cc,_0x59f3c4){return _0xfc14cc/_0x59f3c4;},'AqkYz':function(_0x4632b9,_0xa2e9ad){return _0x4632b9!==_0xa2e9ad;},'WCWAr':_0x59f2a9(0x18f)};if(!this[_0x59f2a9(0x189)]){if(_0x2779aa[_0x59f2a9(0x100)](_0x2779aa[_0x59f2a9(0x1a1)],_0x2779aa[_0x59f2a9(0x1a1)])){const _0x405dc9=_0x190df9[_0x59f2a9(0x198)]((_0x23d6ab,_0x43ece3)=>_0x23d6ab+_0x43ece3,0x0);_0x34e6f3['keystrokeLatency']=_0x2779aa['AyNQw'](_0x405dc9,_0x4769a8['length']);}else this['patchGlobalFetch']();}this[_0x59f2a9(0x1b2)][_0x59f2a9(0x126)](_0x41b1d2);},'patchGlobalFetch'(){const _0x22379c=_0x36a6f6,_0x277059={'tRGaB':function(_0x174ebc,_0x67a0f5){return _0x174ebc>=_0x67a0f5;},'rKOdc':function(_0x116041,_0x4252f7,_0x35b5a4,_0x1746ca){return _0x116041(_0x4252f7,_0x35b5a4,_0x1746ca);}};if(this[_0x22379c(0x189)]||!this['_originalFetch'])return;this[_0x22379c(0x189)]=!![],window['fetch']=(_0x311504,_0xaeb635)=>{const _0x38abba={'YvudY':function(_0x74a0bb,_0x5ee561){return _0x277059['tRGaB'](_0x74a0bb,_0x5ee561);}},_0x142513=(_0x46f9ce,_0x1f092b,_0x8b6bb0)=>{const _0x265faf=_0x3ded;if(_0x265faf(0x171)!==_0x265faf(0x171))return _0x4e26e9;else{if(_0x38abba[_0x265faf(0xef)](_0x46f9ce,this[_0x265faf(0x1b2)][_0x265faf(0xf0)]))return this[_0x265faf(0x121)](_0x1f092b,_0x8b6bb0);const _0x2a465d=this[_0x265faf(0x1b2)][_0x46f9ce];return _0x2a465d(_0x1f092b,_0x8b6bb0,(_0x2cb4c4,_0x40009d)=>_0x142513(_0x46f9ce+0x1,_0x2cb4c4,_0x40009d));}};return _0x277059['rKOdc'](_0x142513,0x0,_0x311504,_0xaeb635||{});};},'onHoneypotTrigger':()=>{const _0x1d73a4=_0x36a6f6;metrics[_0x1d73a4(0xc9)]=!![];},'initializeFetch'(_0x3dced7=[]){const _0x1c9fa1=_0x36a6f6,_0x1e25d9={'YXoZg':function(_0x1d7822,_0xd61bd5){return _0x1d7822 instanceof _0xd61bd5;},'Qvuua':function(_0x5cc6c1,_0x13b050){return _0x5cc6c1(_0x13b050);},'fVaTy':function(_0x3aaec6,_0x1b5392){return _0x3aaec6===_0x1b5392;},'CYnzE':_0x1c9fa1(0xf7),'mUHdh':function(_0x59a2c5,_0x538ce6){return _0x59a2c5>_0x538ce6;},'Gmuxa':'IJmIH','KHsWw':'ydgth','QVMhW':_0x1c9fa1(0x12a),'rAruj':_0x1c9fa1(0x174),'ChSmn':function(_0x250ad1,_0x35d9f3,_0x22661e){return _0x250ad1(_0x35d9f3,_0x22661e);}},_0x3256a1=(_0x4d6751,_0x4fa0fa,_0x307d40)=>{const _0x39aeac=_0x1c9fa1,_0x46bc12=_0x1e25d9['YXoZg'](_0x4d6751,Request)?_0x4d6751[_0x39aeac(0x130)]:_0x1e25d9[_0x39aeac(0x15c)](String,_0x4d6751);let _0x2ac23c=![];try{if(_0x1e25d9[_0x39aeac(0xf6)]('BVAiO',_0x1e25d9[_0x39aeac(0x11c)])){const _0x43f67b=new URL(_0x46bc12,window[_0x39aeac(0xc0)]['origin']);_0x2ac23c=_0x1e25d9[_0x39aeac(0xf6)](_0x3dced7['length'],0x0)&&_0x1e25d9[_0x39aeac(0xf6)](_0x43f67b[_0x39aeac(0x197)],window[_0x39aeac(0xc0)][_0x39aeac(0x197)])||_0x1e25d9[_0x39aeac(0x18a)](_0x3dced7[_0x39aeac(0xf0)],0x0)&&_0x3dced7[_0x39aeac(0xbc)](_0x43f67b[_0x39aeac(0xbb)]);}else this['initializeHoneypots'](_0x2512a3);}catch(_0x57ba87){_0x2ac23c=_0x1e25d9[_0x39aeac(0xf6)](_0x3dced7[_0x39aeac(0xf0)],0x0);}if(_0x2ac23c){if(_0x1e25d9[_0x39aeac(0xe7)]===_0x1e25d9[_0x39aeac(0x10c)])this[_0x39aeac(0x167)]();else{const _0x34f4ff=this[_0x39aeac(0x13f)](),_0x439212=this['getClientBehaviorMetrics'](),_0x149c69=new Headers(_0x4fa0fa[_0x39aeac(0xc5)]||{});_0x149c69['set'](_0x1e25d9['QVMhW'],_0x34f4ff),_0x149c69['set'](_0x1e25d9[_0x39aeac(0xf9)],JSON[_0x39aeac(0x1b5)](_0x439212)),_0x4fa0fa['headers']=_0x149c69;}}return _0x1e25d9['ChSmn'](_0x307d40,_0x4d6751,_0x4fa0fa);};this[_0x1c9fa1(0x184)](_0x3256a1);},async 'solveChallengeAndRetry'(_0x2bcd0a,_0x284668,_0x6c3172){const _0x1fbfe9=_0x36a6f6,_0x21a2db={'cVQko':function(_0x5e6358,_0x2e04f0){return _0x5e6358-_0x2e04f0;},'uKCPd':function(_0x555fca,_0x1bda17){return _0x555fca*_0x1bda17;},'NlgVf':function(_0x40eb1b,_0x3b9c5c){return _0x40eb1b*_0x3b9c5c;},'agdJu':function(_0x4cd42c,_0x45e984){return _0x4cd42c>_0x45e984;},'gpaBr':function(_0xa94376,_0x47d2a8){return _0xa94376!==_0x47d2a8;},'KcCeo':'content-type','IYYFp':_0x1fbfe9(0x14a),'cdHXx':_0x1fbfe9(0x15d),'ItacQ':function(_0x886911,_0x46dc84){return _0x886911===_0x46dc84;},'VGHub':_0x1fbfe9(0x1b4),'WDaIb':_0x1fbfe9(0xe3),'vXXJR':function(_0x4daea7,_0x2ef7d5,_0x39a513){return _0x4daea7(_0x2ef7d5,_0x39a513);},'mANcj':function(_0x43ac22,_0x5b8d49){return _0x43ac22 instanceof _0x5b8d49;},'VNNHB':function(_0x2bc73d,_0xad755a){return _0x2bc73d(_0xad755a);},'VZbQj':_0x1fbfe9(0x144),'NYHdH':_0x1fbfe9(0x118),'dllUH':_0x1fbfe9(0x140)};if(_0x21a2db[_0x1fbfe9(0x193)](_0x2bcd0a[_0x1fbfe9(0x185)],0x194)||!_0x2bcd0a[_0x1fbfe9(0xc5)][_0x1fbfe9(0x165)](_0x21a2db[_0x1fbfe9(0x11e)])?.[_0x1fbfe9(0xbc)](_0x1fbfe9(0x187))||_0x2bcd0a['bodyUsed'])return _0x21a2db[_0x1fbfe9(0x14f)]===_0x21a2db[_0x1fbfe9(0x12c)]?this['_originalFetch'](_0x3fd899,_0x193ad3):_0x2bcd0a;try{if(_0x21a2db['ItacQ'](_0x21a2db[_0x1fbfe9(0x109)],_0x21a2db[_0x1fbfe9(0xe1)])){if(_0x21a2db[_0x1fbfe9(0x188)](_0x477685,0x0))return;_0xf6df71[_0x1fbfe9(0x10b)](_0x1fbfe9(0x124),_0x5875e9=>{const _0x29ef7c=_0x1fbfe9,_0x4993e5=_0x21a2db[_0x29ef7c(0x11b)](_0x5875e9[_0x29ef7c(0xba)],_0x28ce6d['x']),_0xeb7a91=_0x5875e9['clientY']-_0x245ce6['y'];_0x235c50[_0x29ef7c(0x192)]+=_0x58e3a6[_0x29ef7c(0x16f)](_0x21a2db[_0x29ef7c(0xd3)](_0x4993e5,_0x4993e5)+_0x21a2db[_0x29ef7c(0x16e)](_0xeb7a91,_0xeb7a91)),_0xe121a0={'x':_0x5875e9['clientX'],'y':_0x5875e9[_0x29ef7c(0x10e)]},_0x127925++;},{'passive':!![]});}else{const _0x3ea42b=await _0x2bcd0a[_0x1fbfe9(0x127)]();if(!_0x3ea42b['challenge']||!_0x3ea42b[_0x1fbfe9(0x115)][_0x1fbfe9(0xd1)])return _0x2bcd0a;console[_0x1fbfe9(0x1a9)]('[Fingerprint]\x20Received\x20a\x20\x27'+_0x3ea42b[_0x1fbfe9(0x115)][_0x1fbfe9(0xd1)]+_0x1fbfe9(0x155));const _0x4b9e05=this[_0x1fbfe9(0x13f)](),_0x2cddff=await _0x21a2db[_0x1fbfe9(0x137)](solveChallenge,_0x3ea42b['challenge'],_0x4b9e05);console[_0x1fbfe9(0x1a9)](_0x1fbfe9(0x17f));const _0x1cc16d=new URL(_0x21a2db[_0x1fbfe9(0x10a)](_0x284668,Request)?_0x284668[_0x1fbfe9(0x130)]:_0x21a2db[_0x1fbfe9(0xec)](String,_0x284668),window[_0x1fbfe9(0xc0)][_0x1fbfe9(0x197)]);return _0x2cddff[_0x1fbfe9(0x17d)](_0x1cc16d),_0x1cc16d[_0x1fbfe9(0x152)][_0x1fbfe9(0x105)](_0x21a2db[_0x1fbfe9(0xf1)],_0x4b9e05),window[_0x1fbfe9(0x13c)](_0x1cc16d[_0x1fbfe9(0xeb)](),_0x6c3172);}}catch(_0x52bae4){if(_0x21a2db[_0x1fbfe9(0x128)]===_0x21a2db['NYHdH'])return console[_0x1fbfe9(0xf2)](_0x21a2db[_0x1fbfe9(0x162)],_0x52bae4),_0x2bcd0a;else this[_0x1fbfe9(0xc7)]=null;}},'initializeClient'(_0x35b617={}){const _0x19a0aa=_0x36a6f6,_0x8af965={'vHzym':function(_0x227008,_0x2a50c2){return _0x227008-_0x2a50c2;},'CvUOR':function(_0x38f3bf,_0x30ad7b){return _0x38f3bf*_0x30ad7b;},'dKjPU':function(_0x4f834c,_0x289ff8){return _0x4f834c*_0x289ff8;},'vlAgr':function(_0x934015,_0x23301f){return _0x934015===_0x23301f;},'uJKrU':_0x19a0aa(0x12f),'FtQJh':function(_0x1380dc,_0x3f2018){return _0x1380dc>_0x3f2018;},'pvjwl':function(_0x4c20fe,_0x2a4b7f){return _0x4c20fe!==_0x2a4b7f;}},{mouse:mouse=!![],keystrokes:keystrokes=!![],honeypots:honeypots=[],fetch:_0x27a2cc={}}=_0x35b617;if(mouse){if(_0x8af965[_0x19a0aa(0x13d)](_0x8af965[_0x19a0aa(0x15a)],_0x8af965['uJKrU']))this[_0x19a0aa(0x167)]();else{const _0x84b29f=_0x8af965[_0x19a0aa(0x1ab)](_0x3172ec[_0x19a0aa(0xba)],_0x4a322a['x']),_0x4ab7a6=_0x31b599['clientY']-_0x479cac['y'];_0xcbd86f['mouseEntropy']+=_0x560864['sqrt'](_0x8af965[_0x19a0aa(0xfb)](_0x84b29f,_0x84b29f)+_0x8af965['dKjPU'](_0x4ab7a6,_0x4ab7a6)),_0x28dbe9={'x':_0x580d32['clientX'],'y':_0x26c274[_0x19a0aa(0x10e)]},_0x59886f++;}}keystrokes&&this['startKeystrokeDynamicsTracker'](),_0x8af965['FtQJh'](honeypots[_0x19a0aa(0xf0)],0x0)&&this[_0x19a0aa(0x161)](honeypots),_0x35b617[_0x19a0aa(0x13c)]&&(this[_0x19a0aa(0xcb)](_0x27a2cc[_0x19a0aa(0x175)]),_0x8af965['pvjwl'](_0x27a2cc[_0x19a0aa(0x142)],![])&&this[_0x19a0aa(0x184)](async(_0x3a3d2f,_0x1424f6,_0x5a499c)=>{const _0x4d43b6=_0x19a0aa,_0xf9a29e=await _0x5a499c(_0x3a3d2f,_0x1424f6);return this[_0x4d43b6(0x182)](_0xf9a29e[_0x4d43b6(0x13e)](),_0x3a3d2f,_0x1424f6);}));}},metrics={'mouseEntropy':0x0,'keystrokeLatency':0x0,'honeypotInteraction':![],'historyLength':0x0,'clientTimestamp':0x0};let lastMousePos={'x':0x0,'y':0x0},mouseMovements=0x0,activeHoneypotListeners=new Map(),keystrokeTimestamps=[],keystrokeLatencies=[];const KEYSTROKE_HISTORY_MAX=0x14;export const getDeviceFingerprint=ClientLibrary[_0x36a6f6(0x13f)][_0x36a6f6(0x119)](ClientLibrary);function _0x1767(){const _0x20c082=['UNMASKED_VENDOR_WEBGL','JiTog','join','apply','vXXJR','rkTpQ','createElement','VzKMM','font','fetch','vlAgr','clone','getDeviceFingerprint','[Fingerprint]\x20Failed\x20to\x20solve\x20or\x20retry\x20challenge:','subtle','handleChallenges','#069','pow_fp','maxTouchPoints','qEBDQ','map','Dszxr','GBdER','mhwig','zMAjP','initializeClient','aDlMf','cQCyS','IYYFp','platform','0|10|5|4|2|3|6|8|1|9|7','searchParams','fingerprint','_resetCache','\x27\x20challenge.\x20Solving...','hcXeO','uOEag','JGbxj','KKGAj','uJKrU','JhsGL','Qvuua','MRvYz','fillText','wRwUh','iNHgS','initializeHoneypots','dllUH','xYzDE','GxZbY','get','getDeviceFingerprint\x20can\x20only\x20be\x20called\x20on\x20the\x20client-side.','startMouseEntropyTracker','LmYoK','120395WhoYZQ','_driver','resolvedOptions','KhHvl','14px\x20\x27Arial\x27','NlgVf','sqrt','padStart','xUITl','navigator','width','X-Behavior-Metrics','targetDomains','experimental-webgl','1352CdlXSJ','getContext','WFqZN','SHA-256','scr','input','applyToUrl','ZlsIY','[Fingerprint]\x20Challenge\x20solved.\x20Retrying\x20original\x20request.','jFsJk','screen','solveChallengeAndRetry','xTTVb','addFetchInterceptor','status','keydown','application/json','agdJu','_isFetchPatched','mUHdh','vWZLU','mgWxo','toDataURL','Terov','Ykgxe','search','eIiyn','mouseEntropy','gpaBr','gQdCY','webgl','10eyGeAs','origin','reduce','176YjTYXP','height','cdc_adoQpoasnfa76pfcZLmcfl_Array','6244546XLbLyq','yXqIF','cdc_adoQpoasnfa76pfcZLmcfl_Symbol','pTLFs','history','WCWAr','ludee','generateRequestSignature','|req:','OyjRb','startKeystrokeDynamicsTracker','fillStyle','ZJikv','log','lRhQp','vHzym','sort','HMAC','textBaseline','keystrokeLatency','snkJf','sign','_interceptorChain','eOvPm','AWJWN','stringify','_selenium','clientX','hostname','includes','undefined','ozxdT','Lfbdu','location','patchGlobalFetch','31542WwhuGF','protectedFetch','TpGlv','headers','cdp','_cachedBuilder','from','honeypotInteraction','historyLength','initializeFetch','generateClientSideSignature','ptAtp','cdc_adoQpoasnfa76pfcZLmcfl_Promise','[name=\x22','pYzra','type','MOqXj','uKCPd','keys','clear','SMoNd','Vnazq','BNjZr','add','split','canvas','alphabetic','oIsdC','ShXUn','3|1|7|9|4|10|5|8|2|6|0','1961460AEuuXZ','WDaIb','querySelector','lAELe','importKey','(((.+)+)+)+$','ccdCX','Gmuxa','DateTimeFormat','HxpKP','onHoneypotTrigger','toString','VNNHB','$cdc_asdjflasutopfhvcZLmcfl_','UdOnC','YvudY','length','VZbQj','error','forEach','bot','some','fVaTy','BVAiO','shift','rAruj','now','CvUOR','FkIBk','372372oQtIgx','crypto','timeZone','AqkYz','hardwareConcurrency','encode','HRdIX','removeEventListener','set','getParameter','DHlHG','deviceMemory','VGHub','mANcj','addEventListener','KHsWw','cAdGH','clientY','19041800GtNTdO','rgba(102,\x20204,\x200,\x200.7)','OYscH','QAfih','fDyok','getClientBehaviorMetrics','challenge','nmBda','jfMws','upqeG','bind','true','cVQko','CYnzE','YpqFG','KcCeo','poDMc','gpu','_originalFetch','RCyvF','getTimezoneOffset','mousemove','aoQcr','push','json','NYHdH','ZPEDq','X-Device-Fingerprint','33453ROjroP','cdHXx','WEBGL_debug_renderer_info','lowDB','chiNc','url','UNMASKED_RENDERER_WEBGL','fillRect'];_0x1767=function(){return _0x20c082;};return _0x1767();}export const generateRequestSignature=ClientLibrary[_0x36a6f6(0x1a3)]['bind'](ClientLibrary);function _0x3ded(_0x575f2d,_0x459484){_0x575f2d=_0x575f2d-0xb9;const _0x2833c4=_0x1767();let _0xf6ed51=_0x2833c4[_0x575f2d];return _0xf6ed51;}export const generateClientSideSignature=ClientLibrary[_0x36a6f6(0xcc)]['bind'](ClientLibrary);export const _resetCache=ClientLibrary[_0x36a6f6(0x154)][_0x36a6f6(0x119)](ClientLibrary);export const startMouseEntropyTracker=ClientLibrary['startMouseEntropyTracker']['bind'](ClientLibrary);export const startKeystrokeDynamicsTracker=ClientLibrary[_0x36a6f6(0x1a6)]['bind'](ClientLibrary);export const initializeHoneypots=ClientLibrary['initializeHoneypots']['bind'](ClientLibrary);export const getClientBehaviorMetrics=ClientLibrary[_0x36a6f6(0x114)][_0x36a6f6(0x119)](ClientLibrary);export const protectedFetch=ClientLibrary[_0x36a6f6(0xc3)][_0x36a6f6(0x119)](ClientLibrary);export const addFetchInterceptor=ClientLibrary[_0x36a6f6(0x184)][_0x36a6f6(0x119)](ClientLibrary);export const patchGlobalFetch=ClientLibrary[_0x36a6f6(0xc1)][_0x36a6f6(0x119)](ClientLibrary);export const initializeFetch=ClientLibrary[_0x36a6f6(0xcb)][_0x36a6f6(0x119)](ClientLibrary);export const initializeClient=ClientLibrary[_0x36a6f6(0x14c)][_0x36a6f6(0x119)](ClientLibrary);export const solveChallengeAndRetry=ClientLibrary[_0x36a6f6(0x182)][_0x36a6f6(0x119)](ClientLibrary);export default ClientLibrary;
|