{"version":3,"file":"js/395-4993a117d7a7b20ea1fb.chunk.js","mappings":"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","sources":["webpack://agra/./node_modules/friendly-challenge/index.js"],"sourcesContent":["// Adapted from the base64-arraybuffer package implementation\n// (https://github.com/niklasvh/base64-arraybuffer, MIT licensed)\nconst CHARS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nconst EQ_CHAR = \"=\".charCodeAt(0);\n// Use a lookup table to find the index.\nconst lookup = new Uint8Array(256);\nfor (let i = 0; i < CHARS.length; i++) {\n lookup[CHARS.charCodeAt(i)] = i;\n}\nfunction encode(bytes) {\n const len = bytes.length;\n let base64 = \"\";\n for (let i = 0; i < len; i += 3) {\n const b0 = bytes[i + 0];\n const b1 = bytes[i + 1];\n const b2 = bytes[i + 2];\n // This temporary variable stops the NextJS 13 compiler from breaking this code in optimization.\n // See issue https://github.com/FriendlyCaptcha/friendly-challenge/issues/165\n let t = \"\";\n t += CHARS.charAt(b0 >>> 2);\n t += CHARS.charAt(((b0 & 3) << 4) | (b1 >>> 4));\n t += CHARS.charAt(((b1 & 15) << 2) | (b2 >>> 6));\n t += CHARS.charAt(b2 & 63);\n base64 += t;\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + \"=\";\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + \"==\";\n }\n return base64;\n}\nfunction decode(base64) {\n const len = base64.length;\n let bufferLength = (len * 3) >>> 2; // * 0.75\n if (base64.charCodeAt(len - 1) === EQ_CHAR)\n bufferLength--;\n if (base64.charCodeAt(len - 2) === EQ_CHAR)\n bufferLength--;\n const bytes = new Uint8Array(bufferLength);\n for (let i = 0, p = 0; i < len; i += 4) {\n const encoded1 = lookup[base64.charCodeAt(i + 0)];\n const encoded2 = lookup[base64.charCodeAt(i + 1)];\n const encoded3 = lookup[base64.charCodeAt(i + 2)];\n const encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return bytes;\n}\n\nvar css = '.frc-captcha *{margin:0;padding:0;border:0;text-align:initial;border-radius:0;filter:none!important;transition:none!important;font-weight:400;font-size:14px;line-height:1.2;text-decoration:none;background-color:initial;color:#222}.frc-captcha{position:relative;min-width:250px;max-width:312px;border:1px solid #f4f4f4;padding-bottom:12px;background-color:#fff}.frc-captcha b{font-weight:700}.frc-container{display:flex;align-items:center;min-height:52px}.frc-icon{fill:#222;stroke:#222;flex-shrink:0;margin:8px 8px 0}.frc-icon.frc-warning{fill:#c00}.frc-success .frc-icon{animation:1s ease-in both frc-fade-in}.frc-content{white-space:nowrap;display:flex;flex-direction:column;margin:4px 6px 0 0;overflow-x:auto;flex-grow:1}.frc-banner{position:absolute;bottom:0;right:6px;line-height:1}.frc-banner *{font-size:10px;opacity:.8;text-decoration:none}.frc-progress{-webkit-appearance:none;-moz-appearance:none;appearance:none;margin:3px 0;height:4px;border:none;background-color:#eee;color:#222;width:100%;transition:.5s linear}.frc-progress::-webkit-progress-bar{background:#eee}.frc-progress::-webkit-progress-value{background:#222}.frc-progress::-moz-progress-bar{background:#222}.frc-button{cursor:pointer;padding:2px 6px;background-color:#f1f1f1;border:1px solid transparent;text-align:center;font-weight:600;text-transform:none}.frc-button:focus{border:1px solid #333}.frc-button:hover{background-color:#ddd}.frc-captcha-solution{display:none}.frc-err-url{text-decoration:underline;font-size:.9em}.frc-rtl{direction:rtl}.frc-rtl .frc-content{margin:4px 0 0 6px}.frc-banner.frc-rtl{left:6px;right:auto}.dark.frc-captcha{color:#fff;background-color:#222;border-color:#333}.dark.frc-captcha *{color:#fff}.dark.frc-captcha button{background-color:#444}.dark .frc-icon{fill:#fff;stroke:#fff}.dark .frc-progress{background-color:#444}.dark .frc-progress::-webkit-progress-bar{background:#444}.dark .frc-progress::-webkit-progress-value{background:#ddd}.dark .frc-progress::-moz-progress-bar{background:#ddd}@keyframes frc-fade-in{from{opacity:0}to{opacity:1}}';\n\n// This is not an enum to save some bytes in the output bundle.\nconst SOLVER_TYPE_JS = 1;\nconst CHALLENGE_SIZE_BYTES = 128;\n\n// @ts-ignore\r\nconst loaderSVG = ``;\r\nconst errorSVG = ``;\r\n/**\r\n * Base template used for all widget states\r\n * The reason we use raw string interpolation here is so we don't have to ship something like lit-html.\r\n */\r\nfunction getTemplate(fieldName, rtl, svgContent, svgAriaHidden, textContent, solutionString, buttonText, progress = false, debugData, additionalContainerClasses) {\r\n return `
\n${svgContent}\n
\n ${textContent}\n ${buttonText ? `` : \"\"}\n ${progress ? `0%` : \"\"}\n
\n
FriendlyCaptcha ⇗\n${fieldName === \"-\" ? \"\" : ``}`;\r\n}\r\n/**\r\n * Used when the widget is ready to start solving.\r\n */\r\nfunction getReadyHTML(fieldName, l) {\r\n return getTemplate(fieldName, l.rtl, ``, true, l.text_ready, \".UNSTARTED\", l.button_start, false);\r\n}\r\n/**\r\n * Used when the widget is retrieving a puzzle\r\n */\r\nfunction getFetchingHTML(fieldName, l) {\r\n return getTemplate(fieldName, l.rtl, loaderSVG, true, l.text_fetching, \".FETCHING\", undefined, true);\r\n}\r\n/**\r\n * Used when the solver is running, displays a progress bar.\r\n */\r\nfunction getRunningHTML(fieldName, l) {\r\n return getTemplate(fieldName, l.rtl, loaderSVG, true, l.text_solving, \".UNFINISHED\", undefined, true);\r\n}\r\nfunction getDoneHTML(fieldName, l, solution, data) {\r\n const timeData = `${data.t.toFixed(0)}s (${((data.h / data.t) * 0.001).toFixed(0)}K/s)${data.solver === SOLVER_TYPE_JS ? \" JS Fallback\" : \"\"}`;\r\n return getTemplate(fieldName, l.rtl, `${l.text_completed_sr}`, false, l.text_completed, solution, undefined, false, timeData, \"frc-success\");\r\n}\r\nfunction getExpiredHTML(fieldName, l) {\r\n return getTemplate(fieldName, l.rtl, errorSVG, true, l.text_expired, \".EXPIRED\", l.button_restart);\r\n}\r\nfunction getErrorHTML(fieldName, l, errorDescription, recoverable = true, headless = false) {\r\n return getTemplate(fieldName, l.rtl, errorSVG, true, `${l.text_error}
${errorDescription}`, headless ? \".HEADLESS_ERROR\" : \".ERROR\", recoverable ? l.button_retry : undefined);\r\n}\r\n/**\r\n * Injects the style if no #frc-style element is already present\r\n * (to support custom stylesheets)\r\n */\r\nfunction injectStyle(styleNonce = null) {\r\n if (!document.querySelector(\"#frc-style\")) {\r\n const styleSheet = document.createElement(\"style\");\r\n styleSheet.id = \"frc-style\";\r\n styleSheet.innerHTML = css;\r\n if (styleNonce) {\r\n styleSheet.setAttribute('nonce', styleNonce);\r\n }\r\n document.head.appendChild(styleSheet);\r\n }\r\n}\r\n/**\r\n * @param element parent element of friendlycaptcha\r\n * @param progress value between 0 and 1\r\n */\r\nfunction updateProgressBar(element, data) {\r\n const p = element.querySelector(\".frc-progress\");\r\n const perc = (data.i + 1) / data.n;\r\n if (p) {\r\n p.value = perc;\r\n p.innerText = (perc * 100).toFixed(1) + \"%\";\r\n p.title = data.i + 1 + \"/\" + data.n + \" (\" + ((data.h / data.t) * 0.001).toFixed(0) + \"K/s)\";\r\n }\r\n}\r\n/**\r\n * Traverses parent nodes until a
is found, returns null if not found.\r\n */\r\nfunction findParentFormElement(element) {\r\n while (element.tagName !== \"FORM\") {\r\n element = element.parentElement;\r\n if (!element) {\r\n return null;\r\n }\r\n }\r\n return element;\r\n}\r\n/**\r\n * Add listener to specified element that will only fire once on focus.\r\n */\r\nfunction executeOnceOnFocusInEvent(element, listener) {\r\n element.addEventListener(\"focusin\", listener, { once: true, passive: true });\r\n}\n\n// Defensive init to make it easier to integrate with Gatsby, NextJS, and friends.\r\nlet nav;\r\nlet ua;\r\nif (typeof navigator !== \"undefined\" && typeof navigator.userAgent === \"string\") {\r\n nav = navigator;\r\n ua = nav.userAgent.toLowerCase();\r\n}\r\n/**\r\n * Headless browser detection on the clientside is imperfect. One can modify any clientside code to disable or change this check,\r\n * and one can spoof whatever is checked here. However, that doesn't make it worthless: it's yet another hurdle for spammers and\r\n * it stops unsophisticated scripters from making any request whatsoever.\r\n */\r\nfunction isHeadless() {\r\n return (\r\n //tell-tale bot signs\r\n ua.indexOf(\"headless\") !== -1 ||\r\n nav.appVersion.indexOf(\"Headless\") !== -1 ||\r\n ua.indexOf(\"bot\") !== -1 || // http://www.useragentstring.com/pages/useragentstring.php?typ=Browser\r\n ua.indexOf(\"crawl\") !== -1 || // Only IE5 has two distributions that has this on windows NT.. so yeah.\r\n nav.webdriver === true ||\r\n !nav.language ||\r\n (nav.languages !== undefined && !nav.languages.length) // IE 11 does not support NavigatorLanguage.languages https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/languages\r\n );\r\n}\n\n/**\n * Maps a value between 0 and 255 to a difficulty threshold (as uint32)\n * Difficulty 0 maps to 99.99% probability of being right on the first attempt\n * Anything above 250 needs 2^32 tries on average to solve.\n * 150 to 180 seems reasonable\n */\nfunction difficultyToThreshold(value) {\n if (value > 255) {\n value = 255;\n }\n else if (value < 0) {\n value = 0;\n }\n return Math.pow(2, (255.999 - value) / 8.0) >>> 0;\n}\n\nconst PUZZLE_EXPIRY_OFFSET = 13;\nconst NUMBER_OF_PUZZLES_OFFSET = 14;\nconst PUZZLE_DIFFICULTY_OFFSET = 15;\nfunction getPuzzleSolverInputs(puzzleBuffer, numPuzzles) {\n const startingPoints = [];\n for (let i = 0; i < numPuzzles; i++) {\n const input = new Uint8Array(CHALLENGE_SIZE_BYTES);\n input.set(puzzleBuffer);\n input[120] = i;\n startingPoints.push(input);\n }\n return startingPoints;\n}\n\nfunction decodeBase64Puzzle(base64Puzzle) {\r\n const parts = base64Puzzle.split(\".\");\r\n const puzzle = parts[1];\r\n const arr = decode(puzzle);\r\n return {\r\n signature: parts[0],\r\n base64: puzzle,\r\n buffer: arr,\r\n n: arr[NUMBER_OF_PUZZLES_OFFSET],\r\n threshold: difficultyToThreshold(arr[PUZZLE_DIFFICULTY_OFFSET]),\r\n expiry: arr[PUZZLE_EXPIRY_OFFSET] * 300000,\r\n };\r\n}\r\nasync function getPuzzle(urlsSeparatedByComma, siteKey, lang) {\r\n const urls = urlsSeparatedByComma.split(\",\");\r\n for (let i = 0; i < urls.length; i++) {\r\n try {\r\n const response = await fetchAndRetryWithBackoff(urls[i] + \"?sitekey=\" + siteKey, { headers: [[\"x-frc-client\", \"js-0.9.18\"]], mode: \"cors\" }, 2);\r\n if (response.ok) {\r\n const json = await response.json();\r\n return json.data.puzzle;\r\n }\r\n else {\r\n let json;\r\n try {\r\n json = await response.json();\r\n }\r\n catch (e) {\r\n /* Do nothing, the error is not valid JSON */\r\n }\r\n if (json && json.errors && json.errors[0] === \"endpoint_not_enabled\") {\r\n throw Error(`Endpoint not allowed (${response.status})`);\r\n }\r\n if (i === urls.length - 1) {\r\n throw Error(`Response status ${response.status} ${response.statusText} ${json ? json.errors : \"\"}`);\r\n }\r\n }\r\n }\r\n catch (e) {\r\n console.error(\"[FRC Fetch]:\", e);\r\n const err = new Error(`${lang.text_fetch_error} ${urls[i]}`);\r\n err.rawError = e;\r\n throw err;\r\n }\r\n }\r\n // This code should never be reached.\r\n throw Error(`Internal error`);\r\n}\r\n/**\r\n * Retries given request with exponential backoff (starting with 1000ms delay, multiplying by 4 every time)\r\n * @param url Request (can be string url) to fetch\r\n * @param opts Options for fetch\r\n * @param n Number of times to attempt before giving up.\r\n */\r\nasync function fetchAndRetryWithBackoff(url, opts, n) {\r\n let time = 1000;\r\n return fetch(url, opts).catch(async (error) => {\r\n if (n === 0)\r\n throw error;\r\n await new Promise((r) => setTimeout(r, time));\r\n time *= 4;\r\n return fetchAndRetryWithBackoff(url, opts, n - 1);\r\n });\r\n}\n\n// English\r\nconst LANG_EN = {\r\n text_init: \"Initializing...\",\r\n text_ready: \"Anti-Robot Verification\",\r\n button_start: \"Click to start verification\",\r\n text_fetching: \"Fetching Challenge\",\r\n text_solving: \"Verifying you are human...\",\r\n text_completed: \"I am human\",\r\n text_completed_sr: \"Automatic spam check completed\",\r\n text_expired: \"Anti-Robot verification expired\",\r\n button_restart: \"Restart\",\r\n text_error: \"Verification failed\",\r\n button_retry: \"Retry\",\r\n text_fetch_error: \"Failed to connect to\",\r\n};\r\n// French\r\nconst LANG_FR = {\r\n text_init: \"Chargement...\",\r\n text_ready: \"Vérification Anti-Robot\",\r\n button_start: \"Clique ici pour vérifier\",\r\n text_fetching: \"Chargement du défi\",\r\n text_solving: \"Nous vérifions que vous n'êtes pas un robot...\",\r\n text_completed: \"Je ne suis pas un robot\",\r\n text_completed_sr: \"Vérification automatique des spams terminée\",\r\n text_expired: \"Vérification anti-robot expirée\",\r\n button_restart: \"Redémarrer\",\r\n text_error: \"Échec de la vérification\",\r\n button_retry: \"Recommencer\",\r\n text_fetch_error: \"Problème de connexion avec\",\r\n};\r\n// German\r\nconst LANG_DE = {\r\n text_init: \"Initialisierung...\",\r\n text_ready: \"Anti-Roboter-Verifizierung\",\r\n button_start: \"Hier klicken\",\r\n text_fetching: \"Herausforderung laden...\",\r\n text_solving: \"Verifizierung, dass Sie ein Mensch sind...\",\r\n text_completed: \"Ich bin ein Mensch\",\r\n text_completed_sr: \"Automatische Spamprüfung abgeschlossen\",\r\n text_expired: \"Verifizierung abgelaufen\",\r\n button_restart: \"Erneut starten\",\r\n text_error: \"Verifizierung fehlgeschlagen\",\r\n button_retry: \"Erneut versuchen\",\r\n text_fetch_error: \"Verbindungsproblem mit\",\r\n};\r\n// Dutch\r\nconst LANG_NL = {\r\n text_init: \"Initializeren...\",\r\n text_ready: \"Anti-robotverificatie\",\r\n button_start: \"Klik om te starten\",\r\n text_fetching: \"Aan het laden...\",\r\n text_solving: \"Anti-robotverificatie bezig...\",\r\n text_completed: \"Ik ben een mens\",\r\n text_completed_sr: \"Automatische anti-spamcheck voltooid\",\r\n text_expired: \"Verificatie verlopen\",\r\n button_restart: \"Opnieuw starten\",\r\n text_error: \"Verificatie mislukt\",\r\n button_retry: \"Opnieuw proberen\",\r\n text_fetch_error: \"Verbinding mislukt met\",\r\n};\r\n// Italian\r\nconst LANG_IT = {\r\n text_init: \"Inizializzazione...\",\r\n text_ready: \"Verifica Anti-Robot\",\r\n button_start: \"Clicca per iniziare\",\r\n text_fetching: \"Caricamento...\",\r\n text_solving: \"Verificando che sei umano...\",\r\n text_completed: \"Non sono un robot\",\r\n text_completed_sr: \"Controllo automatico dello spam completato\",\r\n text_expired: \"Verifica Anti-Robot scaduta\",\r\n button_restart: \"Ricomincia\",\r\n text_error: \"Verifica fallita\",\r\n button_retry: \"Riprova\",\r\n text_fetch_error: \"Problema di connessione con\",\r\n};\r\n// Portuguese\r\nconst LANG_PT = {\r\n text_init: \"Inicializando...\",\r\n text_ready: \"Verificação Anti-Robô\",\r\n button_start: \"Clique para iniciar verificação\",\r\n text_fetching: \"Carregando...\",\r\n text_solving: \"Verificando se você é humano...\",\r\n text_completed: \"Eu sou humano\",\r\n text_completed_sr: \"Verificação automática de spam concluída\",\r\n text_expired: \"Verificação Anti-Robô expirada\",\r\n button_restart: \"Reiniciar\",\r\n text_error: \"Verificação falhou\",\r\n button_retry: \"Tentar novamente\",\r\n text_fetch_error: \"Falha de conexão com\",\r\n};\r\n// Spanish\r\nconst LANG_ES = {\r\n text_init: \"Inicializando...\",\r\n text_ready: \"Verificación Anti-Robot\",\r\n button_start: \"Haga clic para iniciar la verificación\",\r\n text_fetching: \"Cargando desafío\",\r\n text_solving: \"Verificando que eres humano...\",\r\n text_completed: \"Soy humano\",\r\n text_completed_sr: \"Verificación automática de spam completada\",\r\n text_expired: \"Verificación Anti-Robot expirada\",\r\n button_restart: \"Reiniciar\",\r\n text_error: \"Ha fallado la verificación\",\r\n button_retry: \"Intentar de nuevo\",\r\n text_fetch_error: \"Error al conectarse a\",\r\n};\r\n// Catalan\r\nconst LANG_CA = {\r\n text_init: \"Inicialitzant...\",\r\n text_ready: \"Verificació Anti-Robot\",\r\n button_start: \"Fes clic per començar la verificació\",\r\n text_fetching: \"Carregant repte\",\r\n text_solving: \"Verificant que ets humà...\",\r\n text_completed: \"Soc humà\",\r\n text_completed_sr: \"Verificació automàtica de correu brossa completada\",\r\n text_expired: \"La verificació Anti-Robot ha expirat\",\r\n button_restart: \"Reiniciar\",\r\n text_error: \"Ha fallat la verificació\",\r\n button_retry: \"Tornar a provar\",\r\n text_fetch_error: \"Error connectant a\",\r\n};\r\n// Japanese\r\nconst LANG_JA = {\r\n text_init: \"開始しています...\",\r\n text_ready: \"アンチロボット認証\",\r\n button_start: \"クリックして認証を開始\",\r\n text_fetching: \"ロードしています\",\r\n text_solving: \"認証中...\",\r\n text_completed: \"私はロボットではありません\",\r\n text_completed_sr: \"自動スパムチェックが完了しました\",\r\n text_expired: \"認証の期限が切れています\",\r\n button_restart: \"再度認証を行う\",\r\n text_error: \"認証にエラーが発生しました\",\r\n button_retry: \"再度認証を行う\",\r\n text_fetch_error: \"接続ができませんでした\",\r\n};\r\n// Danish\r\nconst LANG_DA = {\r\n text_init: \"Aktiverer...\",\r\n text_ready: \"Jeg er ikke en robot\",\r\n button_start: \"Klik for at starte verifikationen\",\r\n text_fetching: \"Henter data\",\r\n text_solving: \"Kontrollerer at du er et menneske...\",\r\n text_completed: \"Jeg er et menneske.\",\r\n text_completed_sr: \"Automatisk spamkontrol gennemført\",\r\n text_expired: \"Verifikationen kunne ikke fuldføres\",\r\n button_restart: \"Genstart\",\r\n text_error: \"Bekræftelse mislykkedes\",\r\n button_retry: \"Prøv igen\",\r\n text_fetch_error: \"Forbindelsen mislykkedes\",\r\n};\r\n// Russian\r\nconst LANG_RU = {\r\n text_init: \"Инициализация...\",\r\n text_ready: \"АнтиРобот проверка\",\r\n button_start: \"Нажмите, чтобы начать проверку\",\r\n text_fetching: \"Получаю задачу\",\r\n text_solving: \"Проверяю, что вы человек...\",\r\n text_completed: \"Я человек\",\r\n text_completed_sr: \"Aвтоматическая проверка на спам завершена\",\r\n text_expired: \"Срок АнтиРоботной проверки истёк\",\r\n button_restart: \"Начать заново\",\r\n text_error: \"Ошибка проверки\",\r\n button_retry: \"Повторить ещё раз\",\r\n text_fetch_error: \"Ошибка подключения\",\r\n};\r\n// Swedish\r\nconst LANG_SV = {\r\n text_init: \"Aktiverar...\",\r\n text_ready: \"Jag är inte en robot\",\r\n button_start: \"Klicka för att verifiera\",\r\n text_fetching: \"Hämtar data\",\r\n text_solving: \"Kontrollerar att du är människa...\",\r\n text_completed: \"Jag är en människa\",\r\n text_completed_sr: \"Automatisk spamkontroll slutförd\",\r\n text_expired: \"Anti-robot-verifieringen har löpt ut\",\r\n button_restart: \"Börja om\",\r\n text_error: \"Verifiering kunde inte slutföras\",\r\n button_retry: \"Omstart\",\r\n text_fetch_error: \"Verifiering misslyckades\",\r\n};\r\n// Turkish\r\nconst LANG_TR = {\r\n text_init: \"Başlatılıyor...\",\r\n text_ready: \"Anti-Robot Doğrulaması\",\r\n button_start: \"Doğrulamayı başlatmak için tıklayın\",\r\n text_fetching: \"Yükleniyor\",\r\n text_solving: \"Robot olmadığınız doğrulanıyor...\",\r\n text_completed: \"Ben bir insanım\",\r\n text_completed_sr: \"Otomatik spam kontrolü tamamlandı\",\r\n text_expired: \"Anti-Robot doğrulamasının süresi doldu\",\r\n button_restart: \"Yeniden başlat\",\r\n text_error: \"Doğrulama başarısız oldu\",\r\n button_retry: \"Tekrar dene\",\r\n text_fetch_error: \"Bağlantı başarısız oldu\",\r\n};\r\n// Greek\r\nconst LANG_EL = {\r\n text_init: \"Προετοιμασία...\",\r\n text_ready: \"Anti-Robot Επαλήθευση\",\r\n button_start: \" Κάντε κλικ για να ξεκινήσει η επαλήθευση\",\r\n text_fetching: \" Λήψη πρόκλησης\",\r\n text_solving: \" Επιβεβαίωση ανθρώπου...\",\r\n text_completed: \"Είμαι άνθρωπος\",\r\n text_completed_sr: \" Ο αυτόματος έλεγχος ανεπιθύμητου περιεχομένου ολοκληρώθηκε\",\r\n text_expired: \" Η επαλήθευση Anti-Robot έληξε\",\r\n button_restart: \" Επανεκκίνηση\",\r\n text_error: \" Η επαλήθευση απέτυχε\",\r\n button_retry: \" Δοκιμάστε ξανά\",\r\n text_fetch_error: \" Αποτυχία σύνδεσης με\",\r\n};\r\n// Ukrainian\r\nconst LANG_UK = {\r\n text_init: \"Ініціалізація...\",\r\n text_ready: \"Антиробот верифікація\",\r\n button_start: \"Натисніть, щоб розпочати верифікацію\",\r\n text_fetching: \"З’єднання\",\r\n text_solving: \"Перевірка, що ви не робот...\",\r\n text_completed: \"Я не робот\",\r\n text_completed_sr: \"Автоматична перевірка спаму завершена\",\r\n text_expired: \"Час вичерпано\",\r\n button_restart: \"Почати знову\",\r\n text_error: \"Верифікація не вдалась\",\r\n button_retry: \"Спробувати знову\",\r\n text_fetch_error: \"Не вдалось з’єднатись\",\r\n};\r\n// Bulgarian\r\nconst LANG_BG = {\r\n text_init: \"Инициализиране...\",\r\n text_ready: \"Анти-робот проверка\",\r\n button_start: \"Щракнете, за да започнете проверката\",\r\n text_fetching: \"Предизвикателство\",\r\n text_solving: \"Проверяваме дали си човек...\",\r\n text_completed: \"Аз съм човек\",\r\n text_completed_sr: \"Автоматичната проверка за спам е завършена\",\r\n text_expired: \"Анти-Робот проверката изтече\",\r\n button_restart: \"Рестартирайте\",\r\n text_error: \"Неуспешна проверка\",\r\n button_retry: \"Опитайте пак\",\r\n text_fetch_error: \"Неуспешно свързване с\",\r\n};\r\n// Czech\r\nconst LANG_CS = {\r\n text_init: \"Inicializace...\",\r\n text_ready: \"Ověření proti robotům\",\r\n button_start: \"Klikněte pro ověření\",\r\n text_fetching: \"Problém při načítání\",\r\n text_solving: \"Ověření, že jste člověk...\",\r\n text_completed: \"Jsem člověk\",\r\n text_completed_sr: \"Automatická kontrola spamu dokončena\",\r\n text_expired: \"Ověření proti robotům vypršelo\",\r\n button_restart: \"Restartovat\",\r\n text_error: \"Ověření se nezdařilo\",\r\n button_retry: \"Zkusit znovu\",\r\n text_fetch_error: \"Připojení se nezdařilo\",\r\n};\r\n// Slovak\r\nconst LANG_SK = {\r\n text_init: \"Inicializácia...\",\r\n text_ready: \"Overenie proti robotom\",\r\n button_start: \"Kliknite pre overenie\",\r\n text_fetching: \"Problém pri načítaní\",\r\n text_solving: \"Overenie, že ste človek...\",\r\n text_completed: \"Som človek\",\r\n text_completed_sr: \"Automatická kontrola spamu dokončená\",\r\n text_expired: \"Overenie proti robotom vypršalo\",\r\n button_restart: \"Reštartovať\",\r\n text_error: \"Overenie sa nepodarilo\",\r\n button_retry: \"Skúsiť znova\",\r\n text_fetch_error: \"Pripojenie sa nepodarilo\",\r\n};\r\n// Norwegian\r\nconst LANG_NO = {\r\n text_init: \" Aktiverer...\",\r\n text_ready: \"Jeg er ikke en robot\",\r\n button_start: \"Klikk for å starte verifiseringen\",\r\n text_fetching: \"Henter data\",\r\n text_solving: \"Sjekker at du er et menneske...\",\r\n text_completed: \"Jeg er et menneske\",\r\n text_completed_sr: \"Automatisk spam-sjekk fullført\",\r\n text_expired: \"Verifisering kunne ikke fullføres\",\r\n button_restart: \"Omstart\",\r\n text_error: \"Bekreftelsen mislyktes\",\r\n button_retry: \"Prøv på nytt\",\r\n text_fetch_error: \"Tilkoblingen mislyktes\",\r\n};\r\n// Finnish\r\nconst LANG_FI = {\r\n text_init: \"Aktivoidaan...\",\r\n text_ready: \"En ole robotti\",\r\n button_start: \"Aloita vahvistus klikkaamalla\",\r\n text_fetching: \"Haetaan tietoja\",\r\n text_solving: \"Tarkistaa, että olet ihminen...\",\r\n text_completed: \"Olen ihminen\",\r\n text_completed_sr: \"Automaattinen roskapostin tarkistus suoritettu\",\r\n text_expired: \"Vahvistusta ei voitu suorittaa loppuun\",\r\n button_restart: \"Uudelleenkäynnistys\",\r\n text_error: \"Vahvistus epäonnistui\",\r\n button_retry: \"Yritä uudelleen\",\r\n text_fetch_error: \"Yhteys epäonnistui\",\r\n};\r\n// Latvian\r\nconst LANG_LV = {\r\n text_init: \"Notiek inicializēšana...\",\r\n text_ready: \"Verifikācija, ka neesat robots\",\r\n button_start: \"Noklikšķiniet, lai sāktu verifikāciju\",\r\n text_fetching: \"Notiek drošības uzdevuma izgūšana\",\r\n text_solving: \"Notiek pārbaude, vai esat cilvēks...\",\r\n text_completed: \"Es esmu cilvēks\",\r\n text_completed_sr: \"Automātiska surogātpasta pārbaude pabeigta\",\r\n text_expired: \"Verifikācijas, ka neesat robots, derīgums beidzies\",\r\n button_restart: \"Restartēt\",\r\n text_error: \"Verifikācija neizdevās\",\r\n button_retry: \"Mēģināt vēlreiz\",\r\n text_fetch_error: \"Neizdevās izveidot savienojumu ar\",\r\n};\r\n// Lithuanian\r\nconst LANG_LT = {\r\n text_init: \"Inicijuojama...\",\r\n text_ready: \"Patikrinimas, ar nesate robotas\",\r\n button_start: \"Spustelėkite patikrinimui pradėti\",\r\n text_fetching: \"Gavimo iššūkis\",\r\n text_solving: \"Tikrinama, ar esate žmogus...\",\r\n text_completed: \"Esu žmogus\",\r\n text_completed_sr: \"Automatinė patikra dėl pašto šiukšlių atlikta\",\r\n text_expired: \"Patikrinimas, ar nesate robotas, baigė galioti\",\r\n button_restart: \"Pradėti iš naujo\",\r\n text_error: \"Patikrinimas nepavyko\",\r\n button_retry: \"Kartoti\",\r\n text_fetch_error: \"Nepavyko prisijungti prie\",\r\n};\r\n// Polish\r\nconst LANG_PL = {\r\n text_init: \"Inicjowanie...\",\r\n text_ready: \"Weryfikacja antybotowa\",\r\n button_start: \"Kliknij, aby rozpocząć weryfikację\",\r\n text_fetching: \"Pobieranie\",\r\n text_solving: \"Weryfikacja, czy nie jesteś robotem...\",\r\n text_completed: \"Nie jestem robotem\",\r\n text_completed_sr: \"Zakończono automatyczne sprawdzanie spamu\",\r\n text_expired: \"Weryfikacja antybotowa wygasła\",\r\n button_restart: \"Uruchom ponownie\",\r\n text_error: \"Weryfikacja nie powiodła się\",\r\n button_retry: \"Spróbuj ponownie\",\r\n text_fetch_error: \"Nie udało się połączyć z\",\r\n};\r\n// Estonian\r\nconst LANG_ET = {\r\n text_init: \"Initsialiseerimine...\",\r\n text_ready: \"Robotivastane kinnitus\",\r\n button_start: \"Kinnitamisega alustamiseks klõpsake\",\r\n text_fetching: \"Väljakutse toomine\",\r\n text_solving: \"Kinnitatakse, et sa oled inimene...\",\r\n text_completed: \"Ma olen inimene\",\r\n text_completed_sr: \"Automaatne rämpsposti kontroll on lõpetatud\",\r\n text_expired: \"Robotivastane kinnitus aegus\",\r\n button_restart: \"Taaskäivita\",\r\n text_error: \"Kinnitamine nurjus\",\r\n button_retry: \"Proovi uuesti\",\r\n text_fetch_error: \"Ühenduse loomine nurjus\",\r\n};\r\n// Croatian\r\nconst LANG_HR = {\r\n text_init: \"Početno postavljanje...\",\r\n text_ready: \"Provjera protiv robota\",\r\n button_start: \"Kliknite za početak provjere\",\r\n text_fetching: \"Dohvaćanje izazova\",\r\n text_solving: \"Provjeravamo jeste li čovjek...\",\r\n text_completed: \"Nisam robot\",\r\n text_completed_sr: \"Automatska provjera je završena\",\r\n text_expired: \"Vrijeme za provjeru protiv robota je isteklo\",\r\n button_restart: \"Osvježi\",\r\n text_error: \"Provjera nije uspjlela\",\r\n button_retry: \" Ponovo pokreni\",\r\n text_fetch_error: \"Nije moguće uspostaviti vezu\",\r\n};\r\n// Serbian\r\nconst LANG_SR = {\r\n text_init: \"Pokretanje...\",\r\n text_ready: \"Anti-Robot Verifikacija\",\r\n button_start: \"Kliknite da biste započeli verifikaciju\",\r\n text_fetching: \"Učitavanje izazova\",\r\n text_solving: \"Verifikacija da ste čovek...\",\r\n text_completed: \"Ja sam čovek\",\r\n text_completed_sr: \"Automatska provera neželjene pošte je završena\",\r\n text_expired: \"Anti-Robot verifikacija je istekla\",\r\n button_restart: \"Ponovo pokrenuti\",\r\n text_error: \"Verifikacija nije uspela\",\r\n button_retry: \"Pokušajte ponovo\",\r\n text_fetch_error: \"Neuspelo povezivanje sa...\",\r\n};\r\n// Slovenian\r\nconst LANG_SL = {\r\n text_init: \"Inicializiranje...\",\r\n text_ready: \"Preverjanje robotov\",\r\n button_start: \"Kliknite za začetek preverjanja\",\r\n text_fetching: \"Prenašanje izziva\",\r\n text_solving: \"Preverjamo, ali ste človek\",\r\n text_completed: \"Nisem robot\",\r\n text_completed_sr: \"Avtomatsko preverjanje je zaključeno\",\r\n text_expired: \"Preverjanje robotov je poteklo\",\r\n button_restart: \"Osveži\",\r\n text_error: \"Preverjanje ni uspelo\",\r\n button_retry: \"Poskusi ponovno\",\r\n text_fetch_error: \"Povezave ni bilo mogoče vzpostaviti\",\r\n};\r\n// Hungarian\r\nconst LANG_HU = {\r\n text_init: \"Inicializálás...\",\r\n text_ready: \"Robotellenes ellenőrzés\",\r\n button_start: \"Kattintson az ellenőrzés megkezdéséhez\",\r\n text_fetching: \"Feladvány lekérése\",\r\n text_solving: \"Annak igazolása, hogy Ön nem robot...\",\r\n text_completed: \"Nem vagyok robot\",\r\n text_completed_sr: \"Automatikus spam ellenőrzés befejeződött\",\r\n text_expired: \"Robotellenes ellenőrzés lejárt\",\r\n button_restart: \"Újraindítás\",\r\n text_error: \"Az ellenőrzés nem sikerült\",\r\n button_retry: \"Próbálja újra\",\r\n text_fetch_error: \"Nem sikerült csatlakozni\",\r\n};\r\n// Romanian\r\nconst LANG_RO = {\r\n text_init: \"Se inițializează...\",\r\n text_ready: \"Verificare anti-robot\",\r\n button_start: \"Click pentru a începe verificarea\",\r\n text_fetching: \"Downloading\",\r\n text_solving: \"Verificare că ești om...\",\r\n text_completed: \"Sunt om\",\r\n text_completed_sr: \"Verificarea automată a spam-ului a fost finalizată\",\r\n text_expired: \"Verificarea anti-robot a expirat\",\r\n button_restart: \"Restart\",\r\n text_error: \"Verificare eșuată\",\r\n button_retry: \"Reîncearcă\",\r\n text_fetch_error: \"Nu s-a putut conecta\",\r\n};\r\n// Chinese\r\nconst LANG_ZH = {\r\n text_init: \"初始化中……\",\r\n text_ready: \"人机验证\",\r\n button_start: \"点击开始\",\r\n text_fetching: \"正在加载\",\r\n text_solving: \"人机校验中……\",\r\n text_completed: \"我不是机器人\",\r\n text_completed_sr: \"人机验证完成\",\r\n text_expired: \"验证已过期\",\r\n button_restart: \"重新开始\",\r\n text_error: \"校验失败\",\r\n button_retry: \"重试\",\r\n text_fetch_error: \"无法连接到\",\r\n};\r\n// Traditional Chinese\r\nconst LANG_ZH_TW = {\r\n text_init: \"正在初始化……\",\r\n text_ready: \"反機器人驗證\",\r\n button_start: \"點擊開始驗證\",\r\n text_fetching: \"載入中\",\r\n text_solving: \"反機器人驗證中……\",\r\n text_completed: \"我不是機器人\",\r\n text_completed_sr: \"驗證完成\",\r\n text_expired: \"驗證超時\",\r\n button_restart: \"重新開始\",\r\n text_error: \"驗證失敗\",\r\n button_retry: \"重試\",\r\n text_fetch_error: \"無法連線到\",\r\n};\r\n// Vietnamese\r\nconst LANG_VI = {\r\n text_init: \"Đang khởi tạo...\",\r\n text_ready: \"Xác minh chống Robot\",\r\n button_start: \"Bấm vào đây để xác minh\",\r\n text_fetching: \"Tìm nạp và xử lý thử thách\",\r\n text_solving: \"Xác minh bạn là người...\",\r\n text_completed: \"Bạn là con người\",\r\n text_completed_sr: \"Xác minh hoàn tất\",\r\n text_expired: \"Xác minh đã hết hạn\",\r\n button_restart: \"Khởi động lại\",\r\n text_error: \"Xác minh thất bại\",\r\n button_retry: \"Thử lại\",\r\n text_fetch_error: \"Không kết nối được\",\r\n};\r\n// Hebrew\r\nconst LANG_HE = {\r\n text_init: \"בביצוע...\",\r\n text_ready: \"אימות אנוש\",\r\n button_start: \"צריך ללחוץ להתחלת האימות\",\r\n text_fetching: \"אתגר המענה בהכנה\",\r\n text_solving: \"מתבצע אימות אנוש...\",\r\n text_completed: \"אני לא רובוט\",\r\n text_completed_sr: \"בדיקת הספאם האוטומטית הסתיימה\",\r\n text_expired: \"פג תוקף אימות האנוש\",\r\n button_restart: \"להתחיל שוב\",\r\n text_error: \"אימות האנוש נכשל\",\r\n button_retry: \"לנסות שוב\",\r\n text_fetch_error: \"נכשל החיבור אל\",\r\n rtl: true,\r\n};\r\n// Thai\r\nconst LANG_TH = {\r\n text_init: \"การเริ่มต้น...\",\r\n text_ready: \" การตรวจสอบต่อต้านหุ่นยนต์\",\r\n button_start: \"คลิกเพื่อเริ่มการตรวจสอบ\",\r\n text_fetching: \"การดึงความท้าทาย\",\r\n text_solving: \"ยืนยันว่าคุณเป็นมนุษย์...\",\r\n text_completed: \"ฉันเป็นมนุษย์\",\r\n text_completed_sr: \"การตรวจสอบสแปมอัตโนมัติเสร็จสมบูรณ์\",\r\n text_expired: \"การตรวจสอบ ต่อต้านหุ่นยนต์ หมดอายุ\",\r\n button_restart: \"รีสตาร์ท\",\r\n text_error: \"การยืนยันล้มเหลว\",\r\n button_retry: \"ลองใหม่\",\r\n text_fetch_error: \"ไม่สามารถเชื่อมต่อได้\"\r\n};\r\n// South Korean\r\nconst LANG_KR = {\r\n text_init: \"초기화 중\",\r\n text_ready: \"Anti-Robot 검증\",\r\n button_start: \"검증을 위해 클릭해 주세요\",\r\n text_fetching: \"검증 준비 중\",\r\n text_solving: \"검증 중\",\r\n text_completed: \"검증이 완료되었습니다\",\r\n text_completed_sr: \"자동 스팸 확인 완료\",\r\n text_expired: \"Anti-Robot 검증 만료\",\r\n button_restart: \"다시 시작합니다\",\r\n text_error: \"검증 실패\",\r\n button_retry: \"다시 시도해 주세요\",\r\n text_fetch_error: \"연결하지 못했습니다\",\r\n};\r\n// Arabic\r\nconst LANG_AR = {\r\n text_init: \"...التهيئة\",\r\n text_ready: \"يتم التحقيق\",\r\n button_start: \"إضغط هنا للتحقيق\",\r\n text_fetching: \"تهيئة التحدي\",\r\n text_solving: \"نتحقق من أنك لست روبوتًا...\",\r\n text_completed: \"أنا لست روبوتًا\",\r\n text_completed_sr: \"تم الانتهاء من التحقق التلقائي من البريد العشوائي\",\r\n text_expired: \"انتهت صلاحية التحقق\",\r\n button_restart: \"إعادة تشغيل\",\r\n text_error: \"فشل التحقق\",\r\n button_retry: \"ابدأ مرة أخرى\",\r\n text_fetch_error: \"مشكلة في الاتصال مع\",\r\n};\r\nconst localizations = {\r\n en: LANG_EN,\r\n de: LANG_DE,\r\n nl: LANG_NL,\r\n fr: LANG_FR,\r\n it: LANG_IT,\r\n pt: LANG_PT,\r\n es: LANG_ES,\r\n ca: LANG_CA,\r\n ja: LANG_JA,\r\n da: LANG_DA,\r\n ru: LANG_RU,\r\n sv: LANG_SV,\r\n tr: LANG_TR,\r\n el: LANG_EL,\r\n uk: LANG_UK,\r\n bg: LANG_BG,\r\n cs: LANG_CS,\r\n sk: LANG_SK,\r\n no: LANG_NO,\r\n fi: LANG_FI,\r\n lv: LANG_LV,\r\n lt: LANG_LT,\r\n pl: LANG_PL,\r\n et: LANG_ET,\r\n hr: LANG_HR,\r\n sr: LANG_SR,\r\n sl: LANG_SL,\r\n hu: LANG_HU,\r\n ro: LANG_RO,\r\n zh: LANG_ZH,\r\n zh_tw: LANG_ZH_TW,\r\n vi: LANG_VI,\r\n he: LANG_HE,\r\n th: LANG_TH,\r\n kr: LANG_KR,\r\n ar: LANG_AR,\r\n // alternative language codes\r\n nb: LANG_NO,\r\n};\n\nfunction createDiagnosticsBuffer(solverID, timeToSolved) {\n const arr = new Uint8Array(3);\n const view = new DataView(arr.buffer);\n view.setUint8(0, solverID);\n view.setUint16(1, timeToSolved);\n return arr;\n}\n\nvar workerString = \"!function(){\\\"use strict\\\";const A=\\\"=\\\".charCodeAt(0),I=new Uint8Array(256);for(let A=0;A<64;A++)I[\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\\\".charCodeAt(A)]=A;function g(A){const I={},g=A.exports,C=g.memory,Q=g.__alloc,t=g.__retain,B=g.__rtti_base||-1;return I.__allocArray=(A,I)=>{const g=function(A){return new Uint32Array(C.buffer)[(B+4>>>2)+2*A]}(A),e=31-Math.clz32(g>>>6&31),o=I.length,i=Q(o<>>2]=t(i),n[r+4>>>2]=i,n[r+8>>>2]=o<>>e)+A]=t(I[A]);else s.set(I,i>>>e);return r},I.__getUint8Array=A=>{const I=new Uint32Array(C.buffer),g=I[A+4>>>2];return new Uint8Array(C.buffer,g,I[g-4>>>2]>>>0)},function(A,I={}){const g=A.__argumentsLength?I=>{A.__argumentsLength.value=I}:A.__setArgumentsLength||A.__setargc||(()=>({}));for(const C in A){if(!Object.prototype.hasOwnProperty.call(A,C))continue;const Q=A[C],t=C.split(\\\".\\\")[0];\\\"function\\\"==typeof Q&&Q!==g?(I[t]=(...A)=>(g(A.length),Q(...A))).original=Q:I[t]=Q}return I}(g,I)}class C{constructor(A){this.b=new Uint8Array(128),this.h=new Uint32Array(16),this.t=0,this.c=0,this.v=new Uint32Array(32),this.m=new Uint32Array(32),this.outlen=A}}function Q(A,I){return A[I]^A[I+1]<<8^A[I+2]<<16^A[I+3]<<24}function t(A,I,g,C,Q,t,B,e){const o=I[B],i=I[B+1],r=I[e],n=I[e+1];let E,s,w,a,c=A[g],D=A[g+1],f=A[C],h=A[C+1],y=A[Q],l=A[Q+1],u=A[t],N=A[t+1];E=c+f,s=(c&f|(c|f)&~E)>>>31,c=E,D=D+h+s,E=c+o,s=(c&o|(c|o)&~E)>>>31,c=E,D=D+i+s,w=u^c,a=N^D,u=a,N=w,E=y+u,s=(y&u|(y|u)&~E)>>>31,y=E,l=l+N+s,w=f^y,a=h^l,f=w>>>24^a<<8,h=a>>>24^w<<8,E=c+f,s=(c&f|(c|f)&~E)>>>31,c=E,D=D+h+s,E=c+r,s=(c&r|(c|r)&~E)>>>31,c=E,D=D+n+s,w=u^c,a=N^D,u=w>>>16^a<<16,N=a>>>16^w<<16,E=y+u,s=(y&u|(y|u)&~E)>>>31,y=E,l=l+N+s,w=f^y,a=h^l,f=a>>>31^w<<1,h=w>>>31^a<<1,A[g]=c,A[g+1]=D,A[C]=f,A[C+1]=h,A[Q]=y,A[Q+1]=l,A[t]=u,A[t+1]=N}const B=[4089235720,1779033703,2227873595,3144134277,4271175723,1013904242,1595750129,2773480762,2917565137,1359893119,725511199,2600822924,4215389547,528734635,327033209,1541459225],e=[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6,22,16,24,0,10,4,30,26,20,28,6,12,14,2,18,8,14,18,6,2,26,24,22,28,4,12,10,20,8,0,30,16,18,0,10,14,4,8,20,30,28,2,22,24,12,16,6,26,4,24,12,20,0,22,16,6,8,26,14,10,30,28,2,18,24,10,2,30,28,26,8,20,0,14,12,6,18,4,16,22,26,22,14,28,24,2,6,18,10,0,30,8,16,12,4,20,12,30,28,18,22,6,0,16,24,4,26,14,2,8,20,10,20,4,16,8,14,12,2,10,30,22,18,28,6,24,26,0,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,28,20,8,16,18,30,26,12,2,24,0,4,22,14,10,6];function o(A,I){const g=A.v,C=A.m;for(let I=0;I<16;I++)g[I]=A.h[I],g[I+16]=B[I];g[24]=g[24]^A.t,g[25]=g[25]^A.t/4294967296,I&&(g[28]=~g[28],g[29]=~g[29]);for(let I=0;I<32;I++)C[I]=Q(A.b,4*I);for(let A=0;A<12;A++)t(g,C,0,8,16,24,e[16*A+0],e[16*A+1]),t(g,C,2,10,18,26,e[16*A+2],e[16*A+3]),t(g,C,4,12,20,28,e[16*A+4],e[16*A+5]),t(g,C,6,14,22,30,e[16*A+6],e[16*A+7]),t(g,C,0,10,20,30,e[16*A+8],e[16*A+9]),t(g,C,2,12,22,24,e[16*A+10],e[16*A+11]),t(g,C,4,14,16,26,e[16*A+12],e[16*A+13]),t(g,C,6,8,18,28,e[16*A+14],e[16*A+15]);for(let I=0;I<16;I++)A.h[I]=A.h[I]^g[I]^g[I+16]}function i(A,I){for(let I=0;I<16;I++)A.h[I]=B[I];A.b.set(I),A.h[0]^=16842752^A.outlen}async function r(){return(A,I,g=4294967295)=>{const Q=function(A,I,g){if(128!=A.length)throw Error(\\\"Invalid input\\\");const Q=A.buffer,t=new DataView(Q),B=new C(32);B.t=128;const e=t.getUint32(124,!0),r=e+g;for(let g=e;gE=A));self.onerror=A=>{self.postMessage({type:\\\"error\\\",message:JSON.stringify(A)})},self.onmessage=async C=>{const Q=C.data;try{if(\\\"solver\\\"===Q.type){if(Q.forceJS){n=1;const A=await r();E(A)}else try{n=2;const C=WebAssembly.compile(function(g){let C=3285;g.charCodeAt(4379)===A&&C--,g.charCodeAt(4378)===A&&C--;const Q=new Uint8Array(C);for(let A=0,C=0;A<4380;A+=4){const t=I[g.charCodeAt(A+0)],B=I[g.charCodeAt(A+1)],e=I[g.charCodeAt(A+2)],o=I[g.charCodeAt(A+3)];Q[C++]=t<<2|B>>4,Q[C++]=(15&B)<<4|e>>2,Q[C++]=(3&e)<<6|63&o}return Q}(\\\"AGFzbQEAAAABKghgAABgAn9/AGADf39/AX9gAX8AYAR/f39/AGAAAX9gAX8Bf2ACf38BfwINAQNlbnYFYWJvcnQABAMMCwcGAwAAAQIFAQIABQMBAAEGFgR/AUEAC38BQQALfwBBAwt/AEHgDAsHbgkGbWVtb3J5AgAHX19hbGxvYwABCF9fcmV0YWluAAIJX19yZWxlYXNlAAMJX19jb2xsZWN0AAQHX19yZXNldAAFC19fcnR0aV9iYXNlAwMNVWludDhBcnJheV9JRAMCDHNvbHZlQmxha2UyYgAKCAELCvQSC5IBAQV/IABB8P///wNLBEAACyMBQRBqIgQgAEEPakFwcSICQRAgAkEQSxsiBmoiAj8AIgVBEHQiA0sEQCAFIAIgA2tB//8DakGAgHxxQRB2IgMgBSADShtAAEEASARAIANAAEEASARAAAsLCyACJAEgBEEQayICIAY2AgAgAkEBNgIEIAIgATYCCCACIAA2AgwgBAsEACAACwMAAQsDAAELBgAjACQBC7sCAQF/AkAgAUUNACAAQQA6AAAgACABakEEayICQQA6AAMgAUECTQ0AIABBADoAASAAQQA6AAIgAkEAOgACIAJBADoAASABQQZNDQAgAEEAOgADIAJBADoAACABQQhNDQAgAEEAIABrQQNxIgJqIgBBADYCACAAIAEgAmtBfHEiAmpBHGsiAUEANgIYIAJBCE0NACAAQQA2AgQgAEEANgIIIAFBADYCECABQQA2AhQgAkEYTQ0AIABBADYCDCAAQQA2AhAgAEEANgIUIABBADYCGCABQQA2AgAgAUEANgIEIAFBADYCCCABQQA2AgwgACAAQQRxQRhqIgFqIQAgAiABayEBA0AgAUEgTwRAIABCADcDACAAQgA3AwggAEIANwMQIABCADcDGCABQSBrIQEgAEEgaiEADAELCwsLcgACfyAARQRAQQxBAhABIQALIAALQQA2AgAgAEEANgIEIABBADYCCCABQfD///8DIAJ2SwRAQcAKQfAKQRJBORAAAAsgASACdCIBQQAQASICIAEQBiAAKAIAGiAAIAI2AgAgACACNgIEIAAgATYCCCAAC88BAQJ/QaABQQAQASIAQQxBAxABQYABQQAQBzYCACAAQQxBBBABQQhBAxAHNgIEIABCADcDCCAAQQA2AhAgAEIANwMYIABC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\\\")),Q=await async function(A){const I=await async function(A){const I={env:{abort(){throw Error(\\\"Wasm aborted\\\")}}};return{exports:g(await WebAssembly.instantiate(A,I))}}(A),C=I.exports.__retain(I.exports.__allocArray(I.exports.Uint8Array_ID,new Uint8Array(128)));let Q=I.exports.__getUint8Array(C);return(A,g,t=4294967295)=>{Q.set(A);const B=I.exports.solveBlake2b(C,g,t);Q=I.exports.__getUint8Array(C);const e=I.exports.__getUint8Array(B);return I.exports.__release(B),[Q,e]}}(await C);E(Q)}catch(A){console.log(\\\"FriendlyCaptcha failed to initialize WebAssembly, falling back to Javascript solver: \\\"+A.toString()),n=1;const I=await r();E(I)}self.postMessage({type:\\\"ready\\\",solver:n})}else if(\\\"start\\\"===Q.type){const A=await s;self.postMessage({type:\\\"started\\\"});let I,g=0;for(let C=0;C<256;C++){Q.puzzleSolverInput[123]=C;const[t,B]=A(Q.puzzleSolverInput,Q.threshold);if(0!==B.length){I=t;break}console.warn(\\\"FC: Internal error or no solution found\\\"),g+=Math.pow(2,32)-1}g+=new DataView(I.slice(-4).buffer).getUint32(0,!0),self.postMessage({type:\\\"done\\\",solution:I.slice(-8),h:g,puzzleIndex:Q.puzzleIndex,puzzleNumber:Q.puzzleNumber})}}catch(A){setTimeout((()=>{throw A}))}}}();\";\n\n// Defensive init to make it easier to integrate with Gatsby and friends.\r\nlet URL;\r\nif (typeof window !== \"undefined\") {\r\n URL = window.URL || window.webkitURL;\r\n}\r\nclass WorkerGroup {\r\n constructor() {\r\n this.workers = [];\r\n this.puzzleNumber = 0;\r\n this.numPuzzles = 0;\r\n this.threshold = 0;\r\n this.startTime = 0;\r\n this.progress = 0;\r\n this.totalHashes = 0;\r\n this.puzzleSolverInputs = [];\r\n // The index of the next puzzle\r\n this.puzzleIndex = 0;\r\n this.solutionBuffer = new Uint8Array(0);\r\n // initialize some value, so ts is happy\r\n this.solverType = 1;\r\n this.readyPromise = new Promise(() => { });\r\n this.readyCount = 0;\r\n this.startCount = 0;\r\n this.progressCallback = () => 0;\r\n this.readyCallback = () => 0;\r\n this.startedCallback = () => 0;\r\n this.doneCallback = () => 0;\r\n this.errorCallback = () => 0;\r\n }\r\n init() {\r\n this.terminateWorkers();\r\n this.progress = 0;\r\n this.totalHashes = 0;\r\n let setReady;\r\n this.readyPromise = new Promise((resolve) => (setReady = resolve));\r\n this.readyCount = 0;\r\n this.startCount = 0;\r\n // Setup four workers for now - later we could calculate this depending on the device\r\n this.workers = new Array(4);\r\n const workerBlob = new Blob([workerString], { type: \"text/javascript\" });\r\n for (let i = 0; i < this.workers.length; i++) {\r\n this.workers[i] = new Worker(URL.createObjectURL(workerBlob));\r\n this.workers[i].onerror = (e) => this.errorCallback(e);\r\n this.workers[i].onmessage = (e) => {\r\n const data = e.data;\r\n if (!data)\r\n return;\r\n if (data.type === \"ready\") {\r\n this.readyCount++;\r\n this.solverType = data.solver;\r\n // We are ready, when all workers are ready\r\n if (this.readyCount == this.workers.length) {\r\n setReady();\r\n this.readyCallback();\r\n }\r\n }\r\n else if (data.type === \"started\") {\r\n this.startCount++;\r\n // We started, when the first worker starts working\r\n if (this.startCount == 1) {\r\n this.startTime = Date.now();\r\n this.startedCallback();\r\n }\r\n }\r\n else if (data.type === \"done\") {\r\n if (data.puzzleNumber !== this.puzzleNumber)\r\n return; // solution belongs to a previous puzzle\r\n if (this.puzzleIndex < this.puzzleSolverInputs.length) {\r\n this.workers[i].postMessage({\r\n type: \"start\",\r\n puzzleSolverInput: this.puzzleSolverInputs[this.puzzleIndex],\r\n threshold: this.threshold,\r\n puzzleIndex: this.puzzleIndex,\r\n puzzleNumber: this.puzzleNumber,\r\n });\r\n this.puzzleIndex++;\r\n }\r\n this.progress++;\r\n this.totalHashes += data.h;\r\n this.progressCallback({\r\n n: this.numPuzzles,\r\n h: this.totalHashes,\r\n t: (Date.now() - this.startTime) / 1000,\r\n i: this.progress,\r\n });\r\n this.solutionBuffer.set(data.solution, data.puzzleIndex * 8);\r\n // We are done, when all puzzles have been solved\r\n if (this.progress == this.numPuzzles) {\r\n const totalTime = (Date.now() - this.startTime) / 1000;\r\n this.doneCallback({\r\n solution: this.solutionBuffer,\r\n h: this.totalHashes,\r\n t: totalTime,\r\n diagnostics: createDiagnosticsBuffer(this.solverType, totalTime),\r\n solver: this.solverType,\r\n });\r\n }\r\n }\r\n else if (data.type === \"error\") {\r\n this.errorCallback(data);\r\n }\r\n };\r\n }\r\n }\r\n setupSolver(forceJS = false) {\r\n const msg = { type: \"solver\", forceJS: forceJS };\r\n for (let i = 0; i < this.workers.length; i++) {\r\n this.workers[i].postMessage(msg);\r\n }\r\n }\r\n async start(puzzle) {\r\n await this.readyPromise;\r\n this.puzzleSolverInputs = getPuzzleSolverInputs(puzzle.buffer, puzzle.n);\r\n this.solutionBuffer = new Uint8Array(8 * puzzle.n);\r\n this.numPuzzles = puzzle.n;\r\n this.threshold = puzzle.threshold;\r\n this.puzzleIndex = 0;\r\n this.puzzleNumber++;\r\n for (let i = 0; i < this.workers.length; i++) {\r\n if (this.puzzleIndex === this.puzzleSolverInputs.length)\r\n break;\r\n this.workers[i].postMessage({\r\n type: \"start\",\r\n puzzleSolverInput: this.puzzleSolverInputs[i],\r\n threshold: this.threshold,\r\n puzzleIndex: this.puzzleIndex,\r\n puzzleNumber: this.puzzleNumber,\r\n });\r\n this.puzzleIndex++;\r\n }\r\n }\r\n terminateWorkers() {\r\n if (this.workers.length == 0)\r\n return;\r\n for (let i = 0; i < this.workers.length; i++) {\r\n this.workers[i].terminate();\r\n }\r\n this.workers = [];\r\n }\r\n}\n\nconst PUZZLE_ENDPOINT_URL = \"https://api.friendlycaptcha.com/api/v1/puzzle\";\r\nclass WidgetInstance {\r\n constructor(element, options = {}) {\r\n this.workerGroup = new WorkerGroup();\r\n /**\r\n * The captcha has been succesfully solved.\r\n */\r\n this.valid = false;\r\n /**\r\n * Some errors may cause a need for the (worker) to be reinitialized. If this is\r\n * true `init` will be called again when start is called.\r\n */\r\n this.needsReInit = false;\r\n /**\r\n * Start() has been called at least once ever.\r\n */\r\n this.hasBeenStarted = false;\r\n this.hasBeenDestroyed = false;\r\n this.opts = Object.assign({\r\n forceJSFallback: false,\r\n skipStyleInjection: false,\r\n startMode: \"focus\",\r\n puzzleEndpoint: element.dataset[\"puzzleEndpoint\"] || PUZZLE_ENDPOINT_URL,\r\n startedCallback: () => 0,\r\n readyCallback: () => 0,\r\n doneCallback: () => 0,\r\n errorCallback: () => 0,\r\n sitekey: element.dataset[\"sitekey\"] || \"\",\r\n language: element.dataset[\"lang\"] || \"en\",\r\n solutionFieldName: element.dataset[\"solutionFieldName\"] || \"frc-captcha-solution\",\r\n styleNonce: null,\r\n }, options);\r\n this.e = element;\r\n this.e.friendlyChallengeWidget = this;\r\n this.loadLanguage();\r\n // @ts-ignore Ignore is required as TS thinks that `this.lang` is not assigned yet, but it happens in `this.loadLanguage()` above.\r\n element.innerText = this.lang.text_init;\r\n if (!this.opts.skipStyleInjection) {\r\n injectStyle(this.opts.styleNonce);\r\n }\r\n this.init(this.opts.startMode === \"auto\" || this.e.dataset[\"start\"] === \"auto\");\r\n }\r\n init(forceStart) {\r\n if (this.hasBeenDestroyed) {\r\n console.error(\"FriendlyCaptcha widget has been destroyed using destroy(), it can not be used anymore.\");\r\n return;\r\n }\r\n this.initWorkerGroup();\r\n if (forceStart) {\r\n this.start();\r\n }\r\n else if (this.e.dataset[\"start\"] !== \"none\" &&\r\n (this.opts.startMode === \"focus\" || this.e.dataset[\"start\"] === \"focus\")) {\r\n const form = findParentFormElement(this.e);\r\n if (form) {\r\n executeOnceOnFocusInEvent(form, () => this.start());\r\n }\r\n else {\r\n console.log(\"FriendlyCaptcha div seems not to be contained in a form, autostart will not work\");\r\n }\r\n }\r\n }\r\n /**\r\n * Loads the configured language, or a language passed to this function.\r\n * Note that only the next update will be in the new language, consider calling `reset()` after switching languages.\r\n */\r\n loadLanguage(lang) {\r\n if (lang !== undefined) {\r\n this.opts.language = lang;\r\n }\r\n else if (this.e.dataset[\"lang\"]) {\r\n this.opts.language = this.e.dataset[\"lang\"];\r\n }\r\n if (typeof this.opts.language === \"string\") {\r\n let langCode = this.opts.language.toLowerCase();\r\n let l = localizations[langCode];\r\n if (l === undefined && langCode[2] === \"-\") {\r\n // Language has a locale '-' separator, remove it and try again\r\n langCode = langCode.substring(0, 2);\r\n l = localizations[langCode];\r\n }\r\n if (l === undefined) {\r\n console.error('FriendlyCaptcha: language \"' + this.opts.language + '\" not found.');\r\n // Fall back to English\r\n l = localizations.en;\r\n }\r\n this.lang = l;\r\n }\r\n else {\r\n // We assign to a copy of the English language localization, so that any missing values will be English\r\n this.lang = Object.assign(Object.assign({}, localizations.en), this.opts.language);\r\n }\r\n }\r\n /**\r\n * Add a listener to the button that calls `this.start` on click.\r\n */\r\n makeButtonStart() {\r\n const b = this.e.querySelector(\"button\");\r\n if (b) {\r\n b.addEventListener(\"click\", (e) => this.start(), { once: true, passive: true });\r\n b.addEventListener(\"touchstart\", (e) => this.start(), { once: true, passive: true });\r\n }\r\n }\r\n onWorkerError(e) {\r\n this.hasBeenStarted = false;\r\n this.needsReInit = true;\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n console.error(\"[FRC]\", e);\r\n this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, \"Background worker error \" + e.message);\r\n this.makeButtonStart();\r\n // Just out of precaution\r\n this.opts.forceJSFallback = true;\r\n }\r\n initWorkerGroup() {\r\n this.workerGroup.progressCallback = (progress) => {\r\n updateProgressBar(this.e, progress);\r\n };\r\n this.workerGroup.readyCallback = () => {\r\n this.e.innerHTML = getReadyHTML(this.opts.solutionFieldName, this.lang);\r\n this.makeButtonStart();\r\n this.opts.readyCallback();\r\n };\r\n this.workerGroup.startedCallback = () => {\r\n this.e.innerHTML = getRunningHTML(this.opts.solutionFieldName, this.lang);\r\n this.opts.startedCallback();\r\n };\r\n this.workerGroup.doneCallback = (data) => {\r\n const solutionPayload = this.handleDone(data);\r\n this.opts.doneCallback(solutionPayload);\r\n const callback = this.e.dataset[\"callback\"];\r\n if (callback) {\r\n window[callback](solutionPayload);\r\n }\r\n };\r\n this.workerGroup.errorCallback = (e) => {\r\n this.onWorkerError(e);\r\n };\r\n this.workerGroup.init();\r\n this.workerGroup.setupSolver(this.opts.forceJSFallback);\r\n }\r\n expire() {\r\n this.hasBeenStarted = false;\r\n // Node.isConnected will be undefined in older browsers\r\n if (this.e.isConnected !== false) {\r\n this.e.innerHTML = getExpiredHTML(this.opts.solutionFieldName, this.lang);\r\n this.makeButtonStart();\r\n }\r\n }\r\n async start() {\r\n if (this.hasBeenDestroyed) {\r\n console.error(\"Can not start FriendlyCaptcha widget which has been destroyed\");\r\n return;\r\n }\r\n if (this.hasBeenStarted) {\r\n console.warn(\"Can not start FriendlyCaptcha widget which has already been started\");\r\n return;\r\n }\r\n const sitekey = this.opts.sitekey || this.e.dataset[\"sitekey\"];\r\n if (!sitekey) {\r\n console.error(\"FriendlyCaptcha: sitekey not set on frc-captcha element\");\r\n this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, \"Website problem: sitekey not set\", false);\r\n return;\r\n }\r\n if (isHeadless()) {\r\n this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, \"Browser check failed, try a different browser\", false, true);\r\n return;\r\n }\r\n if (this.needsReInit) {\r\n this.needsReInit = false;\r\n this.init(true);\r\n return;\r\n }\r\n this.hasBeenStarted = true;\r\n try {\r\n this.e.innerHTML = getFetchingHTML(this.opts.solutionFieldName, this.lang);\r\n this.puzzle = decodeBase64Puzzle(await getPuzzle(this.opts.puzzleEndpoint, sitekey, this.lang));\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n this.expiryTimeout = setTimeout(() => this.expire(), this.puzzle.expiry - 30000); // 30s grace\r\n }\r\n catch (e) {\r\n console.error(\"[FRC]\", e);\r\n this.hasBeenStarted = false;\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n this.e.innerHTML = getErrorHTML(this.opts.solutionFieldName, this.lang, e.message);\r\n this.makeButtonStart();\r\n const code = \"error_getting_puzzle\";\r\n this.opts.errorCallback({ code, description: e.toString(), error: e });\r\n const callback = this.e.dataset[\"callback-error\"];\r\n if (callback) {\r\n window[callback](this);\r\n }\r\n return;\r\n }\r\n await this.workerGroup.start(this.puzzle);\r\n }\r\n /**\r\n * This is to be called when the puzzle has been succesfully completed.\r\n * Here the hidden field gets updated with the solution.\r\n * @param data message from the webworker\r\n */\r\n handleDone(data) {\r\n this.valid = true;\r\n const puzzleSolutionMessage = `${this.puzzle.signature}.${this.puzzle.base64}.${encode(data.solution)}.${encode(data.diagnostics)}`;\r\n this.e.innerHTML = getDoneHTML(this.opts.solutionFieldName, this.lang, puzzleSolutionMessage, data);\r\n // this.worker = null; // This literally crashes very old browsers..\r\n this.needsReInit = true;\r\n return puzzleSolutionMessage;\r\n }\r\n /**\r\n * Cleans up the widget entirely, removing any DOM elements and terminating any background workers.\r\n * After it is destroyed it can no longer be used for any purpose.\r\n */\r\n destroy() {\r\n this.workerGroup.terminateWorkers();\r\n this.needsReInit = false;\r\n this.hasBeenStarted = false;\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n if (this.e) {\r\n this.e.remove();\r\n // eslint-disable-next-line @typescript-eslint/ban-ts-ignore\r\n // @ts-ignore\r\n delete this.e;\r\n }\r\n this.hasBeenDestroyed = true;\r\n }\r\n /**\r\n * Resets the widget to the initial state.\r\n * This is useful in situations where the page does not refresh when you submit and the form may be re-submitted again\r\n */\r\n reset() {\r\n if (this.hasBeenDestroyed) {\r\n console.error(\"FriendlyCaptcha widget has been destroyed, it can not be used anymore\");\r\n return;\r\n }\r\n this.workerGroup.terminateWorkers();\r\n this.needsReInit = false;\r\n this.hasBeenStarted = false;\r\n if (this.expiryTimeout)\r\n clearTimeout(this.expiryTimeout);\r\n this.init(this.opts.startMode === \"auto\" || this.e.dataset[\"start\"] === \"auto\");\r\n }\r\n}\n\nexport { WidgetInstance, localizations };\n//# sourceMappingURL=index.js.map\n"],"names":["CHARS","EQ_CHAR","charCodeAt","lookup","Uint8Array","i","encode","bytes","len","length","base64","b0","b1","b2","t","charAt","substring","loaderSVG","errorSVG","getTemplate","fieldName","rtl","svgContent","svgAriaHidden","textContent","solutionString","buttonText","progress","debugData","additionalContainerClasses","getErrorHTML","l","errorDescription","recoverable","headless","text_error","button_retry","undefined","nav","ua","navigator","userAgent","toLowerCase","decodeBase64Puzzle","base64Puzzle","parts","split","puzzle","arr","bufferLength","p","encoded1","encoded2","encoded3","encoded4","decode","signature","buffer","n","threshold","value","Math","pow","expiry","async","fetchAndRetryWithBackoff","url","opts","time","fetch","catch","error","Promise","r","setTimeout","LANG_NO","text_init","text_ready","button_start","text_fetching","text_solving","text_completed","text_completed_sr","text_expired","button_restart","text_fetch_error","localizations","en","de","nl","fr","it","pt","es","ca","ja","da","ru","sv","tr","el","uk","bg","cs","sk","no","fi","lv","lt","pl","et","hr","sr","sl","hu","ro","zh","zh_tw","vi","he","th","kr","ar","nb","createDiagnosticsBuffer","solverID","timeToSolved","view","DataView","setUint8","setUint16","URL","window","webkitURL","WorkerGroup","constructor","this","workers","puzzleNumber","numPuzzles","startTime","totalHashes","puzzleSolverInputs","puzzleIndex","solutionBuffer","solverType","readyPromise","readyCount","startCount","progressCallback","readyCallback","startedCallback","doneCallback","errorCallback","init","setReady","terminateWorkers","resolve","Array","workerBlob","Blob","type","Worker","createObjectURL","onerror","e","onmessage","data","solver","Date","now","postMessage","puzzleSolverInput","h","set","solution","totalTime","diagnostics","setupSolver","forceJS","msg","start","puzzleBuffer","startingPoints","input","push","getPuzzleSolverInputs","terminate","WidgetInstance","element","options","workerGroup","valid","needsReInit","hasBeenStarted","hasBeenDestroyed","Object","assign","forceJSFallback","skipStyleInjection","startMode","puzzleEndpoint","dataset","sitekey","language","solutionFieldName","styleNonce","friendlyChallengeWidget","loadLanguage","innerText","lang","document","querySelector","styleSheet","createElement","id","innerHTML","setAttribute","head","appendChild","injectStyle","forceStart","listener","console","initWorkerGroup","form","tagName","parentElement","findParentFormElement","addEventListener","once","passive","log","langCode","makeButtonStart","b","onWorkerError","expiryTimeout","clearTimeout","message","perc","toFixed","title","updateProgressBar","solutionPayload","handleDone","callback","expire","isConnected","warn","indexOf","appVersion","webdriver","languages","urlsSeparatedByComma","siteKey","urls","response","headers","mode","ok","json","errors","Error","status","statusText","err","rawError","getPuzzle","code","description","toString","puzzleSolutionMessage","timeData","getDoneHTML","destroy","remove","reset"],"sourceRoot":""}