gologin-commonjs 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/babel.config.json +17 -0
- package/dist/README.md +163 -0
- package/dist/example.js +35 -0
- package/dist/examples/example-amazon-cloud-browser.js +52 -0
- package/dist/examples/example-amazon-headless.js +56 -0
- package/dist/examples/example-amazon.js +53 -0
- package/dist/examples/example-create-custom-profile.js +42 -0
- package/dist/examples/example-create-profile.js +43 -0
- package/dist/examples/example-custom-args.js +34 -0
- package/dist/examples/example-fast-profile-settings.js +59 -0
- package/dist/examples/example-gmail.js +82 -0
- package/dist/examples/example-iphey.js +19 -0
- package/dist/examples/example-local-profile.js +28 -0
- package/dist/examples/example-login-walmart.js +38 -0
- package/dist/examples/example-startremote.js +29 -0
- package/dist/examples/example-stopremote.js +22 -0
- package/dist/examples/example-timezone.js +51 -0
- package/dist/fonts.js +3339 -0
- package/dist/fonts_config +104 -0
- package/dist/gologin-browser-ext.zip +0 -0
- package/dist/gologin_zeroprofile.b64 +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/profile_export_example.csv +2 -0
- package/dist/run.sh +1 -0
- package/dist/src/bookmarks/utils.js +23 -0
- package/dist/src/browser/browser-api.js +106 -0
- package/dist/src/browser/browser-checker.js +336 -0
- package/dist/src/browser/browser-user-data-manager.js +306 -0
- package/dist/src/cookies/cookies-manager.js +164 -0
- package/dist/src/extensions/extensions-extractor.js +50 -0
- package/dist/src/extensions/extensions-manager.js +301 -0
- package/dist/src/extensions/user-extensions-manager.js +246 -0
- package/dist/src/gologin-api.js +103 -0
- package/dist/src/gologin.js +1319 -0
- package/dist/src/profile/profile-archiver.js +68 -0
- package/dist/src/profile/profile-directories-to-remove.js +71 -0
- package/dist/src/utils/browser.js +59 -0
- package/dist/src/utils/common.js +60 -0
- package/dist/src/utils/constants.js +7 -0
- package/dist/src/utils/utils.js +53 -0
- package/dist/test.html +1 -0
- package/dist/zero_profile.zip +0 -0
- package/gologin/.eslintrc.json +290 -0
- package/gologin/.sentry-native/a65389b2-9a7d-41ed-7de5-95c4570f0d3d.run.lock +0 -0
- package/gologin/README.md +163 -0
- package/gologin/example.js +36 -0
- package/gologin/examples/example-amazon-cloud-browser.js +44 -0
- package/gologin/examples/example-amazon-headless.js +50 -0
- package/gologin/examples/example-amazon.js +47 -0
- package/gologin/examples/example-create-custom-profile.js +39 -0
- package/gologin/examples/example-create-profile.js +40 -0
- package/gologin/examples/example-custom-args.js +34 -0
- package/gologin/examples/example-fast-profile-settings.js +69 -0
- package/gologin/examples/example-gmail.js +67 -0
- package/gologin/examples/example-iphey.js +17 -0
- package/gologin/examples/example-local-profile.js +26 -0
- package/gologin/examples/example-login-walmart.js +35 -0
- package/gologin/examples/example-startremote.js +25 -0
- package/gologin/examples/example-stopremote.js +20 -0
- package/gologin/examples/example-timezone.js +44 -0
- package/gologin/fonts.js +3339 -0
- package/gologin/fonts_config +104 -0
- package/gologin/gologin-browser-ext.zip +0 -0
- package/gologin/gologin_zeroprofile.b64 +1 -0
- package/gologin/index.d.ts +61 -0
- package/gologin/package.json +49 -0
- package/gologin/profile_export_example.csv +2 -0
- package/gologin/run.sh +1 -0
- package/gologin/src/bookmarks/utils.js +16 -0
- package/gologin/src/browser/browser-api.js +95 -0
- package/gologin/src/browser/browser-checker.js +392 -0
- package/gologin/src/browser/browser-user-data-manager.js +335 -0
- package/gologin/src/cookies/cookies-manager.js +189 -0
- package/gologin/src/extensions/extensions-extractor.js +56 -0
- package/gologin/src/extensions/extensions-manager.js +384 -0
- package/gologin/src/extensions/user-extensions-manager.js +295 -0
- package/gologin/src/gologin-api.js +110 -0
- package/gologin/src/gologin.js +1553 -0
- package/gologin/src/profile/profile-archiver.js +86 -0
- package/gologin/src/profile/profile-directories-to-remove.js +75 -0
- package/gologin/src/utils/browser.js +62 -0
- package/gologin/src/utils/common.js +76 -0
- package/gologin/src/utils/constants.js +1 -0
- package/gologin/src/utils/utils.js +49 -0
- package/gologin/test.html +1 -0
- package/gologin/zero_profile.zip +0 -0
- package/package.json +46 -0
- package/tes.js +35 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.decompressProfile = exports.checkProfileArchiveIsValid = exports.archiveProfile = void 0;
|
|
7
|
+
var _admZip = _interopRequireDefault(require("adm-zip"));
|
|
8
|
+
var _fs = require("fs");
|
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
|
10
|
+
var _profileDirectoriesToRemove = require("./profile-directories-to-remove.js");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
const {
|
|
13
|
+
access
|
|
14
|
+
} = _fs.promises;
|
|
15
|
+
const archiveProfile = async (profileFolder = '', tryAgain = true) => {
|
|
16
|
+
const folderExists = await access(profileFolder).then(() => true, () => false);
|
|
17
|
+
if (!folderExists) {
|
|
18
|
+
throw new Error('Invalid profile folder path: ' + profileFolder);
|
|
19
|
+
}
|
|
20
|
+
const archive = new _admZip.default();
|
|
21
|
+
archive.addLocalFolder(_path.default.join(profileFolder, 'Default'), 'Default');
|
|
22
|
+
try {
|
|
23
|
+
archive.addLocalFile(_path.default.join(profileFolder, 'First Run'));
|
|
24
|
+
} catch (e) {
|
|
25
|
+
archive.addFile('First Run', Buffer.from(''));
|
|
26
|
+
}
|
|
27
|
+
const dirsToRemove = (0, _profileDirectoriesToRemove.getDirectoriesForArchiver)();
|
|
28
|
+
dirsToRemove.forEach(entry => archive.deleteFile(entry));
|
|
29
|
+
const archiveIsValid = checkProfileArchiveIsValid(archive);
|
|
30
|
+
if (tryAgain && !archiveIsValid) {
|
|
31
|
+
await new Promise(r => setTimeout(() => r(), 300));
|
|
32
|
+
return archiveProfile(profileFolder, false);
|
|
33
|
+
}
|
|
34
|
+
return new Promise((resolve, reject) => archive.toBuffer(resolve, reject));
|
|
35
|
+
};
|
|
36
|
+
exports.archiveProfile = archiveProfile;
|
|
37
|
+
const decompressProfile = async (zipPath = '', profileFolder = '') => {
|
|
38
|
+
const zipExists = await access(zipPath).then(() => true, () => false);
|
|
39
|
+
if (!zipExists) {
|
|
40
|
+
throw new Error('Invalid zip path: ' + zipPath);
|
|
41
|
+
}
|
|
42
|
+
const archive = new _admZip.default(zipPath);
|
|
43
|
+
archive.getEntries().forEach(elem => {
|
|
44
|
+
if (!elem.isDirectory && (elem.entryName.includes('RunningChromeVersion') || elem.entryName.includes('SingletonLock') || elem.entryName.includes('SingletonSocket') || elem.entryName.includes('SingletonCookie'))) {
|
|
45
|
+
archive.deleteFile(elem);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
archive.extractAllTo(profileFolder, true);
|
|
49
|
+
};
|
|
50
|
+
exports.decompressProfile = decompressProfile;
|
|
51
|
+
const checkProfileArchiveIsValid = zipObject => {
|
|
52
|
+
if (!zipObject) {
|
|
53
|
+
throw new Error('No zip object provided');
|
|
54
|
+
}
|
|
55
|
+
return zipObject.getEntries().map(elem => {
|
|
56
|
+
if (elem.isDirectory) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
return elem.entryName.includes('Preferences') || elem.entryName.includes('Cookies');
|
|
60
|
+
}).filter(Boolean).length >= 2;
|
|
61
|
+
};
|
|
62
|
+
exports.checkProfileArchiveIsValid = checkProfileArchiveIsValid;
|
|
63
|
+
const flatArray = (array = []) => array.map(elem => {
|
|
64
|
+
if (Array.isArray(elem)) {
|
|
65
|
+
return flatArray(elem).flat();
|
|
66
|
+
}
|
|
67
|
+
return elem;
|
|
68
|
+
}).flat().filter(Boolean);
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getDirectoriesToDeleteForNode = exports.getDirectoriesForArchiver = void 0;
|
|
7
|
+
const DEFAULT_FOLDER_USELESS_FILE = [{
|
|
8
|
+
name: 'Cache',
|
|
9
|
+
subs: [],
|
|
10
|
+
isDirectory: true
|
|
11
|
+
}, {
|
|
12
|
+
name: 'fonts_config',
|
|
13
|
+
subs: [],
|
|
14
|
+
isDirectory: false
|
|
15
|
+
}, {
|
|
16
|
+
name: 'Service Worker',
|
|
17
|
+
subs: [],
|
|
18
|
+
isDirectory: true
|
|
19
|
+
}, {
|
|
20
|
+
name: 'Code Cache',
|
|
21
|
+
subs: [],
|
|
22
|
+
isDirectory: true
|
|
23
|
+
}, {
|
|
24
|
+
name: 'Extensions',
|
|
25
|
+
subs: [],
|
|
26
|
+
isDirectory: true
|
|
27
|
+
}, {
|
|
28
|
+
name: 'IndexedDB',
|
|
29
|
+
subs: [],
|
|
30
|
+
isDirectory: true
|
|
31
|
+
}, {
|
|
32
|
+
name: 'fonts_config',
|
|
33
|
+
subs: [],
|
|
34
|
+
isDirectory: true
|
|
35
|
+
}, {
|
|
36
|
+
name: 'DawnCache',
|
|
37
|
+
subs: [],
|
|
38
|
+
isDirectory: true
|
|
39
|
+
}, {
|
|
40
|
+
name: 'GPUCache',
|
|
41
|
+
subs: [],
|
|
42
|
+
isDirectory: true
|
|
43
|
+
}];
|
|
44
|
+
const getDirectoriesToDeleteForNode = (routerSlash = '/') => DEFAULT_FOLDER_USELESS_FILE.reduce((res, el) => {
|
|
45
|
+
const basePath = routerSlash + 'Default' + routerSlash + el.name;
|
|
46
|
+
if (el.subs.length) {
|
|
47
|
+
el.subs.forEach(sub => res.push(basePath + routerSlash + sub));
|
|
48
|
+
} else {
|
|
49
|
+
res.push(basePath);
|
|
50
|
+
}
|
|
51
|
+
return res;
|
|
52
|
+
}, []);
|
|
53
|
+
exports.getDirectoriesToDeleteForNode = getDirectoriesToDeleteForNode;
|
|
54
|
+
const getDirectoriesForArchiver = () => DEFAULT_FOLDER_USELESS_FILE.reduce((res, el) => {
|
|
55
|
+
const {
|
|
56
|
+
name,
|
|
57
|
+
subs,
|
|
58
|
+
isDirectory
|
|
59
|
+
} = el;
|
|
60
|
+
const basePath = 'Default/' + name;
|
|
61
|
+
if (subs.length) {
|
|
62
|
+
subs.forEach(sub => {
|
|
63
|
+
const resPath = basePath + '/' + (isDirectory ? sub + '/' : sub);
|
|
64
|
+
res.push(resPath);
|
|
65
|
+
});
|
|
66
|
+
} else {
|
|
67
|
+
res.push(basePath + (isDirectory ? '/' : ''));
|
|
68
|
+
}
|
|
69
|
+
return res;
|
|
70
|
+
}, []);
|
|
71
|
+
exports.getDirectoriesForArchiver = getDirectoriesForArchiver;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.checkAutoLang = void 0;
|
|
7
|
+
const checkAutoLang = (profileData, timezoneCheckResult) => {
|
|
8
|
+
if (!profileData.autoLang) {
|
|
9
|
+
return checkBrowserLang(profileData);
|
|
10
|
+
}
|
|
11
|
+
let timezoneLang = '';
|
|
12
|
+
const {
|
|
13
|
+
country: timezoneCountry = '',
|
|
14
|
+
languages
|
|
15
|
+
} = timezoneCheckResult || {};
|
|
16
|
+
if (languages) {
|
|
17
|
+
const [firstDetectedLangLocale] = languages.split(',');
|
|
18
|
+
timezoneLang = `${firstDetectedLangLocale}-${timezoneCountry}` || '';
|
|
19
|
+
let resultLangsArr = [];
|
|
20
|
+
const [lang = '', country = ''] = timezoneLang.split('-');
|
|
21
|
+
if (country) {
|
|
22
|
+
resultLangsArr.push([lang, country].join('-'));
|
|
23
|
+
}
|
|
24
|
+
resultLangsArr.push(lang, 'en-US', 'en');
|
|
25
|
+
resultLangsArr = [...new Set(resultLangsArr)];
|
|
26
|
+
const gologinLangsArr = [];
|
|
27
|
+
const result = resultLangsArr.reduce((acc, cur, index) => {
|
|
28
|
+
if (!index) {
|
|
29
|
+
acc += `${cur},`;
|
|
30
|
+
gologinLangsArr.push(cur);
|
|
31
|
+
return acc;
|
|
32
|
+
}
|
|
33
|
+
const qualityParam = 10 - index;
|
|
34
|
+
if (qualityParam > 0) {
|
|
35
|
+
const separator = resultLangsArr.length - index < 2 ? '' : ',';
|
|
36
|
+
gologinLangsArr.push(cur);
|
|
37
|
+
acc += `${cur};q=${Number(qualityParam * 0.1).toFixed(1)}${separator}`;
|
|
38
|
+
}
|
|
39
|
+
return acc;
|
|
40
|
+
}, '');
|
|
41
|
+
[profileData.browserLang] = resultLangsArr;
|
|
42
|
+
profileData.languages = gologinLangsArr.join(',');
|
|
43
|
+
profileData.langHeader = result;
|
|
44
|
+
profileData.navigator.language = result;
|
|
45
|
+
return profileData.browserLang;
|
|
46
|
+
}
|
|
47
|
+
return checkBrowserLang(profileData);
|
|
48
|
+
};
|
|
49
|
+
exports.checkAutoLang = checkAutoLang;
|
|
50
|
+
const checkBrowserLang = (profileData, defaultLocale = 'en-US') => {
|
|
51
|
+
if (profileData.langHeader) {
|
|
52
|
+
return profileData.browserLang;
|
|
53
|
+
}
|
|
54
|
+
profileData.browserLang = defaultLocale;
|
|
55
|
+
profileData.languages = defaultLocale;
|
|
56
|
+
profileData.langHeader = defaultLocale;
|
|
57
|
+
profileData.navigator.language = defaultLocale;
|
|
58
|
+
return defaultLocale;
|
|
59
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getOsAdvanced = exports.getOS = exports.composeExtractionPromises = exports.USER_EXTENSIONS_PATH = exports.CHROME_EXTENSIONS_PATH = exports.API_URL = void 0;
|
|
7
|
+
var _child_process = require("child_process");
|
|
8
|
+
var _os = require("os");
|
|
9
|
+
var _path = require("path");
|
|
10
|
+
var _util = require("util");
|
|
11
|
+
var _extensionsExtractor = require("../extensions/extensions-extractor.js");
|
|
12
|
+
const API_URL = exports.API_URL = 'https://api.gologin.com';
|
|
13
|
+
const HOMEDIR = (0, _os.homedir)();
|
|
14
|
+
const CHROME_EXT_DIR_NAME = 'chrome-extensions';
|
|
15
|
+
const EXTENSIONS_PATH = (0, _path.join)(HOMEDIR, '.gologin', 'extensions');
|
|
16
|
+
const CHROME_EXTENSIONS_PATH = (0, _path.join)(EXTENSIONS_PATH, CHROME_EXT_DIR_NAME);
|
|
17
|
+
const USER_EXTENSIONS_PATH = (0, _path.join)(HOMEDIR, '.gologin', 'extensions', 'user-extensions');
|
|
18
|
+
const composeExtractionPromises = (filteredArchives, destPath = CHROME_EXTENSIONS_PATH) => filteredArchives.map(extArchivePath => {
|
|
19
|
+
const [archiveName = ''] = extArchivePath.split(_path.sep).reverse();
|
|
20
|
+
const [destFolder] = archiveName.split('.');
|
|
21
|
+
return (0, _extensionsExtractor.extractExtension)(extArchivePath, (0, _path.join)(destPath, destFolder)).then(() => (0, _extensionsExtractor.deleteExtensionArchive)(extArchivePath));
|
|
22
|
+
});
|
|
23
|
+
const getMacArmSpec = async () => {
|
|
24
|
+
const doExec = (0, _util.promisify)(_child_process.exec);
|
|
25
|
+
const {
|
|
26
|
+
stdout
|
|
27
|
+
} = await doExec('sysctl machdep.cpu');
|
|
28
|
+
const regExp = /Apple M\d/;
|
|
29
|
+
const [match] = stdout.match(regExp);
|
|
30
|
+
const [_, armVersion] = match.split(' ');
|
|
31
|
+
return armVersion;
|
|
32
|
+
};
|
|
33
|
+
const getOsAdvanced = async () => {
|
|
34
|
+
const os = getOS();
|
|
35
|
+
if (!['mac', 'macM1'].includes(os)) {
|
|
36
|
+
return {
|
|
37
|
+
os,
|
|
38
|
+
osSpec: ''
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
const osSpec = await getMacArmSpec();
|
|
42
|
+
return {
|
|
43
|
+
os: 'mac',
|
|
44
|
+
osSpec
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
const getOS = () => {
|
|
48
|
+
if (process.platform === 'win32') {
|
|
49
|
+
return 'win';
|
|
50
|
+
}
|
|
51
|
+
if (process.platform === 'darwin') {
|
|
52
|
+
return process.arch === 'arm64' ? 'macM1' : 'mac';
|
|
53
|
+
}
|
|
54
|
+
return 'lin';
|
|
55
|
+
};
|
|
56
|
+
const _composeExtractionPromises = exports.composeExtractionPromises = composeExtractionPromises;
|
|
57
|
+
const _getOS = exports.getOS = getOS;
|
|
58
|
+
const _getOsAdvanced = exports.getOsAdvanced = getOsAdvanced;
|
|
59
|
+
const _USER_EXTENSIONS_PATH = exports.USER_EXTENSIONS_PATH = USER_EXTENSIONS_PATH;
|
|
60
|
+
const _CHROME_EXTENSIONS_PATH = exports.CHROME_EXTENSIONS_PATH = CHROME_EXTENSIONS_PATH;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isPortReachable = exports.get = exports.findLatestBrowserVersionDirectory = void 0;
|
|
7
|
+
var _nodeFs = require("node:fs");
|
|
8
|
+
var _nodeNet = _interopRequireDefault(require("node:net"));
|
|
9
|
+
var _nodePath = require("node:path");
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
const get = (value, path, defaultValue) => String(path).split('.').reduce((acc, val) => {
|
|
12
|
+
try {
|
|
13
|
+
acc = acc[val] ? acc[val] : defaultValue;
|
|
14
|
+
} catch (e) {
|
|
15
|
+
return defaultValue;
|
|
16
|
+
}
|
|
17
|
+
return acc;
|
|
18
|
+
}, value);
|
|
19
|
+
exports.get = get;
|
|
20
|
+
const isPortReachable = port => new Promise(resolve => {
|
|
21
|
+
const checker = _nodeNet.default.createServer().once('error', () => {
|
|
22
|
+
resolve(false);
|
|
23
|
+
}).once('listening', () => checker.once('close', () => resolve(true)).close()).listen(port);
|
|
24
|
+
});
|
|
25
|
+
exports.isPortReachable = isPortReachable;
|
|
26
|
+
const findLatestBrowserVersionDirectory = browserPath => {
|
|
27
|
+
const folderContents = (0, _nodeFs.readdirSync)(browserPath);
|
|
28
|
+
const directories = folderContents.filter(file => (0, _nodeFs.statSync)((0, _nodePath.join)(browserPath, file)).isDirectory());
|
|
29
|
+
const {
|
|
30
|
+
folderName,
|
|
31
|
+
version
|
|
32
|
+
} = directories.reduce((newest, currentFolderName) => {
|
|
33
|
+
const match = currentFolderName.match(/\d+/);
|
|
34
|
+
if (match) {
|
|
35
|
+
const findedVersion = parseInt(match[0], 10);
|
|
36
|
+
if (findedVersion > newest.version) {
|
|
37
|
+
return {
|
|
38
|
+
folderName: currentFolderName,
|
|
39
|
+
version: findedVersion
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return newest;
|
|
44
|
+
}, {
|
|
45
|
+
folderName: '',
|
|
46
|
+
version: 0
|
|
47
|
+
});
|
|
48
|
+
if (!version) {
|
|
49
|
+
return 'error';
|
|
50
|
+
}
|
|
51
|
+
return folderName;
|
|
52
|
+
};
|
|
53
|
+
exports.findLatestBrowserVersionDirectory = findLatestBrowserVersionDirectory;
|
package/dist/test.html
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en-US"><head><title>Just a moment...</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta name="robots" content="noindex,nofollow"><meta name="viewport" content="width=device-width,initial-scale=1"><style>*{box-sizing:border-box;margin:0;padding:0}html{line-height:1.15;-webkit-text-size-adjust:100%;color:#313131}button,html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}@media (prefers-color-scheme:dark){body{background-color:#222;color:#d9d9d9}body a{color:#fff}body a:hover{color:#ee730a;text-decoration:underline}body .lds-ring div{border-color:#999 transparent transparent}body .font-red{color:#b20f03}body .pow-button{background-color:#4693ff;color:#1d1d1d}body #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}}body{display:flex;flex-direction:column;min-height:100vh}body.no-js .loading-spinner{visibility:hidden}body.no-js .challenge-running{display:none}body.dark{background-color:#222;color:#d9d9d9}body.dark a{color:#fff}body.dark a:hover{color:#ee730a;text-decoration:underline}body.dark .lds-ring div{border-color:#999 transparent transparent}body.dark .font-red{color:#b20f03}body.dark .pow-button{background-color:#4693ff;color:#1d1d1d}body.dark #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjZDlkOWQ5IiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body.dark #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI0IyMEYwMyIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjQjIwRjAzIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}body.light{background-color:transparent;color:#313131}body.light a{color:#0051c3}body.light a:hover{color:#ee730a;text-decoration:underline}body.light .lds-ring div{border-color:#595959 transparent transparent}body.light .font-red{color:#fc574a}body.light .pow-button{background-color:#003681;border-color:#003681;color:#fff}body.light #challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=)}body.light #challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZjNTc0YSIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjZmM1NzRhIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+)}a{background-color:transparent;color:#0051c3;text-decoration:none;transition:color .15s ease}a:hover{color:#ee730a;text-decoration:underline}.main-content{margin:8rem auto;max-width:60rem;width:100%}.heading-favicon{height:2rem;margin-right:.5rem;width:2rem}@media (width <= 720px){.main-content{margin-top:4rem}.heading-favicon{height:1.5rem;width:1.5rem}}.footer,.main-content{padding-left:1.5rem;padding-right:1.5rem}.main-wrapper{align-items:center;display:flex;flex:1;flex-direction:column}.font-red{color:#b20f03}.spacer{margin:2rem 0}.h1{font-size:2.5rem;font-weight:500;line-height:3.75rem}.h2{font-weight:500}.core-msg,.h2{font-size:1.5rem;line-height:2.25rem}.body-text,.core-msg{font-weight:400}.body-text{font-size:1rem;line-height:1.25rem}@media (width <= 720px){.h1{font-size:1.5rem;line-height:1.75rem}.h2{font-size:1.25rem}.core-msg,.h2{line-height:1.5rem}.core-msg{font-size:1rem}}#challenge-error-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iI2ZjNTc0YSIgZD0iTTE2IDNhMTMgMTMgMCAxIDAgMTMgMTNBMTMuMDE1IDEzLjAxNSAwIDAgMCAxNiAzbTAgMjRhMTEgMTEgMCAxIDEgMTEtMTEgMTEuMDEgMTEuMDEgMCAwIDEtMTEgMTEiLz48cGF0aCBmaWxsPSIjZmM1NzRhIiBkPSJNMTcuMDM4IDE4LjYxNUgxNC44N0wxNC41NjMgOS41aDIuNzgzem0tMS4wODQgMS40MjdxLjY2IDAgMS4wNTcuMzg4LjQwNy4zODkuNDA3Ljk5NCAwIC41OTYtLjQwNy45ODQtLjM5Ny4zOS0xLjA1Ny4zODktLjY1IDAtMS4wNTYtLjM4OS0uMzk4LS4zODktLjM5OC0uOTg0IDAtLjU5Ny4zOTgtLjk4NS40MDYtLjM5NyAxLjA1Ni0uMzk3Ii8+PC9zdmc+);padding-left:34px}#challenge-error-text,#challenge-success-text{background-repeat:no-repeat;background-size:contain}#challenge-success-text{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSIgdmlld0JveD0iMCAwIDI2IDI2Ij48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJNMTMgMGExMyAxMyAwIDEgMCAwIDI2IDEzIDEzIDAgMCAwIDAtMjZtMCAyNGExMSAxMSAwIDEgMSAwLTIyIDExIDExIDAgMCAxIDAgMjIiLz48cGF0aCBmaWxsPSIjMzEzMTMxIiBkPSJtMTAuOTU1IDE2LjA1NS0zLjk1LTQuMTI1LTEuNDQ1IDEuMzg1IDUuMzcgNS42MSA5LjQ5NS05LjYtMS40Mi0xLjQwNXoiLz48L3N2Zz4=);padding-left:42px}.text-center{text-align:center}.pow-button{background-color:#0051c3;border:.063rem solid #0051c3;border-radius:.313rem;color:#fff;font-size:.875rem;line-height:1.313rem;margin:2rem 0;padding:.375rem 1rem;transition-duration:.2s;transition-property:background-color,border-color,color;transition-timing-function:ease}.pow-button:hover{background-color:#003681;border-color:#003681;color:#fff;cursor:pointer}.footer{font-size:.75rem;line-height:1.125rem;margin:0 auto;max-width:60rem;width:100%}.footer-inner{border-top:1px solid #d9d9d9;padding-bottom:1rem;padding-top:1rem}.clearfix:after{clear:both;content:"";display:table}.clearfix .column{float:left;padding-right:1.5rem;width:50%}.diagnostic-wrapper{margin-bottom:.5rem}.footer .ray-id{text-align:center}.footer .ray-id code{font-family:monaco,courier,monospace}.core-msg,.zone-name-title{overflow-wrap:break-word}@media (width <= 720px){.diagnostic-wrapper{display:flex;flex-wrap:wrap;justify-content:center}.clearfix:after{clear:none;content:none;display:initial;text-align:center}.column{padding-bottom:2rem}.clearfix .column{float:none;padding:0;width:auto;word-break:keep-all}.zone-name-title{margin-bottom:1rem}}.loading-spinner{height:76.391px}.lds-ring{display:inline-block;position:relative}.lds-ring,.lds-ring div{height:1.875rem;width:1.875rem}.lds-ring div{animation:lds-ring 1.2s cubic-bezier(.5,0,.5,1) infinite;border:.3rem solid transparent;border-radius:50%;border-top-color:#313131;box-sizing:border-box;display:block;position:absolute}.lds-ring div:first-child{animation-delay:-.45s}.lds-ring div:nth-child(2){animation-delay:-.3s}.lds-ring div:nth-child(3){animation-delay:-.15s}@keyframes lds-ring{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@media screen and (-ms-high-contrast:active),screen and (-ms-high-contrast:none){.main-wrapper,body{display:block}}.rtl .heading-favicon{margin-left:.5rem;margin-right:0}.rtl #challenge-success-text{background-position:100%;padding-left:0;padding-right:42px}.rtl #challenge-error-text{background-position:100%;padding-left:0;padding-right:34px}</style><meta http-equiv="refresh" content="390"></head><body class="no-js"><div class="main-wrapper" role="main"><div class="main-content"><noscript><div id="challenge-error-title"><div class="h2"><span id="challenge-error-text">Enable JavaScript and cookies to continue</span></div></div></noscript></div></div><script>(function(){window._cf_chl_opt={cvId: '3',cZone: "ipgeo.gologin.com",cType: 'managed',cNounce: '66748',cRay: '88e6f89e9e74906b',cHash: '0151e46f0a289d3',cUPMDTk: "\/?__cf_chl_tk=7Wa4hHOtxYk6_UyRySQ_Wog6pxDQ1MMeL09x3UrcYXE-1717494128-0.0.1.1-3710",cFPWv: 'g',cTTimeMs: '1000',cMTimeMs: '390000',cTplV: 5,cTplB: 'cf',cK: "visitor-time",fa: "\/?__cf_chl_f_tk=7Wa4hHOtxYk6_UyRySQ_Wog6pxDQ1MMeL09x3UrcYXE-1717494128-0.0.1.1-3710",md: "NUEVJeLORkY3ctw5kFupy54wQ.Bw2XoiUHU155dsPe4-1717494128-1.1.1.1-VEXy_Ks50GB5RMJOslVWz7AMwubr4klp8NAQx.WpzyscwaAZIT977vQbplJHHxUMOfGQIrS7IoZsFuIi_kAG_6uzG89PjpXRbbWGUAdSBoBqVDvSLdmj32qRiiENnKa45qhWKS.2j59nh0EBxCmYnAA82B7OuCKpx7uuxmbU5TMm._9u7WdzxOLNR1eXivsDBiAjylgz3lfr01XNGKtwyi.WgRleVDf3Bktj2cCNYM0.TDELx2aXxnXICTLvg2hylLi8jz7Gq2NUy.yI5J0b5wivrYglsonDNm5NBDdtj.ySyHpcbHLJB1JjtBJo5tPLJ6KWnQXq9985_isPMbJzLi5FoKMWBx34B8ze.VVptgVgTwXxDcD.v9HtcPA.3Fh.GuInVykpAAD1YomiHnGwMSii6t3cF7.DIB6KUD99uNV3o8f8ff3DTXxjfXli4jDA.27AfPr12V55AELVyICoxGvlkqKXo.Ftpg8ZRirZfigy0Hh7dQ0_s0zYm.uxnkE.vjkBcDgHwVmSSMIwkcGgdwucwrRM0Hw..A_pTbKjDXhc.X1kBgIAMnbg2XLfGYMMHOnFYnRmzCyi8FzYSc.F.1teWQMVD7SRU8Mql17Ei8tdNsrLUAcR_0X.mo5NlKV1tRy3CQH9.Fw35FGf73ZPb.hmGIWtFdNHUkvk0fDie5dSQ6e.R4Bxd8MXUXYhZXoCDPlkkbfYLxrkuZNug_7RoE8EK6g.XFI9DuB_.Pgnw9rlu8pOp82Js0LyOiSAjKeReqTaoMTfMzRRTpz0GJUmoZ7VJCbTka71vgvJLG3WfniW_bxMJGKoP.MGIRnAgdVReG1XEVP5Dr.weAM17ZKe8KoUwNbbffg9pVavJYNM230C_sqjQbEfgQaYEfqpgmOB92zxvDcVBRPJgVcAqyyGAl28o4aIqK7ZiHFgInofroaziFEkGwWhx8RVC8.wMQYnKTxzrvH6dlUXCmH9ptYKzBxsLA3aAd0JZYF8tmck7CiuBGWgQnYrjK0wI7r0XRgVar2JD90i7j90sYWDnbnntHdV5dnVAqkMgPE9CZVEEV3IoVkvshSTr6bVPp5nQxIByNmG55BDIAmV82tshyQaEJq2PWe55qD6AY.5.XJkY2WF7SVH.FENH0_he2OQTQQZBXSokc78r2D6qMSLDqlpcwmprbJTcpCaScGZxmBPf1tPMo3Jssl7p9Dw86iKYnkbkfheTSlYs9DPbOLOZNzkKzCNClDowqoNaCYU5KNshG.ECh2QrFljLnE_N30HkRBBYBGSw1UHkdNrKz62hBrZ9FhZ6XxGKxrJsYQCrKfd8KgsJclURn6B.6umEaFGsbGTNqoJLfDp.aW_t8aUuyafzbLwnFo.M6oQrOHbMT2g2C9srRBnWrGTTTT3lkJ2di.PB816zho7SjcnnWR_fu23_ZCj5PZY2ccNfyRz_OxxgssyIJ2XRMvDnoH2I_SfSxgo",mdrd: "fG3JGIxYOKyhZo.XKniJcmxUOHl0smYMDQLj3nmOhFQ-1717494128-1.1.1.1-v0f6ICuc3qDLhtnLZ1Wx9VmiKjc8Sb7ooO4rXHP2Ao3uCumr9N1mAP1wy.BsVzPHc4_nPPdBZjVql0JBBjmeeKRbhY16OOMb2xdjgUpSIFOmez5wMjVYC3xED7OgTgtnrioKKQ1rEaF._6yfY5dc1VrkLMXazCY7oOpWutYI.8SFl9UJo7aY7Vatdixgz_mZbpj.MddWc9i_BGA6QlRcobtLx0HgePYTStTa23hX5QDGvc.Zewn.1.LvQR9y6VUWFrjYbxs63Is0BbinVae6s5_AqoziYGt2Vxzt6deouMieYzv.9uA3XQW1cc_5Ulo8.vnYkxrVKQ8u6WKvVmMB1Z5EhwXOzGwB1.NPXGxUFOGx7F1iz7WsJvkfZurqRwOmBpmQyR0fHfNt53JvDMvfCnGLUTfaeyMskKra4KtmVcXoQUTygxtvTIr1A3eewPZ6WUmKa8B7l9oE9v4hEub4LnFZIl6J1pZYDQ3GGkkohOu9aaRCJade9vaUQImr.nWKAsDxYeUFdh0p.7F1VJ8WtiAxVfuxGLOx59yluvxZdNVB2OXrOBcRhfuhS2qVFanRppgC7BSt150GYFp68bTEr1ZVrgUY70olfBfGz_TVYy6s5pbWzQQuev0tghS9uRB3Gi7JGuWZqvddBs73WIHbV8Nc6Dd7O7G0TRcOkBpAa7n_1OIiYGFhQkCxoeejnVauTmLbCGlCScGgb_ayA1xYBPR2wVGIn9gLhT66i8bseGJo97xGRUOK9Y.wok9RCXZVFthCgzDMmFjQBuelqHhDNfx8QU2uaHcVzW_tHVAQSxTdUuy_6fZyi_Rk2XI75tIWv7c5v0TqumL9fOz0BoPQpjb59YRbhQeGipDx63.eR1HAq0598X9RUyqLh1rUoYEQWpmpgbvlWgsGgmGbANROB2Igtgjti79CAU12GY0fVBKQoPUH2M7KDGCwnRaFXOLRNZwf500rJsFVquR_pGFJfYXagLfjJGKkw9fe0iQRsaUOqjCAC0RY1hfVm8sA3Kk5fSI5rSSEG5YkZE5uoH4dsLBst2Q3aL4zDk1axNio3rs7aCbil9yKJhurswS2c0pNEAZQ9OeBXN6SqSiAfnoyv432.3ke1k9LF0BH4OSBotPT4_3b4kAg__XV3pAjvFY_1d_MIK.eXjfQl_3Qhi0oD2wXXITPZLPtWVYoBW.UM3My7qntrs5R2YlSoM3BK4eqzH3nWDVFbiVyVJKYrgMzOMMJU_q.fN144gRPWOjdtaQTZzffCysnuuuyriKXQwbkQdzkM5uN0.DK9p99.uOS7B.FV_VjOiGvHu_Q_SGmw3c.fNzTv8smVRXqkxIkYV.VmYX5UdpHG5.PVTadHKM_aMJlUh.dV4fUrNmRX5ZltXjoZ4Rh2Xq3M5IruxsrbvjdS574gwGZ7noCF.yvOEEGnJsb1i5kVrgAwmsCENfGADL3a9xOFIFGLCMV2Bipd0_67Um7tjJZdDVuFiCy4mazir6Jw6q7LuQDPdrZENlw9r1.RqmPOMfRZxmdO8ngwHXwCE_IJUdTgKq2zNFWbJnv4RMpT3YIiVQ63gMYXO6CjUA2o1lSuiMzEl4La0pzZG8g1BcCROslvoMJMKGe.vQg4hW2SvAEcciejXAsO6uwcotsRQTfHo0cIy0BqD0I4zzLf63_UA2drS1oTjtvYg7yobwQbjNiEx3utD8x4qQnumVya6gL5W19.jlZyhxWAOQtIy02xIr.9Is58K.1Hz_h5xA3xj7CF0wSpLK5NqJeIzT4WRfuQwQMGYk5r5yfpzJg3qEoWeHIigsl9AM1vj3eMi982lox_r6o8HYzZ926mEKVsU5kAyrDNhS1gYI09Y.ogJekRIjpdx702wCjk3Dwlc96_4fL9ftKqUAOjpte6ZwJKOLUBAB3JVbtEQcDvwHHjLgf0kJgLwzQ7HwGmZlBEMuxaQO6SqmdzD71_37TQsPl0Gvz_LOuPQrjGolyktxurCAisjwas6h7DbhmBGHner1E6GRE4vaX7IIJVT8aXZT8KYO.BA25IgpoC4HASSp.rwyRnREnfGy5HRA_1vesXCIFastjAdCHM4qQusU63_mbYqnyELk5aUQbq20yOrxH",cRq: {ru: 'aHR0cHM6Ly9pcGdlby5nb2xvZ2luLmNvbS8=',ra: 'Tk9fVUE=',rm: 'R0VU',d: 'qKBkJcVxpK0gS9+Dncqnobox7zFZJq4tIR364HImyNL674Z6rjXGb0N5CnEE8MaC80e/fhDCZ1NALxmLlvABU3B1YBJ6u2HiuqwHa7IE8x2mjW83zHbi3+3jDJYhVGhxorhS0jQw8/HVJwNzPdRR+gDu8ohEqIciINfSlwiOu2qp6VqDQ1whv1npm21w1rxkix6yey82DI0wF9dLwklPQTICBTq24Yebnrjp8zoIPP4/Sr5C5pgAtHSN7DEOzvqBSXk8eaE9phw2wvyIdtqhP4b2fvQdI2B2Hngwtd21eiWMCqt16U+GInyuByoGoPVHfW4tRxe92aLcLHFtrU8DP8jPqWCr9ADZzPeGLbsEHsOvkBsnTmtMxMeiad+enNvXvTsC1m4tqcR9xPLoIFu1i13t561TzsJSyFcO1rVLBSG6XtY80cKU2tTxfIDzw4XJ/fZle22zeUWmhXsmtx8EufZbC7X69SwtMTdGpMvQtA1K/CKDH7oaLDrMXzrNrySmb+gvDV11h9sh4f/sdbUbS51uU9qpxjhRDrYW8dvYJDK0TWVvVGIpth0UX+HqH+JV',t: 'MTcxNzQ5NDEyOC40MjAwMDA=',cT: Math.floor(Date.now() / 1000),m: '5mFiLvS/5/akVFoHXJ25bFALknI1IUlzM8xFhK3suo4=',i1: 'wI6KiYPpIW0OhXRVGtqXlg==',i2: '6oZk6BntW8JZQ+HgujT1JA==',zh: 'JR0cIv85cUJhqgTjRa9QSuNFo/9GUndlo5xkcCmDPX8=',uh: 'DV4j3Tmrbi5Rs1q3ahwVS6SgbPbI7np5884QO1u1Cgg=',hh: 'iTzi3JnXztDsyTsA3Shvuu+oDN/wU8B2rwcgKq/my4Q=',}};var cpo = document.createElement('script');cpo.src = '/cdn-cgi/challenge-platform/h/g/orchestrate/chl_page/v1?ray=88e6f89e9e74906b';window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null, "\/?__cf_chl_rt_tk=7Wa4hHOtxYk6_UyRySQ_Wog6pxDQ1MMeL09x3UrcYXE-1717494128-0.0.1.1-3710" + window._cf_chl_opt.cOgUHash);cpo.onload = function() {history.replaceState(null, null, ogU);}}document.getElementsByTagName('head')[0].appendChild(cpo);}());</script></body></html>
|
|
Binary file
|
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
{
|
|
2
|
+
"env": {
|
|
3
|
+
"browser": true,
|
|
4
|
+
"es2021": true,
|
|
5
|
+
"node": true
|
|
6
|
+
},
|
|
7
|
+
"extends": "eslint:recommended",
|
|
8
|
+
"overrides": [
|
|
9
|
+
],
|
|
10
|
+
"parserOptions": {
|
|
11
|
+
"ecmaVersion": "latest",
|
|
12
|
+
"sourceType": "module"
|
|
13
|
+
},
|
|
14
|
+
"plugins": [
|
|
15
|
+
"simple-import-sort"
|
|
16
|
+
],
|
|
17
|
+
"rules": {
|
|
18
|
+
"padding-line-between-statements": [
|
|
19
|
+
"warn",
|
|
20
|
+
{
|
|
21
|
+
"blankLine": "always",
|
|
22
|
+
"prev": [
|
|
23
|
+
"if",
|
|
24
|
+
"switch",
|
|
25
|
+
"while",
|
|
26
|
+
"function",
|
|
27
|
+
"multiline-const",
|
|
28
|
+
"try"
|
|
29
|
+
],
|
|
30
|
+
"next": "*"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"blankLine": "always",
|
|
34
|
+
"prev": "*",
|
|
35
|
+
"next": [
|
|
36
|
+
"return"
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"indent": [
|
|
41
|
+
"warn",
|
|
42
|
+
2,
|
|
43
|
+
{
|
|
44
|
+
"SwitchCase": 1,
|
|
45
|
+
"ignoredNodes": [
|
|
46
|
+
"ClassBody.body > PropertyDefinition[decorators.length > 0] > .key"
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
],
|
|
50
|
+
"linebreak-style": 0,
|
|
51
|
+
"quotes": [
|
|
52
|
+
"warn",
|
|
53
|
+
"single"
|
|
54
|
+
],
|
|
55
|
+
"semi": [
|
|
56
|
+
"warn",
|
|
57
|
+
"always"
|
|
58
|
+
],
|
|
59
|
+
"array-callback-return": [
|
|
60
|
+
"warn"
|
|
61
|
+
],
|
|
62
|
+
"no-await-in-loop": [
|
|
63
|
+
"off"
|
|
64
|
+
],
|
|
65
|
+
"no-duplicate-imports": [
|
|
66
|
+
"warn"
|
|
67
|
+
],
|
|
68
|
+
"arrow-body-style": [
|
|
69
|
+
"warn",
|
|
70
|
+
"as-needed"
|
|
71
|
+
],
|
|
72
|
+
"curly": [
|
|
73
|
+
"warn",
|
|
74
|
+
"all"
|
|
75
|
+
],
|
|
76
|
+
"default-case": [
|
|
77
|
+
"warn"
|
|
78
|
+
],
|
|
79
|
+
"default-case-last": [
|
|
80
|
+
"warn"
|
|
81
|
+
],
|
|
82
|
+
"dot-notation": [
|
|
83
|
+
"warn"
|
|
84
|
+
],
|
|
85
|
+
"eqeqeq": [
|
|
86
|
+
"warn",
|
|
87
|
+
"always"
|
|
88
|
+
],
|
|
89
|
+
"id-length": [
|
|
90
|
+
"warn",
|
|
91
|
+
{
|
|
92
|
+
"min": 1,
|
|
93
|
+
"max": 40,
|
|
94
|
+
"properties": "never"
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"max-depth": [
|
|
98
|
+
"warn",
|
|
99
|
+
{
|
|
100
|
+
"max": 4
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"max-lines": [
|
|
104
|
+
"warn",
|
|
105
|
+
1500
|
|
106
|
+
],
|
|
107
|
+
"no-else-return": [
|
|
108
|
+
"warn",
|
|
109
|
+
{
|
|
110
|
+
"allowElseIf": true
|
|
111
|
+
}
|
|
112
|
+
],
|
|
113
|
+
"no-unused-vars": [
|
|
114
|
+
"warn",
|
|
115
|
+
{
|
|
116
|
+
"vars": "all",
|
|
117
|
+
"args": "after-used",
|
|
118
|
+
"ignoreRestSiblings": false,
|
|
119
|
+
"varsIgnorePattern": "^_"
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"keyword-spacing": [
|
|
123
|
+
"error",
|
|
124
|
+
{
|
|
125
|
+
"before": true,
|
|
126
|
+
"after": true
|
|
127
|
+
}
|
|
128
|
+
],
|
|
129
|
+
"no-empty-function": [
|
|
130
|
+
"warn",
|
|
131
|
+
{
|
|
132
|
+
"allow": [
|
|
133
|
+
"constructors"
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
"no-inline-comments": [
|
|
138
|
+
"warn"
|
|
139
|
+
],
|
|
140
|
+
"no-labels": [
|
|
141
|
+
"warn"
|
|
142
|
+
],
|
|
143
|
+
"no-lone-blocks": [
|
|
144
|
+
"warn"
|
|
145
|
+
],
|
|
146
|
+
"no-lonely-if": [
|
|
147
|
+
"warn"
|
|
148
|
+
],
|
|
149
|
+
"no-magic-numbers": [
|
|
150
|
+
"off",
|
|
151
|
+
{
|
|
152
|
+
"ignoreArrayIndexes": true,
|
|
153
|
+
"ignoreDefaultValues": true,
|
|
154
|
+
"ignore": [
|
|
155
|
+
1,
|
|
156
|
+
2,
|
|
157
|
+
3,
|
|
158
|
+
10,
|
|
159
|
+
1000,
|
|
160
|
+
-1,
|
|
161
|
+
0
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"no-multi-assign": [
|
|
166
|
+
"warn"
|
|
167
|
+
],
|
|
168
|
+
"no-multi-str": [
|
|
169
|
+
"warn"
|
|
170
|
+
],
|
|
171
|
+
"no-nested-ternary": [
|
|
172
|
+
"warn"
|
|
173
|
+
],
|
|
174
|
+
"no-return-assign": [
|
|
175
|
+
"warn"
|
|
176
|
+
],
|
|
177
|
+
"no-return-await": [
|
|
178
|
+
"warn"
|
|
179
|
+
],
|
|
180
|
+
"no-sequences": [
|
|
181
|
+
"warn"
|
|
182
|
+
],
|
|
183
|
+
"no-shadow": [
|
|
184
|
+
"warn"
|
|
185
|
+
],
|
|
186
|
+
"no-undefined": [
|
|
187
|
+
"warn"
|
|
188
|
+
],
|
|
189
|
+
"no-underscore-dangle": [
|
|
190
|
+
"warn",
|
|
191
|
+
{
|
|
192
|
+
"allow": [
|
|
193
|
+
"_id"
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
],
|
|
197
|
+
"no-unneeded-ternary": [
|
|
198
|
+
"warn"
|
|
199
|
+
],
|
|
200
|
+
"no-unused-expressions": [
|
|
201
|
+
"warn",
|
|
202
|
+
{
|
|
203
|
+
"allowShortCircuit": true,
|
|
204
|
+
"allowTernary": true
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"no-useless-return": [
|
|
208
|
+
"warn"
|
|
209
|
+
],
|
|
210
|
+
"object-shorthand": [
|
|
211
|
+
"warn",
|
|
212
|
+
"always"
|
|
213
|
+
],
|
|
214
|
+
"prefer-arrow-callback": [
|
|
215
|
+
"warn"
|
|
216
|
+
],
|
|
217
|
+
"prefer-const": [
|
|
218
|
+
"warn"
|
|
219
|
+
],
|
|
220
|
+
"prefer-destructuring": [
|
|
221
|
+
"warn"
|
|
222
|
+
],
|
|
223
|
+
"prefer-object-spread": [
|
|
224
|
+
"warn"
|
|
225
|
+
],
|
|
226
|
+
"prefer-spread": [
|
|
227
|
+
"warn"
|
|
228
|
+
],
|
|
229
|
+
"prefer-template": [
|
|
230
|
+
"off"
|
|
231
|
+
],
|
|
232
|
+
"spaced-comment": [
|
|
233
|
+
"warn"
|
|
234
|
+
],
|
|
235
|
+
"yoda": [
|
|
236
|
+
"warn"
|
|
237
|
+
],
|
|
238
|
+
"arrow-spacing": [
|
|
239
|
+
"warn"
|
|
240
|
+
],
|
|
241
|
+
"brace-style": [
|
|
242
|
+
"warn",
|
|
243
|
+
"1tbs",
|
|
244
|
+
{
|
|
245
|
+
"allowSingleLine": false
|
|
246
|
+
}
|
|
247
|
+
],
|
|
248
|
+
"comma-dangle": [
|
|
249
|
+
"warn",
|
|
250
|
+
"always-multiline"
|
|
251
|
+
],
|
|
252
|
+
"dot-location": [
|
|
253
|
+
"warn",
|
|
254
|
+
"property"
|
|
255
|
+
],
|
|
256
|
+
"eol-last": [
|
|
257
|
+
"warn"
|
|
258
|
+
],
|
|
259
|
+
"no-extra-parens": [
|
|
260
|
+
"off"
|
|
261
|
+
],
|
|
262
|
+
"no-multiple-empty-lines": [
|
|
263
|
+
"warn",
|
|
264
|
+
{
|
|
265
|
+
"max": 1
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
"no-trailing-spaces": [
|
|
269
|
+
"warn"
|
|
270
|
+
],
|
|
271
|
+
"no-whitespace-before-property": [
|
|
272
|
+
"warn"
|
|
273
|
+
],
|
|
274
|
+
"object-curly-spacing": [
|
|
275
|
+
"warn",
|
|
276
|
+
"always"
|
|
277
|
+
],
|
|
278
|
+
"space-in-parens": [
|
|
279
|
+
"warn"
|
|
280
|
+
],
|
|
281
|
+
"template-curly-spacing": [
|
|
282
|
+
"warn"
|
|
283
|
+
],
|
|
284
|
+
"max-len": [
|
|
285
|
+
"warn",
|
|
286
|
+
150
|
|
287
|
+
],
|
|
288
|
+
"simple-import-sort/imports": "warn"
|
|
289
|
+
}
|
|
290
|
+
}
|
|
File without changes
|