Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More ā†’
Socket
Sign inDemoInstall
Socket

@fingerprintjs/fingerprintjs

Package Overview
Dependencies
Maintainers
2
Versions
82
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@fingerprintjs/fingerprintjs - npm Package Compare versions

Comparing version 3.0.5 to 3.1.0-dev.0

203

dist/fp.cjs.js
/**
* FingerprintJS v3.0.5 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* FingerprintJS v3.1.0-dev.0 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -247,3 +247,3 @@ *

var version = "3.0.5";
var version = "3.1.0-dev.0";

@@ -310,2 +310,14 @@ var w = window;

}
function round(value, base) {
if (base === void 0) { base = 1; }
if (Math.abs(base) >= 1) {
return Math.round(value / base) * base;
}
else {
// Sometimes when a number is multiplied by a small number, precision is lost,
// for example 1234 * 0.0001 === 0.12340000000000001, and it's more precise divide: 1234 / (1 / 0.0001) === 0.1234.
var counterBase = 1 / base;
return Math.round(value * counterBase) / counterBase;
}
}

@@ -441,2 +453,13 @@ /*

}
/**
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function getFullscreenElement() {
return d.fullscreenElement || d.msFullscreenElement || d.mozFullScreenElement || d.webkitFullscreenElement || null;
}
function exitFullscreen() {
// `call` is required because the function throws an error without a proper "this" context
return (d.exitFullscreen || d.msExitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen).call(d);
}

@@ -792,9 +815,9 @@ var w$2 = window;

context.fillStyle = '#069';
// https://github.com/Valve/fingerprintjs2/issues/66
// this can affect FP generation when applying different CSS on different websites
context.font = '11pt no-real-font-123';
// the choice of emojis has a gigantic impact on rendering performance (especially in FF)
// some newer emojis cause it to slow down 50-200 times
// context.fillText("CwēˆØm fjordbank \ud83d\ude03 gly", 2, 15)
var printedText = 'Cwm fjordbank \ud83d\ude03 gly';
// It's important to use explicit built-in fonts in order to exclude the affect of font preferences
// (there is a separate entropy source for them).
context.font = '11pt "Times New Roman"';
// The choice of emojis has a gigantic impact on rendering performance (especially in FF)
// Some newer emojis cause it to slow down 50-200 times
// There must be no text to the right of the emoji, see https://github.com/fingerprintjs/fingerprintjs/issues/574
var printedText = 'Cwm fjordbank gly \ud83d\ude03';
context.fillText(printedText, 2, 15);

@@ -804,3 +827,3 @@ context.fillStyle = 'rgba(102, 204, 0, 0.2)';

context.fillText(printedText, 4, 45);
// canvas blending
// Canvas blending
// http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/

@@ -825,3 +848,3 @@ // http://jsfiddle.net/NDYV8/16/

context.fillStyle = 'rgb(255,0,255)';
// canvas winding
// Canvas winding
// http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/

@@ -916,25 +939,128 @@ // http://jsfiddle.net/NDYV8/19/

var w$5 = window;
function getAvailableScreenResolution() {
if (w$5.screen.availWidth && w$5.screen.availHeight) {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
var dimensions = [toInt(w$5.screen.availWidth), toInt(w$5.screen.availHeight)];
dimensions.sort().reverse();
return dimensions;
var screenFrameCheckInterval = 2500;
var roundingPrecision = 10;
// The type is readonly to protect from unwanted mutations
var screenFrameBackup;
var screenFrameSizeTimeoutId;
/**
* Starts watching the screen frame size. When a non-zero size appears, the size is saved and the watch is stopped.
* Later, when `getScreenFrame` is called, it will return the saved non-zero size if the current size is null.
*
* This trick is required to mitigate the fact that the screen frame turns null in some cases.
* See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
*/
function watchScreenFrame() {
if (screenFrameSizeTimeoutId !== undefined) {
return;
}
return undefined;
var checkScreenFrame = function () {
var frameSize = getCurrentScreenFrame();
if (isFrameSizeNull(frameSize)) {
screenFrameSizeTimeoutId = setTimeout(checkScreenFrame, screenFrameCheckInterval);
}
else {
screenFrameBackup = frameSize;
screenFrameSizeTimeoutId = undefined;
}
};
checkScreenFrame();
}
function getScreenFrame() {
return tslib.__awaiter(this, void 0, void 0, function () {
var frameSize;
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
frameSize = getCurrentScreenFrame();
if (!isFrameSizeNull(frameSize)) return [3 /*break*/, 2];
if (screenFrameBackup) {
return [2 /*return*/, tslib.__spreadArrays(screenFrameBackup)];
}
if (!getFullscreenElement()) return [3 /*break*/, 2];
// Some browsers set the screen frame to zero when programmatic fullscreen is on.
// There is a chance of getting a non-zero frame after exiting the fullscreen.
// See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
return [4 /*yield*/, exitFullscreen()];
case 1:
// Some browsers set the screen frame to zero when programmatic fullscreen is on.
// There is a chance of getting a non-zero frame after exiting the fullscreen.
// See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
_a.sent();
frameSize = getCurrentScreenFrame();
_a.label = 2;
case 2:
if (!isFrameSizeNull(frameSize)) {
screenFrameBackup = frameSize;
}
return [2 /*return*/, frameSize];
}
});
});
}
/**
* Sometimes the available screen resolution changes a bit, e.g. 1900x1440 ā†’ 1900x1439. A possible reason: macOS Dock
* shrinks to fit more icons when there is too little space. The rounding is used to mitigate the difference.
*/
function getRoundedScreenFrame() {
return tslib.__awaiter(this, void 0, void 0, function () {
var processSize, frameSize;
return tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0:
processSize = function (sideSize) { return (sideSize === null ? null : round(sideSize, roundingPrecision)); };
return [4 /*yield*/, getScreenFrame()
// It might look like I don't know about `for` and `map`.
// In fact, such code is used to avoid TypeScript issues without using `as`.
];
case 1:
frameSize = _a.sent();
// It might look like I don't know about `for` and `map`.
// In fact, such code is used to avoid TypeScript issues without using `as`.
return [2 /*return*/, [processSize(frameSize[0]), processSize(frameSize[1]), processSize(frameSize[2]), processSize(frameSize[3])]];
}
});
});
}
function getCurrentScreenFrame() {
var s = screen;
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
//
// Some browsers (IE, Edge ā‰¤18) don't provide `screen.availLeft` and `screen.availTop`. The property values are
// replaced with 0 in such cases to not lose the entropy from `screen.availWidth` and `screen.availHeight`.
return [
replaceNaN(toFloat(s.availTop), null),
replaceNaN(toFloat(s.width) - toFloat(s.availWidth) - replaceNaN(toFloat(s.availLeft), 0), null),
replaceNaN(toFloat(s.height) - toFloat(s.availHeight) - replaceNaN(toFloat(s.availTop), 0), null),
replaceNaN(toFloat(s.availLeft), null),
];
}
function isFrameSizeNull(frameSize) {
for (var i = 0; i < 4; ++i) {
if (frameSize[i]) {
return false;
}
}
return true;
}
function getHardwareConcurrency() {
try {
// sometimes hardware concurrency is a string
var concurrency = toInt(navigator.hardwareConcurrency);
return isNaN(concurrency) ? 1 : concurrency;
// sometimes hardware concurrency is a string
return replaceNaN(toInt(navigator.hardwareConcurrency), undefined);
}
var w$5 = window;
function getTimezone() {
var _a;
if ((_a = w$5.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
var timezone = new w$5.Intl.DateTimeFormat().resolvedOptions().timeZone;
if (timezone) {
return timezone;
}
}
catch (e) {
return 1;
}
// For browsers that don't support timezone names
// The minus is intentional because the JS offset is opposite to the real offset
var offset = -getTimezoneOffset();
return "UTC" + (offset >= 0 ? '+' : '') + Math.abs(offset);
}
function getTimezoneOffset() {

@@ -951,11 +1077,2 @@ var currentYear = new Date().getFullYear();

var w$6 = window;
function getTimezone() {
var _a;
if ((_a = w$6.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$6.Intl.DateTimeFormat().resolvedOptions().timeZone;
}
return undefined;
}
function getSessionStorage() {

@@ -1041,3 +1158,4 @@ try {

function getVendor() {
return navigator.vendor;
var _a;
return (_a = navigator.vendor) !== null && _a !== void 0 ? _a : '';
}

@@ -1091,5 +1209,4 @@

screenResolution: getScreenResolution,
availableScreenResolution: getAvailableScreenResolution,
screenFrame: getRoundedScreenFrame,
hardwareConcurrency: getHardwareConcurrency,
timezoneOffset: getTimezoneOffset,
timezone: getTimezone,

@@ -1104,3 +1221,2 @@ sessionStorage: getSessionStorage,

canvas: getCanvasFingerprint,
// adBlock: isAdblockUsed, // https://github.com/fingerprintjs/fingerprintjs/issues/405
touchSupport: getTouchSupport,

@@ -1175,3 +1291,3 @@ fonts: getFonts,

var result = '';
for (var _i = 0, _a = Object.keys(components); _i < _a.length; _i++) {
for (var _i = 0, _a = Object.keys(components).sort(); _i < _a.length; _i++) {
var componentKey = _a[_i];

@@ -1221,2 +1337,3 @@ var component = components[componentKey];

function OpenAgent() {
watchScreenFrame();
}

@@ -1286,2 +1403,4 @@ /**

exports.getComponents = getComponents;
exports.getFullscreenElement = getFullscreenElement;
exports.getScreenFrame = getScreenFrame;
exports.hashComponents = hashComponents;

@@ -1288,0 +1407,0 @@ exports.isChromium = isChromium;

/**
* FingerprintJS v3.0.5 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* FingerprintJS v3.1.0-dev.0 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -58,10 +58,17 @@ *

declare function getAvailableScreenResolution(): [number, number] | undefined;
/**
* The order matches the CSS side order
*/
declare type FrameSize = [top: number | null, right: number | null, bottom: number | null, left: number | null];
declare function getScreenFrame(): Promise<FrameSize>;
/**
* Sometimes the available screen resolution changes a bit, e.g. 1900x1440 ā†’ 1900x1439. A possible reason: macOS Dock
* shrinks to fit more icons when there is too little space. The rounding is used to mitigate the difference.
*/
declare function getRoundedScreenFrame(): Promise<FrameSize>;
declare function getHardwareConcurrency(): number;
declare function getHardwareConcurrency(): number | undefined;
declare function getTimezoneOffset(): number;
declare function getTimezone(): string;
declare function getTimezone(): string | undefined;
declare function getSessionStorage(): boolean;

@@ -116,5 +123,4 @@

screenResolution: typeof getScreenResolution;
availableScreenResolution: typeof getAvailableScreenResolution;
screenFrame: typeof getRoundedScreenFrame;
hardwareConcurrency: typeof getHardwareConcurrency;
timezoneOffset: typeof getTimezoneOffset;
timezone: typeof getTimezone;

@@ -295,2 +301,7 @@ sessionStorage: typeof getSessionStorage;

declare function isGecko(): boolean;
/**
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
declare function getFullscreenElement(): Element | null;

@@ -306,2 +317,2 @@ declare const _default: {

export default _default;
export { Agent, BuiltinComponents, Component, GetOptions, GetResult, LoadOptions, SourcesToComponents, UnknownComponents, componentsToDebugString, getComponents, hashComponents, isChromium, isDesktopSafari, isEdgeHTML, isGecko, isTrident, isWebKit, load, murmurX64Hash128 };
export { Agent, BuiltinComponents, Component, GetOptions, GetResult, LoadOptions, SourcesToComponents, UnknownComponents, componentsToDebugString, getComponents, getFullscreenElement, getScreenFrame, hashComponents, isChromium, isDesktopSafari, isEdgeHTML, isGecko, isTrident, isWebKit, load, murmurX64Hash128 };
/**
* FingerprintJS v3.0.5 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* FingerprintJS v3.1.0-dev.0 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -9,3 +9,3 @@ *

import { __assign, __awaiter, __generator } from 'tslib';
import { __assign, __awaiter, __generator, __spreadArrays } from 'tslib';

@@ -244,3 +244,3 @@ /*

var version = "3.0.5";
var version = "3.1.0-dev.0";

@@ -307,2 +307,14 @@ var w = window;

}
function round(value, base) {
if (base === void 0) { base = 1; }
if (Math.abs(base) >= 1) {
return Math.round(value / base) * base;
}
else {
// Sometimes when a number is multiplied by a small number, precision is lost,
// for example 1234 * 0.0001 === 0.12340000000000001, and it's more precise divide: 1234 / (1 / 0.0001) === 0.1234.
var counterBase = 1 / base;
return Math.round(value * counterBase) / counterBase;
}
}

@@ -438,2 +450,13 @@ /*

}
/**
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function getFullscreenElement() {
return d.fullscreenElement || d.msFullscreenElement || d.mozFullScreenElement || d.webkitFullscreenElement || null;
}
function exitFullscreen() {
// `call` is required because the function throws an error without a proper "this" context
return (d.exitFullscreen || d.msExitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen).call(d);
}

@@ -789,9 +812,9 @@ var w$2 = window;

context.fillStyle = '#069';
// https://github.com/Valve/fingerprintjs2/issues/66
// this can affect FP generation when applying different CSS on different websites
context.font = '11pt no-real-font-123';
// the choice of emojis has a gigantic impact on rendering performance (especially in FF)
// some newer emojis cause it to slow down 50-200 times
// context.fillText("CwēˆØm fjordbank \ud83d\ude03 gly", 2, 15)
var printedText = 'Cwm fjordbank \ud83d\ude03 gly';
// It's important to use explicit built-in fonts in order to exclude the affect of font preferences
// (there is a separate entropy source for them).
context.font = '11pt "Times New Roman"';
// The choice of emojis has a gigantic impact on rendering performance (especially in FF)
// Some newer emojis cause it to slow down 50-200 times
// There must be no text to the right of the emoji, see https://github.com/fingerprintjs/fingerprintjs/issues/574
var printedText = 'Cwm fjordbank gly \ud83d\ude03';
context.fillText(printedText, 2, 15);

@@ -801,3 +824,3 @@ context.fillStyle = 'rgba(102, 204, 0, 0.2)';

context.fillText(printedText, 4, 45);
// canvas blending
// Canvas blending
// http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/

@@ -822,3 +845,3 @@ // http://jsfiddle.net/NDYV8/16/

context.fillStyle = 'rgb(255,0,255)';
// canvas winding
// Canvas winding
// http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/

@@ -913,25 +936,128 @@ // http://jsfiddle.net/NDYV8/19/

var w$5 = window;
function getAvailableScreenResolution() {
if (w$5.screen.availWidth && w$5.screen.availHeight) {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
var dimensions = [toInt(w$5.screen.availWidth), toInt(w$5.screen.availHeight)];
dimensions.sort().reverse();
return dimensions;
var screenFrameCheckInterval = 2500;
var roundingPrecision = 10;
// The type is readonly to protect from unwanted mutations
var screenFrameBackup;
var screenFrameSizeTimeoutId;
/**
* Starts watching the screen frame size. When a non-zero size appears, the size is saved and the watch is stopped.
* Later, when `getScreenFrame` is called, it will return the saved non-zero size if the current size is null.
*
* This trick is required to mitigate the fact that the screen frame turns null in some cases.
* See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
*/
function watchScreenFrame() {
if (screenFrameSizeTimeoutId !== undefined) {
return;
}
return undefined;
var checkScreenFrame = function () {
var frameSize = getCurrentScreenFrame();
if (isFrameSizeNull(frameSize)) {
screenFrameSizeTimeoutId = setTimeout(checkScreenFrame, screenFrameCheckInterval);
}
else {
screenFrameBackup = frameSize;
screenFrameSizeTimeoutId = undefined;
}
};
checkScreenFrame();
}
function getScreenFrame() {
return __awaiter(this, void 0, void 0, function () {
var frameSize;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
frameSize = getCurrentScreenFrame();
if (!isFrameSizeNull(frameSize)) return [3 /*break*/, 2];
if (screenFrameBackup) {
return [2 /*return*/, __spreadArrays(screenFrameBackup)];
}
if (!getFullscreenElement()) return [3 /*break*/, 2];
// Some browsers set the screen frame to zero when programmatic fullscreen is on.
// There is a chance of getting a non-zero frame after exiting the fullscreen.
// See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
return [4 /*yield*/, exitFullscreen()];
case 1:
// Some browsers set the screen frame to zero when programmatic fullscreen is on.
// There is a chance of getting a non-zero frame after exiting the fullscreen.
// See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
_a.sent();
frameSize = getCurrentScreenFrame();
_a.label = 2;
case 2:
if (!isFrameSizeNull(frameSize)) {
screenFrameBackup = frameSize;
}
return [2 /*return*/, frameSize];
}
});
});
}
/**
* Sometimes the available screen resolution changes a bit, e.g. 1900x1440 ā†’ 1900x1439. A possible reason: macOS Dock
* shrinks to fit more icons when there is too little space. The rounding is used to mitigate the difference.
*/
function getRoundedScreenFrame() {
return __awaiter(this, void 0, void 0, function () {
var processSize, frameSize;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
processSize = function (sideSize) { return (sideSize === null ? null : round(sideSize, roundingPrecision)); };
return [4 /*yield*/, getScreenFrame()
// It might look like I don't know about `for` and `map`.
// In fact, such code is used to avoid TypeScript issues without using `as`.
];
case 1:
frameSize = _a.sent();
// It might look like I don't know about `for` and `map`.
// In fact, such code is used to avoid TypeScript issues without using `as`.
return [2 /*return*/, [processSize(frameSize[0]), processSize(frameSize[1]), processSize(frameSize[2]), processSize(frameSize[3])]];
}
});
});
}
function getCurrentScreenFrame() {
var s = screen;
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
//
// Some browsers (IE, Edge ā‰¤18) don't provide `screen.availLeft` and `screen.availTop`. The property values are
// replaced with 0 in such cases to not lose the entropy from `screen.availWidth` and `screen.availHeight`.
return [
replaceNaN(toFloat(s.availTop), null),
replaceNaN(toFloat(s.width) - toFloat(s.availWidth) - replaceNaN(toFloat(s.availLeft), 0), null),
replaceNaN(toFloat(s.height) - toFloat(s.availHeight) - replaceNaN(toFloat(s.availTop), 0), null),
replaceNaN(toFloat(s.availLeft), null),
];
}
function isFrameSizeNull(frameSize) {
for (var i = 0; i < 4; ++i) {
if (frameSize[i]) {
return false;
}
}
return true;
}
function getHardwareConcurrency() {
try {
// sometimes hardware concurrency is a string
var concurrency = toInt(navigator.hardwareConcurrency);
return isNaN(concurrency) ? 1 : concurrency;
// sometimes hardware concurrency is a string
return replaceNaN(toInt(navigator.hardwareConcurrency), undefined);
}
var w$5 = window;
function getTimezone() {
var _a;
if ((_a = w$5.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
var timezone = new w$5.Intl.DateTimeFormat().resolvedOptions().timeZone;
if (timezone) {
return timezone;
}
}
catch (e) {
return 1;
}
// For browsers that don't support timezone names
// The minus is intentional because the JS offset is opposite to the real offset
var offset = -getTimezoneOffset();
return "UTC" + (offset >= 0 ? '+' : '') + Math.abs(offset);
}
function getTimezoneOffset() {

@@ -948,11 +1074,2 @@ var currentYear = new Date().getFullYear();

var w$6 = window;
function getTimezone() {
var _a;
if ((_a = w$6.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$6.Intl.DateTimeFormat().resolvedOptions().timeZone;
}
return undefined;
}
function getSessionStorage() {

@@ -1038,3 +1155,4 @@ try {

function getVendor() {
return navigator.vendor;
var _a;
return (_a = navigator.vendor) !== null && _a !== void 0 ? _a : '';
}

@@ -1088,5 +1206,4 @@

screenResolution: getScreenResolution,
availableScreenResolution: getAvailableScreenResolution,
screenFrame: getRoundedScreenFrame,
hardwareConcurrency: getHardwareConcurrency,
timezoneOffset: getTimezoneOffset,
timezone: getTimezone,

@@ -1101,3 +1218,2 @@ sessionStorage: getSessionStorage,

canvas: getCanvasFingerprint,
// adBlock: isAdblockUsed, // https://github.com/fingerprintjs/fingerprintjs/issues/405
touchSupport: getTouchSupport,

@@ -1172,3 +1288,3 @@ fonts: getFonts,

var result = '';
for (var _i = 0, _a = Object.keys(components); _i < _a.length; _i++) {
for (var _i = 0, _a = Object.keys(components).sort(); _i < _a.length; _i++) {
var componentKey = _a[_i];

@@ -1218,2 +1334,3 @@ var component = components[componentKey];

function OpenAgent() {
watchScreenFrame();
}

@@ -1281,2 +1398,2 @@ /**

export default index;
export { componentsToDebugString, getComponents, hashComponents, isChromium, isDesktopSafari, isEdgeHTML, isGecko, isTrident, isWebKit, load, murmurX64Hash128 };
export { componentsToDebugString, getComponents, getFullscreenElement, getScreenFrame, hashComponents, isChromium, isDesktopSafari, isEdgeHTML, isGecko, isTrident, isWebKit, load, murmurX64Hash128 };
/**
* FingerprintJS v3.0.5 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* FingerprintJS v3.1.0-dev.0 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -308,4 +308,12 @@ *

var version = "3.0.5";
function __spreadArrays() {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
}
var version = "3.1.0-dev.0";
var w = window;

@@ -371,2 +379,14 @@ function requestIdleCallbackIfAvailable(fallbackTimeout, deadlineTimeout) {

}
function round(value, base) {
if (base === void 0) { base = 1; }
if (Math.abs(base) >= 1) {
return Math.round(value / base) * base;
}
else {
// Sometimes when a number is multiplied by a small number, precision is lost,
// for example 1234 * 0.0001 === 0.12340000000000001, and it's more precise divide: 1234 / (1 / 0.0001) === 0.1234.
var counterBase = 1 / base;
return Math.round(value * counterBase) / counterBase;
}
}

@@ -502,2 +522,13 @@ /*

}
/**
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function getFullscreenElement() {
return d.fullscreenElement || d.msFullscreenElement || d.mozFullScreenElement || d.webkitFullscreenElement || null;
}
function exitFullscreen() {
// `call` is required because the function throws an error without a proper "this" context
return (d.exitFullscreen || d.msExitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen).call(d);
}

@@ -853,9 +884,9 @@ var w$2 = window;

context.fillStyle = '#069';
// https://github.com/Valve/fingerprintjs2/issues/66
// this can affect FP generation when applying different CSS on different websites
context.font = '11pt no-real-font-123';
// the choice of emojis has a gigantic impact on rendering performance (especially in FF)
// some newer emojis cause it to slow down 50-200 times
// context.fillText("CwēˆØm fjordbank \ud83d\ude03 gly", 2, 15)
var printedText = 'Cwm fjordbank \ud83d\ude03 gly';
// It's important to use explicit built-in fonts in order to exclude the affect of font preferences
// (there is a separate entropy source for them).
context.font = '11pt "Times New Roman"';
// The choice of emojis has a gigantic impact on rendering performance (especially in FF)
// Some newer emojis cause it to slow down 50-200 times
// There must be no text to the right of the emoji, see https://github.com/fingerprintjs/fingerprintjs/issues/574
var printedText = 'Cwm fjordbank gly \ud83d\ude03';
context.fillText(printedText, 2, 15);

@@ -865,3 +896,3 @@ context.fillStyle = 'rgba(102, 204, 0, 0.2)';

context.fillText(printedText, 4, 45);
// canvas blending
// Canvas blending
// http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/

@@ -886,3 +917,3 @@ // http://jsfiddle.net/NDYV8/16/

context.fillStyle = 'rgb(255,0,255)';
// canvas winding
// Canvas winding
// http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/

@@ -977,25 +1008,128 @@ // http://jsfiddle.net/NDYV8/19/

var w$5 = window;
function getAvailableScreenResolution() {
if (w$5.screen.availWidth && w$5.screen.availHeight) {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
var dimensions = [toInt(w$5.screen.availWidth), toInt(w$5.screen.availHeight)];
dimensions.sort().reverse();
return dimensions;
var screenFrameCheckInterval = 2500;
var roundingPrecision = 10;
// The type is readonly to protect from unwanted mutations
var screenFrameBackup;
var screenFrameSizeTimeoutId;
/**
* Starts watching the screen frame size. When a non-zero size appears, the size is saved and the watch is stopped.
* Later, when `getScreenFrame` is called, it will return the saved non-zero size if the current size is null.
*
* This trick is required to mitigate the fact that the screen frame turns null in some cases.
* See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
*/
function watchScreenFrame() {
if (screenFrameSizeTimeoutId !== undefined) {
return;
}
return undefined;
var checkScreenFrame = function () {
var frameSize = getCurrentScreenFrame();
if (isFrameSizeNull(frameSize)) {
screenFrameSizeTimeoutId = setTimeout(checkScreenFrame, screenFrameCheckInterval);
}
else {
screenFrameBackup = frameSize;
screenFrameSizeTimeoutId = undefined;
}
};
checkScreenFrame();
}
function getScreenFrame() {
return __awaiter(this, void 0, void 0, function () {
var frameSize;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
frameSize = getCurrentScreenFrame();
if (!isFrameSizeNull(frameSize)) return [3 /*break*/, 2];
if (screenFrameBackup) {
return [2 /*return*/, __spreadArrays(screenFrameBackup)];
}
if (!getFullscreenElement()) return [3 /*break*/, 2];
// Some browsers set the screen frame to zero when programmatic fullscreen is on.
// There is a chance of getting a non-zero frame after exiting the fullscreen.
// See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
return [4 /*yield*/, exitFullscreen()];
case 1:
// Some browsers set the screen frame to zero when programmatic fullscreen is on.
// There is a chance of getting a non-zero frame after exiting the fullscreen.
// See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
_a.sent();
frameSize = getCurrentScreenFrame();
_a.label = 2;
case 2:
if (!isFrameSizeNull(frameSize)) {
screenFrameBackup = frameSize;
}
return [2 /*return*/, frameSize];
}
});
});
}
/**
* Sometimes the available screen resolution changes a bit, e.g. 1900x1440 ā†’ 1900x1439. A possible reason: macOS Dock
* shrinks to fit more icons when there is too little space. The rounding is used to mitigate the difference.
*/
function getRoundedScreenFrame() {
return __awaiter(this, void 0, void 0, function () {
var processSize, frameSize;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
processSize = function (sideSize) { return (sideSize === null ? null : round(sideSize, roundingPrecision)); };
return [4 /*yield*/, getScreenFrame()
// It might look like I don't know about `for` and `map`.
// In fact, such code is used to avoid TypeScript issues without using `as`.
];
case 1:
frameSize = _a.sent();
// It might look like I don't know about `for` and `map`.
// In fact, such code is used to avoid TypeScript issues without using `as`.
return [2 /*return*/, [processSize(frameSize[0]), processSize(frameSize[1]), processSize(frameSize[2]), processSize(frameSize[3])]];
}
});
});
}
function getCurrentScreenFrame() {
var s = screen;
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
//
// Some browsers (IE, Edge ā‰¤18) don't provide `screen.availLeft` and `screen.availTop`. The property values are
// replaced with 0 in such cases to not lose the entropy from `screen.availWidth` and `screen.availHeight`.
return [
replaceNaN(toFloat(s.availTop), null),
replaceNaN(toFloat(s.width) - toFloat(s.availWidth) - replaceNaN(toFloat(s.availLeft), 0), null),
replaceNaN(toFloat(s.height) - toFloat(s.availHeight) - replaceNaN(toFloat(s.availTop), 0), null),
replaceNaN(toFloat(s.availLeft), null),
];
}
function isFrameSizeNull(frameSize) {
for (var i = 0; i < 4; ++i) {
if (frameSize[i]) {
return false;
}
}
return true;
}
function getHardwareConcurrency() {
try {
// sometimes hardware concurrency is a string
var concurrency = toInt(navigator.hardwareConcurrency);
return isNaN(concurrency) ? 1 : concurrency;
// sometimes hardware concurrency is a string
return replaceNaN(toInt(navigator.hardwareConcurrency), undefined);
}
var w$5 = window;
function getTimezone() {
var _a;
if ((_a = w$5.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
var timezone = new w$5.Intl.DateTimeFormat().resolvedOptions().timeZone;
if (timezone) {
return timezone;
}
}
catch (e) {
return 1;
}
// For browsers that don't support timezone names
// The minus is intentional because the JS offset is opposite to the real offset
var offset = -getTimezoneOffset();
return "UTC" + (offset >= 0 ? '+' : '') + Math.abs(offset);
}
function getTimezoneOffset() {

@@ -1012,11 +1146,2 @@ var currentYear = new Date().getFullYear();

var w$6 = window;
function getTimezone() {
var _a;
if ((_a = w$6.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$6.Intl.DateTimeFormat().resolvedOptions().timeZone;
}
return undefined;
}
function getSessionStorage() {

@@ -1102,3 +1227,4 @@ try {

function getVendor() {
return navigator.vendor;
var _a;
return (_a = navigator.vendor) !== null && _a !== void 0 ? _a : '';
}

@@ -1152,5 +1278,4 @@

screenResolution: getScreenResolution,
availableScreenResolution: getAvailableScreenResolution,
screenFrame: getRoundedScreenFrame,
hardwareConcurrency: getHardwareConcurrency,
timezoneOffset: getTimezoneOffset,
timezone: getTimezone,

@@ -1165,3 +1290,2 @@ sessionStorage: getSessionStorage,

canvas: getCanvasFingerprint,
// adBlock: isAdblockUsed, // https://github.com/fingerprintjs/fingerprintjs/issues/405
touchSupport: getTouchSupport,

@@ -1236,3 +1360,3 @@ fonts: getFonts,

var result = '';
for (var _i = 0, _a = Object.keys(components); _i < _a.length; _i++) {
for (var _i = 0, _a = Object.keys(components).sort(); _i < _a.length; _i++) {
var componentKey = _a[_i];

@@ -1282,2 +1406,3 @@ var component = components[componentKey];

function OpenAgent() {
watchScreenFrame();
}

@@ -1347,2 +1472,4 @@ /**

exports.getComponents = getComponents;
exports.getFullscreenElement = getFullscreenElement;
exports.getScreenFrame = getScreenFrame;
exports.hashComponents = hashComponents;

@@ -1349,0 +1476,0 @@ exports.isChromium = isChromium;

/**
* FingerprintJS v3.0.5 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* FingerprintJS v3.1.0-dev.0 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -9,2 +9,2 @@ *

var FingerprintJS=function(e){"use strict";function t(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]+t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]+t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]+t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]+t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function n(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]*t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]*t[3],n[1]+=n[2]>>>16,n[2]&=65535,n[2]+=e[3]*t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]*t[3],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[2]*t[2],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[3]*t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function r(e,t){return 32===(t%=64)?[e[1],e[0]]:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t|e[0]>>>32-t]:(t-=32,[e[1]<<t|e[0]>>>32-t,e[0]<<t|e[1]>>>32-t])}function o(e,t){return 0===(t%=64)?e:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t]:[e[1]<<t-32,0]}function i(e,t){return[e[0]^t[0],e[1]^t[1]]}function a(e){return e=i(e,[0,e[0]>>>1]),e=i(e=n(e,[4283543511,3981806797]),[0,e[0]>>>1]),e=i(e=n(e,[3301882366,444984403]),[0,e[0]>>>1])}function c(e,c){c=c||0;var u,s=(e=e||"").length%16,l=e.length-s,f=[0,c],d=[0,c],h=[0,0],v=[0,0],g=[2277735313,289559509],m=[1291169091,658871167];for(u=0;u<l;u+=16)h=[255&e.charCodeAt(u+4)|(255&e.charCodeAt(u+5))<<8|(255&e.charCodeAt(u+6))<<16|(255&e.charCodeAt(u+7))<<24,255&e.charCodeAt(u)|(255&e.charCodeAt(u+1))<<8|(255&e.charCodeAt(u+2))<<16|(255&e.charCodeAt(u+3))<<24],v=[255&e.charCodeAt(u+12)|(255&e.charCodeAt(u+13))<<8|(255&e.charCodeAt(u+14))<<16|(255&e.charCodeAt(u+15))<<24,255&e.charCodeAt(u+8)|(255&e.charCodeAt(u+9))<<8|(255&e.charCodeAt(u+10))<<16|(255&e.charCodeAt(u+11))<<24],h=r(h=n(h,g),31),f=t(f=r(f=i(f,h=n(h,m)),27),d),f=t(n(f,[0,5]),[0,1390208809]),v=r(v=n(v,m),33),d=t(d=r(d=i(d,v=n(v,g)),31),f),d=t(n(d,[0,5]),[0,944331445]);switch(h=[0,0],v=[0,0],s){case 15:v=i(v,o([0,e.charCodeAt(u+14)],48));case 14:v=i(v,o([0,e.charCodeAt(u+13)],40));case 13:v=i(v,o([0,e.charCodeAt(u+12)],32));case 12:v=i(v,o([0,e.charCodeAt(u+11)],24));case 11:v=i(v,o([0,e.charCodeAt(u+10)],16));case 10:v=i(v,o([0,e.charCodeAt(u+9)],8));case 9:v=n(v=i(v,[0,e.charCodeAt(u+8)]),m),d=i(d,v=n(v=r(v,33),g));case 8:h=i(h,o([0,e.charCodeAt(u+7)],56));case 7:h=i(h,o([0,e.charCodeAt(u+6)],48));case 6:h=i(h,o([0,e.charCodeAt(u+5)],40));case 5:h=i(h,o([0,e.charCodeAt(u+4)],32));case 4:h=i(h,o([0,e.charCodeAt(u+3)],24));case 3:h=i(h,o([0,e.charCodeAt(u+2)],16));case 2:h=i(h,o([0,e.charCodeAt(u+1)],8));case 1:h=n(h=i(h,[0,e.charCodeAt(u)]),g),f=i(f,h=n(h=r(h,31),m))}return f=t(f=i(f,[0,e.length]),d=i(d,[0,e.length])),d=t(d,f),f=t(f=a(f),d=a(d)),d=t(d,f),("00000000"+(f[0]>>>0).toString(16)).slice(-8)+("00000000"+(f[1]>>>0).toString(16)).slice(-8)+("00000000"+(d[0]>>>0).toString(16)).slice(-8)+("00000000"+(d[1]>>>0).toString(16)).slice(-8)}var u=function(){return(u=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function s(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(t){i(t)}}function c(e){try{u(r.throw(e))}catch(t){i(t)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,c)}u((r=r.apply(e,t||[])).next())}))}function l(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(c){i=[6,c],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}var f=window;function d(e){return parseInt(e)}function h(e){return parseFloat(e)}function v(e){return e.reduce((function(e,t){return e+(t?1:0)}),0)}var g=window,m=navigator,p=document;function y(){return v(["MSCSSMatrix"in g,"msSetImmediate"in g,"msIndexedDB"in g,"msMaxTouchPoints"in m,"msPointerEnabled"in m])>=4}function S(){return v(["msWriteProfilerMark"in g,"MSStream"in g,"msLaunchUri"in m,"msSaveBlob"in m])>=3&&!y()}function w(){return v(["webkitPersistentStorage"in m,"webkitTemporaryStorage"in m,0===m.vendor.indexOf("Google"),"webkitResolveLocalFileSystemURL"in g,"BatteryManager"in g,"webkitMediaStream"in g,"webkitSpeechGrammar"in g])>=5}function b(){return v(["ApplePayError"in g,"CSSPrimitiveValue"in g,"Counter"in g,0===m.vendor.indexOf("Apple"),"getStorageUpdates"in m,"WebKitMediaKeys"in g])>=4}function C(){return v(["safari"in g,!("DeviceMotionEvent"in g),!("ongestureend"in g),!("standalone"in m)])>=3}var A=window,M=document;function T(e,t,n){(function(e){return e&&"function"==typeof e.setValueAtTime})(t)&&t.setValueAtTime(n,e.currentTime)}function k(e){return new Promise((function(t,n){e.oncomplete=function(e){return t(e.renderedBuffer)};var r=3,o=function(){switch(e.startRendering(),e.state){case"running":setTimeout((function(){return n(P("timeout"))}),1e3);break;case"suspended":M.hidden||r--,r>0?setTimeout(o,500):n(P("suspended"))}};o()}))}function x(e){for(var t=0,n=4500;n<5e3;++n)t+=Math.abs(e[n]);return t}function P(e){var t=new Error(e);return t.name=e,t}var I=document,O=["monospace","sans-serif","serif"],E=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"],D={fontStyle:"normal",fontWeight:"normal",letterSpacing:"normal",lineBreak:"auto",lineHeight:"normal",textTransform:"none",textAlign:"left",textDecoration:"none",textShadow:"none",whiteSpace:"normal",wordBreak:"normal",wordSpacing:"normal",position:"absolute",left:"-9999px",fontSize:"48px"};function R(e){return e.toDataURL()}var B=navigator,L=window;var F=navigator;var G=window;var H=window;var U=window;var N=document;var W={osCpu:function(){return navigator.oscpu},languages:function(){var e=[],t=F.language||F.userLanguage||F.browserLanguage||F.systemLanguage;if(void 0!==t&&e.push([t]),Array.isArray(F.languages))w()&&v([!("MediaSettingsRange"in g),"RTCEncodedAudioFrame"in g,""+g.Intl=="[object Intl]",""+g.Reflect=="[object Reflect]"])>=3||e.push(F.languages);else if("string"==typeof F.languages){var n=F.languages;n&&e.push(n.split(","))}return e},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return e=h(navigator.deviceMemory),t=void 0,"number"==typeof e&&isNaN(e)?t:e;var e,t},screenResolution:function(){var e=[d(G.screen.width),d(G.screen.height)];return e.sort().reverse(),e},availableScreenResolution:function(){if(H.screen.availWidth&&H.screen.availHeight){var e=[d(H.screen.availWidth),d(H.screen.availHeight)];return e.sort().reverse(),e}},hardwareConcurrency:function(){try{var e=d(navigator.hardwareConcurrency);return isNaN(e)?1:e}catch(t){return 1}},timezoneOffset:function(){var e=(new Date).getFullYear();return Math.max(h(new Date(e,0,1).getTimezoneOffset()),h(new Date(e,6,1).getTimezoneOffset()))},timezone:function(){var e;if(null===(e=U.Intl)||void 0===e?void 0:e.DateTimeFormat)return(new U.Intl.DateTimeFormat).resolvedOptions().timeZone},sessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},localStorage:function(){try{return!!window.localStorage}catch(e){return!0}},indexedDB:function(){if(!y()&&!S())try{return!!window.indexedDB}catch(e){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){return navigator.platform},plugins:function(){if(y())return[];if(navigator.plugins){for(var e=[],t=0;t<navigator.plugins.length;++t){var n=navigator.plugins[t];if(n){for(var r=[],o=0;o<n.length;++o){var i=n[o];r.push({type:i.type,suffixes:i.suffixes})}e.push({name:n.name,description:n.description,mimeTypes:r})}}return e}},canvas:function(){var e=function(){var e=document.createElement("canvas");return e.width=240,e.height=140,e.style.display="inline",[e,e.getContext("2d")]}(),t=e[0],n=e[1];if(!function(e,t){return!(!t||!e.toDataURL)}(t,n))return{winding:!1,data:""};n.rect(0,0,10,10),n.rect(2,2,6,6);var r=!n.isPointInPath(5,5,"evenodd");n.textBaseline="alphabetic",n.fillStyle="#f60",n.fillRect(125,1,62,20),n.fillStyle="#069",n.font="11pt no-real-font-123";var o="Cwm fjordbank šŸ˜ƒ gly";return n.fillText(o,2,15),n.fillStyle="rgba(102, 204, 0, 0.2)",n.font="18pt Arial",n.fillText(o,4,45),n.globalCompositeOperation="multiply",n.fillStyle="rgb(255,0,255)",n.beginPath(),n.arc(50,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(0,255,255)",n.beginPath(),n.arc(100,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,255,0)",n.beginPath(),n.arc(75,100,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,0,255)",n.arc(75,75,75,0,2*Math.PI,!0),n.arc(75,75,25,0,2*Math.PI,!0),n.fill("evenodd"),{winding:r,data:R(t)}},touchSupport:function(){var e,t=0;void 0!==B.maxTouchPoints?t=d(B.maxTouchPoints):void 0!==B.msMaxTouchPoints&&(t=B.msMaxTouchPoints);try{document.createEvent("TouchEvent"),e=!0}catch(n){e=!1}return{maxTouchPoints:t,touchEvent:e,touchStart:"ontouchstart"in L}},fonts:function(){var e=I.body,t=I.createElement("div"),n=I.createElement("div"),r={},o={},i=function(){var e=I.createElement("span");e.textContent="mmMwWLliI0O&1";for(var t=0,n=Object.keys(D);t<n.length;t++){var r=n[t];e.style[r]=D[r]}return e},a=function(e){return O.some((function(t,n){return e[n].offsetWidth!==r[t]||e[n].offsetHeight!==o[t]}))},c=O.map((function(e){var n=i();return n.style.fontFamily=e,t.appendChild(n),n}));e.appendChild(t);for(var u=0,s=O.length;u<s;u++)r[O[u]]=c[u].offsetWidth,o[O[u]]=c[u].offsetHeight;var l=function(){for(var e={},t=function(t){e[t]=O.map((function(e){var r=function(e,t){var n=i();return n.style.fontFamily="'"+e+"',"+t,n}(t,e);return n.appendChild(r),r}))},r=0,o=E;r<o.length;r++){t(o[r])}return e}();e.appendChild(n);for(var f=[],d=0,h=E.length;d<h;d++)a(l[E[d]])&&f.push(E[d]);return e.removeChild(n),e.removeChild(t),f},audio:function(){return s(this,void 0,void 0,(function(){var e,t,n,r,o,i;return l(this,(function(a){switch(a.label){case 0:if(!(e=A.OfflineAudioContext||A.webkitOfflineAudioContext))return[2,-2];if(b()&&!C()&&!(v(["DOMRectList"in g,"RTCPeerConnectionIceEvent"in g,"SVGGeometryElement"in g,"ontransitioncancel"in g])>=3))return[2,-1];t=new e(1,44100,44100),(n=t.createOscillator()).type="triangle",T(t,n.frequency,1e4),r=t.createDynamicsCompressor(),T(t,r.threshold,-50),T(t,r.knee,40),T(t,r.ratio,12),T(t,r.reduction,-20),T(t,r.attack,0),T(t,r.release,.25),n.connect(r),r.connect(t.destination),n.start(0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,k(t)];case 2:return o=a.sent(),[3,5];case 3:if("timeout"===(i=a.sent()).name||"suspended"===i.name)return[2,-3];throw i;case 4:return n.disconnect(),r.disconnect(),[7];case 5:return[2,x(o.getChannelData(0))]}}))}))},pluginsSupport:function(){return void 0!==navigator.plugins},productSub:function(){return navigator.productSub},emptyEvalLength:function(){return eval.toString().length},errorFF:function(){try{throw"a"}catch(e){try{return e.toSource(),!0}catch(t){return!1}}},vendor:function(){return navigator.vendor},chrome:function(){return void 0!==window.chrome},cookiesEnabled:function(){try{N.cookie="cookietest=1; SameSite=Strict;";var e=-1!==N.cookie.indexOf("cookietest=");return N.cookie="cookietest=1; SameSite=Strict; expires=Thu, 01-Jan-1970 00:00:01 GMT",e}catch(t){return!1}}};function j(e,t,n){return s(this,void 0,void 0,(function(){var r,o,i,a,c,s,f,d,h;return l(this,(function(l){switch(l.label){case 0:r=Date.now(),o={},i=0,a=Object.keys(e),l.label=1;case 1:if(!(i<a.length))return[3,7];if(c=a[i],function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return!0;return!1}(n,c))return[3,6];s=void 0,l.label=2;case 2:return l.trys.push([2,4,,5]),h={},[4,e[c](t)];case 3:return h.value=l.sent(),s=h,[3,5];case 4:return f=l.sent(),s=f&&"object"==typeof f&&"message"in f?{error:f}:{error:{message:f}},[3,5];case 5:d=Date.now(),o[c]=u(u({},s),{duration:d-r}),r=d,l.label=6;case 6:return i++,[3,1];case 7:return[2,o]}}))}))}function z(e){return JSON.stringify(e,(function(e,t){return t instanceof Error?u({name:(n=t).name,message:n.message,stack:null===(r=n.stack)||void 0===r?void 0:r.split("\n")},n):t;var n,r}),2)}function V(e){return c(function(e){for(var t="",n=0,r=Object.keys(e);n<r.length;n++){var o=r[n],i=e[o],a=i.error?"error":JSON.stringify(i.value);t+=(t?"|":"")+o.replace(/([:|\\])/g,"\\$1")+":"+a}return t}(e))}var J=function(){function e(){}return e.prototype.get=function(e){return void 0===e&&(e={}),s(this,void 0,void 0,(function(){var t,n;return l(this,(function(r){switch(r.label){case 0:return[4,j(W,void 0,[])];case 1:return t=r.sent(),n=function(e){var t;return{components:e,get visitorId(){return void 0===t&&(t=V(this.components)),t},set visitorId(e){t=e}}}(t),e.debug&&console.log("Copy the text below to get the debug data:\n\n```\nversion: 3.0.5\nuserAgent: "+navigator.userAgent+"\ngetOptions: "+JSON.stringify(e,void 0,2)+"\nvisitorId: "+n.visitorId+"\ncomponents: "+z(t)+"\n```"),[2,n]}}))}))},e}();function q(e){var t=(void 0===e?{}:e).delayFallback,n=void 0===t?50:t;return s(this,void 0,void 0,(function(){return l(this,(function(e){switch(e.label){case 0:return[4,(t=n,r=2*n,void 0===r&&(r=1/0),new Promise((function(e){f.requestIdleCallback?f.requestIdleCallback((function(){return e()}),{timeout:r}):setTimeout(e,Math.min(t,r))})))];case 1:return e.sent(),[2,new J]}var t,r}))}))}var K={load:q,hashComponents:V,componentsToDebugString:z},X=c;return e.componentsToDebugString=z,e.default=K,e.getComponents=j,e.hashComponents=V,e.isChromium=w,e.isDesktopSafari=C,e.isEdgeHTML=S,e.isGecko=function(){var e;return v(["buildID"in m,(null===(e=p.documentElement)||void 0===e?void 0:e.style)&&"MozAppearance"in p.documentElement.style,"MediaRecorderErrorEvent"in g,"mozInnerScreenX"in g,"CSSMozDocumentRule"in g,"CanvasCaptureMediaStream"in g])>=4},e.isTrident=y,e.isWebKit=b,e.load=q,e.murmurX64Hash128=X,e}({});
var FingerprintJS=function(e){"use strict";function n(e,n){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],n=[n[0]>>>16,65535&n[0],n[1]>>>16,65535&n[1]];var t=[0,0,0,0];return t[3]+=e[3]+n[3],t[2]+=t[3]>>>16,t[3]&=65535,t[2]+=e[2]+n[2],t[1]+=t[2]>>>16,t[2]&=65535,t[1]+=e[1]+n[1],t[0]+=t[1]>>>16,t[1]&=65535,t[0]+=e[0]+n[0],t[0]&=65535,[t[0]<<16|t[1],t[2]<<16|t[3]]}function t(e,n){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],n=[n[0]>>>16,65535&n[0],n[1]>>>16,65535&n[1]];var t=[0,0,0,0];return t[3]+=e[3]*n[3],t[2]+=t[3]>>>16,t[3]&=65535,t[2]+=e[2]*n[3],t[1]+=t[2]>>>16,t[2]&=65535,t[2]+=e[3]*n[2],t[1]+=t[2]>>>16,t[2]&=65535,t[1]+=e[1]*n[3],t[0]+=t[1]>>>16,t[1]&=65535,t[1]+=e[2]*n[2],t[0]+=t[1]>>>16,t[1]&=65535,t[1]+=e[3]*n[1],t[0]+=t[1]>>>16,t[1]&=65535,t[0]+=e[0]*n[3]+e[1]*n[2]+e[2]*n[1]+e[3]*n[0],t[0]&=65535,[t[0]<<16|t[1],t[2]<<16|t[3]]}function r(e,n){return 32===(n%=64)?[e[1],e[0]]:n<32?[e[0]<<n|e[1]>>>32-n,e[1]<<n|e[0]>>>32-n]:(n-=32,[e[1]<<n|e[0]>>>32-n,e[0]<<n|e[1]>>>32-n])}function i(e,n){return 0===(n%=64)?e:n<32?[e[0]<<n|e[1]>>>32-n,e[1]<<n]:[e[1]<<n-32,0]}function o(e,n){return[e[0]^n[0],e[1]^n[1]]}function a(e){return e=o(e,[0,e[0]>>>1]),e=o(e=t(e,[4283543511,3981806797]),[0,e[0]>>>1]),e=o(e=t(e,[3301882366,444984403]),[0,e[0]>>>1])}function u(e,u){u=u||0;var c,s=(e=e||"").length%16,l=e.length-s,f=[0,u],d=[0,u],h=[0,0],v=[0,0],g=[2277735313,289559509],m=[1291169091,658871167];for(c=0;c<l;c+=16)h=[255&e.charCodeAt(c+4)|(255&e.charCodeAt(c+5))<<8|(255&e.charCodeAt(c+6))<<16|(255&e.charCodeAt(c+7))<<24,255&e.charCodeAt(c)|(255&e.charCodeAt(c+1))<<8|(255&e.charCodeAt(c+2))<<16|(255&e.charCodeAt(c+3))<<24],v=[255&e.charCodeAt(c+12)|(255&e.charCodeAt(c+13))<<8|(255&e.charCodeAt(c+14))<<16|(255&e.charCodeAt(c+15))<<24,255&e.charCodeAt(c+8)|(255&e.charCodeAt(c+9))<<8|(255&e.charCodeAt(c+10))<<16|(255&e.charCodeAt(c+11))<<24],h=r(h=t(h,g),31),f=n(f=r(f=o(f,h=t(h,m)),27),d),f=n(t(f,[0,5]),[0,1390208809]),v=r(v=t(v,m),33),d=n(d=r(d=o(d,v=t(v,g)),31),f),d=n(t(d,[0,5]),[0,944331445]);switch(h=[0,0],v=[0,0],s){case 15:v=o(v,i([0,e.charCodeAt(c+14)],48));case 14:v=o(v,i([0,e.charCodeAt(c+13)],40));case 13:v=o(v,i([0,e.charCodeAt(c+12)],32));case 12:v=o(v,i([0,e.charCodeAt(c+11)],24));case 11:v=o(v,i([0,e.charCodeAt(c+10)],16));case 10:v=o(v,i([0,e.charCodeAt(c+9)],8));case 9:v=t(v=o(v,[0,e.charCodeAt(c+8)]),m),d=o(d,v=t(v=r(v,33),g));case 8:h=o(h,i([0,e.charCodeAt(c+7)],56));case 7:h=o(h,i([0,e.charCodeAt(c+6)],48));case 6:h=o(h,i([0,e.charCodeAt(c+5)],40));case 5:h=o(h,i([0,e.charCodeAt(c+4)],32));case 4:h=o(h,i([0,e.charCodeAt(c+3)],24));case 3:h=o(h,i([0,e.charCodeAt(c+2)],16));case 2:h=o(h,i([0,e.charCodeAt(c+1)],8));case 1:h=t(h=o(h,[0,e.charCodeAt(c)]),g),f=o(f,h=t(h=r(h,31),m))}return f=n(f=o(f,[0,e.length]),d=o(d,[0,e.length])),d=n(d,f),f=n(f=a(f),d=a(d)),d=n(d,f),("00000000"+(f[0]>>>0).toString(16)).slice(-8)+("00000000"+(f[1]>>>0).toString(16)).slice(-8)+("00000000"+(d[0]>>>0).toString(16)).slice(-8)+("00000000"+(d[1]>>>0).toString(16)).slice(-8)}var c=function(){return(c=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var i in n=arguments[t])Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i]);return e}).apply(this,arguments)};function s(e,n,t,r){return new(t||(t=Promise))((function(i,o){function a(e){try{c(r.next(e))}catch(n){o(n)}}function u(e){try{c(r.throw(e))}catch(n){o(n)}}function c(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(a,u)}c((r=r.apply(e,n||[])).next())}))}function l(e,n){var t,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(t)throw new TypeError("Generator is already executing.");for(;a;)try{if(t=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=n.call(e,a)}catch(u){o=[6,u],r=0}finally{t=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}function f(){for(var e=0,n=0,t=arguments.length;n<t;n++)e+=arguments[n].length;var r=Array(e),i=0;for(n=0;n<t;n++)for(var o=arguments[n],a=0,u=o.length;a<u;a++,i++)r[i]=o[a];return r}var d=window;function h(e){return parseInt(e)}function v(e){return parseFloat(e)}function g(e,n){return"number"==typeof e&&isNaN(e)?n:e}function m(e){return e.reduce((function(e,n){return e+(n?1:0)}),0)}var p=window,y=navigator,S=document;function w(){return m(["MSCSSMatrix"in p,"msSetImmediate"in p,"msIndexedDB"in p,"msMaxTouchPoints"in y,"msPointerEnabled"in y])>=4}function b(){return m(["msWriteProfilerMark"in p,"MSStream"in p,"msLaunchUri"in y,"msSaveBlob"in y])>=3&&!w()}function C(){return m(["webkitPersistentStorage"in y,"webkitTemporaryStorage"in y,0===y.vendor.indexOf("Google"),"webkitResolveLocalFileSystemURL"in p,"BatteryManager"in p,"webkitMediaStream"in p,"webkitSpeechGrammar"in p])>=5}function A(){return m(["ApplePayError"in p,"CSSPrimitiveValue"in p,"Counter"in p,0===y.vendor.indexOf("Apple"),"getStorageUpdates"in y,"WebKitMediaKeys"in p])>=4}function M(){return m(["safari"in p,!("DeviceMotionEvent"in p),!("ongestureend"in p),!("standalone"in y)])>=3}function T(){return S.fullscreenElement||S.msFullscreenElement||S.mozFullScreenElement||S.webkitFullscreenElement||null}var k=window,x=document;function P(e,n,t){(function(e){return e&&"function"==typeof e.setValueAtTime})(n)&&n.setValueAtTime(t,e.currentTime)}function E(e){return new Promise((function(n,t){e.oncomplete=function(e){return n(e.renderedBuffer)};var r=3,i=function(){switch(e.startRendering(),e.state){case"running":setTimeout((function(){return t(O("timeout"))}),1e3);break;case"suspended":x.hidden||r--,r>0?setTimeout(i,500):t(O("suspended"))}};i()}))}function I(e){for(var n=0,t=4500;t<5e3;++t)n+=Math.abs(e[t]);return n}function O(e){var n=new Error(e);return n.name=e,n}var F=document,D=["monospace","sans-serif","serif"],R=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"],L={fontStyle:"normal",fontWeight:"normal",letterSpacing:"normal",lineBreak:"auto",lineHeight:"normal",textTransform:"none",textAlign:"left",textDecoration:"none",textShadow:"none",whiteSpace:"normal",wordBreak:"normal",wordSpacing:"normal",position:"absolute",left:"-9999px",fontSize:"48px"};function B(e){return e.toDataURL()}var G=navigator,U=window;var H=navigator;var N=window;var j,z;function W(){return s(this,void 0,void 0,(function(){var e;return l(this,(function(n){switch(n.label){case 0:return J(e=V())?j?[2,f(j)]:T()?[4,(S.exitFullscreen||S.msExitFullscreen||S.mozCancelFullScreen||S.webkitExitFullscreen).call(S)]:[3,2]:[3,2];case 1:n.sent(),e=V(),n.label=2;case 2:return J(e)||(j=e),[2,e]}}))}))}function V(){var e=screen;return[g(v(e.availTop),null),g(v(e.width)-v(e.availWidth)-g(v(e.availLeft),0),null),g(v(e.height)-v(e.availHeight)-g(v(e.availTop),0),null),g(v(e.availLeft),null)]}function J(e){for(var n=0;n<4;++n)if(e[n])return!1;return!0}var q=window;var K=document;var X={osCpu:function(){return navigator.oscpu},languages:function(){var e=[],n=H.language||H.userLanguage||H.browserLanguage||H.systemLanguage;if(void 0!==n&&e.push([n]),Array.isArray(H.languages))C()&&m([!("MediaSettingsRange"in p),"RTCEncodedAudioFrame"in p,""+p.Intl=="[object Intl]",""+p.Reflect=="[object Reflect]"])>=3||e.push(H.languages);else if("string"==typeof H.languages){var t=H.languages;t&&e.push(t.split(","))}return e},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return g(v(navigator.deviceMemory),void 0)},screenResolution:function(){var e=[h(N.screen.width),h(N.screen.height)];return e.sort().reverse(),e},screenFrame:function(){return s(this,void 0,void 0,(function(){var e,n;return l(this,(function(t){switch(t.label){case 0:return e=function(e){return null===e?null:function(e,n){if(void 0===n&&(n=1),Math.abs(n)>=1)return Math.round(e/n)*n;var t=1/n;return Math.round(e*t)/t}(e,10)},[4,W()];case 1:return n=t.sent(),[2,[e(n[0]),e(n[1]),e(n[2]),e(n[3])]]}}))}))},hardwareConcurrency:function(){return g(h(navigator.hardwareConcurrency),void 0)},timezone:function(){var e;if(null===(e=q.Intl)||void 0===e?void 0:e.DateTimeFormat){var n=(new q.Intl.DateTimeFormat).resolvedOptions().timeZone;if(n)return n}var t,r=(t=(new Date).getFullYear(),-Math.max(v(new Date(t,0,1).getTimezoneOffset()),v(new Date(t,6,1).getTimezoneOffset())));return"UTC"+(r>=0?"+":"")+Math.abs(r)},sessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},localStorage:function(){try{return!!window.localStorage}catch(e){return!0}},indexedDB:function(){if(!w()&&!b())try{return!!window.indexedDB}catch(e){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){return navigator.platform},plugins:function(){if(w())return[];if(navigator.plugins){for(var e=[],n=0;n<navigator.plugins.length;++n){var t=navigator.plugins[n];if(t){for(var r=[],i=0;i<t.length;++i){var o=t[i];r.push({type:o.type,suffixes:o.suffixes})}e.push({name:t.name,description:t.description,mimeTypes:r})}}return e}},canvas:function(){var e=function(){var e=document.createElement("canvas");return e.width=240,e.height=140,e.style.display="inline",[e,e.getContext("2d")]}(),n=e[0],t=e[1];if(!function(e,n){return!(!n||!e.toDataURL)}(n,t))return{winding:!1,data:""};t.rect(0,0,10,10),t.rect(2,2,6,6);var r=!t.isPointInPath(5,5,"evenodd");t.textBaseline="alphabetic",t.fillStyle="#f60",t.fillRect(125,1,62,20),t.fillStyle="#069",t.font='11pt "Times New Roman"';var i="Cwm fjordbank gly šŸ˜ƒ";return t.fillText(i,2,15),t.fillStyle="rgba(102, 204, 0, 0.2)",t.font="18pt Arial",t.fillText(i,4,45),t.globalCompositeOperation="multiply",t.fillStyle="rgb(255,0,255)",t.beginPath(),t.arc(50,50,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(0,255,255)",t.beginPath(),t.arc(100,50,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(255,255,0)",t.beginPath(),t.arc(75,100,50,0,2*Math.PI,!0),t.closePath(),t.fill(),t.fillStyle="rgb(255,0,255)",t.arc(75,75,75,0,2*Math.PI,!0),t.arc(75,75,25,0,2*Math.PI,!0),t.fill("evenodd"),{winding:r,data:B(n)}},touchSupport:function(){var e,n=0;void 0!==G.maxTouchPoints?n=h(G.maxTouchPoints):void 0!==G.msMaxTouchPoints&&(n=G.msMaxTouchPoints);try{document.createEvent("TouchEvent"),e=!0}catch(t){e=!1}return{maxTouchPoints:n,touchEvent:e,touchStart:"ontouchstart"in U}},fonts:function(){var e=F.body,n=F.createElement("div"),t=F.createElement("div"),r={},i={},o=function(){var e=F.createElement("span");e.textContent="mmMwWLliI0O&1";for(var n=0,t=Object.keys(L);n<t.length;n++){var r=t[n];e.style[r]=L[r]}return e},a=function(e){return D.some((function(n,t){return e[t].offsetWidth!==r[n]||e[t].offsetHeight!==i[n]}))},u=D.map((function(e){var t=o();return t.style.fontFamily=e,n.appendChild(t),t}));e.appendChild(n);for(var c=0,s=D.length;c<s;c++)r[D[c]]=u[c].offsetWidth,i[D[c]]=u[c].offsetHeight;var l=function(){for(var e={},n=function(n){e[n]=D.map((function(e){var r=function(e,n){var t=o();return t.style.fontFamily="'"+e+"',"+n,t}(n,e);return t.appendChild(r),r}))},r=0,i=R;r<i.length;r++){n(i[r])}return e}();e.appendChild(t);for(var f=[],d=0,h=R.length;d<h;d++)a(l[R[d]])&&f.push(R[d]);return e.removeChild(t),e.removeChild(n),f},audio:function(){return s(this,void 0,void 0,(function(){var e,n,t,r,i,o;return l(this,(function(a){switch(a.label){case 0:if(!(e=k.OfflineAudioContext||k.webkitOfflineAudioContext))return[2,-2];if(A()&&!M()&&!(m(["DOMRectList"in p,"RTCPeerConnectionIceEvent"in p,"SVGGeometryElement"in p,"ontransitioncancel"in p])>=3))return[2,-1];n=new e(1,44100,44100),(t=n.createOscillator()).type="triangle",P(n,t.frequency,1e4),r=n.createDynamicsCompressor(),P(n,r.threshold,-50),P(n,r.knee,40),P(n,r.ratio,12),P(n,r.reduction,-20),P(n,r.attack,0),P(n,r.release,.25),t.connect(r),r.connect(n.destination),t.start(0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,E(n)];case 2:return i=a.sent(),[3,5];case 3:if("timeout"===(o=a.sent()).name||"suspended"===o.name)return[2,-3];throw o;case 4:return t.disconnect(),r.disconnect(),[7];case 5:return[2,I(i.getChannelData(0))]}}))}))},pluginsSupport:function(){return void 0!==navigator.plugins},productSub:function(){return navigator.productSub},emptyEvalLength:function(){return eval.toString().length},errorFF:function(){try{throw"a"}catch(e){try{return e.toSource(),!0}catch(n){return!1}}},vendor:function(){var e;return null!==(e=navigator.vendor)&&void 0!==e?e:""},chrome:function(){return void 0!==window.chrome},cookiesEnabled:function(){try{K.cookie="cookietest=1; SameSite=Strict;";var e=-1!==K.cookie.indexOf("cookietest=");return K.cookie="cookietest=1; SameSite=Strict; expires=Thu, 01-Jan-1970 00:00:01 GMT",e}catch(n){return!1}}};function Y(e,n,t){return s(this,void 0,void 0,(function(){var r,i,o,a,u,s,f,d,h;return l(this,(function(l){switch(l.label){case 0:r=Date.now(),i={},o=0,a=Object.keys(e),l.label=1;case 1:if(!(o<a.length))return[3,7];if(u=a[o],function(e,n){for(var t=0,r=e.length;t<r;++t)if(e[t]===n)return!0;return!1}(t,u))return[3,6];s=void 0,l.label=2;case 2:return l.trys.push([2,4,,5]),h={},[4,e[u](n)];case 3:return h.value=l.sent(),s=h,[3,5];case 4:return f=l.sent(),s=f&&"object"==typeof f&&"message"in f?{error:f}:{error:{message:f}},[3,5];case 5:d=Date.now(),i[u]=c(c({},s),{duration:d-r}),r=d,l.label=6;case 6:return o++,[3,1];case 7:return[2,i]}}))}))}function Z(e){return JSON.stringify(e,(function(e,n){return n instanceof Error?c({name:(t=n).name,message:t.message,stack:null===(r=t.stack)||void 0===r?void 0:r.split("\n")},t):n;var t,r}),2)}function $(e){return u(function(e){for(var n="",t=0,r=Object.keys(e).sort();t<r.length;t++){var i=r[t],o=e[i],a=o.error?"error":JSON.stringify(o.value);n+=(n?"|":"")+i.replace(/([:|\\])/g,"\\$1")+":"+a}return n}(e))}var Q=function(){function e(){!function(){if(void 0===z){var e=function(){var n=V();J(n)?z=setTimeout(e,2500):(j=n,z=void 0)};e()}}()}return e.prototype.get=function(e){return void 0===e&&(e={}),s(this,void 0,void 0,(function(){var n,t;return l(this,(function(r){switch(r.label){case 0:return[4,Y(X,void 0,[])];case 1:return n=r.sent(),t=function(e){var n;return{components:e,get visitorId(){return void 0===n&&(n=$(this.components)),n},set visitorId(e){n=e}}}(n),e.debug&&console.log("Copy the text below to get the debug data:\n\n```\nversion: 3.1.0-dev.0\nuserAgent: "+navigator.userAgent+"\ngetOptions: "+JSON.stringify(e,void 0,2)+"\nvisitorId: "+t.visitorId+"\ncomponents: "+Z(n)+"\n```"),[2,t]}}))}))},e}();function _(e){var n=(void 0===e?{}:e).delayFallback,t=void 0===n?50:n;return s(this,void 0,void 0,(function(){return l(this,(function(e){switch(e.label){case 0:return[4,(n=t,r=2*t,void 0===r&&(r=1/0),new Promise((function(e){d.requestIdleCallback?d.requestIdleCallback((function(){return e()}),{timeout:r}):setTimeout(e,Math.min(n,r))})))];case 1:return e.sent(),[2,new Q]}var n,r}))}))}var ee={load:_,hashComponents:$,componentsToDebugString:Z},ne=u;return e.componentsToDebugString=Z,e.default=ee,e.getComponents=Y,e.getFullscreenElement=T,e.getScreenFrame=W,e.hashComponents=$,e.isChromium=C,e.isDesktopSafari=M,e.isEdgeHTML=b,e.isGecko=function(){var e;return m(["buildID"in y,(null===(e=S.documentElement)||void 0===e?void 0:e.style)&&"MozAppearance"in S.documentElement.style,"MediaRecorderErrorEvent"in p,"mozInnerScreenX"in p,"CSSMozDocumentRule"in p,"CanvasCaptureMediaStream"in p])>=4},e.isTrident=w,e.isWebKit=A,e.load=_,e.murmurX64Hash128=ne,e}({});
/**
* FingerprintJS v3.0.5 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* FingerprintJS v3.1.0-dev.0 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -311,4 +311,12 @@ *

var version = "3.0.5";
function __spreadArrays() {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
}
var version = "3.1.0-dev.0";
var w = window;

@@ -374,2 +382,14 @@ function requestIdleCallbackIfAvailable(fallbackTimeout, deadlineTimeout) {

}
function round(value, base) {
if (base === void 0) { base = 1; }
if (Math.abs(base) >= 1) {
return Math.round(value / base) * base;
}
else {
// Sometimes when a number is multiplied by a small number, precision is lost,
// for example 1234 * 0.0001 === 0.12340000000000001, and it's more precise divide: 1234 / (1 / 0.0001) === 0.1234.
var counterBase = 1 / base;
return Math.round(value * counterBase) / counterBase;
}
}

@@ -505,2 +525,13 @@ /*

}
/**
* Warning for package users:
* This function is out of Semantic Versioning, i.e. can change unexpectedly. Usage is at your own risk.
*/
function getFullscreenElement() {
return d.fullscreenElement || d.msFullscreenElement || d.mozFullScreenElement || d.webkitFullscreenElement || null;
}
function exitFullscreen() {
// `call` is required because the function throws an error without a proper "this" context
return (d.exitFullscreen || d.msExitFullscreen || d.mozCancelFullScreen || d.webkitExitFullscreen).call(d);
}

@@ -856,9 +887,9 @@ var w$2 = window;

context.fillStyle = '#069';
// https://github.com/Valve/fingerprintjs2/issues/66
// this can affect FP generation when applying different CSS on different websites
context.font = '11pt no-real-font-123';
// the choice of emojis has a gigantic impact on rendering performance (especially in FF)
// some newer emojis cause it to slow down 50-200 times
// context.fillText("CwēˆØm fjordbank \ud83d\ude03 gly", 2, 15)
var printedText = 'Cwm fjordbank \ud83d\ude03 gly';
// It's important to use explicit built-in fonts in order to exclude the affect of font preferences
// (there is a separate entropy source for them).
context.font = '11pt "Times New Roman"';
// The choice of emojis has a gigantic impact on rendering performance (especially in FF)
// Some newer emojis cause it to slow down 50-200 times
// There must be no text to the right of the emoji, see https://github.com/fingerprintjs/fingerprintjs/issues/574
var printedText = 'Cwm fjordbank gly \ud83d\ude03';
context.fillText(printedText, 2, 15);

@@ -868,3 +899,3 @@ context.fillStyle = 'rgba(102, 204, 0, 0.2)';

context.fillText(printedText, 4, 45);
// canvas blending
// Canvas blending
// http://blogs.adobe.com/webplatform/2013/01/28/blending-features-in-canvas/

@@ -889,3 +920,3 @@ // http://jsfiddle.net/NDYV8/16/

context.fillStyle = 'rgb(255,0,255)';
// canvas winding
// Canvas winding
// http://blogs.adobe.com/webplatform/2013/01/30/winding-rules-in-canvas/

@@ -980,25 +1011,128 @@ // http://jsfiddle.net/NDYV8/19/

var w$5 = window;
function getAvailableScreenResolution() {
if (w$5.screen.availWidth && w$5.screen.availHeight) {
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
var dimensions = [toInt(w$5.screen.availWidth), toInt(w$5.screen.availHeight)];
dimensions.sort().reverse();
return dimensions;
var screenFrameCheckInterval = 2500;
var roundingPrecision = 10;
// The type is readonly to protect from unwanted mutations
var screenFrameBackup;
var screenFrameSizeTimeoutId;
/**
* Starts watching the screen frame size. When a non-zero size appears, the size is saved and the watch is stopped.
* Later, when `getScreenFrame` is called, it will return the saved non-zero size if the current size is null.
*
* This trick is required to mitigate the fact that the screen frame turns null in some cases.
* See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
*/
function watchScreenFrame() {
if (screenFrameSizeTimeoutId !== undefined) {
return;
}
return undefined;
var checkScreenFrame = function () {
var frameSize = getCurrentScreenFrame();
if (isFrameSizeNull(frameSize)) {
screenFrameSizeTimeoutId = setTimeout(checkScreenFrame, screenFrameCheckInterval);
}
else {
screenFrameBackup = frameSize;
screenFrameSizeTimeoutId = undefined;
}
};
checkScreenFrame();
}
function getScreenFrame() {
return __awaiter(this, void 0, void 0, function () {
var frameSize;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
frameSize = getCurrentScreenFrame();
if (!isFrameSizeNull(frameSize)) return [3 /*break*/, 2];
if (screenFrameBackup) {
return [2 /*return*/, __spreadArrays(screenFrameBackup)];
}
if (!getFullscreenElement()) return [3 /*break*/, 2];
// Some browsers set the screen frame to zero when programmatic fullscreen is on.
// There is a chance of getting a non-zero frame after exiting the fullscreen.
// See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
return [4 /*yield*/, exitFullscreen()];
case 1:
// Some browsers set the screen frame to zero when programmatic fullscreen is on.
// There is a chance of getting a non-zero frame after exiting the fullscreen.
// See more on this at https://github.com/fingerprintjs/fingerprintjs/issues/568
_a.sent();
frameSize = getCurrentScreenFrame();
_a.label = 2;
case 2:
if (!isFrameSizeNull(frameSize)) {
screenFrameBackup = frameSize;
}
return [2 /*return*/, frameSize];
}
});
});
}
/**
* Sometimes the available screen resolution changes a bit, e.g. 1900x1440 ā†’ 1900x1439. A possible reason: macOS Dock
* shrinks to fit more icons when there is too little space. The rounding is used to mitigate the difference.
*/
function getRoundedScreenFrame() {
return __awaiter(this, void 0, void 0, function () {
var processSize, frameSize;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
processSize = function (sideSize) { return (sideSize === null ? null : round(sideSize, roundingPrecision)); };
return [4 /*yield*/, getScreenFrame()
// It might look like I don't know about `for` and `map`.
// In fact, such code is used to avoid TypeScript issues without using `as`.
];
case 1:
frameSize = _a.sent();
// It might look like I don't know about `for` and `map`.
// In fact, such code is used to avoid TypeScript issues without using `as`.
return [2 /*return*/, [processSize(frameSize[0]), processSize(frameSize[1]), processSize(frameSize[2]), processSize(frameSize[3])]];
}
});
});
}
function getCurrentScreenFrame() {
var s = screen;
// Some browsers return screen resolution as strings, e.g. "1200", instead of a number, e.g. 1200.
// I suspect it's done by certain plugins that randomize browser properties to prevent fingerprinting.
//
// Some browsers (IE, Edge ā‰¤18) don't provide `screen.availLeft` and `screen.availTop`. The property values are
// replaced with 0 in such cases to not lose the entropy from `screen.availWidth` and `screen.availHeight`.
return [
replaceNaN(toFloat(s.availTop), null),
replaceNaN(toFloat(s.width) - toFloat(s.availWidth) - replaceNaN(toFloat(s.availLeft), 0), null),
replaceNaN(toFloat(s.height) - toFloat(s.availHeight) - replaceNaN(toFloat(s.availTop), 0), null),
replaceNaN(toFloat(s.availLeft), null),
];
}
function isFrameSizeNull(frameSize) {
for (var i = 0; i < 4; ++i) {
if (frameSize[i]) {
return false;
}
}
return true;
}
function getHardwareConcurrency() {
try {
// sometimes hardware concurrency is a string
var concurrency = toInt(navigator.hardwareConcurrency);
return isNaN(concurrency) ? 1 : concurrency;
// sometimes hardware concurrency is a string
return replaceNaN(toInt(navigator.hardwareConcurrency), undefined);
}
var w$5 = window;
function getTimezone() {
var _a;
if ((_a = w$5.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
var timezone = new w$5.Intl.DateTimeFormat().resolvedOptions().timeZone;
if (timezone) {
return timezone;
}
}
catch (e) {
return 1;
}
// For browsers that don't support timezone names
// The minus is intentional because the JS offset is opposite to the real offset
var offset = -getTimezoneOffset();
return "UTC" + (offset >= 0 ? '+' : '') + Math.abs(offset);
}
function getTimezoneOffset() {

@@ -1015,11 +1149,2 @@ var currentYear = new Date().getFullYear();

var w$6 = window;
function getTimezone() {
var _a;
if ((_a = w$6.Intl) === null || _a === void 0 ? void 0 : _a.DateTimeFormat) {
return new w$6.Intl.DateTimeFormat().resolvedOptions().timeZone;
}
return undefined;
}
function getSessionStorage() {

@@ -1105,3 +1230,4 @@ try {

function getVendor() {
return navigator.vendor;
var _a;
return (_a = navigator.vendor) !== null && _a !== void 0 ? _a : '';
}

@@ -1155,5 +1281,4 @@

screenResolution: getScreenResolution,
availableScreenResolution: getAvailableScreenResolution,
screenFrame: getRoundedScreenFrame,
hardwareConcurrency: getHardwareConcurrency,
timezoneOffset: getTimezoneOffset,
timezone: getTimezone,

@@ -1168,3 +1293,2 @@ sessionStorage: getSessionStorage,

canvas: getCanvasFingerprint,
// adBlock: isAdblockUsed, // https://github.com/fingerprintjs/fingerprintjs/issues/405
touchSupport: getTouchSupport,

@@ -1239,3 +1363,3 @@ fonts: getFonts,

var result = '';
for (var _i = 0, _a = Object.keys(components); _i < _a.length; _i++) {
for (var _i = 0, _a = Object.keys(components).sort(); _i < _a.length; _i++) {
var componentKey = _a[_i];

@@ -1285,2 +1409,3 @@ var component = components[componentKey];

function OpenAgent() {
watchScreenFrame();
}

@@ -1350,2 +1475,4 @@ /**

exports.getComponents = getComponents;
exports.getFullscreenElement = getFullscreenElement;
exports.getScreenFrame = getScreenFrame;
exports.hashComponents = hashComponents;

@@ -1352,0 +1479,0 @@ exports.isChromium = isChromium;

/**
* FingerprintJS v3.0.5 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* FingerprintJS v3.1.0-dev.0 - Copyright (c) FingerprintJS, Inc, 2021 (https://fingerprintjs.com)
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.

@@ -9,2 +9,2 @@ *

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).FingerprintJS={})}(this,(function(e){"use strict";function t(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]+t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]+t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]+t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]+t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function n(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]*t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]*t[3],n[1]+=n[2]>>>16,n[2]&=65535,n[2]+=e[3]*t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]*t[3],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[2]*t[2],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[3]*t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function r(e,t){return 32===(t%=64)?[e[1],e[0]]:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t|e[0]>>>32-t]:(t-=32,[e[1]<<t|e[0]>>>32-t,e[0]<<t|e[1]>>>32-t])}function o(e,t){return 0===(t%=64)?e:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t]:[e[1]<<t-32,0]}function i(e,t){return[e[0]^t[0],e[1]^t[1]]}function a(e){return e=i(e,[0,e[0]>>>1]),e=i(e=n(e,[4283543511,3981806797]),[0,e[0]>>>1]),e=i(e=n(e,[3301882366,444984403]),[0,e[0]>>>1])}function c(e,c){c=c||0;var u,s=(e=e||"").length%16,l=e.length-s,f=[0,c],d=[0,c],h=[0,0],v=[0,0],g=[2277735313,289559509],p=[1291169091,658871167];for(u=0;u<l;u+=16)h=[255&e.charCodeAt(u+4)|(255&e.charCodeAt(u+5))<<8|(255&e.charCodeAt(u+6))<<16|(255&e.charCodeAt(u+7))<<24,255&e.charCodeAt(u)|(255&e.charCodeAt(u+1))<<8|(255&e.charCodeAt(u+2))<<16|(255&e.charCodeAt(u+3))<<24],v=[255&e.charCodeAt(u+12)|(255&e.charCodeAt(u+13))<<8|(255&e.charCodeAt(u+14))<<16|(255&e.charCodeAt(u+15))<<24,255&e.charCodeAt(u+8)|(255&e.charCodeAt(u+9))<<8|(255&e.charCodeAt(u+10))<<16|(255&e.charCodeAt(u+11))<<24],h=r(h=n(h,g),31),f=t(f=r(f=i(f,h=n(h,p)),27),d),f=t(n(f,[0,5]),[0,1390208809]),v=r(v=n(v,p),33),d=t(d=r(d=i(d,v=n(v,g)),31),f),d=t(n(d,[0,5]),[0,944331445]);switch(h=[0,0],v=[0,0],s){case 15:v=i(v,o([0,e.charCodeAt(u+14)],48));case 14:v=i(v,o([0,e.charCodeAt(u+13)],40));case 13:v=i(v,o([0,e.charCodeAt(u+12)],32));case 12:v=i(v,o([0,e.charCodeAt(u+11)],24));case 11:v=i(v,o([0,e.charCodeAt(u+10)],16));case 10:v=i(v,o([0,e.charCodeAt(u+9)],8));case 9:v=n(v=i(v,[0,e.charCodeAt(u+8)]),p),d=i(d,v=n(v=r(v,33),g));case 8:h=i(h,o([0,e.charCodeAt(u+7)],56));case 7:h=i(h,o([0,e.charCodeAt(u+6)],48));case 6:h=i(h,o([0,e.charCodeAt(u+5)],40));case 5:h=i(h,o([0,e.charCodeAt(u+4)],32));case 4:h=i(h,o([0,e.charCodeAt(u+3)],24));case 3:h=i(h,o([0,e.charCodeAt(u+2)],16));case 2:h=i(h,o([0,e.charCodeAt(u+1)],8));case 1:h=n(h=i(h,[0,e.charCodeAt(u)]),g),f=i(f,h=n(h=r(h,31),p))}return f=t(f=i(f,[0,e.length]),d=i(d,[0,e.length])),d=t(d,f),f=t(f=a(f),d=a(d)),d=t(d,f),("00000000"+(f[0]>>>0).toString(16)).slice(-8)+("00000000"+(f[1]>>>0).toString(16)).slice(-8)+("00000000"+(d[0]>>>0).toString(16)).slice(-8)+("00000000"+(d[1]>>>0).toString(16)).slice(-8)}var u=function(){return(u=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function s(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(t){i(t)}}function c(e){try{u(r.throw(e))}catch(t){i(t)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,c)}u((r=r.apply(e,t||[])).next())}))}function l(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(c){i=[6,c],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}var f=window;function d(e){return parseInt(e)}function h(e){return parseFloat(e)}function v(e){return e.reduce((function(e,t){return e+(t?1:0)}),0)}var g=window,p=navigator,m=document;function y(){return v(["MSCSSMatrix"in g,"msSetImmediate"in g,"msIndexedDB"in g,"msMaxTouchPoints"in p,"msPointerEnabled"in p])>=4}function S(){return v(["msWriteProfilerMark"in g,"MSStream"in g,"msLaunchUri"in p,"msSaveBlob"in p])>=3&&!y()}function b(){return v(["webkitPersistentStorage"in p,"webkitTemporaryStorage"in p,0===p.vendor.indexOf("Google"),"webkitResolveLocalFileSystemURL"in g,"BatteryManager"in g,"webkitMediaStream"in g,"webkitSpeechGrammar"in g])>=5}function w(){return v(["ApplePayError"in g,"CSSPrimitiveValue"in g,"Counter"in g,0===p.vendor.indexOf("Apple"),"getStorageUpdates"in p,"WebKitMediaKeys"in g])>=4}function C(){return v(["safari"in g,!("DeviceMotionEvent"in g),!("ongestureend"in g),!("standalone"in p)])>=3}var A=window,M=document;function T(e,t,n){(function(e){return e&&"function"==typeof e.setValueAtTime})(t)&&t.setValueAtTime(n,e.currentTime)}function x(e){return new Promise((function(t,n){e.oncomplete=function(e){return t(e.renderedBuffer)};var r=3,o=function(){switch(e.startRendering(),e.state){case"running":setTimeout((function(){return n(P("timeout"))}),1e3);break;case"suspended":M.hidden||r--,r>0?setTimeout(o,500):n(P("suspended"))}};o()}))}function k(e){for(var t=0,n=4500;n<5e3;++n)t+=Math.abs(e[n]);return t}function P(e){var t=new Error(e);return t.name=e,t}var O=document,I=["monospace","sans-serif","serif"],E=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"],D={fontStyle:"normal",fontWeight:"normal",letterSpacing:"normal",lineBreak:"auto",lineHeight:"normal",textTransform:"none",textAlign:"left",textDecoration:"none",textShadow:"none",whiteSpace:"normal",wordBreak:"normal",wordSpacing:"normal",position:"absolute",left:"-9999px",fontSize:"48px"};function R(e){return e.toDataURL()}var B=navigator,L=window;var F=navigator;var G=window;var H=window;var U=window;var j=document;var N={osCpu:function(){return navigator.oscpu},languages:function(){var e=[],t=F.language||F.userLanguage||F.browserLanguage||F.systemLanguage;if(void 0!==t&&e.push([t]),Array.isArray(F.languages))b()&&v([!("MediaSettingsRange"in g),"RTCEncodedAudioFrame"in g,""+g.Intl=="[object Intl]",""+g.Reflect=="[object Reflect]"])>=3||e.push(F.languages);else if("string"==typeof F.languages){var n=F.languages;n&&e.push(n.split(","))}return e},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return e=h(navigator.deviceMemory),t=void 0,"number"==typeof e&&isNaN(e)?t:e;var e,t},screenResolution:function(){var e=[d(G.screen.width),d(G.screen.height)];return e.sort().reverse(),e},availableScreenResolution:function(){if(H.screen.availWidth&&H.screen.availHeight){var e=[d(H.screen.availWidth),d(H.screen.availHeight)];return e.sort().reverse(),e}},hardwareConcurrency:function(){try{var e=d(navigator.hardwareConcurrency);return isNaN(e)?1:e}catch(t){return 1}},timezoneOffset:function(){var e=(new Date).getFullYear();return Math.max(h(new Date(e,0,1).getTimezoneOffset()),h(new Date(e,6,1).getTimezoneOffset()))},timezone:function(){var e;if(null===(e=U.Intl)||void 0===e?void 0:e.DateTimeFormat)return(new U.Intl.DateTimeFormat).resolvedOptions().timeZone},sessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},localStorage:function(){try{return!!window.localStorage}catch(e){return!0}},indexedDB:function(){if(!y()&&!S())try{return!!window.indexedDB}catch(e){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){return navigator.platform},plugins:function(){if(y())return[];if(navigator.plugins){for(var e=[],t=0;t<navigator.plugins.length;++t){var n=navigator.plugins[t];if(n){for(var r=[],o=0;o<n.length;++o){var i=n[o];r.push({type:i.type,suffixes:i.suffixes})}e.push({name:n.name,description:n.description,mimeTypes:r})}}return e}},canvas:function(){var e=function(){var e=document.createElement("canvas");return e.width=240,e.height=140,e.style.display="inline",[e,e.getContext("2d")]}(),t=e[0],n=e[1];if(!function(e,t){return!(!t||!e.toDataURL)}(t,n))return{winding:!1,data:""};n.rect(0,0,10,10),n.rect(2,2,6,6);var r=!n.isPointInPath(5,5,"evenodd");n.textBaseline="alphabetic",n.fillStyle="#f60",n.fillRect(125,1,62,20),n.fillStyle="#069",n.font="11pt no-real-font-123";var o="Cwm fjordbank šŸ˜ƒ gly";return n.fillText(o,2,15),n.fillStyle="rgba(102, 204, 0, 0.2)",n.font="18pt Arial",n.fillText(o,4,45),n.globalCompositeOperation="multiply",n.fillStyle="rgb(255,0,255)",n.beginPath(),n.arc(50,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(0,255,255)",n.beginPath(),n.arc(100,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,255,0)",n.beginPath(),n.arc(75,100,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,0,255)",n.arc(75,75,75,0,2*Math.PI,!0),n.arc(75,75,25,0,2*Math.PI,!0),n.fill("evenodd"),{winding:r,data:R(t)}},touchSupport:function(){var e,t=0;void 0!==B.maxTouchPoints?t=d(B.maxTouchPoints):void 0!==B.msMaxTouchPoints&&(t=B.msMaxTouchPoints);try{document.createEvent("TouchEvent"),e=!0}catch(n){e=!1}return{maxTouchPoints:t,touchEvent:e,touchStart:"ontouchstart"in L}},fonts:function(){var e=O.body,t=O.createElement("div"),n=O.createElement("div"),r={},o={},i=function(){var e=O.createElement("span");e.textContent="mmMwWLliI0O&1";for(var t=0,n=Object.keys(D);t<n.length;t++){var r=n[t];e.style[r]=D[r]}return e},a=function(e){return I.some((function(t,n){return e[n].offsetWidth!==r[t]||e[n].offsetHeight!==o[t]}))},c=I.map((function(e){var n=i();return n.style.fontFamily=e,t.appendChild(n),n}));e.appendChild(t);for(var u=0,s=I.length;u<s;u++)r[I[u]]=c[u].offsetWidth,o[I[u]]=c[u].offsetHeight;var l=function(){for(var e={},t=function(t){e[t]=I.map((function(e){var r=function(e,t){var n=i();return n.style.fontFamily="'"+e+"',"+t,n}(t,e);return n.appendChild(r),r}))},r=0,o=E;r<o.length;r++){t(o[r])}return e}();e.appendChild(n);for(var f=[],d=0,h=E.length;d<h;d++)a(l[E[d]])&&f.push(E[d]);return e.removeChild(n),e.removeChild(t),f},audio:function(){return s(this,void 0,void 0,(function(){var e,t,n,r,o,i;return l(this,(function(a){switch(a.label){case 0:if(!(e=A.OfflineAudioContext||A.webkitOfflineAudioContext))return[2,-2];if(w()&&!C()&&!(v(["DOMRectList"in g,"RTCPeerConnectionIceEvent"in g,"SVGGeometryElement"in g,"ontransitioncancel"in g])>=3))return[2,-1];t=new e(1,44100,44100),(n=t.createOscillator()).type="triangle",T(t,n.frequency,1e4),r=t.createDynamicsCompressor(),T(t,r.threshold,-50),T(t,r.knee,40),T(t,r.ratio,12),T(t,r.reduction,-20),T(t,r.attack,0),T(t,r.release,.25),n.connect(r),r.connect(t.destination),n.start(0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,x(t)];case 2:return o=a.sent(),[3,5];case 3:if("timeout"===(i=a.sent()).name||"suspended"===i.name)return[2,-3];throw i;case 4:return n.disconnect(),r.disconnect(),[7];case 5:return[2,k(o.getChannelData(0))]}}))}))},pluginsSupport:function(){return void 0!==navigator.plugins},productSub:function(){return navigator.productSub},emptyEvalLength:function(){return eval.toString().length},errorFF:function(){try{throw"a"}catch(e){try{return e.toSource(),!0}catch(t){return!1}}},vendor:function(){return navigator.vendor},chrome:function(){return void 0!==window.chrome},cookiesEnabled:function(){try{j.cookie="cookietest=1; SameSite=Strict;";var e=-1!==j.cookie.indexOf("cookietest=");return j.cookie="cookietest=1; SameSite=Strict; expires=Thu, 01-Jan-1970 00:00:01 GMT",e}catch(t){return!1}}};function W(e,t,n){return s(this,void 0,void 0,(function(){var r,o,i,a,c,s,f,d,h;return l(this,(function(l){switch(l.label){case 0:r=Date.now(),o={},i=0,a=Object.keys(e),l.label=1;case 1:if(!(i<a.length))return[3,7];if(c=a[i],function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return!0;return!1}(n,c))return[3,6];s=void 0,l.label=2;case 2:return l.trys.push([2,4,,5]),h={},[4,e[c](t)];case 3:return h.value=l.sent(),s=h,[3,5];case 4:return f=l.sent(),s=f&&"object"==typeof f&&"message"in f?{error:f}:{error:{message:f}},[3,5];case 5:d=Date.now(),o[c]=u(u({},s),{duration:d-r}),r=d,l.label=6;case 6:return i++,[3,1];case 7:return[2,o]}}))}))}function z(e){return JSON.stringify(e,(function(e,t){return t instanceof Error?u({name:(n=t).name,message:n.message,stack:null===(r=n.stack)||void 0===r?void 0:r.split("\n")},n):t;var n,r}),2)}function V(e){return c(function(e){for(var t="",n=0,r=Object.keys(e);n<r.length;n++){var o=r[n],i=e[o],a=i.error?"error":JSON.stringify(i.value);t+=(t?"|":"")+o.replace(/([:|\\])/g,"\\$1")+":"+a}return t}(e))}var J=function(){function e(){}return e.prototype.get=function(e){return void 0===e&&(e={}),s(this,void 0,void 0,(function(){var t,n;return l(this,(function(r){switch(r.label){case 0:return[4,W(N,void 0,[])];case 1:return t=r.sent(),n=function(e){var t;return{components:e,get visitorId(){return void 0===t&&(t=V(this.components)),t},set visitorId(e){t=e}}}(t),e.debug&&console.log("Copy the text below to get the debug data:\n\n```\nversion: 3.0.5\nuserAgent: "+navigator.userAgent+"\ngetOptions: "+JSON.stringify(e,void 0,2)+"\nvisitorId: "+n.visitorId+"\ncomponents: "+z(t)+"\n```"),[2,n]}}))}))},e}();function q(e){var t=(void 0===e?{}:e).delayFallback,n=void 0===t?50:t;return s(this,void 0,void 0,(function(){return l(this,(function(e){switch(e.label){case 0:return[4,(t=n,r=2*n,void 0===r&&(r=1/0),new Promise((function(e){f.requestIdleCallback?f.requestIdleCallback((function(){return e()}),{timeout:r}):setTimeout(e,Math.min(t,r))})))];case 1:return e.sent(),[2,new J]}var t,r}))}))}var K={load:q,hashComponents:V,componentsToDebugString:z},X=c;e.componentsToDebugString=z,e.default=K,e.getComponents=W,e.hashComponents=V,e.isChromium=b,e.isDesktopSafari=C,e.isEdgeHTML=S,e.isGecko=function(){var e;return v(["buildID"in p,(null===(e=m.documentElement)||void 0===e?void 0:e.style)&&"MozAppearance"in m.documentElement.style,"MediaRecorderErrorEvent"in g,"mozInnerScreenX"in g,"CSSMozDocumentRule"in g,"CanvasCaptureMediaStream"in g])>=4},e.isTrident=y,e.isWebKit=w,e.load=q,e.murmurX64Hash128=X,Object.defineProperty(e,"__esModule",{value:!0})}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).FingerprintJS={})}(this,(function(e){"use strict";function t(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]+t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]+t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]+t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]+t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function n(e,t){e=[e[0]>>>16,65535&e[0],e[1]>>>16,65535&e[1]],t=[t[0]>>>16,65535&t[0],t[1]>>>16,65535&t[1]];var n=[0,0,0,0];return n[3]+=e[3]*t[3],n[2]+=n[3]>>>16,n[3]&=65535,n[2]+=e[2]*t[3],n[1]+=n[2]>>>16,n[2]&=65535,n[2]+=e[3]*t[2],n[1]+=n[2]>>>16,n[2]&=65535,n[1]+=e[1]*t[3],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[2]*t[2],n[0]+=n[1]>>>16,n[1]&=65535,n[1]+=e[3]*t[1],n[0]+=n[1]>>>16,n[1]&=65535,n[0]+=e[0]*t[3]+e[1]*t[2]+e[2]*t[1]+e[3]*t[0],n[0]&=65535,[n[0]<<16|n[1],n[2]<<16|n[3]]}function r(e,t){return 32===(t%=64)?[e[1],e[0]]:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t|e[0]>>>32-t]:(t-=32,[e[1]<<t|e[0]>>>32-t,e[0]<<t|e[1]>>>32-t])}function i(e,t){return 0===(t%=64)?e:t<32?[e[0]<<t|e[1]>>>32-t,e[1]<<t]:[e[1]<<t-32,0]}function o(e,t){return[e[0]^t[0],e[1]^t[1]]}function a(e){return e=o(e,[0,e[0]>>>1]),e=o(e=n(e,[4283543511,3981806797]),[0,e[0]>>>1]),e=o(e=n(e,[3301882366,444984403]),[0,e[0]>>>1])}function u(e,u){u=u||0;var c,s=(e=e||"").length%16,l=e.length-s,f=[0,u],d=[0,u],h=[0,0],v=[0,0],g=[2277735313,289559509],m=[1291169091,658871167];for(c=0;c<l;c+=16)h=[255&e.charCodeAt(c+4)|(255&e.charCodeAt(c+5))<<8|(255&e.charCodeAt(c+6))<<16|(255&e.charCodeAt(c+7))<<24,255&e.charCodeAt(c)|(255&e.charCodeAt(c+1))<<8|(255&e.charCodeAt(c+2))<<16|(255&e.charCodeAt(c+3))<<24],v=[255&e.charCodeAt(c+12)|(255&e.charCodeAt(c+13))<<8|(255&e.charCodeAt(c+14))<<16|(255&e.charCodeAt(c+15))<<24,255&e.charCodeAt(c+8)|(255&e.charCodeAt(c+9))<<8|(255&e.charCodeAt(c+10))<<16|(255&e.charCodeAt(c+11))<<24],h=r(h=n(h,g),31),f=t(f=r(f=o(f,h=n(h,m)),27),d),f=t(n(f,[0,5]),[0,1390208809]),v=r(v=n(v,m),33),d=t(d=r(d=o(d,v=n(v,g)),31),f),d=t(n(d,[0,5]),[0,944331445]);switch(h=[0,0],v=[0,0],s){case 15:v=o(v,i([0,e.charCodeAt(c+14)],48));case 14:v=o(v,i([0,e.charCodeAt(c+13)],40));case 13:v=o(v,i([0,e.charCodeAt(c+12)],32));case 12:v=o(v,i([0,e.charCodeAt(c+11)],24));case 11:v=o(v,i([0,e.charCodeAt(c+10)],16));case 10:v=o(v,i([0,e.charCodeAt(c+9)],8));case 9:v=n(v=o(v,[0,e.charCodeAt(c+8)]),m),d=o(d,v=n(v=r(v,33),g));case 8:h=o(h,i([0,e.charCodeAt(c+7)],56));case 7:h=o(h,i([0,e.charCodeAt(c+6)],48));case 6:h=o(h,i([0,e.charCodeAt(c+5)],40));case 5:h=o(h,i([0,e.charCodeAt(c+4)],32));case 4:h=o(h,i([0,e.charCodeAt(c+3)],24));case 3:h=o(h,i([0,e.charCodeAt(c+2)],16));case 2:h=o(h,i([0,e.charCodeAt(c+1)],8));case 1:h=n(h=o(h,[0,e.charCodeAt(c)]),g),f=o(f,h=n(h=r(h,31),m))}return f=t(f=o(f,[0,e.length]),d=o(d,[0,e.length])),d=t(d,f),f=t(f=a(f),d=a(d)),d=t(d,f),("00000000"+(f[0]>>>0).toString(16)).slice(-8)+("00000000"+(f[1]>>>0).toString(16)).slice(-8)+("00000000"+(d[0]>>>0).toString(16)).slice(-8)+("00000000"+(d[1]>>>0).toString(16)).slice(-8)}var c=function(){return(c=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e}).apply(this,arguments)};function s(e,t,n,r){return new(n||(n=Promise))((function(i,o){function a(e){try{c(r.next(e))}catch(t){o(t)}}function u(e){try{c(r.throw(e))}catch(t){o(t)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))}function l(e,t){var n,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(o){return function(u){return function(o){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(i=2&o[0]?r.return:o[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,o[1])).done)return i;switch(r=0,i&&(o=[2&o[0],i.value]),o[0]){case 0:case 1:i=o;break;case 4:return a.label++,{value:o[1],done:!1};case 5:a.label++,r=o[1],o=[0];continue;case 7:o=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==o[0]&&2!==o[0])){a=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]<i[3])){a.label=o[1];break}if(6===o[0]&&a.label<i[1]){a.label=i[1],i=o;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(o);break}i[2]&&a.ops.pop(),a.trys.pop();continue}o=t.call(e,a)}catch(u){o=[6,u],r=0}finally{n=i=0}if(5&o[0])throw o[1];return{value:o[0]?o[1]:void 0,done:!0}}([o,u])}}}function f(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),i=0;for(t=0;t<n;t++)for(var o=arguments[t],a=0,u=o.length;a<u;a++,i++)r[i]=o[a];return r}var d=window;function h(e){return parseInt(e)}function v(e){return parseFloat(e)}function g(e,t){return"number"==typeof e&&isNaN(e)?t:e}function m(e){return e.reduce((function(e,t){return e+(t?1:0)}),0)}var p=window,y=navigator,b=document;function S(){return m(["MSCSSMatrix"in p,"msSetImmediate"in p,"msIndexedDB"in p,"msMaxTouchPoints"in y,"msPointerEnabled"in y])>=4}function w(){return m(["msWriteProfilerMark"in p,"MSStream"in p,"msLaunchUri"in y,"msSaveBlob"in y])>=3&&!S()}function C(){return m(["webkitPersistentStorage"in y,"webkitTemporaryStorage"in y,0===y.vendor.indexOf("Google"),"webkitResolveLocalFileSystemURL"in p,"BatteryManager"in p,"webkitMediaStream"in p,"webkitSpeechGrammar"in p])>=5}function A(){return m(["ApplePayError"in p,"CSSPrimitiveValue"in p,"Counter"in p,0===y.vendor.indexOf("Apple"),"getStorageUpdates"in y,"WebKitMediaKeys"in p])>=4}function M(){return m(["safari"in p,!("DeviceMotionEvent"in p),!("ongestureend"in p),!("standalone"in y)])>=3}function T(){return b.fullscreenElement||b.msFullscreenElement||b.mozFullScreenElement||b.webkitFullscreenElement||null}var x=window,k=document;function P(e,t,n){(function(e){return e&&"function"==typeof e.setValueAtTime})(t)&&t.setValueAtTime(n,e.currentTime)}function E(e){return new Promise((function(t,n){e.oncomplete=function(e){return t(e.renderedBuffer)};var r=3,i=function(){switch(e.startRendering(),e.state){case"running":setTimeout((function(){return n(O("timeout"))}),1e3);break;case"suspended":k.hidden||r--,r>0?setTimeout(i,500):n(O("suspended"))}};i()}))}function I(e){for(var t=0,n=4500;n<5e3;++n)t+=Math.abs(e[n]);return t}function O(e){var t=new Error(e);return t.name=e,t}var F=document,D=["monospace","sans-serif","serif"],R=["sans-serif-thin","ARNO PRO","Agency FB","Arabic Typesetting","Arial Unicode MS","AvantGarde Bk BT","BankGothic Md BT","Batang","Bitstream Vera Sans Mono","Calibri","Century","Century Gothic","Clarendon","EUROSTILE","Franklin Gothic","Futura Bk BT","Futura Md BT","GOTHAM","Gill Sans","HELV","Haettenschweiler","Helvetica Neue","Humanst521 BT","Leelawadee","Letter Gothic","Levenim MT","Lucida Bright","Lucida Sans","Menlo","MS Mincho","MS Outlook","MS Reference Specialty","MS UI Gothic","MT Extra","MYRIAD PRO","Marlett","Meiryo UI","Microsoft Uighur","Minion Pro","Monotype Corsiva","PMingLiU","Pristina","SCRIPTINA","Segoe UI Light","Serifa","SimHei","Small Fonts","Staccato222 BT","TRAJAN PRO","Univers CE 55 Medium","Vrinda","ZWAdobeF"],L={fontStyle:"normal",fontWeight:"normal",letterSpacing:"normal",lineBreak:"auto",lineHeight:"normal",textTransform:"none",textAlign:"left",textDecoration:"none",textShadow:"none",whiteSpace:"normal",wordBreak:"normal",wordSpacing:"normal",position:"absolute",left:"-9999px",fontSize:"48px"};function B(e){return e.toDataURL()}var G=navigator,U=window;var H=navigator;var j=window;var N,z;function W(){return s(this,void 0,void 0,(function(){var e;return l(this,(function(t){switch(t.label){case 0:return J(e=V())?N?[2,f(N)]:T()?[4,(b.exitFullscreen||b.msExitFullscreen||b.mozCancelFullScreen||b.webkitExitFullscreen).call(b)]:[3,2]:[3,2];case 1:t.sent(),e=V(),t.label=2;case 2:return J(e)||(N=e),[2,e]}}))}))}function V(){var e=screen;return[g(v(e.availTop),null),g(v(e.width)-v(e.availWidth)-g(v(e.availLeft),0),null),g(v(e.height)-v(e.availHeight)-g(v(e.availTop),0),null),g(v(e.availLeft),null)]}function J(e){for(var t=0;t<4;++t)if(e[t])return!1;return!0}var q=window;var K=document;var X={osCpu:function(){return navigator.oscpu},languages:function(){var e=[],t=H.language||H.userLanguage||H.browserLanguage||H.systemLanguage;if(void 0!==t&&e.push([t]),Array.isArray(H.languages))C()&&m([!("MediaSettingsRange"in p),"RTCEncodedAudioFrame"in p,""+p.Intl=="[object Intl]",""+p.Reflect=="[object Reflect]"])>=3||e.push(H.languages);else if("string"==typeof H.languages){var n=H.languages;n&&e.push(n.split(","))}return e},colorDepth:function(){return window.screen.colorDepth},deviceMemory:function(){return g(v(navigator.deviceMemory),void 0)},screenResolution:function(){var e=[h(j.screen.width),h(j.screen.height)];return e.sort().reverse(),e},screenFrame:function(){return s(this,void 0,void 0,(function(){var e,t;return l(this,(function(n){switch(n.label){case 0:return e=function(e){return null===e?null:function(e,t){if(void 0===t&&(t=1),Math.abs(t)>=1)return Math.round(e/t)*t;var n=1/t;return Math.round(e*n)/n}(e,10)},[4,W()];case 1:return t=n.sent(),[2,[e(t[0]),e(t[1]),e(t[2]),e(t[3])]]}}))}))},hardwareConcurrency:function(){return g(h(navigator.hardwareConcurrency),void 0)},timezone:function(){var e;if(null===(e=q.Intl)||void 0===e?void 0:e.DateTimeFormat){var t=(new q.Intl.DateTimeFormat).resolvedOptions().timeZone;if(t)return t}var n,r=(n=(new Date).getFullYear(),-Math.max(v(new Date(n,0,1).getTimezoneOffset()),v(new Date(n,6,1).getTimezoneOffset())));return"UTC"+(r>=0?"+":"")+Math.abs(r)},sessionStorage:function(){try{return!!window.sessionStorage}catch(e){return!0}},localStorage:function(){try{return!!window.localStorage}catch(e){return!0}},indexedDB:function(){if(!S()&&!w())try{return!!window.indexedDB}catch(e){return!0}},openDatabase:function(){return!!window.openDatabase},cpuClass:function(){return navigator.cpuClass},platform:function(){return navigator.platform},plugins:function(){if(S())return[];if(navigator.plugins){for(var e=[],t=0;t<navigator.plugins.length;++t){var n=navigator.plugins[t];if(n){for(var r=[],i=0;i<n.length;++i){var o=n[i];r.push({type:o.type,suffixes:o.suffixes})}e.push({name:n.name,description:n.description,mimeTypes:r})}}return e}},canvas:function(){var e=function(){var e=document.createElement("canvas");return e.width=240,e.height=140,e.style.display="inline",[e,e.getContext("2d")]}(),t=e[0],n=e[1];if(!function(e,t){return!(!t||!e.toDataURL)}(t,n))return{winding:!1,data:""};n.rect(0,0,10,10),n.rect(2,2,6,6);var r=!n.isPointInPath(5,5,"evenodd");n.textBaseline="alphabetic",n.fillStyle="#f60",n.fillRect(125,1,62,20),n.fillStyle="#069",n.font='11pt "Times New Roman"';var i="Cwm fjordbank gly šŸ˜ƒ";return n.fillText(i,2,15),n.fillStyle="rgba(102, 204, 0, 0.2)",n.font="18pt Arial",n.fillText(i,4,45),n.globalCompositeOperation="multiply",n.fillStyle="rgb(255,0,255)",n.beginPath(),n.arc(50,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(0,255,255)",n.beginPath(),n.arc(100,50,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,255,0)",n.beginPath(),n.arc(75,100,50,0,2*Math.PI,!0),n.closePath(),n.fill(),n.fillStyle="rgb(255,0,255)",n.arc(75,75,75,0,2*Math.PI,!0),n.arc(75,75,25,0,2*Math.PI,!0),n.fill("evenodd"),{winding:r,data:B(t)}},touchSupport:function(){var e,t=0;void 0!==G.maxTouchPoints?t=h(G.maxTouchPoints):void 0!==G.msMaxTouchPoints&&(t=G.msMaxTouchPoints);try{document.createEvent("TouchEvent"),e=!0}catch(n){e=!1}return{maxTouchPoints:t,touchEvent:e,touchStart:"ontouchstart"in U}},fonts:function(){var e=F.body,t=F.createElement("div"),n=F.createElement("div"),r={},i={},o=function(){var e=F.createElement("span");e.textContent="mmMwWLliI0O&1";for(var t=0,n=Object.keys(L);t<n.length;t++){var r=n[t];e.style[r]=L[r]}return e},a=function(e){return D.some((function(t,n){return e[n].offsetWidth!==r[t]||e[n].offsetHeight!==i[t]}))},u=D.map((function(e){var n=o();return n.style.fontFamily=e,t.appendChild(n),n}));e.appendChild(t);for(var c=0,s=D.length;c<s;c++)r[D[c]]=u[c].offsetWidth,i[D[c]]=u[c].offsetHeight;var l=function(){for(var e={},t=function(t){e[t]=D.map((function(e){var r=function(e,t){var n=o();return n.style.fontFamily="'"+e+"',"+t,n}(t,e);return n.appendChild(r),r}))},r=0,i=R;r<i.length;r++){t(i[r])}return e}();e.appendChild(n);for(var f=[],d=0,h=R.length;d<h;d++)a(l[R[d]])&&f.push(R[d]);return e.removeChild(n),e.removeChild(t),f},audio:function(){return s(this,void 0,void 0,(function(){var e,t,n,r,i,o;return l(this,(function(a){switch(a.label){case 0:if(!(e=x.OfflineAudioContext||x.webkitOfflineAudioContext))return[2,-2];if(A()&&!M()&&!(m(["DOMRectList"in p,"RTCPeerConnectionIceEvent"in p,"SVGGeometryElement"in p,"ontransitioncancel"in p])>=3))return[2,-1];t=new e(1,44100,44100),(n=t.createOscillator()).type="triangle",P(t,n.frequency,1e4),r=t.createDynamicsCompressor(),P(t,r.threshold,-50),P(t,r.knee,40),P(t,r.ratio,12),P(t,r.reduction,-20),P(t,r.attack,0),P(t,r.release,.25),n.connect(r),r.connect(t.destination),n.start(0),a.label=1;case 1:return a.trys.push([1,3,4,5]),[4,E(t)];case 2:return i=a.sent(),[3,5];case 3:if("timeout"===(o=a.sent()).name||"suspended"===o.name)return[2,-3];throw o;case 4:return n.disconnect(),r.disconnect(),[7];case 5:return[2,I(i.getChannelData(0))]}}))}))},pluginsSupport:function(){return void 0!==navigator.plugins},productSub:function(){return navigator.productSub},emptyEvalLength:function(){return eval.toString().length},errorFF:function(){try{throw"a"}catch(e){try{return e.toSource(),!0}catch(t){return!1}}},vendor:function(){var e;return null!==(e=navigator.vendor)&&void 0!==e?e:""},chrome:function(){return void 0!==window.chrome},cookiesEnabled:function(){try{K.cookie="cookietest=1; SameSite=Strict;";var e=-1!==K.cookie.indexOf("cookietest=");return K.cookie="cookietest=1; SameSite=Strict; expires=Thu, 01-Jan-1970 00:00:01 GMT",e}catch(t){return!1}}};function Y(e,t,n){return s(this,void 0,void 0,(function(){var r,i,o,a,u,s,f,d,h;return l(this,(function(l){switch(l.label){case 0:r=Date.now(),i={},o=0,a=Object.keys(e),l.label=1;case 1:if(!(o<a.length))return[3,7];if(u=a[o],function(e,t){for(var n=0,r=e.length;n<r;++n)if(e[n]===t)return!0;return!1}(n,u))return[3,6];s=void 0,l.label=2;case 2:return l.trys.push([2,4,,5]),h={},[4,e[u](t)];case 3:return h.value=l.sent(),s=h,[3,5];case 4:return f=l.sent(),s=f&&"object"==typeof f&&"message"in f?{error:f}:{error:{message:f}},[3,5];case 5:d=Date.now(),i[u]=c(c({},s),{duration:d-r}),r=d,l.label=6;case 6:return o++,[3,1];case 7:return[2,i]}}))}))}function Z(e){return JSON.stringify(e,(function(e,t){return t instanceof Error?c({name:(n=t).name,message:n.message,stack:null===(r=n.stack)||void 0===r?void 0:r.split("\n")},n):t;var n,r}),2)}function _(e){return u(function(e){for(var t="",n=0,r=Object.keys(e).sort();n<r.length;n++){var i=r[n],o=e[i],a=o.error?"error":JSON.stringify(o.value);t+=(t?"|":"")+i.replace(/([:|\\])/g,"\\$1")+":"+a}return t}(e))}var $=function(){function e(){!function(){if(void 0===z){var e=function(){var t=V();J(t)?z=setTimeout(e,2500):(N=t,z=void 0)};e()}}()}return e.prototype.get=function(e){return void 0===e&&(e={}),s(this,void 0,void 0,(function(){var t,n;return l(this,(function(r){switch(r.label){case 0:return[4,Y(X,void 0,[])];case 1:return t=r.sent(),n=function(e){var t;return{components:e,get visitorId(){return void 0===t&&(t=_(this.components)),t},set visitorId(e){t=e}}}(t),e.debug&&console.log("Copy the text below to get the debug data:\n\n```\nversion: 3.1.0-dev.0\nuserAgent: "+navigator.userAgent+"\ngetOptions: "+JSON.stringify(e,void 0,2)+"\nvisitorId: "+n.visitorId+"\ncomponents: "+Z(t)+"\n```"),[2,n]}}))}))},e}();function Q(e){var t=(void 0===e?{}:e).delayFallback,n=void 0===t?50:t;return s(this,void 0,void 0,(function(){return l(this,(function(e){switch(e.label){case 0:return[4,(t=n,r=2*n,void 0===r&&(r=1/0),new Promise((function(e){d.requestIdleCallback?d.requestIdleCallback((function(){return e()}),{timeout:r}):setTimeout(e,Math.min(t,r))})))];case 1:return e.sent(),[2,new $]}var t,r}))}))}var ee={load:Q,hashComponents:_,componentsToDebugString:Z},te=u;e.componentsToDebugString=Z,e.default=ee,e.getComponents=Y,e.getFullscreenElement=T,e.getScreenFrame=W,e.hashComponents=_,e.isChromium=C,e.isDesktopSafari=M,e.isEdgeHTML=w,e.isGecko=function(){var e;return m(["buildID"in y,(null===(e=b.documentElement)||void 0===e?void 0:e.style)&&"MozAppearance"in b.documentElement.style,"MediaRecorderErrorEvent"in p,"mozInnerScreenX"in p,"CSSMozDocumentRule"in p,"CanvasCaptureMediaStream"in p])>=4},e.isTrident=S,e.isWebKit=A,e.load=Q,e.murmurX64Hash128=te,Object.defineProperty(e,"__esModule",{value:!0})}));
{
"name": "@fingerprintjs/fingerprintjs",
"description": "Browser fingerprinting library with the highest accuracy and stability",
"version": "3.0.5",
"version": "3.1.0-dev.0",
"keywords": [

@@ -6,0 +6,0 @@ "fraud",

@@ -29,6 +29,9 @@ <p align="center">

function initFingerprintJS() {
FingerprintJS.load().then(fp => {
// The FingerprintJS agent is ready.
// Get a visitor identifier when you'd like to.
fp.get().then(result => {
// We recommend to call `load` at application startup.
const fpPromise = FingerprintJS.load()
// Get a visitor identifier when you need it.
fpPromise
.then(fp => fp.get)
.then(result => {
// This is the visitor identifier:

@@ -38,3 +41,2 @@ const visitorId = result.visitorId;

});
});
}

@@ -62,6 +64,6 @@ </script>

// We recommend to call `load` at application startup.
const fp = await FingerprintJS.load();
const fpPromise = FingerprintJS.load();
// The FingerprintJS agent is ready.
// Get a visitor identifier when you'd like to.
// Get a visitor identifier when you need it.
const fp = await fpPromise
const result = await fp.get();

@@ -194,2 +196,3 @@

Builds an instance of Agent and waits a delay required for a proper operation.
We recommend calling it as soon as possible.
`delayFallback` is an optional parameter that sets duration (milliseconds) of the fallback for browsers that don't support [requestIdleCallback](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback);

@@ -201,2 +204,3 @@ it has a good default value which we don't recommend to change.

Gets the visitor identifier.
We recommend calling it later, when you really need the identifier, to increase the chance of getting an accurate identifier.
`debug: true` prints debug messages to the console.

@@ -203,0 +207,0 @@ `visitorId` is the visitor identifier.

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with āš”ļø by Socket Inc