{"id":499686,"date":"2026-10-22T00:11:26","date_gmt":"2026-10-21T21:11:26","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=499686"},"modified":"2026-10-22T00:11:26","modified_gmt":"2026-10-21T21:11:26","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=499686","title":{"rendered":"Headless-\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0431\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430: 5408 \u0431\u0430\u0439\u0442"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p><em>\u0418\u043b\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a 5408 \u0431\u0430\u0439\u0442 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JavaScript, \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u044e\u0449\u0438\u0445 \u0432 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a GPT, Claude, Mistral \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u043d\u0435\u043a\u0435\u043d \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c JS.<\/em><\/p>\n<h3>\u041f\u0440\u043e\u043b\u043e\u0433: \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430<\/h3>\n<p>\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043d\u0435\u0432\u0437\u0440\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u0433\u0430\u0445:<\/p>\n<p><code>\u041e\u0448\u0438\u0431\u043a\u0430 API (ddg_haiku): Error code: 500 - {'error': 'no x-vqd-hash-1 token'}<\/code><\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438 \u043a <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a> \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c\u0443 \u0432 DuckDuckGo AI-\u0447\u0430\u0442\u0443, \u0433\u0434\u0435 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0436\u0438\u0432\u0443\u0442 GPT \u0438 Claude, \u0432\u044b \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0432\u0438\u0434\u0435\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u0435\u0440\u0442\u0443\u0430\u0440\u0430: \u0442\u043e <code>500 no x-vqd-hash-1 token<\/code>, \u0442\u043e \u0434\u0440\u0430\u0437\u043d\u044f\u0449\u0443\u044e <code>418 I'm a teapot<\/code>, \u0442\u043e \u043c\u043e\u043b\u0447\u0430\u043b\u0438\u0432\u044b\u0439 \u043e\u0431\u0440\u044b\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u044b (\u0432\u0441\u044f \u0431\u0440\u0430\u0442\u0432\u0430 \u0432 \u0434\u0443\u0445\u0435 duck2api) \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435<\/p>\n<p>\u041c\u044b \u0441 \u043d\u0430\u043f\u0430\u0440\u043d\u0438\u043a\u043e\u043c \u0434\u0435\u043b\u0430\u043b\u0438 Telegram-\u0431\u043e\u0442\u0430-\u043f\u0440\u043e\u043a\u0441\u0438 \u043a <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a> \u0438, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0432\u0441\u0442\u0430\u043b\u0438 \u043d\u0430 \u044d\u0442\u0438 \u0433\u0440\u0430\u0431\u043b\u0438 \u043e\u0431\u0435\u0438\u043c\u0438 \u043d\u043e\u0433\u0430\u043c\u0438. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0430\u043d\u0442\u0438\u0431\u043e\u0442 DuckDuckGo \u0432 2026 \u0433\u043e\u0434\u0443, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u0445 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 (\u043c\u044b \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u00ab\u0432\u043a\u0443\u0441\u0430\u00bb \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0435\u043c \u043e \u043d\u0438\u0445 \u0432\u0441\u0451), \u0438 \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 <strong>headless-\u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/strong>: \u0442\u043e\u043b\u044c\u043a\u043e ~40 \u041a\u0411 \u0447\u0438\u0441\u0442\u043e\u0433\u043e JavaScript, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0442\u0438\u0432 \u0444\u0438\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e DOM.<\/p>\n<p>\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430 \u0434\u0435\u043d\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0430 ~580 \u043c\u0441 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0444\u043e\u043b\u0431\u044d\u043a\u0430, \u0430 \u0431\u043e\u0442 \u0441\u0442\u0440\u0438\u043c\u0438\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u044f\u043c\u043e \u0432 \u0447\u0430\u0442 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0430.<\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 duck.ai \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043b\u0430\u043a\u043e\u043c\u044b\u0439 \u043a\u0443\u0441\u043e\u043a<\/h3>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u043b: <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a> &#8212; \u044d\u0442\u043e \u0418\u0418 \u0447\u0430\u0442 \u043e\u0442 DuckDuckGo, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 <a href=\"http:\/\/duckduckgo.com\" rel=\"noopener nofollow\">duckduckgo.com<\/a>. \u0415\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043c\u0430\u0433\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e <strong>DuckDuckGo \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430 \u0432\u0430\u0441<\/strong>: \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u0432\u0435\u0436\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 OpenAI, Anthropic, Mistral \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0432\u0435\u0441\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043b\u0430\u0442\u0438\u0442 \u043d\u043e\u043b\u044c \u0440\u0443\u0431\u043b\u0435\u0439, \u043d\u043e\u043b\u044c \u0446\u0435\u043d\u0442\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043b\u043e\u0433\u0438\u043d\u0438\u0442\u0441\u044f. \u0421\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e (DuckDuckGo \u0441\u043b\u0430\u0432\u0438\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0430\u043d\u043e\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0432\u0435\u043d\u0434\u043e\u0440\u0430\u043c \u043c\u043e\u0434\u0435\u043b\u0435\u0439).<\/p>\n<p>\u0416\u0438\u0432\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430 \u043d\u0430 \u0434\u0435\u043d\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 :<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u043e\u0434\u0435\u043b\u044c<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0414\u043e\u0441\u0442\u0443\u043f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0443\u043c\u0435\u0435\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>gpt-6-luna<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">free<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>gpt-5.4-mini<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">free<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>claude-haiku-4-5<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">free<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>mistral-small-2603<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">free<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>tinfoil\/gpt-oss-120b<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">free<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>tinfoil\/gemma4-31b<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">free<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>gpt-5.6-terra<\/code> \/ <code>gpt-5.6-sol<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">premium<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>claude-sonnet-4-6<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">premium<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u0435\u043a\u0441\u0442, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>claude-opus-4-8<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">premium<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0430\u043c\u044b\u0439 \u0436\u0438\u0440\u043d\u044b\u0439 Claude<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0428\u0435\u0441\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433, \u0432\u0435\u0431-\u043f\u043e\u0438\u0441\u043a, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d HTTP-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 <code>\/duckchat\/v1\/chat<\/code>, \u0431\u0435\u0437 API-\u043a\u043b\u044e\u0447\u0435\u0439, \u0431\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043c\u0435\u0436\u0434\u0443 \u0432\u0430\u043c\u0438 \u0438 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 &#8212; <strong>\u0430\u043d\u0442\u0438\u0431\u043e\u0442<\/strong>. DuckDuckGo \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0449\u0435\u0434\u0440\u043e\u0441\u0442\u044c \u0441\u043b\u0438\u0432\u0430\u043b\u0438 \u0432 \u0431\u0435\u0437\u043b\u0438\u043c\u0438\u0442\u043d\u044b\u0435 API-\u043f\u0440\u043e\u043a\u0441\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0445\u043e\u0434 \u043d\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u043e\u0447\u0435\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f: \u0441 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0438\u0434\u0438\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c Chrome.<\/p>\n<h3>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0431\u043e\u0442\u0430 \u0437\u0430 90 \u0441\u0435\u043a\u0443\u043d\u0434<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u044b\u0440\u044f\u0442\u044c \u0432 \u0430\u043d\u0442\u0438\u0431\u043e\u0442, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c, <em>\u0447\u0442\u043e<\/em> \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0442\u0440\u043e\u0438\u043c. \u0411\u043e\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>headless-duckapi<\/strong> &#8212; \u044d\u0442\u043e Telegram-\u0431\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442 \u0438\u0445 \u0432 <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a> \u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 serverless-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Telegram (BotFather \u2192 Serverless): \u0430\u043f\u0434\u0435\u0439\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u043c \u0432 \u0438\u0437\u043e\u043b\u044f\u0442, \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0436\u0438\u0432\u0443\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/0a\/a3\/a8\/0aa3a82caa7bf02dc724ea89ccabb0d8.png\" width=\"667\" height=\"510\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/0a\/a3\/a8\/0aa3a82caa7bf02dc724ea89ccabb0d8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/0a\/a3\/a8\/0aa3a82caa7bf02dc724ea89ccabb0d8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><strong>\u041e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.<\/strong> \u0412\u0441\u044f \u043c\u0430\u0433\u0438\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0430\u043d\u0442\u0438\u0431\u043e\u0442\u0430 \u0436\u0438\u0432\u0451\u0442 \u0432 <code>lib\/duckai.js<\/code> \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435 \u043d\u0430 ~950 \u0441\u0442\u0440\u043e\u043a \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 npm-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0421\u0432\u043e\u0439 SHA-256, \u0441\u0432\u043e\u0439 base64, \u0441\u0432\u043e\u0439 HTML5-\u043f\u0430\u0440\u0441\u0435\u0440, \u0441\u0432\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u043d\u0435\u043a\u0435\u043d. \u042d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e: \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0432 serverless-\u0438\u0437\u043e\u043b\u044f\u0442\u0435 (\u0433\u0434\u0435 \u043d\u0435\u0442 <code>Buffer<\/code>, <code>atob<\/code> \u0438 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b Node-API), \u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c Node-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>SQLite \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/strong> \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0447\u0430\u0442\u043e\u0432, \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432, \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0445\u0435\u043c\u0435 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 (<code>chats<\/code>, <code>messages<\/code>, <code>users<\/code>, <code>stats_daily<\/code>, <code>duck_daily<\/code>, <code>config<\/code>). \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043a\u043b\u044e\u0447 \u043a \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u044e: \u0432 \u043d\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0439 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436-\u0442\u043e\u043a\u0435\u043d, \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0435\u0441\u0442\u0430\u0440\u0442 \u0438\u0437\u043e\u043b\u044f\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0413\u043b\u0430\u0432\u043d\u044b\u0435 \u0444\u0438\u0447\u0438<\/h3>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u043e, \u0447\u0442\u043e \u0431\u043e\u0442 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u0442\u0440\u0438\u043c\u0438\u043d\u0433.<\/strong> \u041e\u0434\u043d\u043e Telegram-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 (\u043d\u0435 \u0447\u0430\u0449\u0435 \u0440\u0430\u0437\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u043d\u0435 \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0441\u044f 8 \u043d\u043e\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432  \u0438\u043d\u0430\u0447\u0435 Telegram \u0434\u0443\u0448\u0438\u0442 rate-limit&#8217;\u043e\u043c). \u0414\u043b\u0438\u043d\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 3600 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445. Markdown \u043d\u0430 \u043b\u0435\u0442\u0443 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 Telegram-HTML, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u0441\u0442\u0440\u0438\u043c\u0430 <code>**<\/code> \u0438 <code>```<\/code> \u0434\u043e\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u043c\u0443\u0441\u043e\u0440\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p><strong>10 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441 \u0436\u0438\u0432\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c.<\/strong> \u0421\u043f\u0438\u0441\u043e\u043a \u043d\u0435 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d &#8212; \u0431\u043e\u0442 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 <code>\/duckchat\/v1\/models<\/code> \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 (\u043a\u043e\u0433\u0434\u0430 DDG \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 GPT-5.6 \u0438 Claude 4.8, \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0443 \u043d\u0430\u0441 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430).<\/p>\n<\/li>\n<li>\n<p><code><strong>\/img<\/strong><\/code><strong> \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a.<\/strong> \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0447\u0430\u0442-\u0445\u043e\u0434\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0443\u043b <code>GenerateImage<\/code> (GPT Image 2 \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435): \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a (\u00abPainting a cute robot duck&#8230;\u00bb), \u043f\u043e\u0442\u043e\u043c <strong>\u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a-\u043f\u0440\u0435\u0432\u044c\u044e \u0443\u0436\u0435 \u043d\u0430 ~9-\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u0435<\/strong>, \u043f\u043e\u0442\u043e\u043c \u0444\u0438\u043d\u0430\u043b 1024\u00d71024 \u0437\u0430 ~13\u201317 \u0441\u0435\u043a\u0443\u043d\u0434. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e: \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0447\u0430\u0442\u0435 \u00ab\u043d\u0430\u0440\u0438\u0441\u0443\u0439 \u0443\u0442\u043a\u0443-\u043a\u043e\u0441\u043c\u043e\u043d\u0430\u0432\u0442\u0430\u00bb \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u0440\u0438\u0435\u0434\u0435\u0442 \u0441\u0430\u043c\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0424\u043e\u0442\u043e + vision + img2img.<\/strong> \u0428\u043b\u0451\u0442\u0435 \u0444\u043e\u0442\u043e \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e \u00ab\u0437\u0430\u043c\u0435\u043d\u0438 \u0443\u0442\u043a\u0443 \u043d\u0430 \u043a\u043e\u0442\u0430\u00bb \u043c\u043e\u0434\u0435\u043b\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u0417\u0430\u0431\u0430\u0432\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c: <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a> <strong>\u043e\u0442\u0432\u0435\u0440\u0433\u0430\u0435\u0442 JPEG \u0432 \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u0451\u0440\u0442\u043a\u0435<\/strong> (\u0431\u044d\u043a\u0435\u043d\u0434 \u0441\u043d\u0438\u0444\u0444\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u044b, \u0430 \u043d\u0435 MIME), \u0430 Telegram \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u0444\u043e\u0442\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u0432 JPEG. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0435\u043d\u0434\u043e\u0440\u0438\u0442\u044c JPEG-\u0434\u0435\u043a\u043e\u0434\u0435\u0440 \u0438 PNG-\u044d\u043d\u043a\u043e\u0434\u0435\u0440 (\u0438\u0442\u043e\u0433\u043e ~46 \u041a\u0411), \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u0442\u043e \u0432 PNG \u0441 \u0434\u0430\u0443\u043d\u0441\u043a\u0435\u0439\u043b\u043e\u043c \u0434\u043e 640px \u043f\u0440\u044f\u043c\u043e \u0432 \u0438\u0437\u043e\u043b\u044f\u0442\u0435, \u0431\u0435\u0437 ImageMagick.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0430\u043c\u044f\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433\u0430.<\/strong> \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 N \u0445\u043e\u0434\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c; \u00ab\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e\u00bb \u0432\u044b\u0447\u0438\u0449\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u043c.<\/strong> \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434-\u0437\u043e\u043e\u043f\u0430\u0440\u043a\u043e\u0432: <code>claude<\/code>, <code>\u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043d\u0438\u0437\u043a\u0438\u0439<\/code>, <code>\u043f\u043e\u0438\u0441\u043a \u0432\u044b\u043a\u043b<\/code>, <code>\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e<\/code> exact-match \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0438 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u043f\u0440\u044f\u043c\u043e \u0432 \u0447\u0430\u0442\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.<\/strong> \u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <code>duck_daily<\/code> \u043a\u043e\u043f\u044f\u0442\u0441\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435\u0439 \u0440\u0435\u0448\u0435\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0448\u043b\u043e \u0432 fallback, \u0441\u043a\u043e\u043b\u044c\u043a\u043e 418\/429. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 <code>\/stats<\/code> (\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446) \u0440\u0438\u0441\u0443\u0435\u0442 \u043f\u0430\u043d\u0435\u043b\u044c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u00ab\u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435\u00bb \u0430\u043d\u0442\u0438\u0431\u043e\u0442-\u043e\u0431\u0445\u043e\u0434\u0430 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435 \u043f\u043e \u0434\u043d\u044f\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c &#8212; \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0432\u044b, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0437\u0434\u0435\u0441\u044c.<\/p>\n<h3>\u0410\u043d\u0442\u0438\u0431\u043e\u0442 DuckDuckGo: \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0447\u0435\u0441\u0442\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440<\/h3>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0436\u0434\u0451\u0442 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0447\u0430\u0442\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p><strong>\u0428\u0430\u0433 1. <\/strong><code><strong>GET \/duckchat\/v1\/status<\/strong><\/code><strong>.<\/strong> \u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u0442\u0443\u0447\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u043e\u0434 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435:<\/p>\n<blockquote>\n<p><code>user-agent:        Mozilla\/5.0 (Windows NT 10.0; Win64; x64) ... Chrome\/149.0.0.0 Safari\/537.36<\/code><\/p>\n<p><code>sec-ch-ua:         \"Google Chrome\";v=\"149\", \"Chromium\";v=\"149\", \"Not)A;Brand\";v=\"24\"<\/code><\/p>\n<p><code>sec-ch-ua-mobile:  ?0<\/code><\/p>\n<p><code>sec-ch-ua-platform:\"Windows\"<\/code><\/p>\n<p><code>sec-fetch-dest:    empty<\/code><\/p>\n<p><code>sec-fetch-mode:    cors<\/code><\/p>\n<p><code>sec-fetch-site:    same-origin<\/code><\/p>\n<p><code>origin\/referer:    <\/code><a href=\"https:\/\/duck.ai\" rel=\"noopener nofollow\"><code>https:\/\/duck.ai<\/code><\/a><\/p>\n<p><code>cookie:            dcm=3<\/code><\/p>\n<p><code>x-vqd-accept:      1<\/code><\/p>\n<\/blockquote>\n<p>\u0412 \u043e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043b\u0430\u0434\u0451\u0442 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a <code><strong>x-vqd-hash-1<\/strong><\/code>&#8230; \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436. \u041d\u0435 \u0442\u043e\u043a\u0435\u043d, \u043d\u0435 \u0445\u0435\u0448 \u0430 <strong>5\u20136 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 base64-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JavaScript<\/strong>. \u0427\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0434\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043d\u0435\u0433\u043e.<\/p>\n<p><strong>\u0428\u0430\u0433 2. \u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436.<\/strong> \u0422\u043e\u0442 JS &#8212; \u044d\u0442\u043e async IIFE, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435 \u0446\u0435\u043b\u0430\u044f \u0433\u043b\u0430\u0432\u0430) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <code>client_hashes<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p><strong>\u0428\u0430\u0433 3. <\/strong><code><strong>POST \/duckchat\/v1\/chat<\/strong><\/code><strong>.<\/strong> \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 <code>x-vqd-hash-1<\/code> (\u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438), \u0440\u044f\u0434\u043e\u043c \u0441 \u043d\u0438\u043c \u0435\u0449\u0451 \u043f\u0430\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0447\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u0430\u0447\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0443<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>x-vqd-hash-1<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">base64(JSON) \u0441 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u00ab\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u00bb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>x-fe-version<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0444\u0440\u043e\u043d\u0442\u0430, \u043d\u0430\u043f\u0440. <code>serp_20261021_143533_ET-...<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0444\u0440\u043e\u043d\u0442 \u0441\u0432\u0435\u0436\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>x-fe-signals<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">base64(JSON) \u043b\u043e\u0433 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u00ab\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u00bb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>x-ddg-journey-id<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 hex<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0435\u0441\u0441\u0438\u0438<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041e\u0442\u0432\u0435\u0442 <code>text\/event-stream<\/code> (SSE) \u0441\u043e \u0441\u0442\u0440\u0438\u043c\u043e\u043c \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u0447\u0430\u043d\u043a\u0430\u043c\u0438 \u0431\u043e\u043b\u0442\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e <code>[PING]<\/code>) \u0438 \u0438\u0432\u0435\u043d\u0442\u044b \u0442\u0443\u043b\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e \u0448\u0442\u0440\u0430\u0445\u0430\u0445. \u0415\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 <code>x-vqd-hash-1<\/code> \u043d\u0435\u0442 \u0432\u043e\u0432\u0441\u0435 &#8212; \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <code>500 {'error': 'no x-vqd-hash-1 token'}<\/code> (\u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0437 \u043f\u0440\u043e\u043b\u043e\u0433\u0430: \u0442\u0430\u043a \u0443\u043c\u0438\u0440\u0430\u044e\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0435 \u0448\u043b\u044e\u0442 \u0441\u0442\u0430\u0440\u044b\u0439 \u0442\u043e\u043a\u0435\u043d <code>x-vqd-4<\/code> \u0438 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0439). \u0415\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0435\u0441\u0442\u044c, \u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u0430\u0441 \u0436\u0434\u0451\u0442 <code>418 I'm a teapot<\/code>. \u041d\u0435 <code>403<\/code>, \u043d\u0435 <code>429<\/code> <strong>418<\/strong>, \u0447\u0442\u043e \u043f\u0440\u0438\u0434\u0430\u0451\u0442 \u0432\u0441\u0435\u043c\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u043e\u0441\u043e\u0431\u044b\u0439 \u0446\u0438\u043d\u0438\u0437\u043c.<\/p>\n<h3>\u0427\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0438\u0437\u043d\u0443\u0442\u0440\u0438<\/h3>\n<p>\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c <code>x-vqd-hash-1<\/code> \u0438\u0437 status-\u043e\u0442\u0432\u0435\u0442\u0430 \u0438 \u0432\u0438\u0434\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 &#8212; \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 <a href=\"http:\/\/obfuscator.io\" rel=\"noopener nofollow\">obfuscator.io<\/a>:<\/p>\n<blockquote>\n<p><code>(async function() {<\/code><\/p>\n<p><code>const <em>0x53c4ff = <\/em>0x3dda;<\/code><\/p>\n<p><code>function <em>0x3dda(<\/em>0x8a4cc5, _0x54eae6) {<\/code><\/p>\n<p><code>const <em>0x2b9bc6 = <\/em>0x2b9b();<\/code><\/p>\n<p><code>return <em>0x3dda = function(<\/em>0x3ddaef, _0x4750ce) {<\/code><\/p>\n<p><code><em>0x3ddaef = <\/em>0x3ddaef - 0x181;<\/code><\/p>\n<p><code>let <em>0x3acba3 = <\/em>0x2b9bc6[_0x3ddaef];<\/code><\/p>\n<p><code>return _0x3acba3;<\/code><\/p>\n<p><code>    }, <em>0x3dda(<\/em>0x8a4cc5, _0x54eae6);<\/code><\/p>\n<p><code>  }<\/code><\/p>\n<p><code>\/\/ ...<\/code><\/p>\n<\/blockquote>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 \u0436\u0430\u043d\u0440\u0430: \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f-\u0434\u0435\u043a\u043e\u0434\u0435\u0440 \u0441\u043e \u0441\u0434\u0432\u0438\u0433\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0440\u043e\u0442\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 <strong>\u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0442\u0440\u043e\u043a<\/strong>, \u043f\u043e\u043a\u0430 \u0447\u0435\u043a-\u0441\u0443\u043c\u043c\u0430 \u0438\u0437 <code>parseInt<\/code>-\u043e\u0432 \u043d\u0435 \u0441\u043e\u0439\u0434\u0451\u0442\u0441\u044f. \u0426\u0438\u043a\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u043e:<\/p>\n<blockquote>\n<p><code>while (!![]) {<\/code><\/p>\n<p><code>try {<\/code><\/p>\n<p><code>const _0xefc59c = -parseInt(...)\/0x1 + parseInt(...)\/0x2 * ... ;<\/code><\/p>\n<p><code>if (_0xefc59c === _0x1c89fc) break;<\/code><\/p>\n<p><code>else <em>0x5f3a68.push(<\/em>0x5f3a68.shift());<\/code><\/p>\n<p><code>  } catch (_0x51be09) { <em>0x5f3a68.push(<\/em>0x5f3a68.shift()); }<\/code><\/p>\n<p><code>}<\/code><\/p>\n<\/blockquote>\n<p>\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u043a\u043e\u043b\u043e\u0442\u044c \u043a\u043e\u0434 \u043d\u0435\u043b\u044c\u0437\u044f &#8212; \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u0442\u0440\u043e\u043a \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438, \u0438 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0430\u043c\u043e\u0439 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 (\u043c\u044b \u0433\u043e\u043d\u044f\u043b\u0438 \u043a\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 AST-\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u0441\u0442\u0440\u043e\u043a-\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430 \u044d\u0442\u043e \u0443\u0448\u043b\u0430 \u043f\u0430\u0440\u0430 \u0432\u0435\u0447\u0435\u0440\u043e\u0432).<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u0441\u043a\u0435\u043b\u0435\u0442 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 \u043f\u0440\u043e\u0441\u0442 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f: \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 <strong>\u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/strong>, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u0438\u0431\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043b\u0438\u0431\u043e \u0447\u0438\u0441\u043b\u043e, \u0437\u0430\u0442\u0435\u043c \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432 \u0447\u0438\u0441\u043b\u0430 \u0432\u0438\u0434\u0430:<\/p>\n<blockquote>\n<p>String(BASE + \u0441\u0443\u043c\u043c\u0430_\u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a)   \/\/ \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: String(0x11a0 + innerHTML.length <em> querySelectorAll(&#8216;<\/em>&#8216;).length)<\/p>\n<p>\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442:<\/p>\n<p>return { client_hashes: [hash1, hash2, &#8230;], &#8230; }<\/p>\n<\/blockquote>\n<p>\u0410 \u0434\u0430\u043b\u044c\u0448\u0435 &#8212; \u0432\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u043e\u0433\u0438\u0435 \u0443\u043f\u0443\u0441\u043a\u0430\u044e\u0442: <strong>\u0441\u044b\u0440\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 \u0435\u0449\u0451 \u043d\u0435 \u0442\u043e\u043a\u0435\u043d<\/strong>. \u041d\u0430\u0448 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <code>client_hashes<\/code> \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0447\u0438\u0441\u0442\u043e-JS \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e SHA-256 (\u0432 \u0438\u0437\u043e\u043b\u044f\u0442\u0435 \u043d\u0435\u0442 <code>crypto.subtle<\/code>, \u0430 \u0436\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u0433\u0434\u0435), \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<blockquote>\n<p><code>meta.origin   = '<\/code><a href=\"https:\/\/duck.ai\" rel=\"noopener nofollow\"><code>https:\/\/duck.ai<\/code><\/a><code>';<\/code><\/p>\n<p><code>meta.stack    = 'Error\\nat l (<\/code><a href=\"https:\/\/duck.ai\/dist\/duckai-dist\/entry.duckai.&lt;hash&gt;.js:2:1446307)%5Cn\" rel=\"noopener nofollow\"><code>https:\/\/duck.ai\/dist\/duckai-dist\/entry.duckai.&lt;hash&gt;.js:2:1446307)\\n<\/code><\/a><code>...';<\/code><\/p>\n<p><code>meta.duration = String(\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435_3_30_\u043c\u0441);<\/code><\/p>\n<\/blockquote>\n<p>\u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u0435\u043c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 JSON, \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0432 base64 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c. \u0414\u0430, <code>meta.stack<\/code> &#8212; \u044d\u0442\u043e <strong>\u0444\u0430\u043b\u044c\u0448\u0438\u0432\u044b\u0439 stack trace<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u043f\u0430\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a>. \u0421\u0442\u0440\u043e\u043a\u0443 <code>entry.duckai.&lt;hash&gt;.js<\/code> \u043c\u044b \u0436\u0438\u0432\u044c\u0451\u043c \u0432\u044b\u0434\u0438\u0440\u0430\u0435\u043c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u043e\u0439 \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.a<\/a> \u043e\u043d\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0435 \u0444\u0440\u043e\u043d\u0442\u0430. \u0410 <code>duration<\/code> \u043c\u044b \u043f\u043e\u0434\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0447\u0435\u0441\u0442\u043d\u043e: \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0437\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434, \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>0<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c.<\/p>\n<h3>\u0427\u0435\u0442\u044b\u0440\u0435 \u0432\u043a\u0443\u0441\u0430: \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436<\/h3>\n<p>\u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u044b\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 &#8212; \u043c\u044b \u043f\u0440\u043e\u0437\u0432\u0430\u043b\u0438 \u0438\u0445 \u0432\u043a\u0443\u0441\u0430\u043c\u0438. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e \u0441\u0432\u043e\u0435\u043c\u0443, \u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435.<\/p>\n<h4>\u0412\u043a\u0443\u0441 1. UA \u0438 \u00abjsa-iframe\u00bb<\/h4>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0445\u0435\u0448 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d: \u0432 <code>client_hashes<\/code> \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0443\u0445\u043e\u0434\u0438\u0442 <code>navigator.userAgent<\/code>. \u0410 \u0432\u043e\u0442 \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0432\u043a\u0443\u0441\u0430 \u0443\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u0427\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 <code>&lt;iframe&gt;<\/code>, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u043c\u0443 <code>srcdoc<\/code> \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u0442, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043c\u0438\u0440:<\/p>\n<blockquote>\n<p>const iframe = document.createElement(&#8216;iframe&#8217;);<\/p>\n<p>iframe.srcdoc = &#8216;DuckDuckGo Fraud &amp; Abuse&#8217;;   \/\/ \u2190 \u0431\u0435\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432<\/p>\n<p>document.body.appendChild(iframe);<\/p>\n<p>let result;<\/p>\n<p>if (iframe.contentWindow &amp;&amp; iframe.contentWindow.self &amp;&amp; iframe.contentWindow.self.get) {<\/p>\n<p>result = iframe.contentWindow.self.get.toString();<\/p>\n<p>} else {<\/p>\n<p>result = undefined;<\/p>\n<p>}<\/p>\n<p>document.body.removeChild(iframe);<\/p>\n<p>return !!result;<\/p>\n<\/blockquote>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 <code>DuckDuckGo Fraud &amp; Abuse<\/code> \u043e\u0442\u0434\u0435\u043b \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u0444\u0440\u043e\u0434\u043e\u043c DuckDuckGo \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0451 \u043e\u0440\u0443\u0436\u0438\u0435. \u0421\u0430\u043c\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u043d\u043a\u0430\u044f: \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c Chrome \u0443 <code>contentWindow.self<\/code> \u0438\u0437 srcdoc-iframe \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0438 \u043c\u0430\u043d\u0435\u043a\u0435\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0435\u0440\u043d\u0451\u0442 \u0437\u0434\u0435\u0441\u044c \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043f\u0430\u043b\u0438\u0442\u0441\u044f.<\/p>\n<h4>\u0412\u043a\u0443\u0441 2. \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 HTML5-\u043f\u0430\u0440\u0441\u0435\u0440\u0430<\/h4>\n<p>\u0410 \u0432\u043e\u0442 \u044d\u0442\u043e \u043c\u043e\u044f \u043b\u044e\u0431\u0438\u043c\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0431\u044c\u0451\u0442 \u043f\u043e \u0441\u0430\u043c\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0435\u0441\u0442\u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0444\u0435\u0439\u043a\u043e\u0432\u043e\u0433\u043e DOM: <strong>innerHTML \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u044d\u0442\u043e \u043d\u0435 \u00ab\u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430\u00bb, \u044d\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e HTML5-\u043f\u0430\u0440\u0441\u0435\u0440\u0430<\/strong>:<\/p>\n<blockquote>\n<p>const div = document.createElement(&#8216;div&#8217;);<\/p>\n<p>div.innerHTML = &#8216;&lt;p&gt;&lt;div&gt;&lt;\/p&gt;&lt;p&gt;&lt;\/div&#8217;;<\/p>\n<p>return String(0x11a0 + div.innerHTML.length <em> div.querySelectorAll(&#8216;<\/em>&#8216;).length);<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0439 HTML \u0441 \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u0442\u0435\u0433\u0430\u043c\u0438 \u0438 \u043e\u0431\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0446\u043e\u043c (<code>&lt;\/div<\/code> \u0431\u0435\u0437 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u043a\u043e\u0431\u043a\u0438!). \u041a\u0430\u043a\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c Chrome? \u0420\u0430\u0441\u043a\u0440\u0443\u0442\u0438\u043c \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 HTML5 (\u00abin body\u00bb):<\/p>\n<ol>\n<li>\n<p><code>&lt;p&gt;<\/code> &#8212; \u043e\u0442\u043a\u0440\u044b\u0442 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444;<\/p>\n<\/li>\n<li>\n<p><code>&lt;div&gt;<\/code> &#8212; <code><strong>div<\/strong><\/code><strong> \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0435\u0433\u043e\u0432, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 <\/strong><code><strong>&lt;p&gt;<\/strong><\/code> (p-closers in button scope): <code>&lt;p&gt;<\/code> \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>&lt;div&gt;<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>&lt;\/p&gt;<\/code> &#8212; \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e <code>&lt;\/p&gt;<\/code> \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c <code>&lt;div&gt;<\/code> \u043d\u0435\u0442&#8230; \u043d\u043e \u043f\u043e \u0441\u043f\u0435\u043a\u0435 <strong>\u0441\u0438\u0440\u043e\u0442\u0441\u043a\u0438\u0439 <\/strong><code><strong>&lt;\/p&gt;<\/strong><\/code><strong> \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 <\/strong><code><strong>&lt;p&gt;&lt;\/p&gt;<\/strong><\/code> \u0434\u0430, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440;<\/p>\n<\/li>\n<li>\n<p><code>&lt;p&gt;<\/code> &#8212; \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444 \u0432\u043d\u0443\u0442\u0440\u0438 div;<\/p>\n<\/li>\n<li>\n<p><code>&lt;\/div<\/code> &#8212; \u043e\u0431\u0440\u044b\u0432 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u0442\u0435\u0433\u0430 (EOF-in-tag)  <strong>\u0432\u0441\u044f \u043b\u0435\u043a\u0441\u0435\u043c\u0430 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f<\/strong>, \u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 <code>&lt;p&gt;<\/code> \u0434\u043e\u0436\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0430 EOF.<\/p>\n<\/li>\n<\/ol>\n<\/blockquote>\n<p>\u0418\u0442\u043e\u0433: <code>innerHTML<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>&lt;p&gt;&lt;\/p&gt;&lt;div&gt;&lt;p&gt;&lt;\/p&gt;&lt;p&gt;&lt;\/p&gt;&lt;\/div&gt;<\/code> \u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f <code>length<\/code>, \u0430 <code>querySelectorAll('*')<\/code> \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0443\u0437\u043b\u044b. \u0427\u0438\u0441\u043b\u0430 \u0443\u043c\u043d\u043e\u0436\u0430\u044e\u0442\u0441\u044f, \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u0430 <code>0x11a0<\/code> \u0438 \u043b\u044e\u0431\u043e\u0439 \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0439 DOM, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0443\u043f\u043e \u0445\u0440\u0430\u043d\u0438\u0442 innerHTML \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u043a\u0443, \u0432\u044b\u0434\u0430\u0451\u0442 <strong>\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e<\/strong>. \u0421\u0435\u0440\u044c\u0451\u0437\u043d\u043e, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0443\u0433\u0430\u0434\u0430\u0442\u044c: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0437\u043b\u043e\u0432 \u0432 \u044d\u0442\u043e\u043c \u043c\u0443\u0441\u043e\u0440\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435?<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 <code>'&lt;div&gt;&lt;div&gt;&lt;\/div&gt;&lt;div&gt;&lt;\/div'<\/code> \u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u0431\u0430\u0437\u0443 (<code>0x25f4<\/code>). \u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u0430\u0440\u0441\u0435\u0440, \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0443\u0437\u043b\u043e\u0432 \u0431\u044b\u043b\u0438 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b \u0441 Chrome.<\/p>\n<h4>\u0412\u043a\u0443\u0441 3. V8-\u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442<\/h4>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439 \u0432\u043a\u0443\u0441 &#8212; \u0434\u044e\u0436\u0438\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0439, \u0430 \u0432\u043c\u0435\u0441\u0442\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 <strong>\u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e JS-\u0434\u0432\u0438\u0436\u043a\u0430<\/strong>. \u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<blockquote>\n<p><code>const bits = [];<\/code><\/p>\n<p><code>const bits = [];<\/code><\/p>\n<p><code>\/\/ 1. \u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 [native code] \u0432 toString()<\/code><\/p>\n<p><code>bits.push(nativeFn.toString().includes('[native code]'));<\/code><\/p>\n<p><code>\/\/ 2. \u0421\u0443\u0431\u043a\u043b\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Array: map() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0441\u0443\u0431\u043a\u043b\u0430\u0441\u0441\u0430 (\u0441\u043f\u0435\u043a\u0430 V8)<\/code><\/p>\n<p><code>class Sub extends Array {}<\/code><\/p>\n<p><code>const arr = new Sub(1, 2, 3);<\/code><\/p>\n<p><code>bits.push(<\/code><a href=\"http:\/\/arr.map\" rel=\"noopener nofollow\"><code>arr.map<\/code><\/a><code>(x =&gt; x * 2) instanceof Sub);<\/code><\/p>\n<p><code>\/\/ 3. window.toString() === '[object Window]'<\/code><\/p>\n<p><code>bits.push(<\/code><a href=\"http:\/\/Object.prototype.toString.call\" rel=\"noopener nofollow\"><code>Object.prototype.toString.call<\/code><\/a><code>(window) === '[object Window]');<\/code><\/p>\n<p><code>\/\/ 4. new Error() instanceof Error<\/code><\/p>\n<p><code>bits.push(new Error() instanceof Error);<\/code><\/p>\n<p><code>\/\/ 5. Error.captureStackTrace: undefined \u0418\u041b\u0418 \u0444\u0443\u043d\u043a\u0446\u0438\u044f (V8-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0435!)<\/code><\/p>\n<p><code>bits.push(Error.captureStackTrace === undefined || typeof Error.captureStackTrace === 'function');<\/code><\/p>\n<p><code>\/\/ 6. Object.isSealed(Math) \u2014 \u0444\u043e\u043b\u0441 \u0432 \u043d\u043e\u0440\u043c\u0435<\/code><\/p>\n<p><code>bits.push(Object.isSealed(Math));<\/code><\/p>\n<p><code>\/\/ 7. Sloppy-\u0438\u0434\u0438\u043e\u043c\u0430: (function(){return this;})() === window<\/code><\/p>\n<p><code>bits.push((function() { return this; })() === window);<\/code><\/p>\n<p><code>\/\/ 8. children \u0436\u0438\u0432\u043e\u0439: \u043f\u043e\u0441\u043b\u0435 appendChild \u0434\u043b\u0438\u043d\u0430 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u044b\u0440\u043e\u0441\u043b\u0430 \u043d\u0430 1<\/code><\/p>\n<p><code>const kids = document.body.children;<\/code><\/p>\n<p><code>const len = kids.length;<\/code><\/p>\n<p><code>const div = document.createElement('div');<\/code><\/p>\n<p><code>document.body.appendChild(div);<\/code><\/p>\n<p><code>bits.push(kids.length === len + 1);<\/code><\/p>\n<p><code>document.body.removeChild(div);<\/code><\/p>\n<p><code>\/\/ 9. querySelectorAll('*') \u041d\u0415 \u043c\u0430\u0441\u0441\u0438\u0432...<\/code><\/p>\n<p><code>const qsa = document.querySelectorAll('*');<\/code><\/p>\n<p><code>bits.push(!Array.isArray(qsa));<\/code><\/p>\n<p><code>\/\/ 10. ...\u0430 NodeList \u0441 \u0442\u043e\u0447\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430<\/code><\/p>\n<p><code>bits.push(<\/code><a href=\"http:\/\/qsa.constructor.name\" rel=\"noopener nofollow\"><code>qsa.constructor.name<\/code><\/a><code> === 'NodeList');<\/code><\/p>\n<p><code>\/\/ 11-13. \u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 DOM-\u043a\u043b\u0430\u0441\u0441\u043e\u0432<\/code><\/p>\n<p><code>bits.push(div instanceof HTMLDivElement);<\/code><\/p>\n<p><code>bits.push(HTMLDivElement.prototype instanceof HTMLElement);<\/code><\/p>\n<p><code>bits.push(HTMLElement.prototype instanceof Element);<\/code><\/p>\n<p><code>return String(<\/code><a href=\"http:\/\/bits.map\" rel=\"noopener nofollow\"><code>bits.map<\/code><\/a><code>(Number).reduce((a, b) =&gt; a + b, 0x1b1e));<\/code><\/p>\n<\/blockquote>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0440\u044f\u0447\u0443\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u0435 \u043a\u043e\u0432\u0430\u0440\u043d\u044b\u0435 \u043b\u043e\u0432\u0443\u0448\u043a\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u041f\u0443\u043d\u043a\u0442 7<\/strong> &#8212; \u043b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u0430\u044f sloppy-\u0438\u0434\u0438\u043e\u043c\u0430 <code>(function(){return this;})()<\/code>. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>window<\/code>. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436, \u0441\u043a\u0430\u0436\u0435\u043c, \u0432 Node-\u0438\u0437\u043e\u043b\u044f\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 <code>new Function<\/code>, \u043e\u043d\u0430 \u0432\u0435\u0440\u043d\u0451\u0442 <em>\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430<\/em> \u0430 \u043d\u0435 \u0432\u0430\u0448 \u0444\u0435\u0439\u043a\u043e\u0432\u044b\u0439 window. \u041c\u044b \u0440\u0435\u0448\u0430\u0435\u043c \u044d\u0442\u043e \u0440\u0435\u0433\u044d\u043a\u0441\u043f-\u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430: <code>(function(){return this;})()<\/code> \u2192 <code>(function(){return window;})()<\/code> \u0434\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0413\u0440\u0443\u0431\u043e? \u0413\u0440\u0443\u0431\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0443\u043d\u043a\u0442 10<\/strong> &#8212; <a href=\"http:\/\/constructor.name\" rel=\"noopener nofollow\"><code>constructor.name<\/code><\/a><code> === 'NodeList'<\/code>. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u0448 \u043c\u0430\u043d\u0435\u043a\u0435\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043a\u043b\u0430\u0441\u0441, <em>\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u043e\u0432\u043d\u043e NodeList<\/em> \u043c\u0438\u043d\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u043e\u043c\u0430\u044e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443. \u0412 \u043a\u043e\u0434\u0435 \u044d\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e: <code>\/\/ NOTE: named exactly \"NodeList\"<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0443\u043d\u043a\u0442 3<\/strong> &#8212; <a href=\"http:\/\/Object.prototype.toString.call\" rel=\"noopener nofollow\"><code>Object.prototype.toString.call<\/code><\/a><code>(window)<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 <code>Symbol.toStringTag === 'Window'<\/code> \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430-\u043c\u0430\u043d\u0435\u043a\u0435\u043d\u0430, \u043f\u043b\u044e\u0441 \u043a\u043b\u0430\u0441\u0441 <code>Window<\/code> \u0441 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c, \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u043c \u043d\u0430 \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>\u041f\u0443\u043d\u043a\u0442 2<\/strong> &#8212; \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 <code>Array<\/code> \u044d\u0442\u043e \u043d\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 V8-\u0448\u043d\u044b\u0439 Array, <code>map()<\/code> \u043d\u0430 \u0441\u0443\u0431\u043a\u043b\u0430\u0441\u0441\u0435 \u0432\u0435\u0440\u043d\u0451\u0442 \u043d\u0435 \u0442\u043e.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0412\u043a\u0443\u0441 4. Webdriver-\u0442\u0440\u043e\u0439\u043a\u0430<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0431\u043b\u043e\u043a \u043e\u0445\u043e\u0442\u0430 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e:<\/p>\n<blockquote>\n<p><code>return String([<\/code><\/p>\n<p><code>navigator.webdriver === false,                        \/\/ 1. \u044f\u0432\u043d\u044b\u0439 \u0444\u043b\u0430\u0433 puppeteer\/selenium<\/code><\/p>\n<p><code>\/* 2. iframe contentWindow.self.get \u2014 \u0441\u043c. \u0432\u043a\u0443\u0441 1 *\/<\/code><\/p>\n<p><code>\/* 3. \u043f\u043e\u0438\u0441\u043a \u0430\u043b\u0438\u0430\u0441\u043e\u0432 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446: *\/<\/code><\/p>\n<p><code>Object.keys(<\/code><a href=\"http:\/\/window.top\" rel=\"noopener nofollow\"><code>window.top<\/code><\/a><code>).filter(k =&gt;<\/code><\/p>\n<p><code>    ['Array','Object','Promise','Proxy','Symbol','JSON','Window'].some(base =&gt;<\/code><\/p>\n<p><code>k !== base &amp;&amp; k.endsWith('_' + base) &amp;&amp; <\/code><a href=\"http:\/\/window.top\" rel=\"noopener nofollow\"><code>window.top<\/code><\/a><code>[k] === <\/code><a href=\"http:\/\/window.top\" rel=\"noopener nofollow\"><code>window.top<\/code><\/a><code>[base]<\/code><\/p>\n<p><code>    )<\/code><\/p>\n<p><code>  ).length &gt; 0<\/code><\/p>\n<p><code>].map(Number).reduce((a, b) =&gt; a + b, 0xcdb));<\/code><\/p>\n<\/blockquote>\n<p>\u041f\u0443\u043d\u043a\u0442 3 &#8212; \u0441\u0430\u043c\u044b\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439: \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0438\u0449\u0435\u0442 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 <strong>\u0430\u043b\u0438\u0430\u0441\u044b \u0432\u0438\u0434\u0430 <\/strong><code><strong><em>Array<\/em><\/strong><\/code><strong><em>, <\/em><\/strong><code><strong>Promise<\/strong><\/code><strong>, <\/strong><code><strong>_Window<\/strong><\/code>, \u0440\u0430\u0432\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430\u043c. \u042d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442 JS-\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u00ab\u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442\u00bb \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u043d\u0443\u0442\u044b\u0435 \u043a\u043e\u043f\u0438\u0438. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 DuckDuckGo \u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0441\u0445\u0435\u043c \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430: \u0435\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0430 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u044b \u0443\u0436\u0435 \u0441\u043f\u0430\u043b\u0438\u043b\u0438\u0441\u044c \u0434\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/p>\n<h3>Headless-\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0431\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0433\u043b\u0430\u0432\u043d\u043e\u0435. \u041a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436, \u0435\u0441\u043b\u0438 \u0443 \u0442\u0435\u0431\u044f \u043d\u0435\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430?<\/p>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438: <strong>\u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 headless Chrome<\/strong> (Puppeteer\/Playwright). \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u043b\u0435\u0441\u0441-\u0431\u043e\u0442\u0430 \u043f\u0440\u0438\u0433\u043e\u0432\u043e\u0440: \u0441\u043e\u0442\u043d\u0438 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432, \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043d\u0430 \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0441\u0442\u0430\u0440\u0442, \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u043d\u0441\u0442\u0430\u043d\u0441, CAPTCHA-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u0438\u0445. \u0414\u043b\u044f \u043b\u0451\u0433\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u043a\u0441\u0438 \u044d\u0442\u043e \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u0430 \u0438\u0437 \u043f\u0443\u0448\u043a\u0438 \u043f\u043e \u0432\u043e\u0440\u043e\u0431\u044c\u044f\u043c.<\/p>\n<p>\u041d\u0430\u0448 \u043e\u0442\u0432\u0435\u0442 \u0440\u0430\u0434\u0438\u043a\u0430\u043b\u044c\u043d\u0435\u0435: <strong>\u0437\u0430\u0447\u0435\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0435\u0441\u043b\u0438 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043b\u0438\u0448\u044c \u0443\u0437\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u043a\u0442\u043e\u0432 \u043e\u0431 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438?<\/strong> \u041c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u043d\u0435\u043a\u0435\u043d &#8212; \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e, \u0447\u0442\u043e\u0431\u044b \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u043b \u0435\u0451 \u043e\u0442 Chrome. ~300 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u043d\u043e\u043b\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<h4>\u041a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e<\/h4>\n<p>\u042f\u0434\u0440\u043e &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>buildBrowserMock(ua)<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u043e\u0438\u0442 \u0434\u0432\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: \u00ab\u043e\u043a\u043d\u043e\u00bb (<code>win<\/code>) \u0438 \u00ab\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u00bb (<code>doc<\/code>), \u043f\u043b\u044e\u0441 <code>navigator<\/code>, <code>location<\/code>, <code>screen<\/code>, <code>localStorage<\/code>, <code>performance<\/code>, \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432, <code>crypto<\/code>, <code>TextEncoder<\/code>&#8230; \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435:<\/p>\n<blockquote>\n<p><code>const { params } = buildBrowserMock(ua);          \/\/ window, document, navigator, btoa, ...<\/code><\/p>\n<p><code>const argNames = Object.keys(params);<\/code><\/p>\n<p><code>const argVals  = <\/code><a href=\"http:\/\/argNames.map\" rel=\"noopener nofollow\"><code>argNames.map<\/code><\/a><code>(k =&gt; params[k]);<\/code><\/p>\n<p><code>const fn = new Function(...argNames, 'return (' + jsCode + ');');<\/code><\/p>\n<p><code>let result = fn(...argVals);                      \/\/ \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f!<\/code><\/p>\n<p><code>if (result &amp;&amp; typeof result.then === 'function') result = await result;<\/code><\/p>\n<\/blockquote>\n<p>\u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0439 \u0442\u0440\u044e\u043a: <strong>\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/strong>. \u0427\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a <code>window<\/code>, <code>document<\/code>, <code>navigator<\/code> &#8212; \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0448\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0437\u0430\u043c\u044b\u043a\u0430\u044e\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044b \u0438\u0437\u043e\u043b\u044f\u0442\u0430. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e <code>vm.createContext<\/code>, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u00abwindow\u00bb \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0434\u0435\u0442\u0430\u043b\u0438, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0438\u0437 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438:<\/p>\n<p><code><strong>NodeList<\/strong><\/code><strong> \u043e\u0431\u044f\u0437\u0430\u043d \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f NodeList.<\/strong> \u041a\u043b\u0430\u0441\u0441 \u043d\u0430\u0437\u0432\u0430\u043d \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0447\u0438\u0442\u0430\u0435\u0442 <a href=\"http:\/\/constructor.name\" rel=\"noopener nofollow\"><code>constructor.name<\/code><\/a>. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u043a\u043e\u0434\u0435: <code>\/\/ NOTE: named exactly \"NodeList\" - challenges check <\/code><a href=\"http:\/\/constructor.name\" rel=\"noopener nofollow\"><code>constructor.name<\/code><\/a>.<\/p>\n<p><code><strong>window<\/strong><\/code><strong> \u043e\u0431\u044f\u0437\u0430\u043d \u043f\u0440\u0438\u0442\u0432\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u043e\u043a\u043d\u043e\u043c.<\/strong> \u0422\u0440\u0438 \u0445\u0430\u043a\u0430 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u043b\u0430\u043a\u043e\u043d\u0435:<\/p>\n<blockquote>\n<p><code>win.self = win; <\/code><a href=\"http:\/\/win.top\" rel=\"noopener nofollow\"><code>win.top<\/code><\/a><code> = win; win.parent = win; win.window = win;<\/code><\/p>\n<p><code>win[Symbol.toStringTag] = 'Window';                 \/\/ \u2192 <\/code><a href=\"http:\/\/Object.prototype.toString.call\" rel=\"noopener nofollow\"><code>Object.prototype.toString.call<\/code><\/a><code>(win) === '[object Window]'<\/code><\/p>\n<p><code>win.Window = function Window() {};<\/code><\/p>\n<p><code>win.Window.prototype = win;                         \/\/ \u2192 instanceof-\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/code><\/p>\n<\/blockquote>\n<p><strong>innerHTML \u044d\u0442\u043e \u043f\u0430\u0440\u0441\u0435\u0440.<\/strong> \u0421\u0430\u043c\u0430\u044f \u0442\u0440\u0443\u0434\u043e\u0451\u043c\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c (~100 \u0441\u0442\u0440\u043e\u043a)  \u043c\u0438\u043d\u0438-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f HTML5-\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0441\u0435\u0440\u0430. \u041f\u0440\u0438 <code>div.innerHTML = '&lt;p&gt;&lt;div&gt;&lt;\/p&gt;&lt;p&gt;&lt;\/div'<\/code> \u043d\u0430\u0448 \u0441\u0435\u0442\u0442\u0435\u0440 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443, \u0430 <strong>\u043f\u0430\u0440\u0441\u0438\u0442<\/strong> \u0435\u0451 \u0441 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438:<\/p>\n<blockquote>\n<p><code>const VOID_TAGS = new Set(['br','img','hr','meta','input','link','area','base','col','embed','source','track','wbr']);<\/code><\/p>\n<p><code>\/\/ \u0422\u0435\u0433\u0438, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 &lt;p&gt; (button scope) - \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \"in body\":<\/code><\/p>\n<p><code>const P_CLOSERS = new Set(['address','article','aside','blockquote','center','details','dialog','dir','div',<\/code><\/p>\n<p><code>'dl','fieldset','figcaption','figure','footer','header','hgroup','main','menu','nav','ol','p','section',<\/code><\/p>\n<p><code>'summary','ul','h1','h2','h3','h4','h5','h6','pre','listing','form','li','dd','dt','plaintext','table','hr','xmp']);<\/code><\/p>\n<p><code>const SCOPE_STOPPERS = new Set(['html','table','td','th','caption','applet','marquee','object','template','select','optgroup','option']);<\/code><\/p>\n<\/blockquote>\n<p> \u043f\u043b\u044e\u0441 \u0433\u0435\u0439\u0442-\u043a\u0435\u0439\u0441\u044b: \u0441\u0438\u0440\u043e\u0442\u0441\u043a\u0438\u0439 <code>&lt;\/p&gt;<\/code> \u0441\u0438\u043d\u0442\u0435\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 <code>&lt;p&gt;&lt;\/p&gt;<\/code>, \u043e\u0431\u043e\u0440\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0435\u0433 (<code>EOF-in-tag<\/code>) \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f. \u0413\u0435\u0442\u0442\u0435\u0440 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <strong>\u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e<\/strong> \u0434\u0435\u0440\u0435\u0432\u0430 \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443 \u0438\u0437 DOM. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0434\u0430\u0451\u0442 \u0442\u0435 \u0441\u0430\u043c\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0430\u0435\u0442 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442.<\/p>\n<p><strong>querySelectorAll &#8212; \u044d\u0442\u043e \u0434\u0432\u0438\u0436\u043e\u043a.<\/strong> \u0412\u0435\u0441\u044c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440-\u0434\u0432\u0438\u0436\u043e\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0440\u0438 \u0432\u0438\u0434\u0430 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u043e\u0432 &#8212; <code>*<\/code>, <code>tag<\/code>, <code>#id<\/code> \u0440\u043e\u0432\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0438, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 NodeList (\u0441\u043c. \u0432\u044b\u0448\u0435). \u0410 <code>children<\/code> <strong>\u0436\u0438\u0432\u043e\u0439<\/strong>: \u0433\u0435\u0442\u0442\u0435\u0440 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043e\u0442\u0434\u0430\u0451\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u043b\u0438\u043d\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u00abappendChild \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 \u043d\u0430 1\u00bb \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p><strong>Sloppy-\u0438\u0434\u0438\u043e\u043c\u0430 \u0447\u0438\u043d\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430.<\/strong> \u0414\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437:<\/p>\n<blockquote>\n<p><code>function normalizeChallengeSource(js) {<\/code><\/p>\n<p><code>return String(js).replace(<\/code><\/p>\n<p><code>\/\\(\\s*function\\s*\\(\\s*\\)\\s*\\{\\s*return\\s+this\\s*;?\\s*\\}\\s*\\(\\s*\\)\\s*\\)\/g,<\/code><\/p>\n<p><code>'(function(){return window;})()'<\/code><\/p>\n<p><code>  );<\/code><\/p>\n<p><code>}<\/code><\/p>\n<\/blockquote>\n<p><strong>navigator \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043e\u0431\u044b\u0432\u0430\u0442\u0435\u043b\u044c.<\/strong> <code>platform: 'Win32'<\/code>, <code>vendor: 'Google Inc.'<\/code>, <code>hardwareConcurrency: 4<\/code>, <code>deviceMemory: 8<\/code>, <code>webdriver: false<\/code>, \u043f\u0443\u0441\u0442\u044b\u0435 <code>plugins<\/code>\/<code>mimeTypes<\/code>, <code>languages: ['en-US', 'en']<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u044b \u0441 User-Agent (Chrome 149 \u043d\u0430 Windows x64) \u0440\u0430\u0441\u0441\u0438\u043d\u0445\u0440\u043e\u043d \u043c\u0435\u0436\u0434\u0443 UA \u0438 navigator-\u043e\u043c \u0442\u043e\u0436\u0435 \u043f\u0430\u043b\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u043d\u0442\u0438\u0431\u043e\u0442\u0430\u0445.<\/p>\n<p><strong>\u0427\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u0432.<\/strong> \u041f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 <code>meta.duration<\/code> \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b (\u0441 \u043d\u0438\u0436\u043d\u0435\u0439 \u043f\u043b\u0430\u043d\u043a\u043e\u0439 3\u201330 \u043c\u0441): \u00ab0 \u043c\u0441\u00bb \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u043a\u043e\u0439.<\/p>\n<p><strong>\u0410 \u0435\u0441\u043b\u0438 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0443\u043f\u0430\u043b?<\/strong> \u041e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0451 \u0432 try\/catch \u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 <strong>\u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u043a\u0435\u043d<\/strong>: \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430, \u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0441\u0442\u0435\u043a \u0438 origin \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u0432 base64 (\u0444\u043b\u0430\u0433 <code>fallback: true<\/code>). \u042d\u0442\u043e \u043d\u0435 \u0448\u0430\u043c\u0430\u043d\u0441\u0442\u0432\u043e: \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u043b \u043a\u043b\u0438\u0435\u043d\u0442-\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0442\u0430\u043a\u0438\u0435 \u00ab\u0441\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0435\u00bb \u043e\u0442\u0432\u0435\u0442\u044b. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044d\u0442\u043e \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u044b\u0439 \u043b\u044e\u043a: \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 DDG \u0434\u043e\u0431\u0430\u0432\u044f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0444\u0435\u0439\u043a\u0430\u0435\u043c, \u0431\u043e\u0442 \u043d\u0435 \u0443\u043c\u0440\u0451\u0442 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e, \u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0430 <code>fallbacks<\/code> \u0432 <code>\/stats<\/code> \u043f\u043e\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0440\u0430 \u043f\u0430\u0442\u0447\u0438\u0442\u044c \u043c\u0430\u043d\u0435\u043a\u0435\u043d.<\/p>\n<h4>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u0448\u0435<\/h4>\n<p>\u0420\u0435\u0448\u0451\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c <code>x-vqd-hash-1<\/code> \u0432 POST-\u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u0438 \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0432\u043e\u043b\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f SSE-\u0441\u0442\u0440\u0438\u043c. \u0422\u0435\u043b\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0442\u043e\u0436\u0435 \u043d\u0435\u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e:<\/p>\n<blockquote>\n<p><code>const body = {<\/code><\/p>\n<p><code>model,                                  \/\/ 'gpt-5.4-mini', 'claude-haiku-4-5', ...<\/code><\/p>\n<p><code>metadata: {<\/code><\/p>\n<p><code>toolChoice: { GenerateImage: !!image, WebSearch: !!webSearch,<\/code><\/p>\n<p><code>NewsSearch: false, VideosSearch: false,<\/code><\/p>\n<p><code>LocalSearch: false, WeatherForecast: false },<\/code><\/p>\n<p><code>  },<\/code><\/p>\n<p><code>messages: [...],                        \/\/ \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u0430<\/code><\/p>\n<p><code>canUseTools: true,<\/code><\/p>\n<p><code>reasoningEffort: 'none' | 'low' | 'medium',<\/code><\/p>\n<p><code>canDelegateImageGeneration: image ? true : null,<\/code><\/p>\n<p><code>durableStream: await makeDurableStream(),   \/\/ RSA-\u043a\u043b\u044e\u0447\u0438 \u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043e\u0433\u043e\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u0442\u0440\u0438\u043c\u0430<\/code><\/p>\n<p><code>};<\/code><\/p>\n<\/blockquote>\n<p> <code>toolChoice<\/code> &#8212; \u044d\u0442\u043e \u0432\u0440\u0443\u0431\u0430\u043b\u043a\u0438 \u0442\u0443\u043b\u043e\u0432 (\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0432\u0435\u0431-\u043f\u043e\u0438\u0441\u043a), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0444\u0438\u0447\u0430\u043c\u0438 \u0431\u043e\u0442\u0430, \u0430 <code>durableStream<\/code> \u0433\u0435\u043d\u0435\u0440\u0438\u0442 RSA-OAEP-\u043f\u0430\u0440\u0443 \u043a\u043b\u044e\u0447\u0435\u0439 (\u0438\u043b\u0438 \u0431\u0435\u0440\u0451\u0442 \u0437\u0430\u0448\u0438\u0442\u044b\u0439 fallback-JWK, \u0435\u0441\u043b\u0438 <code>crypto.subtle<\/code> \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d). SSE-\u043e\u0442\u0432\u0435\u0442 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e: <code>data: {\"message\": \"...\"}<\/code> \u0434\u0435\u043b\u044c\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0430, <code>data: {\"name\": \"generate-image\", ...}<\/code> \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a (\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u2192 \u043f\u0440\u0435\u0432\u044c\u044e \u2192 \u0444\u0438\u043d\u0430\u043b \u0432 base64), <code>data: [DONE]<\/code> &#8212; \u043a\u043e\u043d\u0435\u0446.<\/p>\n<h3>\u041d\u0435 \u0445\u0435\u0448\u0435\u043c \u0435\u0434\u0438\u043d\u044b\u043c: fe-signals, fe-version \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u043c\u0435\u043b\u043e\u0447\u0438<\/h3>\n<p>\u0427\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f, \u043d\u043e \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0435\u0449\u0451 \u0434\u0432\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u043e\u0432\u0438\u0442\u044c 418.<\/p>\n<p><code><strong>x-fe-signals<\/strong><\/code> \u044d\u0442\u043e base64-\u0441\u0436\u0430\u0442\u044b\u0439 \u043b\u043e\u0433 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u00ab\u0441\u0435\u0441\u0441\u0438\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430\u00bb. \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a>-\u0444\u0440\u043e\u043d\u0442 \u043f\u0438\u0448\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f: \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0432\u0438\u0434\u0435\u043b \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433, \u043a\u043b\u0438\u043a\u043d\u0443\u043b, \u043d\u0430\u0447\u0430\u043b \u0447\u0430\u0442. \u041d\u0430\u0448 \u043a\u043b\u0438\u0435\u043d\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043b\u043e\u0433:<\/p>\n<blockquote>\n<p><code>{<\/code><\/p>\n<p><code>  start: now - end,<\/code><\/p>\n<p><code>events: [<\/code><\/p>\n<p><code>    { name: 'onboarding_impression', delta: 50..150 },<\/code><\/p>\n<p><code>    { name: 'action',                delta: +5..30 \u0441\u0435\u043a, trusted: true },<\/code><\/p>\n<p><code>    { name: 'onboarding_finish',     delta: ... },<\/code><\/p>\n<p><code>    { name: 'startNewChat_free',     delta: ... },<\/code><\/p>\n<p><code>  ],<\/code><\/p>\n<p><code>end: 0..10<\/code><\/p>\n<p><code>}<\/code><\/p>\n<\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u043e\u0442\u043a\u0440\u044b\u043b \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443, \u043f\u043e\u0432\u043d\u0438\u043c\u0430\u043b \u043d\u0430 \u043e\u043d\u0431\u043e\u0440\u0434\u0438\u043d\u0433, \u043d\u0430\u0436\u0430\u043b Start a new chat\u00bb \u0441 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0430\u043c\u0438, \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445. \u041f\u043e\u043b\u0435 <code>trusted: true<\/code> \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f \u00ab\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e\u00bb \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0417\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043b\u043e\u0433 \u043d\u0430 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0435\u043b\u044c\u0437\u044f \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0441\u0441\u0438\u0438.<\/p>\n<p><code><strong>x-fe-version<\/strong><\/code>  \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0444\u0440\u043e\u043d\u0442\u0430. \u0412\u043e\u0442 \u0442\u0443\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u0434\u043b\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u00ab\u043a\u0430\u043a DDG \u043c\u0435\u043d\u044f\u0435\u0442 \u0430\u043d\u0442\u0438\u0431\u043e\u0442\u00bb. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p><code>serp_20261021_143533_ET-add6453709b9fbf89b2650161444a93199480dda<\/code><\/p>\n<p>\u041f\u0440\u0438\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435\u0441\u044c: <code><strong>20261021<\/strong><\/code>  \u0434\u0430\u0442\u0430. DuckDuckGo \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0431\u0438\u043b\u0434 \u0444\u0440\u043e\u043d\u0442\u0430 \u0447\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u043b\u0434 \u043d\u0435\u0441\u0451\u0442 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e-\u0442\u0435\u0433, \u043d\u043e\u0432\u044b\u0439 <code>entry.duckai.&lt;hash&gt;.js<\/code> \u0438 (\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e) \u043d\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u043c \u0432\u0435\u0440\u0441\u0438\u044e: \u0431\u043e\u0442 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 (\u043a\u044d\u0448 \u043d\u0430 25 \u043c\u0438\u043d\u0443\u0442) \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a> \u0438 \u0432\u044b\u0434\u0438\u0440\u0430\u0435\u0442 <code>data-version-tag<\/code> \u0438 <code>data-version-sha<\/code> \u0438\u0437 HTML, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0432\u0435\u0436\u0438\u0439 URL entry-\u0431\u0430\u043d\u0434\u043b\u0430 \u0434\u043b\u044f \u0444\u0430\u043b\u044c\u0448\u0438\u0432\u043e\u0433\u043e stack trace. \u041b\u044e\u0431\u0430\u044f \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0430 \u0444\u0440\u043e\u043d\u0442\u0430 \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0431\u0435\u0437 \u0440\u0435\u043b\u0438\u0437\u0430.<\/p>\n<p>\u041c\u0435\u043b\u043e\u0447\u0438, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u0437\u043b\u0435\u0442\u0430\u0435\u0442: cookie <code>dcm=3<\/code> (\u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, consent-\u0444\u043b\u0430\u0433 DDG), \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a <code>priority: u=1, i<\/code> (\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 fetch), \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u043a\u0430 <code>origin<\/code>\/<code>referer<\/code>\/<code>sec-fetch-*<\/code>, \u0438 <code>cache-control: no-store<\/code>. \u041f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043c\u0435\u043b\u043e\u0447\u044c \u043c\u043e\u0436\u0435\u0442 \u0438 \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f  \u043d\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c, \u0430 \u043d\u0430 \u0444\u043e\u043d\u0435 \u0442\u044b\u0441\u044f\u0447 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043d\u0435 \u0432\u0440\u0451\u0442.<\/p>\n<h3>\u0413\u043e\u043d\u043a\u0430 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u0438\u0439: \u043a\u0430\u043a DuckDuckGo \u0447\u0430\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442 \u0430\u043d\u0442\u0438\u0431\u043e\u0442<\/h3>\n<p><strong>\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e.<\/strong> \u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u043b\u0438 \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u0415\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0444\u0440\u043e\u043d\u0442\u0430.<\/strong> <code>serp_20261021_...<\/code> \u0432 \u0432\u0435\u0440\u0441\u0438\u0438-\u0442\u0435\u0433\u0435 \u044d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u043e\u0442 21 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 2026. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u0438\u043b\u0434\u043e\u043c \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f entry-\u0431\u0430\u043d\u0434\u043b (\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439\u00bb stack trace), \u0430 \u0440\u0430\u0437 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0434\u0435\u043b\u044c \u0438 \u0441\u0430\u043c \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u043e\u0442\u0430\u0446\u0438\u044f \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438.<\/strong> \u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0440\u043e\u043a, \u0438\u043d\u0434\u0435\u043a\u0441\u043d\u044b\u0435 \u0431\u0430\u0437\u044b (<code>0x181<\/code> \u0432 \u043e\u0434\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435, <code>0x136<\/code> \u0432 \u0434\u0440\u0443\u0433\u043e\u043c), \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b \u0440\u043e\u0442\u0430\u0442\u043e\u0440\u0430 \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u044b\u043a\u043b\u0430\u0434\u043a\u0435. \u0414\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c, \u0436\u0438\u0432\u0451\u0442 \u0440\u043e\u0432\u043d\u043e \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0431\u0438\u043b\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u043e\u0442\u0430\u0446\u0438\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a.<\/strong> \u0427\u0435\u0442\u044b\u0440\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043d\u0430\u043c \u0432\u043a\u0443\u0441\u0430 \u044d\u0442\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0438\u043a\u0441\u044b \u0431\u043b\u043e\u043a\u043e\u0432 (iframe, innerHTML-\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430, V8-\u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442, webdriver-\u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440) \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0441\u0435\u0440\u0432\u0435\u0440 \u0440\u0430\u0437\u0434\u0430\u0451\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0438 A\/B-\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0432\u044b\u0434\u0430\u0432\u0430\u044f \u0438\u0445 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u0436\u0435\u0441\u0442\u043e\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430.<\/strong> \u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0442\u043e\u043a\u0435\u043d\u0430 <code>x-vqd-4<\/code> (\u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0438\u0437 status-\u043e\u0442\u0432\u0435\u0442\u0430). \u041f\u043e\u0442\u043e\u043c \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <code>x-vqd-hash-1<\/code> \u0441 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435\u043c &#8212; \u0438 \u0432\u0441\u0451 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043a\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0443\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c JS, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e \u0442\u0443 \u0441\u0430\u043c\u0443\u044e <code>500 no x-vqd-hash-1 token<\/code>. \u0414\u0430\u043b\u044c\u0448\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u044f <code>x-fe-signals<\/code>, \u0441\u0432\u0435\u0440\u043a\u0430 <code>x-fe-version<\/code>&#8230; \u0422\u0440\u0435\u043d\u0434 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d: \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0443\u0433\u043e\u0434\u0438\u0435 \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0439.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u0436\u0438\u0432\u044b?<\/strong> \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0433\u043e\u043d\u043a\u0438 \u0438\u0434\u0435\u0435: <strong>\u043c\u044b \u043d\u0435 \u0445\u0430\u0440\u0434\u043a\u043e\u0434\u0438\u043c \u043e\u0442\u0432\u0435\u0442\u044b &#8212; \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0442\u0438\u0432 \u0444\u0435\u0439\u043a\u043e\u0432\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<\/strong><\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432. \u041f\u0440\u043e\u043a\u0441\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0430\u0440\u0434\u043a\u043e\u0434\u044f\u0442: \u00ab\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 X \u043e\u0442\u0432\u0435\u0447\u0430\u0439 \u0447\u0438\u0441\u043b\u043e\u043c 4640\u00bb \u0443\u043c\u0438\u0440\u0430\u044e\u0442 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u043c\u0435\u043d\u0435 \u0431\u0430\u0437\u044b \u0438\u043b\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438. \u041c\u044b \u0436\u0435 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u0435\u043c \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u043c\u0430\u043d\u0435\u043a\u0435\u043d\u0443, \u0438 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 <em>\u0441\u0430\u043c<\/em> \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043e\u0442\u0432\u0435\u0442 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u043a\u0430 \u043d\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0442 \u043e \u0432\u0435\u0449\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0448 \u043c\u0430\u043d\u0435\u043a\u0435\u043d \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c (DOM-\u043f\u0430\u0440\u0441\u0438\u043d\u0433, \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b, \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432, \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u0438), \u0441\u043c\u0435\u043d\u0430 \u0432\u043a\u0443\u0441\u043e\u0432 \u0438 \u0431\u0430\u0437 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u043d\u0435\u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0439. \u0421\u043c\u0435\u043d\u0430 <em>\u0442\u0438\u043f\u0430<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u044f\u0442 Canvas\/WebGL-\u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442 \u0438\u043b\u0438 WASM-\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f) \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0430\u0442\u0447\u0430, \u043d\u043e \u0442\u043e\u0447\u0435\u0447\u043d\u043e\u0433\u043e, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441 \u043d\u0443\u043b\u044f.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0436\u0438\u0432\u0443\u0447\u0435\u0441\u0442\u0438 <strong>self-healing<\/strong>. \u0422\u043e\u043a\u0435\u043d \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u0443\u0440\u043e\u0432\u043d\u044f: L1 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0437\u043e\u043b\u044f\u0442\u0430 (~9 \u043c\u0438\u043d\u0443\u0442), L2 \u0432 SQLite-\u0442\u0430\u0431\u043b\u0438\u0446\u0435 <code>config<\/code> (\u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0441\u0442\u0430\u0440\u0442 \u0438\u0437\u043e\u043b\u044f\u0442\u0430). \u041f\u0440\u0438 418\/429 \u0431\u043e\u0442 \u043c\u043e\u043b\u0447\u0430 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043a\u0435\u043d, \u0437\u0430\u043d\u043e\u0432\u043e \u0440\u0435\u0448\u0430\u0435\u0442 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 (\u0434\u043e 4 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0441 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439). \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0435\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043f\u043e\u0437\u0436\u0435. \u0410 \u0432\u0441\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u0440\u0438\u043a\u0438: \u0432 <code>\/stats<\/code> \u0432\u0438\u0434\u043d\u043e \u043f\u043e \u0434\u043d\u044f\u043c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435\u0439 \u0440\u0435\u0448\u0435\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e 418 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0443\u0448\u043b\u043e \u0432 fallback.<\/p>\n<p>\u0413\u0434\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u044d\u0442\u043e\u0439 \u0441\u0445\u0435\u043c\u044b? \u0427\u0435\u0441\u0442\u043d\u043e:<\/p>\n<ol>\n<li>\n<p><strong>TLS\/HTTP2-\u0444\u0438\u043d\u0433\u0435\u0440\u043f\u0440\u0438\u043d\u0442.<\/strong> \u041c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u043d\u043e \u043d\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 TLS. \u0415\u0441\u043b\u0438 DDG \u043d\u0430\u0447\u043d\u0443\u0442 \u0441\u0432\u0435\u0440\u044f\u0442\u044c JA3\/JA4-\u043e\u0442\u043f\u0435\u0447\u0430\u0442\u043e\u043a \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0437\u0430\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u043c Chrome 149  \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0447\u0438\u0441\u0442\u044b\u043c <code>fetch<\/code> \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c. \u041f\u043e\u043a\u0430 (\u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043e\u043f\u044b\u0442\u0443) \u043d\u0430 <a href=\"http:\/\/duck.ai\" rel=\"noopener nofollow\">duck.ai<\/a> \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>IP-\u0440\u0435\u043f\u0443\u0442\u0430\u0446\u0438\u044f.<\/strong> \u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043b\u0438\u043c\u0438\u0442 \u0443 DDG \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043a IP; \u0438\u0437\u043e\u043b\u044f\u0442 \u0441 \u043e\u0431\u0449\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0432\u043e\u0442\u044b (429), \u0447\u0435\u043c \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440. \u0410\u043d\u0442\u0438\u0431\u043e\u0442 \u0442\u0443\u0442 \u043d\u0438 \u043f\u0440\u0438 \u0447\u0451\u043c \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0435\u0441\u0442\u043d\u0430\u044f \u043a\u0432\u043e\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u0430\u0436\u0434\u044b\u0439 \u043d\u043e\u0432\u044b\u0439 DOM API &#8212; \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0442\u0447.<\/strong> \u0415\u0441\u043b\u0438 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0437\u0430\u0432\u0442\u0440\u0430 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442 <code>canvas.getContext('2d').measureText(...)<\/code>, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u043c\u0430\u043d\u0435\u043a\u0435\u043d\u0430. \u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442 (\u043f\u0430\u0440\u0441\u0435\u0440, \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u044b, NodeList) \u0443\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043a\u0438\u0440\u043f\u0438\u0447\u0438 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u043e\u043c \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0416\u0438\u0432\u043e\u0439 \u0442\u0440\u0435\u0439\u0441: \u0446\u0438\u0444\u0440\u044b \u0434\u043d\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/h3>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c, \u043f\u0440\u043e\u0433\u043d\u0430\u043b\u0438 \u0432\u0435\u0441\u044c \u0446\u0438\u043a\u043b \u043f\u0440\u044f\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u0442\u044c\u0438 (22 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 2026, \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439 \u0438\u0437\u043e\u043b\u044f\u0442):<\/p>\n<blockquote>\n<p><code>GET \/duckchat\/v1\/status      \u2192 HTTP 200<\/code><\/p>\n<p><code>  challenge (x-vqd-hash-1)   \u2192 5408 \u0431\u0430\u0439\u0442 base64<\/code><\/p>\n<p><code>  \u043d\u0430\u0447\u0430\u043b\u043e (\u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435):   (async function(){const <em>0x111979=<\/em>0x...<\/code><\/p>\n<p><code>solveChallenge()             \u2192 580 \u043c\u0441, fallback=false<\/code><\/p>\n<p><code>  \u0442\u043e\u043a\u0435\u043d (base64 JSON)        \u2192 952 \u0431\u0430\u0439\u0442\u0430<\/code><\/p>\n<p><code>GET \/<\/code><a href=\"http:\/\/duck.ai\/\" rel=\"noopener nofollow\"><code>duck.ai\/<\/code><\/a><code> (fe-meta)      \u2192 feVersion serp_20261021_143533_ET-add64...<\/code><\/p>\n<p><code>                               entry.duckai.b64cc6ca5bb8451f4f08.js<\/code><\/p>\n<p><code>GET \/duckchat\/v1\/models      \u2192 10 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 (6 free, 4 premium)<\/code><\/p>\n<p><code>POST \/duckchat\/v1\/chat<\/code><\/p>\n<p><code>  \u043f\u043e\u043f\u044b\u0442\u043a\u0430 1                  \u2192 418 (\u0445\u043e\u043b\u043e\u0434\u043d\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f)<\/code><\/p>\n<p><code>  \u043f\u043e\u043f\u044b\u0442\u043a\u0430 2 (\u043d\u043e\u0432\u044b\u0439 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436) \u2192 418<\/code><\/p>\n<p><code>  \u043f\u043e\u043f\u044b\u0442\u043a\u0430 3 (\u043d\u043e\u0432\u044b\u0439 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436) \u2192 418<\/code><\/p>\n<p><code>  \u043f\u043e\u043f\u044b\u0442\u043a\u0430 4 (\u043d\u043e\u0432\u044b\u0439 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436) \u2192 200 OK, SSE<\/code><\/p>\n<p><code>  \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438               \u2192 \"pong\" \u0437\u0430 1.64 \u0441 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e<\/code><\/p>\n<\/blockquote>\n<p>\u041b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c: \u043f\u0435\u0440\u0432\u044b\u0435 \u0442\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0441 <em>\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0435\u0448\u0451\u043d\u043d\u044b\u043c<\/em> \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435\u043c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043b\u043e\u0432\u0438\u043b\u0438 418. \u042d\u0442\u043e \u00ab\u043f\u0440\u043e\u0433\u0440\u0435\u0432\u00bb \u0441\u0435\u0441\u0441\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440, \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u044f\u0435\u0442 freshly-\u0432\u044b\u0434\u0430\u043d\u043d\u044b\u043c \u0442\u043e\u043a\u0435\u043d\u0430\u043c \u0441 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (\u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u043e\u0434\u0430\u043c\u0438? \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044e?). \u0412\u0430\u0436\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0435: \u0440\u0435\u0442\u0440\u0430\u0438 \u0441 \u043f\u0435\u0440\u0435\u0441\u043e\u043b\u043e\u043c \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 \u044d\u0442\u043e \u043b\u0435\u0447\u0430\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0438 \u043d\u0430 \u0442\u0451\u043f\u043b\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 (\u0442\u043e\u043a\u0435\u043d \u0438\u0437 L2-\u043a\u044d\u0448\u0430) \u043f\u0435\u0440\u0432\u044b\u0439 \u0436\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0441 \u0445\u043e\u0434\u0443. \u041c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u043d\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u0441\u0430\u043c \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0441 \u043d\u0438\u043c \u043b\u0430\u0434\u0438\u0442\u044c.<\/p>\n<p>\u0418\u0442\u043e\u0433\u043e \u0432\u0441\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u00ab\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 Telegram \u2192 \u043e\u0442\u0432\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438\u00bb: ~2.5 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043d\u0430 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u043c \u0438\u0437\u043e\u043b\u044f\u0442\u0435, ~1 \u0441\u0435\u043a\u0443\u043d\u0434\u0430 \u043d\u0430 \u0442\u0451\u043f\u043b\u043e\u043c. \u0421\u0442\u0440\u0438\u043c\u0438\u043d\u0433 \u0432 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u0436\u0435 \u0434\u0435\u043b\u044c\u0442\u0430-\u0447\u0430\u043d\u043a\u043e\u043c.<\/p>\n<h3>\u041f\u043e\u0442\u0440\u043e\u0433\u0430\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e\u0441\u044e\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0430\u0440\u043e\u043a: \u0432\u0441\u0451 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043e \u0432 \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441-\u043f\u0440\u043e\u0435\u043a\u0442 <a href=\"https:\/\/github.com\/golaso024\/headless-duckapi\" rel=\"noopener nofollow\"><strong>headless-duckapi<\/strong><\/a>. \u042d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u0431\u043e\u0442 \u0446\u0435\u043b\u0438\u043a\u043e\u043c: \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044c\u043d\u044b\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u0441 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u043c \u043c\u0430\u043d\u0435\u043a\u0435\u043d\u043e\u043c, Telegram-\u043e\u0431\u0432\u044f\u0437\u043a\u0430 \u0441\u043e \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u043c, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, vision, \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433\u0430, rich-text \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u043c\u0435\u0442\u0440\u0438\u043a\u0438.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438:<\/p>\n<ul>\n<li>\n<p><code>lib\/duckai.js<\/code>  \u0433\u0435\u0440\u043e\u0439 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438: \u043a\u043b\u0438\u0435\u043d\u0442 duck.ai + headless-\u0431\u0440\u0430\u0443\u0437\u0435\u0440, ~950 \u0441\u0442\u0440\u043e\u043a \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 npm-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 (\u0441\u0432\u043e\u0439 SHA-256, \u0441\u0432\u043e\u0439 base64, \u0441\u0432\u043e\u0439 HTML5-\u043f\u0430\u0440\u0441\u0435\u0440);<\/p>\n<\/li>\n<li>\n<p>Telegram-\u0447\u0430\u0441\u0442\u044c: \u0445\u0435\u043d\u0434\u043b\u0435\u0440\u044b, \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u043d\u0434\u0435\u0440 \u043e\u0442\u0432\u0435\u0442\u043e\u0432, <code>\/img<\/code> \u0441 \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a\u0430\u043c\u0438-\u043f\u0440\u0435\u0432\u044c\u044e, \u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044f JPEG\u2192PNG \u0434\u043b\u044f \u0444\u043e\u0442\u043e;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043f\u043b\u043e\u0439 \u0432 \u0434\u0432\u0443\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445: serverless-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 Telegram (BotFather \u2192 Serverless) \u0438\u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Node-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 (Docker Compose \/ systemd \u0432 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0435);<\/p>\n<\/li>\n<li>\n<p>\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f  <code>BOT_TOKEN<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0435\u043f\u043b\u043e\u0439 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0438\u043d\u0443\u0442\u044b: <code>git clone<\/code> \u2192 \u0432\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0431\u043e\u0442\u0430 \u0438\u0437 BotFather \u2192 <code>docker compose up<\/code> (\u0438\u043b\u0438 <code>node .<\/code>). \u041d\u0438\u043a\u0430\u043a\u0438\u0445 API-\u043a\u043b\u044e\u0447\u0435\u0439 \u043e\u0442 OpenAI\/Anthropic \u043d\u0435 \u043d\u0443\u0436\u043d\u043e  \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u0442 DuckDuckGo, \u0432\u044b \u043b\u0438\u0448\u044c \u043f\u0440\u0438\u0442\u0432\u043e\u0440\u044f\u0435\u0442\u0435\u0441\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c. \u0420\u0435\u043b\u0438\u0437 <code>v1.0.0<\/code> \u0443\u0436\u0435 \u0432 <a href=\"https:\/\/github.com\/golaso024\/headless-duckapi\/releases\" rel=\"noopener nofollow\">releases<\/a>, \u0437\u0432\u0451\u0437\u0434\u043e\u0447\u043a\u0438 \u0438 issues \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u00ab\u0432\u043a\u0443\u0441\u0430\u043c\u0438\u00bb \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442\u0441\u044f  \u0435\u0441\u043b\u0438 DDG \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043a\u0440\u0443\u0442\u0438\u043b\u0438, \u0447\u0438\u043d\u0438\u0442\u044c \u0431\u0443\u0434\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1097568\/\">https:\/\/habr.com\/ru\/articles\/1097568\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0418\u043b\u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u0430\u043a 5408 \u0431\u0430\u0439\u0442 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JavaScript, \u043f\u0440\u0438\u043b\u0435\u0442\u0430\u044e\u0449\u0438\u0445 \u0432 HTTP-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a GPT, Claude, Mistral \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u043d\u0435\u043a\u0435\u043d \u043d\u0430 \u0447\u0438\u0441\u0442\u043e\u043c JS.\u041f\u0440\u043e\u043b\u043e\u0433: \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430\u0412\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043d\u0435\u0432\u0437\u0440\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u0433\u0430\u0445:\u041e\u0448\u0438\u0431\u043a\u0430 API (ddg_haiku): Error code: 500 &#8212; {&#8216;error&#8217;: &#8216;no x-vqd-hash-1 token&#8217;}\u0415\u0441\u043b\u0438 \u0432\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u043a\u0441\u0438 \u043a duck.ai \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c\u0443 \u0432 DuckDuckGo AI-\u0447\u0430\u0442\u0443, \u0433\u0434\u0435 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0436\u0438\u0432\u0443\u0442 GPT \u0438 Claude, \u0432\u044b \u043f\u043e\u0447\u0442\u0438 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0432\u0438\u0434\u0435\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043f\u0435\u0440\u0442\u0443\u0430\u0440\u0430: \u0442\u043e 500 no x-vqd-hash-1 token, \u0442\u043e \u0434\u0440\u0430\u0437\u043d\u044f\u0449\u0443\u044e 418 I&#8217;m a teapot, \u0442\u043e \u043c\u043e\u043b\u0447\u0430\u043b\u0438\u0432\u044b\u0439 \u043e\u0431\u0440\u044b\u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u044b (\u0432\u0441\u044f \u0431\u0440\u0430\u0442\u0432\u0430 \u0432 \u0434\u0443\u0445\u0435 duck2api) \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435\u041c\u044b \u0441 \u043d\u0430\u043f\u0430\u0440\u043d\u0438\u043a\u043e\u043c \u0434\u0435\u043b\u0430\u043b\u0438 Telegram-\u0431\u043e\u0442\u0430-\u043f\u0440\u043e\u043a\u0441\u0438 \u043a duck.ai \u0438, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0432\u0441\u0442\u0430\u043b\u0438 \u043d\u0430 \u044d\u0442\u0438 \u0433\u0440\u0430\u0431\u043b\u0438 \u043e\u0431\u0435\u0438\u043c\u0438 \u043d\u043e\u0433\u0430\u043c\u0438. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0430\u043d\u0442\u0438\u0431\u043e\u0442 DuckDuckGo \u0432 2026 \u0433\u043e\u0434\u0443, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438\u0445 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 (\u043c\u044b \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u00ab\u0432\u043a\u0443\u0441\u0430\u00bb \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u043d\u0430\u0435\u043c \u043e \u043d\u0438\u0445 \u0432\u0441\u0451), \u0438 \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 headless-\u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0435\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430: \u0442\u043e\u043b\u044c\u043a\u043e ~40 \u041a\u0411 \u0447\u0438\u0441\u0442\u043e\u0433\u043e JavaScript, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u0438\u0445 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0442\u0438\u0432 \u0444\u0438\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e DOM.\u0421\u043f\u043e\u0439\u043b\u0435\u0440: \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041d\u0430 \u0434\u0435\u043d\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0437\u0430 ~580 \u043c\u0441 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u0444\u043e\u043b\u0431\u044d\u043a\u0430, \u0430 \u0431\u043e\u0442 \u0441\u0442\u0440\u0438\u043c\u0438\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u044f\u043c\u043e \u0432 \u0447\u0430\u0442 \u0422\u0435\u043b\u0435\u0433\u0440\u0430\u043c\u0430.\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 duck.ai \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043b\u0430\u043a\u043e\u043c\u044b\u0439 \u043a\u0443\u0441\u043e\u043a\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u043b: duck.ai &#8212; \u044d\u0442\u043e \u0418\u0418 \u0447\u0430\u0442 \u043e\u0442 DuckDuckGo, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 duckduckgo.com. \u0415\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043c\u0430\u0433\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e DuckDuckGo \u043e\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430 \u0432\u0430\u0441: \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0441\u0432\u0435\u0436\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 OpenAI, Anthropic, Mistral \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u0432\u0435\u0441\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043b\u0430\u0442\u0438\u0442 \u043d\u043e\u043b\u044c \u0440\u0443\u0431\u043b\u0435\u0439, \u043d\u043e\u043b\u044c \u0446\u0435\u043d\u0442\u043e\u0432 \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043b\u043e\u0433\u0438\u043d\u0438\u0442\u0441\u044f. \u0421\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e (DuckDuckGo \u0441\u043b\u0430\u0432\u0438\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u043a \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0430\u043d\u043e\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0432\u0435\u043d\u0434\u043e\u0440\u0430\u043c \u043c\u043e\u0434\u0435\u043b\u0435\u0439).\u0416\u0438\u0432\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043e\u0442\u0430 \u043d\u0430 \u0434\u0435\u043d\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 :\u041c\u043e\u0434\u0435\u043b\u044c\u0414\u043e\u0441\u0442\u0443\u043f\u0427\u0442\u043e \u0443\u043c\u0435\u0435\u0442gpt-6-lunafree\u0442\u0435\u043a\u0441\u0442, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043agpt-5.4-minifree\u0442\u0435\u043a\u0441\u0442, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438claude-haiku-4-5free\u0442\u0435\u043a\u0441\u0442mistral-small-2603free\u0442\u0435\u043a\u0441\u0442tinfoil\/gpt-oss-120bfree\u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044ctinfoil\/gemma4-31bfree\u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044cgpt-5.6-terra \/ gpt-5.6-solpremium\u0442\u0435\u043a\u0441\u0442, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043aclaude-sonnet-4-6premium\u0442\u0435\u043a\u0441\u0442, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043aclaude-opus-4-8premium\u0441\u0430\u043c\u044b\u0439 \u0436\u0438\u0440\u043d\u044b\u0439 Claude\u0428\u0435\u0441\u0442\u044c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433, \u0432\u0435\u0431-\u043f\u043e\u0438\u0441\u043a, \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u0438\u043d HTTP-\u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \/duckchat\/v1\/chat, \u0431\u0435\u0437 API-\u043a\u043b\u044e\u0447\u0435\u0439, \u0431\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u043c\u0435\u0436\u0434\u0443 \u0432\u0430\u043c\u0438 \u0438 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438 &#8212; \u0430\u043d\u0442\u0438\u0431\u043e\u0442. DuckDuckGo \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u0449\u0435\u0434\u0440\u043e\u0441\u0442\u044c \u0441\u043b\u0438\u0432\u0430\u043b\u0438 \u0432 \u0431\u0435\u0437\u043b\u0438\u043c\u0438\u0442\u043d\u044b\u0435 API-\u043f\u0440\u043e\u043a\u0441\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0445\u043e\u0434 \u043d\u0430 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u043e\u0447\u0435\u0442 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f: \u0441 \u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u0438\u0434\u0438\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c Chrome.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0431\u043e\u0442\u0430 \u0437\u0430 90 \u0441\u0435\u043a\u0443\u043d\u0434\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u044b\u0440\u044f\u0442\u044c \u0432 \u0430\u043d\u0442\u0438\u0431\u043e\u0442, \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u0442\u0440\u043e\u0438\u043c. \u0411\u043e\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f headless-duckapi &#8212; \u044d\u0442\u043e Telegram-\u0431\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0435\u0442 \u0438\u0445 \u0432 duck.ai \u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u0442 \u043e\u0442\u0432\u0435\u0442\u044b \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 serverless-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Telegram (BotFather \u2192 Serverless): \u0430\u043f\u0434\u0435\u0439\u0442\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432\u0435\u0431\u0445\u0443\u043a\u043e\u043c \u0432 \u0438\u0437\u043e\u043b\u044f\u0442, \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443, \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0436\u0438\u0432\u0443\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f:\u041e\u0434\u0438\u043d \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u0412\u0441\u044f \u043c\u0430\u0433\u0438\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0430\u043d\u0442\u0438\u0431\u043e\u0442\u0430 \u0436\u0438\u0432\u0451\u0442 \u0432 lib\/duckai.js \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435 \u043d\u0430 ~950 \u0441\u0442\u0440\u043e\u043a \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0439 npm-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0421\u0432\u043e\u0439 SHA-256, \u0441\u0432\u043e\u0439 base64, \u0441\u0432\u043e\u0439 HTML5-\u043f\u0430\u0440\u0441\u0435\u0440, \u0441\u0432\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0439 \u043c\u0430\u043d\u0435\u043a\u0435\u043d. \u042d\u0442\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e: \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0432 serverless-\u0438\u0437\u043e\u043b\u044f\u0442\u0435 (\u0433\u0434\u0435 \u043d\u0435\u0442 Buffer, atob \u0438 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b Node-API), \u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c Node-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.SQLite \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0447\u0430\u0442\u043e\u0432, \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0434\u0438\u0430\u043b\u043e\u0433\u043e\u0432, \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0445\u0435\u043c\u0435 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 (chats, messages, users, stats_daily, duck_daily, config). \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043a\u043b\u044e\u0447 \u043a \u0432\u044b\u0436\u0438\u0432\u0430\u043d\u0438\u044e: \u0432 \u043d\u0435\u0439 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0440\u0435\u0448\u0451\u043d\u043d\u044b\u0439 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436-\u0442\u043e\u043a\u0435\u043d, \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0435\u0441\u0442\u0430\u0440\u0442 \u0438\u0437\u043e\u043b\u044f\u0442\u0430.\u0413\u043b\u0430\u0432\u043d\u044b\u0435 \u0444\u0438\u0447\u0438\u041a\u043e\u0440\u043e\u0442\u043a\u043e, \u0447\u0442\u043e \u0431\u043e\u0442 \u0443\u043c\u0435\u0435\u0442 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438:\u0421\u0442\u0440\u0438\u043c\u0438\u043d\u0433. \u041e\u0434\u043d\u043e Telegram-\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 (\u043d\u0435 \u0447\u0430\u0449\u0435 \u0440\u0430\u0437\u0430 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u043d\u0435 \u0440\u0430\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0441\u044f 8 \u043d\u043e\u0432\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432  \u0438\u043d\u0430\u0447\u0435 Telegram \u0434\u0443\u0448\u0438\u0442 rate-limit&#8217;\u043e\u043c). \u0414\u043b\u0438\u043d\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 3600 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445. Markdown \u043d\u0430 \u043b\u0435\u0442\u0443 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 Telegram-HTML, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u0438 \u0441\u0442\u0440\u0438\u043c\u0430 ** \u0438 &#171;` \u0434\u043e\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u043c\u0443\u0441\u043e\u0440\u043e\u043c.10 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441 \u0436\u0438\u0432\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c. \u0421\u043f\u0438\u0441\u043e\u043a \u043d\u0435 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d &#8212; \u0431\u043e\u0442 \u0434\u0435\u0440\u0433\u0430\u0435\u0442 \/duckchat\/v1\/models \u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 (\u043a\u043e\u0433\u0434\u0430 DDG \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 GPT-5.6 \u0438 Claude 4.8, \u043e\u043d\u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0443 \u043d\u0430\u0441 \u0431\u0435\u0437 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0438\u0442\u0430).\/img \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a. \u0412\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0447\u0430\u0442-\u0445\u043e\u0434\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0443\u043b GenerateImage (GPT Image 2 \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435): \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a (\u00abPainting a cute robot duck&#8230;\u00bb), \u043f\u043e\u0442\u043e\u043c \u0447\u0435\u0440\u043d\u043e\u0432\u0438\u043a-\u043f\u0440\u0435\u0432\u044c\u044e \u0443\u0436\u0435 \u043d\u0430 ~9-\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u0435, \u043f\u043e\u0442\u043e\u043c \u0444\u0438\u043d\u0430\u043b 1024\u00d71024 \u0437\u0430 ~13\u201317 \u0441\u0435\u043a\u0443\u043d\u0434. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0441\u043f\u043e\u043d\u0442\u0430\u043d\u043d\u043e: \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0447\u0430\u0442\u0435 \u00ab\u043d\u0430\u0440\u0438\u0441\u0443\u0439 \u0443\u0442\u043a\u0443-\u043a\u043e\u0441\u043c\u043e\u043d\u0430\u0432\u0442\u0430\u00bb \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043f\u0440\u0438\u0435\u0434\u0435\u0442 \u0441\u0430\u043c\u0430.\u0424\u043e\u0442\u043e + vision + img2img. \u0428\u043b\u0451\u0442\u0435 \u0444\u043e\u0442\u043e \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u044c\u044e \u00ab\u0437\u0430\u043c\u0435\u043d\u0438 \u0443\u0442\u043a\u0443 \u043d\u0430 \u043a\u043e\u0442\u0430\u00bb \u043c\u043e\u0434\u0435\u043b\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u0417\u0430\u0431\u0430\u0432\u043d\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c: duck.ai \u043e\u0442\u0432\u0435\u0440\u0433\u0430\u0435\u0442 JPEG \u0432 \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u0451\u0440\u0442\u043a\u0435 (\u0431\u044d\u043a\u0435\u043d\u0434 \u0441\u043d\u0438\u0444\u0444\u0430\u0435\u0442 \u0431\u0430\u0439\u0442\u044b, \u0430 \u043d\u0435 MIME), \u0430 Telegram \u043f\u0440\u0438\u0441\u044b\u043b\u0430\u0435\u0442 \u0444\u043e\u0442\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u0432 JPEG. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0435\u043d\u0434\u043e\u0440\u0438\u0442\u044c JPEG-\u0434\u0435\u043a\u043e\u0434\u0435\u0440 \u0438 PNG-\u044d\u043d\u043a\u043e\u0434\u0435\u0440 (\u0438\u0442\u043e\u0433\u043e ~46 \u041a\u0411), \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u0442\u043e \u0432 PNG \u0441 \u0434\u0430\u0443\u043d\u0441\u043a\u0435\u0439\u043b\u043e\u043c \u0434\u043e 640px \u043f\u0440\u044f\u043c\u043e \u0432 \u0438\u0437\u043e\u043b\u044f\u0442\u0435, \u0431\u0435\u0437 ImageMagick.\u041f\u0430\u043c\u044f\u0442\u044c \u0434\u0438\u0430\u043b\u043e\u0433\u0430. \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 N \u0445\u043e\u0434\u043e\u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c; \u00ab\u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e\u00bb \u0432\u044b\u0447\u0438\u0449\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443.\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434-\u0437\u043e\u043e\u043f\u0430\u0440\u043a\u043e\u0432: claude, \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f \u043d\u0438\u0437\u043a\u0438\u0439, \u043f\u043e\u0438\u0441\u043a \u0432\u044b\u043a\u043b, \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e exact-match \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u0438 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u043f\u0440\u044f\u043c\u043e \u0432 \u0447\u0430\u0442\u0435.\u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430. \u0412 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 duck_daily \u043a\u043e\u043f\u044f\u0442\u0441\u044f \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0435\u0439 \u0440\u0435\u0448\u0435\u043d\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0448\u043b\u043e \u0432 fallback, \u0441\u043a\u043e\u043b\u044c\u043a\u043e 418\/429. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \/stats (\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446) \u0440\u0438\u0441\u0443\u0435\u0442 \u043f\u0430\u043d\u0435\u043b\u044c \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u00ab\u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435\u00bb \u0430\u043d\u0442\u0438\u0431\u043e\u0442-\u043e\u0431\u0445\u043e\u0434\u0430 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435 \u043f\u043e \u0434\u043d\u044f\u043c.\u0410 \u0442\u0435\u043f\u0435\u0440\u044c &#8212; \u0442\u043e, \u0440\u0430\u0434\u0438 \u0447\u0435\u0433\u043e \u0432\u044b, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0437\u0434\u0435\u0441\u044c.\u0410\u043d\u0442\u0438\u0431\u043e\u0442 DuckDuckGo: \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0447\u0435\u0441\u0442\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c\u0441\u044f, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u0436\u0434\u0451\u0442 \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a \u0447\u0430\u0442\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\u0428\u0430\u0433 1. GET \/duckchat\/v1\/status. \u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0441\u0442\u0443\u0447\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442 \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432, \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u043e\u0434 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043d\u044b\u0435:user-agent:        Mozilla\/5.0 (Windows NT 10.0; Win64; x64) &#8230; Chrome\/149.0.0.0 Safari\/537.36sec-ch-ua:         &#171;Google Chrome&#187;;v=&#187;149&#8243;, &#171;Chromium&#187;;v=&#187;149&#8243;, &#171;Not)A;Brand&#187;;v=&#187;24&#8243;sec-ch-ua-mobile:  ?0sec-ch-ua-platform:&#187;Windows&#187;sec-fetch-dest:    emptysec-fetch-mode:    corssec-fetch-site:    same-originorigin\/referer:    https:\/\/duck.aicookie:            dcm=3x-vqd-accept:      1\u0412 \u043e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440 \u043a\u043b\u0430\u0434\u0451\u0442 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a x-vqd-hash-1&#8230; \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436. \u041d\u0435 \u0442\u043e\u043a\u0435\u043d, \u043d\u0435 \u0445\u0435\u0448 \u0430 5\u20136 \u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442 base64-\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e JavaScript. \u0427\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0434\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043d\u0435\u0433\u043e.\u0428\u0430\u0433 2. \u0411\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436. \u0422\u043e\u0442 JS &#8212; \u044d\u0442\u043e async IIFE, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 (\u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435 \u0446\u0435\u043b\u0430\u044f \u0433\u043b\u0430\u0432\u0430) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c client_hashes \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f.\u0428\u0430\u0433 3. POST \/duckchat\/v1\/chat. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 \u0443\u0435\u0437\u0436\u0430\u0435\u0442 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 x-vqd-hash-1 (\u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u043c\u0435\u043d\u0438), \u0440\u044f\u0434\u043e\u043c \u0441 \u043d\u0438\u043c \u0435\u0449\u0451 \u043f\u0430\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0447\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438:\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\u0427\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0417\u0430\u0447\u0435\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0443x-vqd-hash-1base64(JSON) \u0441 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430\u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u00ab\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u00bbx-fe-version\u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0444\u0440\u043e\u043d\u0442\u0430, \u043d\u0430\u043f\u0440. serp_20261021_143533_ET-&#8230;\u0441\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u0444\u0440\u043e\u043d\u0442 \u0441\u0432\u0435\u0436\u0438\u0439x-fe-signalsbase64(JSON) \u043b\u043e\u0433 \u0442\u0435\u043b\u0435\u043c\u0435\u0442\u0440\u0438\u0438 \u0441\u0435\u0441\u0441\u0438\u0438\u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u00ab\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u00bbx-ddg-journey-id\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 hex\u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0435\u0441\u0441\u0438\u0438\u041e\u0442\u0432\u0435\u0442 text\/event-stream (SSE) \u0441\u043e \u0441\u0442\u0440\u0438\u043c\u043e\u043c \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u0447\u0430\u043d\u043a\u0430\u043c\u0438 \u0431\u043e\u043b\u0442\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (\u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e [PING]) \u0438 \u0438\u0432\u0435\u043d\u0442\u044b \u0442\u0443\u043b\u043e\u0432 \u0432\u0440\u043e\u0434\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a.\u0422\u0435\u043f\u0435\u0440\u044c \u043e \u0448\u0442\u0440\u0430\u0445\u0430\u0445. \u0415\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 x-vqd-hash-1 \u043d\u0435\u0442 \u0432\u043e\u0432\u0441\u0435 &#8212; \u0441\u0435\u0440\u0432\u0435\u0440 \u0447\u0435\u0441\u0442\u043d\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 500 {&#8216;error&#8217;: &#8216;no x-vqd-hash-1 token&#8217;} (\u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u0437 \u043f\u0440\u043e\u043b\u043e\u0433\u0430: \u0442\u0430\u043a \u0443\u043c\u0438\u0440\u0430\u044e\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0449\u0435 \u0448\u043b\u044e\u0442 \u0441\u0442\u0430\u0440\u044b\u0439 \u0442\u043e\u043a\u0435\u043d x-vqd-4 \u0438 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u043f\u0440\u043e \u043d\u043e\u0432\u044b\u0439). \u0415\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0435\u0441\u0442\u044c, \u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u0430\u0441 \u0436\u0434\u0451\u0442 418 I&#8217;m a teapot. \u041d\u0435 403, \u043d\u0435 429 418, \u0447\u0442\u043e \u043f\u0440\u0438\u0434\u0430\u0451\u0442 \u0432\u0441\u0435\u043c\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u043e\u0441\u043e\u0431\u044b\u0439 \u0446\u0438\u043d\u0438\u0437\u043c.\u0427\u0435\u043b\u043b\u0435\u043d\u0434\u0436 \u0438\u0437\u043d\u0443\u0442\u0440\u0438\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u043c x-vqd-hash-1 \u0438\u0437 status-\u043e\u0442\u0432\u0435\u0442\u0430 \u0438 \u0432\u0438\u0434\u0438\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 &#8212; \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 obfuscator.io:(async function() {const 0x53c4ff = 0x3dda;function 0x3dda(0x8a4cc5, _0x54eae6) {const 0x2b9bc6 = 0x2b9b();return 0x3dda = function(0x3ddaef, _0x4750ce) {0x3ddaef = 0x3ddaef &#8212; 0x181;let 0x3acba3 = 0x2b9bc6[_0x3ddaef];return _0x3acba3;    }, 0x3dda(0x8a4cc5, _0x54eae6);  }\/\/ &#8230;\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 \u0436\u0430\u043d\u0440\u0430: \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a, \u0444\u0443\u043d\u043a\u0446\u0438\u044f-\u0434\u0435\u043a\u043e\u0434\u0435\u0440 \u0441\u043e \u0441\u0434\u0432\u0438\u0433\u043e\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0440\u043e\u0442\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0442\u0440\u043e\u043a, \u043f\u043e\u043a\u0430 \u0447\u0435\u043a-\u0441\u0443\u043c\u043c\u0430 \u0438\u0437 parseInt-\u043e\u0432 \u043d\u0435 \u0441\u043e\u0439\u0434\u0451\u0442\u0441\u044f. \u0426\u0438\u043a\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u043d\u043e:while (!![]) {try {const _0xefc59c = -parseInt(&#8230;)\/0x1 + parseInt(&#8230;)\/0x2 * &#8230; ;if (_0xefc59c === _0x1c89fc) break;else 0x5f3a68.push(0x5f3a68.shift());  } catch (_0x51be09) { 0x5f3a68.push(0x5f3a68.shift()); }}\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u043a\u043e\u043b\u043e\u0442\u044c \u043a\u043e\u0434 \u043d\u0435\u043b\u044c\u0437\u044f &#8212; \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u0442\u0440\u043e\u043a \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438, \u0438 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u0443\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0441\u0430\u043c\u043e\u0439 \u0440\u043e\u0442\u0430\u0446\u0438\u0438 (\u043c\u044b \u0433\u043e\u043d\u044f\u043b\u0438 \u043a\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 AST-\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u0441\u0442\u0440\u043e\u043a-\u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0430 \u044d\u0442\u043e \u0443\u0448\u043b\u0430 \u043f\u0430\u0440\u0430 \u0432\u0435\u0447\u0435\u0440\u043e\u0432).\u041f\u043e\u0441\u043b\u0435 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u0441\u043a\u0435\u043b\u0435\u0442 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 \u043f\u0440\u043e\u0441\u0442 \u0434\u043e \u0431\u0435\u0437\u043e\u0431\u0440\u0430\u0437\u0438\u044f: \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u0438\u0431\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043b\u0438\u0431\u043e \u0447\u0438\u0441\u043b\u043e, \u0437\u0430\u0442\u0435\u043c \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432 \u0447\u0438\u0441\u043b\u0430 \u0432\u0438\u0434\u0430:String(BASE + \u0441\u0443\u043c\u043c\u0430_\u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a)   \/\/ \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: String(0x11a0 + innerHTML.length  querySelectorAll(&#187;).length)\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442:return { client_hashes: [hash1, hash2, &#8230;], &#8230; }\u0410 \u0434\u0430\u043b\u044c\u0448\u0435 &#8212; \u0432\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043d\u043e\u0433\u0438\u0435 \u0443\u043f\u0443\u0441\u043a\u0430\u044e\u0442: \u0441\u044b\u0440\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0447\u0435\u043b\u043b\u0435\u043d\u0434\u0436\u0430 \u0435\u0449\u0451 \u043d\u0435 \u0442\u043e\u043a\u0435\u043d. \u041d\u0430\u0448 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 client_hashes \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0447\u0438\u0441\u0442\u043e-JS \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e SHA-256 (\u0432 \u0438\u0437\u043e\u043b\u044f\u0442\u0435 \u043d\u0435\u0442 crypto.subtle, \u0430 \u0436\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u0433\u0434\u0435), \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435:meta.origin   = &#8216;https:\/\/duck.ai&#8217;;meta.stack    = &#8216;Error\\nat l (https:\/\/duck.ai\/dist\/duckai-dist\/entry.duckai.&lt;hash&gt;.js:2:1446307)\\n&#8230;&#8217;;meta.duration = String(\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435_3_30_\u043c\u0441);\u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0442\u0435\u043c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 JSON, \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0432 base64 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c. \u0414\u0430, meta.stack &#8212; \u044d\u0442\u043e \u0444\u0430\u043b\u044c\u0448\u0438\u0432\u044b\u0439 stack trace, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u044b\u043f\u0430\u043b\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u043d\u0434\u043b\u0430 duck.ai. \u0421\u0442\u0440\u043e\u043a\u0443&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-499686","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/499686","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=499686"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/499686\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=499686"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=499686"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=499686"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}