Greasy Fork is available in English.
Batch download all images & videos from any X/Twitter account — including withheld — in original quality, one click, no login.
// ==UserScript== // @name Twitter/X Media Batch Downloader Pro // @name:zh Twitter 媒体批量下载器 Pro // @name:ja Twitter メディア一括ダウンローダー Pro // @description Batch download all images & videos from any X/Twitter account — including withheld — in original quality, one click, no login. // @description:zh 批量下载任何 X/Twitter 账号的所有图片和视频(包括受限账号),原始质量,一键操作,无需登录。 // @description:ja X/Twitter アカウントからすべての画像と動画(制限付きアカウントを含む)を元の品質で一括ダウンロード、ワンクリック、ログイン不要。 // @antifeature payment Using this script requires an active monthly subscription. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAA0jWNhQlgAADSNanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAANGdqdW1iAAAATWp1bWRjMm1hABEAEIAAAKoAOJtxA2Fkb2JlOnVybjp1dWlkOjAxMDUxZTgxLTdjODYtNGM2Zi05ZWI3LWQ2ODMyYjE2MDcyYQAAAAG0anVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAAA2Gp1bWIAAAAmanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5hY3Rpb25zAAAAAKpjYm9yoWdhY3Rpb25zgaNmYWN0aW9ua2MycGEuZWRpdGVkbXNvZnR3YXJlQWdlbnRtQWRvYmUgRmlyZWZseXFkaWdpdGFsU291cmNlVHlwZXhUaHR0cHM6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvY29tcG9zaXRlV2l0aFRyYWluZWRBbGdvcml0aG1pY01lZGlhAAAAq2p1bWIAAAAoanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5oYXNoLmRhdGEAAAAAe2Nib3KlamV4Y2x1c2lvbnOBomVzdGFydBghZmxlbmd0aBk0mWRuYW1lbmp1bWJmIG1hbmlmZXN0Y2FsZ2ZzaGEyNTZkaGFzaFggMD4YYfuuyS4zr1xZ43vCYDS39xrKTXMUA6ouyX7s5bZjcGFkSAAAAAAAAAAAAAACTmp1bWIAAAAkanVtZGMyY2wAEQAQgAAAqgA4m3EDYzJwYS5jbGFpbQAAAAIiY2JvcqhoZGM6dGl0bGVvR2VuZXJhdGVkIEltYWdlaWRjOmZvcm1hdGlpbWFnZS9wbmdqaW5zdGFuY2VJRHgseG1wOmlpZDoxYmQwODcyNy03YTc1LTQyNDgtODM4MS03ZjAzZTg3OTIyNjFvY2xhaW1fZ2VuZXJhdG9yeFlBZG9iZV9QaG90b3Nob3AvMjUuMC4wIChidWlsZCAyMDIzMDkwNi5yLjM3IGIxNGUzMTc7IHdpbikgYWRvYmVfYzJwYS8wLjcuNiBjMnBhLXJzLzAuMjUuMnRjbGFpbV9nZW5lcmF0b3JfaW5mb4G/ZG5hbWVvQWRvYmVfUGhv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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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 // @namespace https://exyezed.cc // @supportURL https://www.patreon.com/exyezed // @homepageURL https://www.patreon.com/exyezed // @version 1.1.1 // @author exyezed // @license MIT // @match *://twitter.com/* // @match *://x.com/* // @require https://cdn.jsdelivr.net/npm/[email protected]/dayjs.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/dexie.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/FileSaver.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/gifshot.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/i18next.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/preact.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/hooks/dist/hooks.umd.js // @require https://cdn.jsdelivr.net/npm/@preact/[email protected]/dist/signals-core.min.js // @require https://cdn.jsdelivr.net/npm/@preact/[email protected]/dist/signals.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/umd/index.min.js // @connect eu-north-1.exyezed.cc // @connect ap-south-1.exyezed.cc // @connect eu-west-3.exyezed.cc // @connect us-east-2.exyezed.cc // @connect af-south-1.exyezed.cc // @connect eu-west-1.exyezed.cc // @connect me-central-1.exyezed.cc // @connect eu-central-1.exyezed.cc // @connect sa-east-1.exyezed.cc // @connect ap-east-1.exyezed.cc // @connect ap-northeast-1.exyezed.cc // @connect us-east-1.exyezed.cc // @connect ap-northeast-2.exyezed.cc // @connect ap-northeast-3.exyezed.cc // @connect eu-west-2.exyezed.cc // @connect us-west-2.exyezed.cc // @connect us-west-1.exyezed.cc // @connect ap-southeast-1.exyezed.cc // @connect ap-southeast-2.exyezed.cc // @grant GM_addStyle // @grant GM_xmlhttpRequest // @grant unsafeWindow // @run-at document-start // ==/UserScript== (function (preact, signals, hooks, i18next, dayjs, Dexie, fileSaverEs, gifshot, fflate) { 'use strict'; var f = 0; function u(e, t, n, o, i, u2) { t || (t = {}); var a, c, p = t; if ("ref" in p) for (c in p = {}, t) "ref" == c ? a = t[c] : p[c] = t[c]; var l = { type: e, props: p, key: n, ref: a, __k: null, __: null, __b: 0, __e: null, __c: null, constructor: void 0, __v: --f, __i: -1, __u: 0, __source: i, __self: u2 }; if ("function" == typeof e && (a = e.defaultProps)) for (c in a) void 0 === p[c] && (p[c] = a[c]); return preact.options.vnode && preact.options.vnode(l), l; } var defaultAttributes = { outline: { xmlns: "http://www.w3.org/2000/svg", width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": 2, "stroke-linecap": "round", "stroke-linejoin": "round" }, filled: { xmlns: "http://www.w3.org/2000/svg", width: 24, height: 24, viewBox: "0 0 24 24", fill: "currentColor", stroke: "none" } }; const createPreactComponent = (type, iconName, iconNamePascal, iconNode) => { const Component2 = ({ color = "currentColor", size = 24, stroke = 2, title, children, className = "", class: classes = "", style, ...rest }) => preact.h( "svg", { ...defaultAttributes[type], width: String(size), height: String(size), class: [`tabler-icon`, `tabler-icon-${iconName}`, classes, className].join(" "), ...type === "filled" ? { fill: color } : { "stroke-width": stroke, stroke: color }, style, ...rest }, [ title && preact.h("title", {}, title), ...iconNode.map(([tag, attrs]) => preact.h(tag, attrs)), ...preact.toChildArray(children) ] ); Component2.displayName = `${iconNamePascal}`; return Component2; }; var IconAlertTriangle = createPreactComponent("outline", "alert-triangle", "AlertTriangle", [["path", { "d": "M12 9v4", "key": "svg-0" }], ["path", { "d": "M10.363 3.591l-8.106 13.534a1.914 1.914 0 0 0 1.636 2.871h16.214a1.914 1.914 0 0 0 1.636 -2.87l-8.106 -13.536a1.914 1.914 0 0 0 -3.274 0z", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]]); var IconBook = createPreactComponent("outline", "book", "Book", [["path", { "d": "M3 19a9 9 0 0 1 9 0a9 9 0 0 1 9 0", "key": "svg-0" }], ["path", { "d": "M3 6a9 9 0 0 1 9 0a9 9 0 0 1 9 0", "key": "svg-1" }], ["path", { "d": "M3 6l0 13", "key": "svg-2" }], ["path", { "d": "M12 6l0 13", "key": "svg-3" }], ["path", { "d": "M21 6l0 13", "key": "svg-4" }]]); var IconBrandChrome = createPreactComponent("outline", "brand-chrome", "BrandChrome", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 12m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-1" }], ["path", { "d": "M12 9h8.4", "key": "svg-2" }], ["path", { "d": "M14.598 13.5l-4.2 7.275", "key": "svg-3" }], ["path", { "d": "M9.402 13.5l-4.2 -7.275", "key": "svg-4" }]]); var IconBrandPatreon = createPreactComponent("outline", "brand-patreon", "BrandPatreon", [["path", { "d": "M20 8.408c-.003 -2.299 -1.746 -4.182 -3.79 -4.862c-2.54 -.844 -5.888 -.722 -8.312 .453c-2.939 1.425 -3.862 4.545 -3.896 7.656c-.028 2.559 .22 9.297 3.92 9.345c2.75 .036 3.159 -3.603 4.43 -5.356c.906 -1.247 2.071 -1.599 3.506 -1.963c2.465 -.627 4.146 -2.626 4.142 -5.273z", "key": "svg-0" }]]); var IconBrandTwitter = createPreactComponent("outline", "brand-twitter", "BrandTwitter", [["path", { "d": "M22 4.01c-1 .49 -1.98 .689 -3 .99c-1.121 -1.265 -2.783 -1.335 -4.38 -.737s-2.643 2.06 -2.62 3.737v1c-3.245 .083 -6.135 -1.395 -8 -4c0 0 -4.182 7.433 4 11c-1.872 1.247 -3.739 2.088 -6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58 -1.04 6.522 -3.723 7.651 -7.742a13.84 13.84 0 0 0 .497 -3.753c0 -.249 1.51 -2.772 1.818 -4.013z", "key": "svg-0" }]]); var IconCalendarWeek = createPreactComponent("outline", "calendar-week", "CalendarWeek", [["path", { "d": "M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12z", "key": "svg-0" }], ["path", { "d": "M16 3v4", "key": "svg-1" }], ["path", { "d": "M8 3v4", "key": "svg-2" }], ["path", { "d": "M4 11h16", "key": "svg-3" }], ["path", { "d": "M7 14h.013", "key": "svg-4" }], ["path", { "d": "M10.01 14h.005", "key": "svg-5" }], ["path", { "d": "M13.01 14h.005", "key": "svg-6" }], ["path", { "d": "M16.015 14h.005", "key": "svg-7" }], ["path", { "d": "M13.015 17h.005", "key": "svg-8" }], ["path", { "d": "M7.01 17h.005", "key": "svg-9" }], ["path", { "d": "M10.01 17h.005", "key": "svg-10" }]]); var IconChevronLeft = createPreactComponent("outline", "chevron-left", "ChevronLeft", [["path", { "d": "M15 6l-6 6l6 6", "key": "svg-0" }]]); var IconChevronRight = createPreactComponent("outline", "chevron-right", "ChevronRight", [["path", { "d": "M9 6l6 6l-6 6", "key": "svg-0" }]]); var IconCircleCheck = createPreactComponent("outline", "circle-check", "CircleCheck", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M9 12l2 2l4 -4", "key": "svg-1" }]]); var IconCircleX = createPreactComponent("outline", "circle-x", "CircleX", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M10 10l4 4m0 -4l-4 4", "key": "svg-1" }]]); var IconCloudDown = createPreactComponent("outline", "cloud-down", "CloudDown", [["path", { "d": "M12 18.004h-5.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.38 0 2.573 .813 3.13 1.99", "key": "svg-0" }], ["path", { "d": "M19 16v6", "key": "svg-1" }], ["path", { "d": "M22 19l-3 3l-3 -3", "key": "svg-2" }]]); var IconCloudUp = createPreactComponent("outline", "cloud-up", "CloudUp", [["path", { "d": "M12 18.004h-5.343c-2.572 -.004 -4.657 -2.011 -4.657 -4.487c0 -2.475 2.085 -4.482 4.657 -4.482c.393 -1.762 1.794 -3.2 3.675 -3.773c1.88 -.572 3.956 -.193 5.444 1c1.488 1.19 2.162 3.007 1.77 4.769h.99c1.38 0 2.57 .811 3.128 1.986", "key": "svg-0" }], ["path", { "d": "M19 22v-6", "key": "svg-1" }], ["path", { "d": "M22 19l-3 -3l-3 3", "key": "svg-2" }]]); var IconCopy = createPreactComponent("outline", "copy", "Copy", [["path", { "d": "M7 7m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z", "key": "svg-0" }], ["path", { "d": "M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1", "key": "svg-1" }]]); var IconDatabaseExport = createPreactComponent("outline", "database-export", "DatabaseExport", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c1.118 0 2.183 -.086 3.15 -.241", "key": "svg-1" }], ["path", { "d": "M20 12v-6", "key": "svg-2" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.157 0 .312 -.002 .466 -.005", "key": "svg-3" }], ["path", { "d": "M16 19h6", "key": "svg-4" }], ["path", { "d": "M19 16l3 3l-3 3", "key": "svg-5" }]]); var IconDatabaseImport = createPreactComponent("outline", "database-import", "DatabaseImport", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c.856 0 1.68 -.05 2.454 -.144m5.546 -2.856v-6", "key": "svg-1" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.171 0 .341 -.002 .51 -.006", "key": "svg-2" }], ["path", { "d": "M19 22v-6", "key": "svg-3" }], ["path", { "d": "M22 19l-3 -3l-3 3", "key": "svg-4" }]]); var IconDatabaseSearch = createPreactComponent("outline", "database-search", "DatabaseSearch", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3m8 -3.5v-5.5", "key": "svg-1" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3", "key": "svg-2" }], ["path", { "d": "M18 18m-3 0a3 3 0 1 0 6 0a3 3 0 1 0 -6 0", "key": "svg-3" }], ["path", { "d": "M20.2 20.2l1.8 1.8", "key": "svg-4" }]]); var IconDatabaseX = createPreactComponent("outline", "database-x", "DatabaseX", [["path", { "d": "M4 6c0 1.657 3.582 3 8 3s8 -1.343 8 -3s-3.582 -3 -8 -3s-8 1.343 -8 3", "key": "svg-0" }], ["path", { "d": "M4 6v6c0 1.657 3.582 3 8 3c.537 0 1.062 -.02 1.57 -.058", "key": "svg-1" }], ["path", { "d": "M20 13.5v-7.5", "key": "svg-2" }], ["path", { "d": "M4 12v6c0 1.657 3.582 3 8 3c.384 0 .762 -.01 1.132 -.03", "key": "svg-3" }], ["path", { "d": "M22 22l-5 -5", "key": "svg-4" }], ["path", { "d": "M17 22l5 -5", "key": "svg-5" }]]); var IconDatabase = createPreactComponent("outline", "database", "Database", [["path", { "d": "M12 6m-8 0a8 3 0 1 0 16 0a8 3 0 1 0 -16 0", "key": "svg-0" }], ["path", { "d": "M4 6v6a8 3 0 0 0 16 0v-6", "key": "svg-1" }], ["path", { "d": "M4 12v6a8 3 0 0 0 16 0v-6", "key": "svg-2" }]]); var IconDots = createPreactComponent("outline", "dots", "Dots", [["path", { "d": "M5 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-0" }], ["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-1" }], ["path", { "d": "M19 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }]]); var IconDownload = createPreactComponent("outline", "download", "Download", [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]]); var IconExclamationCircle = createPreactComponent("outline", "exclamation-circle", "ExclamationCircle", [["path", { "d": "M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9v4", "key": "svg-1" }], ["path", { "d": "M12 16v.01", "key": "svg-2" }]]); var IconEyeOff = createPreactComponent("outline", "eye-off", "EyeOff", [["path", { "d": "M10.585 10.587a2 2 0 0 0 2.829 2.828", "key": "svg-0" }], ["path", { "d": "M16.681 16.673a8.717 8.717 0 0 1 -4.681 1.327c-3.6 0 -6.6 -2 -9 -6c1.272 -2.12 2.712 -3.678 4.32 -4.674m2.86 -1.146a9.055 9.055 0 0 1 1.82 -.18c3.6 0 6.6 2 9 6c-.666 1.11 -1.379 2.067 -2.138 2.87", "key": "svg-1" }], ["path", { "d": "M3 3l18 18", "key": "svg-2" }]]); var IconEye = createPreactComponent("outline", "eye", "Eye", [["path", { "d": "M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0", "key": "svg-0" }], ["path", { "d": "M21 12c-2.4 4 -5.4 6 -9 6c-3.6 0 -6.6 -2 -9 -6c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6", "key": "svg-1" }]]); var IconFileDownload = createPreactComponent("outline", "file-download", "FileDownload", [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }], ["path", { "d": "M12 17v-6", "key": "svg-2" }], ["path", { "d": "M9.5 14.5l2.5 2.5l2.5 -2.5", "key": "svg-3" }]]); var IconFileText = createPreactComponent("outline", "file-text", "FileText", [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2z", "key": "svg-1" }], ["path", { "d": "M9 9l1 0", "key": "svg-2" }], ["path", { "d": "M9 13l6 0", "key": "svg-3" }], ["path", { "d": "M9 17l6 0", "key": "svg-4" }]]); var IconFileTypeJs = createPreactComponent("outline", "file-type-js", "FileTypeJs", [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M3 15h3v4.5a1.5 1.5 0 0 1 -3 0", "key": "svg-1" }], ["path", { "d": "M9 20.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1.25a.75 .75 0 0 1 .75 .75", "key": "svg-2" }], ["path", { "d": "M5 12v-7a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-1", "key": "svg-3" }]]); var IconFileZip = createPreactComponent("outline", "file-zip", "FileZip", [["path", { "d": "M6 20.735a2 2 0 0 1 -1 -1.735v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2h-1", "key": "svg-0" }], ["path", { "d": "M11 17a2 2 0 0 1 2 2v2a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-2a2 2 0 0 1 2 -2z", "key": "svg-1" }], ["path", { "d": "M11 5l-1 0", "key": "svg-2" }], ["path", { "d": "M13 7l-1 0", "key": "svg-3" }], ["path", { "d": "M11 9l-1 0", "key": "svg-4" }], ["path", { "d": "M13 11l-1 0", "key": "svg-5" }], ["path", { "d": "M11 13l-1 0", "key": "svg-6" }], ["path", { "d": "M13 15l-1 0", "key": "svg-7" }]]); var IconGif = createPreactComponent("outline", "gif", "Gif", [["path", { "d": "M8 8h-2a2 2 0 0 0 -2 2v4a2 2 0 0 0 2 2h2v-4h-1", "key": "svg-0" }], ["path", { "d": "M12 8v8", "key": "svg-1" }], ["path", { "d": "M16 12h3", "key": "svg-2" }], ["path", { "d": "M20 8h-4v8", "key": "svg-3" }]]); var IconHome = createPreactComponent("outline", "home", "Home", [["path", { "d": "M5 12l-2 0l9 -9l9 9l-2 0", "key": "svg-0" }], ["path", { "d": "M5 12v7a2 2 0 0 0 2 2h10a2 2 0 0 0 2 -2v-7", "key": "svg-1" }], ["path", { "d": "M9 21v-6a2 2 0 0 1 2 -2h2a2 2 0 0 1 2 2v6", "key": "svg-2" }]]); var IconInfoCircle = createPreactComponent("outline", "info-circle", "InfoCircle", [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 9h.01", "key": "svg-1" }], ["path", { "d": "M11 12h1v4h1", "key": "svg-2" }]]); var IconKey = createPreactComponent("outline", "key", "Key", [["path", { "d": "M16.555 3.843l3.602 3.602a2.877 2.877 0 0 1 0 4.069l-2.643 2.643a2.877 2.877 0 0 1 -4.069 0l-.301 -.301l-6.558 6.558a2 2 0 0 1 -1.239 .578l-.175 .008h-1.172a1 1 0 0 1 -.993 -.883l-.007 -.117v-1.172a2 2 0 0 1 .467 -1.284l.119 -.13l.414 -.414h2v-2h2v-2l2.144 -2.144l-.301 -.301a2.877 2.877 0 0 1 0 -4.069l2.643 -2.643a2.877 2.877 0 0 1 4.069 0z", "key": "svg-0" }], ["path", { "d": "M15 9h.01", "key": "svg-1" }]]); var IconLibraryPhoto = createPreactComponent("outline", "library-photo", "LibraryPhoto", [["path", { "d": "M7 3m0 2.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667z", "key": "svg-0" }], ["path", { "d": "M4.012 7.26a2.005 2.005 0 0 0 -1.012 1.737v10c0 1.1 .9 2 2 2h10c.75 0 1.158 -.385 1.5 -1", "key": "svg-1" }], ["path", { "d": "M17 7h.01", "key": "svg-2" }], ["path", { "d": "M7 13l3.644 -3.644a1.21 1.21 0 0 1 1.712 0l3.644 3.644", "key": "svg-3" }], ["path", { "d": "M15 12l1.644 -1.644a1.21 1.21 0 0 1 1.712 0l2.644 2.644", "key": "svg-4" }]]); var IconPhotoEdit = createPreactComponent("outline", "photo-edit", "PhotoEdit", [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M11 20h-4a3 3 0 0 1 -3 -3v-10a3 3 0 0 1 3 -3h10a3 3 0 0 1 3 3v4", "key": "svg-1" }], ["path", { "d": "M4 15l4 -4c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.31 -.298 .644 -.497 .987 -.596", "key": "svg-3" }], ["path", { "d": "M18.42 15.61a2.1 2.1 0 0 1 2.97 2.97l-3.39 3.42h-3v-3l3.42 -3.39z", "key": "svg-4" }]]); var IconPhoto = createPreactComponent("outline", "photo", "Photo", [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12z", "key": "svg-1" }], ["path", { "d": "M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-3" }]]); var IconPlayerStop = createPreactComponent("outline", "player-stop", "PlayerStop", [["path", { "d": "M5 5m0 2a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v10a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2z", "key": "svg-0" }]]); var IconRefresh = createPreactComponent("outline", "refresh", "Refresh", [["path", { "d": "M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4", "key": "svg-0" }], ["path", { "d": "M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4", "key": "svg-1" }]]); var IconRepeat = createPreactComponent("outline", "repeat", "Repeat", [["path", { "d": "M4 12v-3a3 3 0 0 1 3 -3h13m-3 -3l3 3l-3 3", "key": "svg-0" }], ["path", { "d": "M20 12v3a3 3 0 0 1 -3 3h-13m3 3l-3 -3l3 -3", "key": "svg-1" }]]); var IconRestore = createPreactComponent("outline", "restore", "Restore", [["path", { "d": "M3.06 13a9 9 0 1 0 .49 -4.087", "key": "svg-0" }], ["path", { "d": "M3 4.001v5h5", "key": "svg-1" }], ["path", { "d": "M12 12m-1 0a1 1 0 1 0 2 0a1 1 0 1 0 -2 0", "key": "svg-2" }]]); var IconSettings = createPreactComponent("outline", "settings", "Settings", [["path", { "d": "M10.325 4.317c.426 -1.756 2.924 -1.756 3.35 0a1.724 1.724 0 0 0 2.573 1.066c1.543 -.94 3.31 .826 2.37 2.37a1.724 1.724 0 0 0 1.065 2.572c1.756 .426 1.756 2.924 0 3.35a1.724 1.724 0 0 0 -1.066 2.573c.94 1.543 -.826 3.31 -2.37 2.37a1.724 1.724 0 0 0 -2.572 1.065c-.426 1.756 -2.924 1.756 -3.35 0a1.724 1.724 0 0 0 -2.573 -1.066c-1.543 .94 -3.31 -.826 -2.37 -2.37a1.724 1.724 0 0 0 -1.065 -2.572c-1.756 -.426 -1.756 -2.924 0 -3.35a1.724 1.724 0 0 0 1.066 -2.573c-.94 -1.543 .826 -3.31 2.37 -2.37c1 .608 2.296 .07 2.572 -1.065z", "key": "svg-0" }], ["path", { "d": "M9 12a3 3 0 1 0 6 0a3 3 0 0 0 -6 0", "key": "svg-1" }]]); var IconTags = createPreactComponent("outline", "tags", "Tags", [["path", { "d": "M3 8v4.172a2 2 0 0 0 .586 1.414l5.71 5.71a2.41 2.41 0 0 0 3.408 0l3.592 -3.592a2.41 2.41 0 0 0 0 -3.408l-5.71 -5.71a2 2 0 0 0 -1.414 -.586h-4.172a2 2 0 0 0 -2 2z", "key": "svg-0" }], ["path", { "d": "M18 19l1.592 -1.592a4.82 4.82 0 0 0 0 -6.816l-4.592 -4.592", "key": "svg-1" }], ["path", { "d": "M7 10h-.01", "key": "svg-2" }]]); var IconTrash = createPreactComponent("outline", "trash", "Trash", [["path", { "d": "M4 7l16 0", "key": "svg-0" }], ["path", { "d": "M10 11l0 6", "key": "svg-1" }], ["path", { "d": "M14 11l0 6", "key": "svg-2" }], ["path", { "d": "M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12", "key": "svg-3" }], ["path", { "d": "M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3", "key": "svg-4" }]]); var IconVideo = createPreactComponent("outline", "video", "Video", [["path", { "d": "M15 10l4.553 -2.276a1 1 0 0 1 1.447 .894v6.764a1 1 0 0 1 -1.447 .894l-4.553 -2.276v-4z", "key": "svg-0" }], ["path", { "d": "M3 6m0 2a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2z", "key": "svg-1" }]]); var IconWriting = createPreactComponent("outline", "writing", "Writing", [["path", { "d": "M20 17v-12c0 -1.121 -.879 -2 -2 -2s-2 .879 -2 2v12l2 2l2 -2z", "key": "svg-0" }], ["path", { "d": "M16 7h4", "key": "svg-1" }], ["path", { "d": "M18 19h-13a2 2 0 1 1 0 -4h4a2 2 0 1 0 0 -4h-3", "key": "svg-2" }]]); var IconX = createPreactComponent("outline", "x", "X", [["path", { "d": "M18 6l-12 12", "key": "svg-0" }], ["path", { "d": "M6 6l12 12", "key": "svg-1" }]]); var IconUserFilled = createPreactComponent("filled", "user-filled", "UserFilled", [["path", { "d": "M12 2a5 5 0 1 1 -5 5l.005 -.217a5 5 0 0 1 4.995 -4.783z", "key": "svg-0" }], ["path", { "d": "M14 14a5 5 0 0 1 5 5v1a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-1a5 5 0 0 1 5 -5h4z", "key": "svg-1" }]]); const ar = { "common": { "Abort": "إحباط", "Add": "إضافة", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "بيانات الحساب @{{username}} موجودة بالفعل في قاعدة البيانات. هل تريد استبدالها؟", "Advanced Settings": "الإعدادات المتقدمة", "All": "الكل", "All Groups": "جميع المجموعات", "Are you sure to clear all data in the database?": "هل أنت متأكد من مسح جميع البيانات في قاعدة البيانات؟", "Are you sure you want to delete account data? This action cannot be undone": "هل أنت متأكد من حذف بيانات {{username}}؟ لا يمكن التراجع عن هذا الإجراء.", "Are you sure you want to reset settings to defaults?": "هل أنت متأكد من إعادة تعيين الإعدادات إلى القيم الافتراضية؟", "Auth": "المصادقة", "Auth Token": "رمز المصادقة", "Back": "العودة", "Batch: {{page}}": "الدُفعة: {{page}}", "Cancel": "إلغاء", "Change Language": "تغيير اللغة", "Change Theme": "تغيير السمة", "Choose the server closest to your location for best performance": "اختر الخادم الأقرب إلى موقعك للحصول على أفضل أداء", "Chrome": "Chrome", "Clear": "مسح", "Close": "إغلاق", "Combined Examples:": "أمثلة مجمعة:", "Common Formats:": "التنسيقات الشائعة:", "Concurrent Downloads": "التنزيلات المتزامنة", "Convert & Download": "تحويل وتحميل", "Convert Animated GIFs": "تحويل GIF", "Convert GIFs (External)": "تحويل GIF (خارجي)", "Converting GIFs...": "...تحويل صور GIF", "Converting...": "جارٍ التحويل...", "Copied": "تم النسخ", "Copy": "نسخ", "Current Media: {{current}} • Total Media: {{total}}": "الوسائط الحالية: {{current}} • إجمالي الوسائط: {{total}}", "Dashboard": "لوحة المراقبة", "Database": "قاعدة البيانات", "Date Formats:": "تنسيقات التاريخ:", "Date Since": "تاريخ البدء", "Date Time Format": "تنسيق التاريخ والوقت", "Date Until": "تاريخ الانتهاء", "Delete": "حذف", "Delete Account Data": "حذف بيانات الحساب", "Delete selected group": "حذف المجموعة المحددة", "Deleting...": "...حذف", "Demo mode is only available for @xbatchdemo": "وضع العرض التجريبي متاح فقط لـ @xbatchdemo", "Download": "تحميل", "Downloading...": "تحميل...", "Empty dates will fetch all available media": "التواريخ الفارغة ستجلب جميع الوسائط المتاحة", "Enter your Patreon auth": "أدخل مصادقة Patreon الخاصة بك", "Enter your auth token": "أدخل رمز المصادقة الخاص بك", "Enter group name": "أدخل اسم المجموعة", "Error:": "خطأ:", "Export": "تصدير", "Exporting...": "...تصدير", "Failed to download media": "فشل في تحميل الوسائط", "Failed to fetch data": "فشل في جلب البيانات", "Failed to generate token": "فشل في إنشاء الرمز", "Failed to refresh tokens": "فشل في تحديث الرموز المميزة", "Clear dates": "مسح التواريخ", "Failed to load data": "فشل في تحميل البيانات", "Fetched in {{time}}": "تم الجلب في {{time}}", "Fetch": "جلب", "Fetch All": "جلب الكل", "Fetch GIF": "جلب GIF", "Fetch Image": "جلب الصورة", "Fetch Text": "جلب النص", "Fetch Video": "جلب الفيديو", "Fetching...": "...جارٍ الجلب", "Filter by Date Range": "التصفية حسب نطاق التاريخ", "First Page": "الصفحة الأولى", "Followers": "المتابعون", "Following": "المتابَعون", "Font Family": "نوع الخط", "GIF": "GIF", "Generate": "إنشاء", "Generate Auth Token": "إنشاء رمز المصادقة", "Generating token...": "جارٍ إنشاء الرمز...", "Global Settings": "الإعدادات العامة", "Group": "مجموعة", "Group Account": "حساب المجموعة", "HTTP error! status: {{status}}": "خطأ HTTP! الحالة: {{status}}", "Home": "الصفحة الرئيسية", "{{hours}}h ago": "منذ {{hours}}س", "{{minutes}}m ago": "منذ {{minutes}}د", "{{days}}d ago": "منذ {{days}}ي", "Image": "صورة", "Import": "استيراد", "Importing...": "...استيراد", "Include Retweets": "تضمين إعادة التغريد", "Invalid Patreon auth": "مصادقة Patreon غير صحيحة", "Invalid Patreon auth. Please check your settings.": "مصادقة Patreon غير صحيحة. يرجى التحقق من إعداداتك.", "Invalid auth token. Please check your settings.": "رمز المصادقة غير صحيح. يرجى التحقق من إعداداتك.", "Invalid username format": "تنسيق اسم المستخدم غير صحيح", "Just now": "الآن", "Joined": "تاريخ الانضمام", "Language": "اللغة", "Larger size, same quality": "حجم أكبر، نفس الجودة", "Last Page": "الصفحة الأخيرة", "Load Database": "تحميل قاعدة البيانات", "Load from database": "تحميل من قاعدة البيانات", "Localized": "محلي", "Media": "الوسائط", "Media: {{media}}": "الوسائط: {{media}}", "Need help with Auth Token? See": "بحاجة إلى مساعدة بخصوص رمز المصادقة؟ راجع", "Next": "التالي", "No accounts yet": "لا توجد حسابات بعد", "No content available": "لا يوجد محتوى متاح", "No media files found": "لم يتم العثور على ملفات وسائط", "Overwrite": "استبدال", "Overwrite Existing Data?": "استبدال البيانات الحالية؟", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "يمكن للأعضاء المدفوعين إنشاء رموز المصادقة تلقائيًا بعد التحقق من مصادقة Patreon—لا حاجة للبحث اليدوي.", "Patreon": "Patreon", "Patreon Auth": "مصادقة Patreon", "Patreon auth verified successfully": "تم التحقق من مصادقة Patreon بنجاح", "Please configure authentication in the Auth tab first": "يرجى تكوين المصادقة في علامة تبويب المصادقة أولاً", "Please enter Patreon auth first": "يرجى إدخال مصادقة Patreon أولاً", "Please verify Patreon auth first": "يرجى التحقق من مصادقة Patreon أولاً", "Please visit a profile page for auto-detection": "يرجى زيارة صفحة ملف شخصي للاكتشاف التلقائي", "Posts": "المنشورات", "Posts: {{posts}}": "المنشورات: {{posts}}", "Prev": "السابق", "Preview": "معاينة", "Refresh": "تحديث", "Refreshing": "جارٍ التحديث", "Report bugs or request features:": "أبلغ عن الأخطاء أو اطلب الميزات:", "Request timeout": "انتهت مهلة الطلب", "Reset": "إعادة تعيين", "Reset Settings": "إعادة تعيين الإعدادات", "Remove Group": "إزالة المجموعة", "Resume": "متابعة", "Server": "الخادم", "Server Timeout": "انتهاء وقت الخادم", "Select a group": "اختر مجموعة", "Select All": "تحديد الكل", "selected": "محدد", "More options": "خيارات إضافية", "Explore Database": "استكشاف قاعدة البيانات", "Settings": "الإعدادات", "Smaller size, same quality": "حجم أصغر، نفس الجودة", "Something went wrong.": "حدث خطأ ما.", "Sound Effects": "المؤثرات الصوتية", "Start": "بدء", "Stop": "إيقاف", "Stop Fetch": "إيقاف الجلب", "Subscribe": "اشترك", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "اشترك مقابل 5 دولارات على Patreon وسيتم إرسال رمز المصادقة الخاص بك تلقائيًا عبر البريد الإلكتروني في غضون دقائق قليلة.", "System Default": "افتراضي النظام", "Text": "نص", "Theme": "السمة", "Time Formats:": "تنسيقات الوقت:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "انتهاء وقت استجابة الخادم بالثواني. إنشاء رمز تلقائيًا في حالة انتهاء الوقت.", "Toggle visibility": "إظهار/إخفاء", "Token generated successfully": "تم إنشاء الرمز بنجاح ({{current}}/{{total}})", "Token generation failed. Please try again": "فشل إنشاء الرمز. يرجى المحاولة مرة أخرى", "Ungroup": "غير مجمعة", "Update": "تحديث", "Update will fetch the latest data and overwrite the database. Continue?": "سيقوم التحديث بجلب أحدث البيانات والكتابة فوق قاعدة البيانات. هل تريد المتابعة؟", "Updating...": "...جارٍ التحديث", "If downloads fail, use concurrent 1": "إذا فشلت التنزيلات، استخدم concurrent 1", "Use Dashboard to fetch data.": "استخدم لوحة المراقبة لجلب البيانات.", "Use code": "استخدم الرمز", "Userscript": "سكريبت المستخدم", "Verification failed. Please try again": "فشل التحقق. يرجى المحاولة مرة أخرى", "Verified": "تم التحقق", "Verify": "التحقق", "Verifying": "التحقق", "Version": "الإصدار", "Video": "فيديو", "for Patreon Auth, click Verify to unlock demo. Test at": 'لمصادقة Patreon، انقر "التحقق" لفتح العرض التجريبي. جرّب في', "the guide": "الدليل", "to get your Patreon Auth code and start downloading with ease!": "للحصول على رمز مصادقة Patreon والبدء في التنزيل بسهولة!" } }; const de = { "common": { "Abort": "Abbrechen", "Add": "Hinzufügen", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Kontodaten für @{{username}} existieren bereits in der Datenbank. Möchten Sie sie überschreiben?", "Advanced Settings": "Erweiterte Einstellungen", "All": "Alle", "All Groups": "Alle Gruppen", "Are you sure to clear all data in the database?": "Sind Sie sicher, dass Sie alle Daten in der Datenbank löschen möchten?", "Are you sure you want to delete account data? This action cannot be undone": "Sind Sie sicher, dass Sie die Daten von {{username}} löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", "Are you sure you want to reset settings to defaults?": "Sind Sie sicher, dass Sie die Einstellungen auf Standardwerte zurücksetzen möchten?", "Auth": "Authentifizierung", "Auth Token": "Auth-Token", "Back": "Zurück", "Batch: {{page}}": "Stapel: {{page}}", "Cancel": "Abbrechen", "Change Language": "Sprache ändern", "Change Theme": "Design ändern", "Choose the server closest to your location for best performance": "Wählen Sie den Server, der Ihrem Standort am nächsten ist, für die beste Leistung", "Chrome": "Chrome", "Clear": "Löschen", "Close": "Schließen", "Combined Examples:": "Kombinierte Beispiele:", "Common Formats:": "Häufige Formate:", "Concurrent Downloads": "Gleichzeitige Downloads", "Convert & Download": "Konvertieren & Herunterladen", "Convert Animated GIFs": "GIFs konvertieren", "Convert GIFs (External)": "GIFs konvertieren (Extern)", "Converting GIFs...": "GIFs werden konvertiert...", "Converting...": "Konvertieren...", "Copied": "Kopiert", "Copy": "Kopieren", "Current Media: {{current}} • Total Media: {{total}}": "Aktuelle Medien: {{current}} • Medien gesamt: {{total}}", "Dashboard": "Dashboard", "Database": "Datenbank", "Date Formats:": "Datumsformate:", "Date Since": "Datum Von", "Date Time Format": "Datum-Uhrzeit-Format", "Date Until": "Datum Bis", "Delete": "Löschen", "Delete Account Data": "Kontodaten löschen", "Delete selected group": "Ausgewählte Gruppe löschen", "Deleting...": "Löschen...", "Demo mode is only available for @xbatchdemo": "Der Demo-Modus ist nur für @xbatchdemo verfügbar", "Download": "Herunterladen", "Downloading...": "Herunterladen...", "Empty dates will fetch all available media": "Leere Daten holen alle verfügbaren Medien", "Enter your Patreon auth": "Geben Sie Ihre Patreon-Authentifizierung ein", "Enter your auth token": "Geben Sie Ihren Auth-Token ein", "Enter group name": "Gruppenname eingeben", "Error:": "Fehler:", "Export": "Exportieren", "Exporting...": "Exportieren...", "Failed to download media": "Medien konnten nicht heruntergeladen werden", "Failed to fetch data": "Daten konnten nicht abgerufen werden", "Failed to generate token": "Token-Generierung fehlgeschlagen", "Failed to refresh tokens": "Token-Aktualisierung fehlgeschlagen", "Clear dates": "Daten löschen", "Failed to load data": "Daten konnten nicht geladen werden", "Fetched in {{time}}": "Abgerufen in {{time}}", "Fetch": "Abrufen", "Fetch All": "Alles abrufen", "Fetch GIF": "GIF abrufen", "Fetch Image": "Bild abrufen", "Fetch Text": "Text abrufen", "Fetch Video": "Video abrufen", "Fetching...": "Abrufen...", "Filter by Date Range": "Nach Datumsbereich filtern", "First Page": "Erste Seite", "Followers": "Follower", "Following": "Folge ich", "Font Family": "Schriftart", "GIF": "GIF", "Generate": "Generieren", "Generate Auth Token": "Auth-Token generieren", "Generating token...": "Token wird generiert...", "Global Settings": "Globale Einstellungen", "Group": "Gruppe", "Group Account": "Konto gruppieren", "HTTP error! status: {{status}}": "HTTP-Fehler! Status: {{status}}", "Home": "Startseite", "{{hours}}h ago": "vor {{hours}}h", "{{minutes}}m ago": "vor {{minutes}}m", "{{days}}d ago": "vor {{days}}T", "Image": "Bild", "Import": "Importieren", "Importing...": "Importieren...", "Include Retweets": "Retweets einbeziehen", "Invalid Patreon auth": "Ungültige Patreon-Authentifizierung", "Invalid Patreon auth. Please check your settings.": "Ungültige Patreon-Authentifizierung. Bitte überprüfen Sie Ihre Einstellungen.", "Invalid auth token. Please check your settings.": "Ungültiger Auth-Token. Bitte überprüfen Sie Ihre Einstellungen.", "Invalid username format": "Ungültiges Benutzernamen-Format", "Just now": "Gerade eben", "Joined": "Beigetreten", "Language": "Sprache", "Larger size, same quality": "Größere Größe, gleiche Qualität", "Last Page": "Letzte Seite", "Load Database": "Datenbank laden", "Load from database": "Aus Datenbank laden", "Localized": "Lokalisiert", "Media": "Medien", "Media: {{media}}": "Medien: {{media}}", "Need help with Auth Token? See": "Benötigen Sie Hilfe mit dem Auth-Token? Siehe", "Next": "Weiter", "No accounts yet": "Noch keine Konten", "No content available": "Kein Inhalt verfügbar", "No media files found": "Keine Mediendateien gefunden", "Overwrite": "Überschreiben", "Overwrite Existing Data?": "Vorhandene Daten überschreiben?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Bezahlte Mitglieder können nach der Verifizierung der Patreon-Authentifizierung automatisch Authentifizierungstoken generieren—keine manuelle Suche erforderlich.", "Patreon": "Patreon", "Patreon Auth": "Patreon-Authentifizierung", "Patreon auth verified successfully": "Patreon-Authentifizierung erfolgreich überprüft", "Please configure authentication in the Auth tab first": "Bitte konfigurieren Sie zuerst die Authentifizierung im Auth-Tab", "Please enter Patreon auth first": "Bitte geben Sie zuerst die Patreon-Authentifizierung ein", "Please verify Patreon auth first": "Bitte überprüfen Sie zuerst die Patreon-Authentifizierung", "Please visit a profile page for auto-detection": "Bitte besuchen Sie eine Profilseite für die automatische Erkennung", "Posts": "Beiträge", "Posts: {{posts}}": "Beiträge: {{posts}}", "Prev": "Zurück", "Preview": "Vorschau", "Refresh": "Aktualisieren", "Refreshing": "Aktualisieren", "Report bugs or request features:": "Fehler melden oder Funktionen anfordern:", "Request timeout": "Anfrage-Timeout", "Reset": "Zurücksetzen", "Reset Settings": "Einstellungen zurücksetzen", "Remove Group": "Gruppe entfernen", "Resume": "Fortsetzen", "Server": "Server", "Server Timeout": "Server-Zeitüberschreitung", "Select a group": "Gruppe auswählen", "Select All": "Alle auswählen", "selected": "ausgewählt", "More options": "Weitere Optionen", "Explore Database": "Datenbank durchsuchen", "Settings": "Einstellungen", "Smaller size, same quality": "Kleinere Größe, gleiche Qualität", "Something went wrong.": "Etwas ist schief gelaufen.", "Sound Effects": "Soundeffekte", "Start": "Start", "Stop": "Stopp", "Stop Fetch": "Abruf stoppen", "Subscribe": "Abonnieren", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Abonnieren Sie für 5 $ auf Patreon und Ihr Authentifizierungscode wird Ihnen automatisch per E-Mail innerhalb weniger Minuten zugesandt.", "System Default": "Systemstandard", "Text": "Text", "Theme": "Design", "Time Formats:": "Zeitformate:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Zeitüberschreitung für Server-Antworten in Sekunden. Token automatisch generieren, wenn ein Timeout auftritt.", "Toggle visibility": "Ein-/Ausblenden", "Token generated successfully": "Token erfolgreich generiert ({{current}}/{{total}})", "Token generation failed. Please try again": "Token-Generierung fehlgeschlagen. Bitte versuchen Sie es erneut", "Ungroup": "Nicht gruppiert", "Update": "Aktualisieren", "Update will fetch the latest data and overwrite the database. Continue?": "Das Update holt die neuesten Daten und überschreibt die Datenbank. Fortfahren?", "Updating...": "Aktualisierung läuft...", "If downloads fail, use concurrent 1": "Wenn Downloads fehlschlagen, verwenden Sie concurrent 1", "Use Dashboard to fetch data.": "Verwenden Sie das Dashboard zum Abrufen von Daten.", "Use code": "Verwenden Sie den Code", "Userscript": "Benutzerskript", "Verification failed. Please try again": "Überprüfung fehlgeschlagen. Bitte versuchen Sie es erneut", "Verified": "Überprüft", "Verify": "Überprüfen", "Verifying": "Überprüfen", "Version": "Version", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": "für die Patreon-Authentifizierung, klicken Sie auf „Überprüfen“, um die Demo freizuschalten. Testen bei", "the guide": "die Anleitung", "to get your Patreon Auth code and start downloading with ease!": "um Ihren Patreon-Authentifizierungscode zu erhalten und mühelos mit dem Herunterladen zu beginnen!" } }; const en$1 = { "common": { "Abort": "Abort", "Add": "Add", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Account data for @{{username}} already exists in the database. Do you want to overwrite it?", "Advanced Settings": "Advanced Settings", "All": "All", "All Groups": "All Groups", "Are you sure to clear all data in the database?": "Are you sure to clear all data in the database?", "Are you sure you want to delete account data? This action cannot be undone": "Are you sure you want to delete {{username}}'s data? This action cannot be undone.", "Are you sure you want to reset settings to defaults?": "Are you sure you want to reset settings to defaults?", "Auth": "Auth", "Auth Token": "Auth Token", "Back": "Back", "Batch: {{page}}": "Batch: {{page}}", "Cancel": "Cancel", "Change Language": "Change Language", "Change Theme": "Change Theme", "Choose the server closest to your location for best performance": "Choose the server closest to your location for best performance", "Chrome": "Chrome", "Clear": "Clear", "Close": "Close", "Combined Examples:": "Combined Examples:", "Common Formats:": "Common Formats:", "Concurrent Downloads": "Concurrent Downloads", "Convert & Download": "Convert & Download", "Convert Animated GIFs": "Convert GIFs", "Convert GIFs (External)": "Convert GIFs (External)", "Converting GIFs...": "Converting GIFs...", "Converting...": "Converting...", "Copied": "Copied", "Copy": "Copy", "Current Media: {{current}} • Total Media: {{total}}": "Current Media: {{current}} • Total Media: {{total}}", "Dashboard": "Dashboard", "Database": "Database", "Date Formats:": "Date Formats:", "Date Since": "Date Since", "Date Time Format": "Date Time Format", "Date Until": "Date Until", "Delete": "Delete", "Delete Account Data": "Delete Account Data", "Delete selected group": "Delete selected group", "Deleting...": "Deleting...", "Demo mode is only available for @xbatchdemo": "Demo mode is only available for @xbatchdemo", "Download": "Download", "Downloading...": "Downloading...", "Empty dates will fetch all available media": "Empty dates will fetch all available media", "Enter your Patreon auth": "Enter your Patreon auth", "Enter your auth token": "Enter your auth token", "Enter group name": "Enter group name", "Error:": "Error:", "Export": "Export", "Exporting...": "Exporting...", "Failed to download media": "Failed to download media", "Failed to fetch data": "Failed to fetch data", "Failed to generate token": "Failed to generate token", "Failed to refresh tokens": "Failed to refresh tokens", "Clear dates": "Clear dates", "Failed to load data": "Failed to load data", "Fetched in {{time}}": "Fetched in {{time}}", "Fetch": "Fetch", "Fetch All": "Fetch All", "Fetch GIF": "Fetch GIF", "Fetch Image": "Fetch Image", "Fetch Text": "Fetch Text", "Fetch Video": "Fetch Video", "Fetching...": "Fetching...", "Filter by Date Range": "Filter by Date Range", "First Page": "First Page", "Followers": "Followers", "Following": "Following", "Font Family": "Font Family", "GIF": "GIF", "Generate": "Generate", "Generate Auth Token": "Generate Auth Token", "Generating token...": "Generating token...", "Global Settings": "Global Settings", "Group": "Group", "Group Account": "Group Account", "HTTP error! status: {{status}}": "HTTP error! status: {{status}}", "Home": "Home", "{{hours}}h ago": "{{hours}}h ago", "{{minutes}}m ago": "{{minutes}}m ago", "{{days}}d ago": "{{days}}d ago", "Image": "Image", "Import": "Import", "Importing...": "Importing...", "Include Retweets": "Include Retweets", "Invalid Patreon auth": "Invalid Patreon auth", "Invalid Patreon auth. Please check your settings.": "Invalid Patreon auth. Please check your settings.", "Invalid auth token. Please check your settings.": "Invalid auth token. Please check your settings.", "Invalid username format": "Invalid username format", "Just now": "Just now", "Joined": "Joined", "Language": "Language", "Larger size, same quality": "Larger size, same quality", "Last Page": "Last Page", "Load Database": "Load Database", "Load from database": "Load from database", "Localized": "Localized", "Media": "Media", "Media: {{media}}": "Media: {{media}}", "Need help with Auth Token? See": "Need help with Auth Token? See", "Next": "Next", "No accounts yet": "No accounts yet", "No content available": "No content available", "No media files found": "No media files found", "Overwrite": "Overwrite", "Overwrite Existing Data?": "Overwrite Existing Data?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.", "Patreon": "Patreon", "Patreon Auth": "Patreon Auth", "Patreon auth verified successfully": "Patreon auth verified successfully", "Please configure authentication in the Auth tab first": "Please configure authentication in the Auth tab first", "Please enter Patreon auth first": "Please enter Patreon auth first", "Please verify Patreon auth first": "Please verify Patreon auth first", "Please visit a profile page for auto-detection": "Please visit a profile page for auto-detection", "Posts": "Posts", "Posts: {{posts}}": "Posts: {{posts}}", "Prev": "Prev", "Preview": "Preview", "Refresh": "Refresh", "Refreshing": "Refreshing", "Report bugs or request features:": "Report bugs or request features:", "Request timeout": "Request timeout", "Reset": "Reset", "Reset Settings": "Reset Settings", "Remove Group": "Remove Group", "Resume": "Resume", "Server": "Server", "Server Timeout": "Server Timeout", "Select a group": "Select a group", "Select All": "Select All", "selected": "selected", "More options": "More options", "Explore Database": "Explore Database", "Settings": "Settings", "Smaller size, same quality": "Smaller size, same quality", "Something went wrong.": "Something went wrong.", "Sound Effects": "Sound Effects", "Start": "Start", "Stop": "Stop", "Stop Fetch": "Stop Fetch", "Subscribe": "Subscribe", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.", "System Default": "System Default", "Text": "Text", "Theme": "Theme", "Time Formats:": "Time Formats:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Timeout for server responses in seconds. Auto-generate token if timeout occurs.", "Toggle visibility": "Toggle visibility", "Token generated successfully": "Token generated successfully ({{current}}/{{total}})", "Token generation failed. Please try again": "Token generation failed. Please try again", "Ungroup": "Ungroup", "Update": "Update", "Update will fetch the latest data and overwrite the database. Continue?": "Update will fetch the latest data and overwrite the database. Continue?", "Updating...": "Updating...", "If downloads fail, use concurrent 1": "If downloads fail, use concurrent 1", "Use Dashboard to fetch data.": "Use Dashboard to fetch data.", "Use code": "Use code", "Userscript": "Userscript", "Verification failed. Please try again": "Verification failed. Please try again", "Verified": "Verified", "Verify": "Verify", "Verifying": "Verifying", "Version": "Version", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": "for Patreon Auth, click Verify to unlock demo. Test at", "the guide": "the guide", "to get your Patreon Auth code and start downloading with ease!": "to get your Patreon Auth code and start downloading with ease!" } }; const es = { "common": { "Abort": "Abortar", "Add": "Añadir", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Los datos de la cuenta @{{username}} ya existen en la base de datos. ¿Deseas sobrescribirlos?", "Advanced Settings": "Configuración avanzada", "All": "Todo", "All Groups": "Todos los Grupos", "Are you sure to clear all data in the database?": "¿Estás seguro de que quieres borrar todos los datos de la base de datos?", "Are you sure you want to delete account data? This action cannot be undone": "¿Seguro que quieres eliminar los datos de {{username}}? Esta acción no se puede deshacer.", "Are you sure you want to reset settings to defaults?": "¿Seguro que quieres restablecer los ajustes a los valores predeterminados?", "Auth": "Autenticación", "Auth Token": "Token de autenticación", "Back": "Atrás", "Batch: {{page}}": "Lote: {{page}}", "Cancel": "Cancelar", "Change Language": "Cambiar idioma", "Change Theme": "Cambiar Tema", "Choose the server closest to your location for best performance": "Elija el servidor más cercano a su ubicación para un mejor rendimiento", "Chrome": "Chrome", "Clear": "Limpiar", "Close": "Cerrar", "Combined Examples:": "Ejemplos Combinados:", "Common Formats:": "Formatos Comunes:", "Concurrent Downloads": "Descargas simultáneas", "Convert & Download": "Convertir y descargar", "Convert Animated GIFs": "Convertir GIFs", "Convert GIFs (External)": "Convertir GIFs (Externo)", "Converting GIFs...": "Convirtiendo GIF...", "Converting...": "Convirtiendo...", "Copied": "Copiado", "Copy": "Copiar", "Current Media: {{current}} • Total Media: {{total}}": "Medios actuales: {{current}} • Medios totales: {{total}}", "Dashboard": "Panel de Control", "Database": "Base de Datos", "Date Formats:": "Formatos de Fecha:", "Date Since": "Fecha Desde", "Date Time Format": "Formato de Fecha y Hora", "Date Until": "Fecha Hasta", "Delete": "Eliminar", "Delete Account Data": "Eliminar datos de la cuenta", "Delete selected group": "Eliminar grupo seleccionado", "Deleting...": "Eliminando...", "Demo mode is only available for @xbatchdemo": "El modo demo solo está disponible para @xbatchdemo", "Download": "Descargar", "Downloading...": "Descargando...", "Empty dates will fetch all available media": "Fechas vacías obtendrán todos los medios disponibles", "Enter your Patreon auth": "Introduce tu autenticación de Patreon", "Enter your auth token": "Introduce tu token de autenticación", "Enter group name": "Ingrese el nombre del grupo", "Error:": "Error:", "Export": "Exportar", "Exporting...": "Exportando...", "Failed to download media": "Error al descargar los medios", "Failed to fetch data": "Error al obtener los datos", "Failed to generate token": "Error al generar el token", "Failed to refresh tokens": "Error al actualizar los tokens", "Clear dates": "Borrar fechas", "Failed to load data": "Error al cargar los datos", "Fetched in {{time}}": "Obtenido en {{time}}", "Fetch": "Obtener", "Fetch All": "Obtener todo", "Fetch GIF": "Obtener GIF", "Fetch Image": "Obtener imagen", "Fetch Text": "Obtener texto", "Fetch Video": "Obtener video", "Fetching...": "Obteniendo...", "Filter by Date Range": "Filtrar por rango de fechas", "First Page": "Primera Página", "Followers": "Seguidores", "Following": "Siguiendo", "Font Family": "Familia de Fuente", "GIF": "GIF", "Generate": "Generar", "Generate Auth Token": "Generar Token de Autenticación", "Generating token...": "Generando token...", "Global Settings": "Configuración Global", "Group": "Grupo", "Group Account": "Agrupar Cuenta", "HTTP error! status: {{status}}": "¡Error HTTP! estado: {{status}}", "Home": "Inicio", "{{hours}}h ago": "hace {{hours}}h", "{{minutes}}m ago": "hace {{minutes}}m", "{{days}}d ago": "hace {{days}}d", "Image": "Imagen", "Import": "Importar", "Importing...": "Importando...", "Include Retweets": "Incluir Retweets", "Invalid Patreon auth": "Autenticación de Patreon no válida", "Invalid Patreon auth. Please check your settings.": "Autenticación de Patreon no válida. Por favor, revisa tu configuración.", "Invalid auth token. Please check your settings.": "Token de autenticación no válido. Por favor, revisa tu configuración.", "Invalid username format": "Formato de nombre de usuario no válido", "Just now": "Ahora mismo", "Joined": "Se unió", "Language": "Idioma", "Larger size, same quality": "Tamaño más grande, misma calidad", "Last Page": "Última Página", "Load Database": "Cargar Base de Datos", "Load from database": "Cargar desde base de datos", "Localized": "Localizado", "Media": "Medios", "Media: {{media}}": "Medios: {{media}}", "Need help with Auth Token? See": "¿Necesitas ayuda con el token de autenticación? Consulta", "Next": "Siguiente", "No accounts yet": "Todavía no hay cuentas", "No content available": "No hay contenido disponible", "No media files found": "No se encontraron archivos multimedia", "Overwrite": "Sobrescribir", "Overwrite Existing Data?": "¿Sobrescribir datos existentes?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Los miembros de pago pueden generar automáticamente tokens de autenticación después de verificar la autenticación de Patreon—no se requiere búsqueda manual.", "Patreon": "Patreon", "Patreon Auth": "Autenticación de Patreon", "Patreon auth verified successfully": "Autenticación de Patreon verificada correctamente", "Please configure authentication in the Auth tab first": "Configura la autenticación en la pestaña Auth primero", "Please enter Patreon auth first": "Introduce primero la autenticación de Patreon", "Please verify Patreon auth first": "Verifica primero la autenticación de Patreon", "Please visit a profile page for auto-detection": "Visita una página de perfil para detección automática", "Posts": "Publicaciones", "Posts: {{posts}}": "Publicaciones: {{posts}}", "Prev": "Anterior", "Preview": "Vista previa", "Refresh": "Actualizar", "Refreshing": "Actualizando", "Report bugs or request features:": "Informa errores o solicita funciones:", "Request timeout": "Tiempo de espera agotado", "Reset": "Restablecer", "Reset Settings": "Restablecer ajustes", "Remove Group": "Quitar Grupo", "Resume": "Reanudar", "Server": "Servidor", "Server Timeout": "Tiempo de espera del servidor", "Select a group": "Seleccionar un grupo", "Select All": "Seleccionar todo", "selected": "seleccionado", "More options": "Más opciones", "Explore Database": "Explorar base de datos", "Settings": "Configuración", "Smaller size, same quality": "Tamaño más pequeño, misma calidad", "Something went wrong.": "Algo salió mal.", "Sound Effects": "Efectos de Sonido", "Start": "Iniciar", "Stop": "Detener", "Stop Fetch": "Detener Obtención", "Subscribe": "Suscríbete", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Suscríbete por $5 en Patreon y tu código de autenticación se te enviará automáticamente por correo electrónico en unos minutos.", "System Default": "Predeterminado del Sistema", "Text": "Texto", "Theme": "Tema", "Time Formats:": "Formatos de Hora:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Tiempo de espera para respuestas del servidor en segundos. Generar token automáticamente si ocurre un tiempo de espera.", "Toggle visibility": "Mostrar/ocultar", "Token generated successfully": "Token generado correctamente ({{current}}/{{total}})", "Token generation failed. Please try again": "La generación del token falló. Inténtalo de nuevo", "Ungroup": "Sin Grupo", "Update": "Actualizar", "Update will fetch the latest data and overwrite the database. Continue?": "La actualización obtendrá los datos más recientes y sobrescribirá la base de datos. ¿Continuar?", "Updating...": "Actualizando...", "If downloads fail, use concurrent 1": "Si las descargas fallan, usa concurrent 1", "Use Dashboard to fetch data.": "Usa el Panel de Control para obtener datos.", "Use code": "Usa el código", "Userscript": "Script de usuario", "Verification failed. Please try again": "La verificación falló. Inténtalo de nuevo", "Verified": "Verificado", "Verify": "Verificar", "Verifying": "Verificando", "Version": "Versión", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": 'para la Autenticación de Patreon, haz clic en "Verificar" para desbloquear la demo. Prueba en', "the guide": "la guía", "to get your Patreon Auth code and start downloading with ease!": "para obtener tu código de autenticación de Patreon y empezar a descargar fácilmente." } }; const fil = { "common": { "Abort": "Itigil", "Add": "Idagdag", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Ang account data para kay @{{username}} ay umiiral na sa database. Gusto mo bang i-overwrite ito?", "Advanced Settings": "Mga Advanced na Setting", "All": "Lahat", "All Groups": "Lahat ng Grupo", "Are you sure to clear all data in the database?": "Sigurado ka bang buburahin ang lahat ng data sa database?", "Are you sure you want to delete account data? This action cannot be undone": "Sigurado ka bang buburahin ang data ni {{username}}? Hindi na ito maaaring ibalik.", "Are you sure you want to reset settings to defaults?": "Sigurado ka bang gusto mong i-reset ang mga setting sa default?", "Auth": "Awtorisasyon", "Auth Token": "Auth Token", "Back": "Bumalik", "Batch: {{page}}": "Batch: {{page}}", "Cancel": "Kanselahin", "Change Language": "Baguhin ang Wika", "Change Theme": "Baguhin ang Tema", "Choose the server closest to your location for best performance": "Piliin ang server na pinakamalapit sa iyong lokasyon para sa pinakamahusay na pagganap", "Chrome": "Chrome", "Clear": "Burahin", "Close": "Isara", "Combined Examples:": "Pinagsama-samang Mga Halimbawa:", "Common Formats:": "Karaniwang Mga Format:", "Concurrent Downloads": "Sabay-sabay na Pag-download", "Convert & Download": "I-convert at I-download", "Convert Animated GIFs": "I-convert ang GIF", "Convert GIFs (External)": "I-convert ang GIF (External)", "Converting GIFs...": "Kino-convert ang mga GIF...", "Converting...": "Kino-convert...", "Copied": "Nakopya", "Copy": "Kopyahin", "Current Media: {{current}} • Total Media: {{total}}": "Kasalukuyang Media: {{current}} • Kabuuang Media: {{total}}", "Dashboard": "Dashboard", "Database": "Database", "Date Formats:": "Mga Format ng Petsa:", "Date Since": "Petsa Mula", "Date Time Format": "Format ng Petsa at Oras", "Date Until": "Petsa Hanggang", "Delete": "Burahin", "Delete Account Data": "Burahin ang Account Data", "Delete selected group": "Tanggalin ang napiling grupo", "Deleting...": "Binubura...", "Demo mode is only available for @xbatchdemo": "Ang demo mode ay available lang para sa @xbatchdemo", "Download": "I-download", "Downloading...": "Nagda-download...", "Empty dates will fetch all available media": "Walang petsa ay kukuha ng lahat ng available na media", "Enter your Patreon auth": "Ilagay ang iyong Patreon auth", "Enter your auth token": "Ilagay ang iyong auth token", "Enter group name": "Ilagay ang pangalan ng grupo", "Error:": "Error:", "Export": "Mag-export", "Exporting...": "Nag-eexport...", "Failed to download media": "Nabigong i-download ang media", "Failed to fetch data": "Nabigong kunin ang data", "Failed to generate token": "Nabigong gumawa ng token", "Failed to refresh tokens": "Nabigong i-refresh ang mga token", "Clear dates": "I-clear ang mga petsa", "Failed to load data": "Nabigong mag-load ng data", "Fetched in {{time}}": "Nakuha sa {{time}}", "Fetch": "Kunin", "Fetch All": "Kunin Lahat", "Fetch GIF": "Kunin ang GIF", "Fetch Image": "Kunin ang Larawan", "Fetch Text": "Kunin ang Teksto", "Fetch Video": "Kunin ang Video", "Fetching...": "Kumukuha...", "Filter by Date Range": "I-filter ayon sa Hanay ng Petsa", "First Page": "Unang Pahina", "Followers": "Mga Tagasunod", "Following": "Sinusundan", "Font Family": "Uri ng Font", "GIF": "GIF", "Generate": "Gumawa", "Generate Auth Token": "Gumawa ng Auth Token", "Generating token...": "Gumagawa ng token...", "Global Settings": "Pandaigdigang Mga Setting", "Group": "Grupo", "Group Account": "Grupo ng Account", "HTTP error! status: {{status}}": "HTTP error! status: {{status}}", "Home": "Home", "{{hours}}h ago": "{{hours}}h na ang nakalipas", "{{minutes}}m ago": "{{minutes}}m na ang nakalipas", "{{days}}d ago": "{{days}}d na ang nakalipas", "Image": "Larawan", "Import": "Mag-import", "Importing...": "Nag-iimport...", "Include Retweets": "Isama ang mga Retweet", "Invalid Patreon auth": "Di-wastong Patreon auth", "Invalid Patreon auth. Please check your settings.": "Di-wastong Patreon auth. Mangyaring suriin ang iyong mga setting.", "Invalid auth token. Please check your settings.": "Di-wastong auth token. Mangyaring suriin ang iyong mga setting.", "Invalid username format": "Di-wastong format ng username", "Just now": "Ngayon lang", "Joined": "Sumali", "Language": "Wika", "Larger size, same quality": "Mas malaking laki, parehong kalidad", "Last Page": "Huling Pahina", "Load Database": "Mag-load ng Database", "Load from database": "Mag-load mula sa database", "Localized": "Naka-localize", "Media": "Media", "Media: {{media}}": "Media: {{media}}", "Need help with Auth Token? See": "Kailangan ng tulong sa Auth Token? Tingnan ang", "Next": "Susunod", "No accounts yet": "Wala pang mga account", "No content available": "Walang available na content", "No media files found": "Walang nahanap na media files", "Overwrite": "I-overwrite", "Overwrite Existing Data?": "I-overwrite ang Existing Data?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Ang mga paid member ay maaaring awtomatikong makagawa ng auth tokens pagkatapos i-verify ang Patreon auth—hindi na kailangan ng manual na paghahanap.", "Patreon": "Patreon", "Patreon Auth": "Patreon Auth", "Patreon auth verified successfully": "Matagumpay na na-verify ang Patreon auth", "Please configure authentication in the Auth tab first": "Mangyaring i-configure muna ang authentication sa Auth tab", "Please enter Patreon auth first": "Mangyaring ilagay muna ang Patreon auth", "Please verify Patreon auth first": "Mangyaring i-verify muna ang Patreon auth", "Please visit a profile page for auto-detection": "Mangyaring bumisita sa isang profile page para sa auto-detection", "Posts": "Mga Post", "Posts: {{posts}}": "Mga Post: {{posts}}", "Prev": "Nakaraan", "Preview": "Preview", "Refresh": "I-refresh", "Refreshing": "Nagre-refresh", "Report bugs or request features:": "Mag-ulat ng mga bug o humingi ng mga feature:", "Request timeout": "Nag-expire ang request", "Reset": "I-reset", "Reset Settings": "I-reset ang mga Setting", "Remove Group": "Tanggalin ang Grupo", "Resume": "Ipagpatuloy", "Server": "Server", "Server Timeout": "Server Timeout", "Select a group": "Pumili ng grupo", "Select All": "Piliin Lahat", "selected": "napili", "More options": "Higit pang mga opsyon", "Explore Database": "Tuklasin ang Database", "Settings": "Mga Setting", "Smaller size, same quality": "Mas maliit na laki, parehong kalidad", "Something went wrong.": "May nangyaring mali.", "Sound Effects": "Mga Epekto ng Tunog", "Start": "Simulan", "Stop": "Itigil", "Stop Fetch": "Itigil ang Pagkuha", "Subscribe": "Mag-subscribe", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Mag-subscribe sa $5 sa Patreon at awtomatikong ipapadala sa iyo ang iyong auth code sa loob ng ilang minuto.", "System Default": "Default ng Sistema", "Text": "Teksto", "Theme": "Tema", "Time Formats:": "Mga Format ng Oras:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Timeout para sa mga server response sa segundo. Awtomatikong gumawa ng token kung may timeout.", "Toggle visibility": "I-toggle ang visibility", "Token generated successfully": "Matagumpay na nagawa ang token ({{current}}/{{total}})", "Token generation failed. Please try again": "Nabigo ang paggawa ng token. Mangyaring subukan muli", "Ungroup": "Walang Grupo", "Update": "I-update", "Update will fetch the latest data and overwrite the database. Continue?": "Ang update ay kukuha ng pinakabagong data at i-overwrite ang database. Magpatuloy?", "Updating...": "Nag-uupdate...", "If downloads fail, use concurrent 1": "Kung nabigo ang mga download, gumamit ng concurrent 1", "Use Dashboard to fetch data.": "Gamitin ang Dashboard para kunin ang data.", "Use code": "Gamitin ang code", "Userscript": "Userscript", "Verification failed. Please try again": "Nabigo ang verification. Mangyaring subukan muli", "Verified": "Na-verify na", "Verify": "I-verify", "Verifying": "Vine-verify", "Version": "Bersyon", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": "para sa Patreon Auth, i-click ang Verify para i-unlock ang demo. Subukan sa", "the guide": "gabay", "to get your Patreon Auth code and start downloading with ease!": "para makuha ang iyong Patreon Auth code at magsimulang mag-download nang madali!" } }; const fr = { "common": { "Abort": "Abandonner", "Add": "Ajouter", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Les données du compte @{{username}} existent déjà dans la base de données. Voulez-vous les écraser ?", "Advanced Settings": "Paramètres avancés", "All": "Tout", "All Groups": "Tous les Groupes", "Are you sure to clear all data in the database?": "Êtes-vous sûr de vouloir effacer toutes les données de la base ?", "Are you sure you want to delete account data? This action cannot be undone": "Êtes-vous sûr de vouloir supprimer les données de {{username}} ? Cette action ne peut pas être annulée.", "Are you sure you want to reset settings to defaults?": "Êtes-vous sûr de vouloir réinitialiser les paramètres par défaut ?", "Auth": "Authentification", "Auth Token": "Token d'authentification", "Back": "Retour", "Batch: {{page}}": "Lot : {{page}}", "Cancel": "Annuler", "Change Language": "Changer la langue", "Change Theme": "Changer le thème", "Choose the server closest to your location for best performance": "Choisissez le serveur le plus proche de votre emplacement pour de meilleures performances", "Chrome": "Chrome", "Clear": "Effacer", "Close": "Fermer", "Combined Examples:": "Exemples combinés :", "Common Formats:": "Formats courants :", "Concurrent Downloads": "Téléchargements simultanés", "Convert & Download": "Convertir et télécharger", "Convert Animated GIFs": "Convertir des GIFs", "Convert GIFs (External)": "Convertir des GIFs (Externe)", "Converting GIFs...": "Conversion des GIFs...", "Converting...": "Conversion...", "Copied": "Copié", "Copy": "Copier", "Current Media: {{current}} • Total Media: {{total}}": "Médias actuels : {{current}} • Médias totaux : {{total}}", "Dashboard": "Tableau de bord", "Database": "Base de données", "Date Formats:": "Formats de date :", "Date Since": "Date Depuis", "Date Time Format": "Format date et heure", "Date Until": "Date Jusqu'à", "Delete": "Supprimer", "Delete Account Data": "Supprimer les données du compte", "Delete selected group": "Supprimer le groupe sélectionné", "Deleting...": "Suppression...", "Demo mode is only available for @xbatchdemo": "Le mode démo est uniquement disponible pour @xbatchdemo", "Download": "Télécharger", "Downloading...": "Téléchargement...", "Empty dates will fetch all available media": "Dates vides récupéreront tous les médias disponibles", "Enter your Patreon auth": "Entrez votre authentification Patreon", "Enter your auth token": "Entrez votre token d'authentification", "Enter group name": "Entrez le nom du groupe", "Error:": "Erreur :", "Export": "Exporter", "Exporting...": "Exportation...", "Failed to download media": "Échec de téléchargement des médias", "Failed to fetch data": "Échec de récupération des données", "Failed to generate token": "Échec de génération du token", "Failed to refresh tokens": "Échec de l'actualisation des tokens", "Clear dates": "Effacer les dates", "Failed to load data": "Échec du chargement des données", "Fetched in {{time}}": "Récupéré en {{time}}", "Fetch": "Récupérer", "Fetch All": "Tout récupérer", "Fetch GIF": "Récupérer le GIF", "Fetch Image": "Récupérer l'image", "Fetch Text": "Récupérer le texte", "Fetch Video": "Récupérer la vidéo", "Fetching...": "Récupération...", "Filter by Date Range": "Filtrer par plage de dates", "First Page": "Première Page", "Followers": "Abonnés", "Following": "Abonnements", "Font Family": "Famille de Police", "GIF": "GIF", "Generate": "Générer", "Generate Auth Token": "Générer un Token d'Authentification", "Generating token...": "Génération du jeton...", "Global Settings": "Paramètres globaux", "Group": "Groupe", "Group Account": "Grouper le Compte", "HTTP error! status: {{status}}": "Erreur HTTP ! statut : {{status}}", "Home": "Accueil", "{{hours}}h ago": "il y a {{hours}}h", "{{minutes}}m ago": "il y a {{minutes}}m", "{{days}}d ago": "il y a {{days}}j", "Image": "Image", "Import": "Importer", "Importing...": "Importation...", "Include Retweets": "Inclure les retweets", "Invalid Patreon auth": "Authentification Patreon invalide", "Invalid Patreon auth. Please check your settings.": "Authentification Patreon invalide. Veuillez vérifier vos paramètres.", "Invalid auth token. Please check your settings.": "Token d'authentification invalide. Veuillez vérifier vos paramètres.", "Invalid username format": "Format de nom d'utilisateur invalide", "Just now": "À l'instant", "Joined": "Inscrit", "Language": "Langue", "Larger size, same quality": "Taille plus grande, même qualité", "Last Page": "Dernière Page", "Load Database": "Charger la base de données", "Load from database": "Charger depuis la base de données", "Localized": "Localisé", "Media": "Médias", "Media: {{media}}": "Médias : {{media}}", "Need help with Auth Token? See": "Besoin d’aide avec le jeton d’authentification ? Voir", "Next": "Suivant", "No accounts yet": "Aucun compte pour le moment", "No content available": "Aucun contenu disponible", "No media files found": "Aucun fichier multimédia trouvé", "Overwrite": "Écraser", "Overwrite Existing Data?": "Écraser les données existantes ?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Les membres payants peuvent générer automatiquement des jetons d'authentification après avoir vérifié l'authentification Patreon—aucune recherche manuelle requise.", "Patreon": "Patreon", "Patreon Auth": "Authentification Patreon", "Patreon auth verified successfully": "Authentification Patreon vérifiée avec succès", "Please configure authentication in the Auth tab first": "Veuillez d'abord configurer l'authentification dans l'onglet Auth", "Please enter Patreon auth first": "Veuillez d'abord saisir l'authentification Patreon", "Please verify Patreon auth first": "Veuillez d'abord vérifier l'authentification Patreon", "Please visit a profile page for auto-detection": "Veuillez visiter une page de profil pour la détection automatique", "Posts": "Publications", "Posts: {{posts}}": "Publications : {{posts}}", "Prev": "Précédent", "Preview": "Aperçu", "Refresh": "Actualiser", "Refreshing": "Actualisation", "Report bugs or request features:": "Signalez des bugs ou demandez des fonctionnalités :", "Request timeout": "Délai d'attente dépassé", "Reset": "Réinitialiser", "Reset Settings": "Réinitialiser les paramètres", "Remove Group": "Retirer le Groupe", "Resume": "Reprendre", "Server": "Serveur", "Server Timeout": "Délai d'expiration du serveur", "Select a group": "Sélectionner un groupe", "Select All": "Tout sélectionner", "selected": "sélectionné", "More options": "Plus d'options", "Explore Database": "Explorer la base de données", "Settings": "Paramètres", "Smaller size, same quality": "Taille plus petite, même qualité", "Something went wrong.": "Quelque chose s'est mal passé.", "Sound Effects": "Effets Sonores", "Start": "Démarrer", "Stop": "Arrêter", "Stop Fetch": "Arrêter la Récupération", "Subscribe": "S’abonner", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Abonnez-vous pour 5 $ sur Patreon et votre code d'authentification vous sera automatiquement envoyé par e-mail dans quelques minutes.", "System Default": "Par Défaut du Système", "Text": "Texte", "Theme": "Thème", "Time Formats:": "Formats d'heure :", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Délai d'expiration pour les réponses du serveur en secondes. Générer automatiquement un jeton en cas de dépassement du délai.", "Toggle visibility": "Afficher/masquer", "Token generated successfully": "Token généré avec succès ({{current}}/{{total}})", "Token generation failed. Please try again": "Échec de génération du token. Veuillez réessayer", "Ungroup": "Sans Groupe", "Update": "Mettre à jour", "Update will fetch the latest data and overwrite the database. Continue?": "La mise à jour récupérera les dernières données et écrasera la base de données. Continuer ?", "Updating...": "Mise à jour en cours...", "If downloads fail, use concurrent 1": "Si les téléchargements échouent, utilisez concurrent 1", "Use Dashboard to fetch data.": "Utilisez le Tableau de bord pour récupérer les données.", "Use code": "Utilisez le code", "Userscript": "Script utilisateur", "Verification failed. Please try again": "Échec de vérification. Veuillez réessayer", "Verified": "Vérifié", "Verify": "Vérifier", "Verifying": "Vérification", "Version": "Version", "Video": "Vidéo", "for Patreon Auth, click Verify to unlock demo. Test at": "pour l’authentification Patreon, cliquez sur « Vérifier » pour déverrouiller la démo. Testez sur", "the guide": "le guide", "to get your Patreon Auth code and start downloading with ease!": "pour obtenir votre code d’authentification Patreon et commencer à télécharger facilement !" } }; const hi = { "common": { "Abort": "रद्द करें", "Add": "जोड़ें", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}} के लिए खाता डेटा पहले से ही डेटाबेस में मौजूद है। क्या आप इसे ओवरराइट करना चाहते हैं?", "Advanced Settings": "उन्नत सेटिंग्स", "All": "सभी", "All Groups": "सभी समूह", "Are you sure to clear all data in the database?": "क्या आप वाकई डेटाबेस का सारा डेटा साफ़ करना चाहते हैं?", "Are you sure you want to delete account data? This action cannot be undone": "क्या आप वाकई {{username}} का डेटा हटाना चाहते हैं? यह क्रिया वापस नहीं की जा सकती।", "Are you sure you want to reset settings to defaults?": "क्या आप वाकई सेटिंग्स को डिफ़ॉल्ट पर रीसेट करना चाहते हैं?", "Auth": "प्रमाणीकरण", "Auth Token": "ऑथ टोकन", "Back": "वापस", "Batch: {{page}}": "बैच: {{page}}", "Cancel": "रद्द करें", "Change Language": "भाषा बदलें", "Change Theme": "थीम बदलें", "Choose the server closest to your location for best performance": "सर्वोत्तम प्रदर्शन के लिए अपने स्थान के निकटतम सर्वर चुनें", "Chrome": "Chrome", "Clear": "साफ़ करें", "Close": "बंद करें", "Combined Examples:": "संयुक्त उदाहरण:", "Common Formats:": "सामान्य प्रारूप:", "Concurrent Downloads": "समकालिक डाउनलोड", "Convert & Download": "कन्वर्ट करें और डाउनलोड करें", "Convert Animated GIFs": "GIFs कन्वर्ट करें", "Convert GIFs (External)": "GIFs कन्वर्ट करें (बाहरी)", "Converting GIFs...": "GIFs कन्वर्ट हो रहे हैं...", "Converting...": "कन्वर्ट हो रहा है...", "Copied": "कॉपी किया गया", "Copy": "कॉपी करें", "Current Media: {{current}} • Total Media: {{total}}": "वर्तमान मीडिया: {{current}} • कुल मीडिया: {{total}}", "Dashboard": "डैशबोर्ड", "Database": "डेटाबेस", "Date Formats:": "दिनांक प्रारूप:", "Date Since": "तारीख से", "Date Time Format": "दिनांक समय प्रारूप", "Date Until": "तारीख तक", "Delete": "हटाएं", "Delete Account Data": "खाता डेटा हटाएँ", "Delete selected group": "चयनित समूह हटाएं", "Deleting...": "हटा रहे हैं...", "Demo mode is only available for @xbatchdemo": "डेमो मोड केवल @xbatchdemo के लिए उपलब्ध है", "Download": "डाउनलोड करें", "Downloading...": "डाउनलोड हो रहा है...", "Empty dates will fetch all available media": "खाली तिथियां सभी उपलब्ध मीडिया प्राप्त करेंगी", "Enter your Patreon auth": "अपना Patreon ऑथ दर्ज करें", "Enter your auth token": "अपना ऑथ टोकन दर्ज करें", "Enter group name": "समूह का नाम दर्ज करें", "Error:": "त्रुटि:", "Export": "निर्यात करें", "Exporting...": "निर्यात हो रहा है...", "Failed to download media": "मीडिया डाउनलोड विफल", "Failed to fetch data": "डेटा लाना विफल", "Failed to generate token": "टोकन जनरेट करना विफल", "Failed to refresh tokens": "टोकन रीफ्रेश करना विफल", "Clear dates": "तारीखें साफ करें", "Failed to load data": "डेटा लोड करना विफल", "Fetched in {{time}}": "{{time}} में प्राप्त किया गया", "Fetch": "प्राप्त करें", "Fetch All": "सब कुछ प्राप्त करें", "Fetch GIF": "GIF प्राप्त करें", "Fetch Image": "छवि प्राप्त करें", "Fetch Text": "पाठ प्राप्त करें", "Fetch Video": "वीडियो प्राप्त करें", "Fetching...": "प्राप्त किया जा रहा है...", "Filter by Date Range": "दिनांक सीमा के अनुसार फ़िल्टर करें", "First Page": "पहला पृष्ठ", "Followers": "फॉलोवर्स", "Following": "फॉलो कर रहे हैं", "Font Family": "फ़ॉन्ट परिवार", "GIF": "GIF", "Generate": "उत्पन्न करें", "Generate Auth Token": "प्रमाणीकरण टोकन जेनरेट करें", "Generating token...": "टोकन जेनरेट किया जा रहा है...", "Global Settings": "वैश्विक सेटिंग्स", "Group": "समूह", "Group Account": "खाता समूह", "HTTP error! status: {{status}}": "HTTP त्रुटि! स्थिति: {{status}}", "Home": "होम", "{{hours}}h ago": "{{hours}}घंटे पहले", "{{minutes}}m ago": "{{minutes}}मिनट पहले", "{{days}}d ago": "{{days}}दिन पहले", "Image": "छवि", "Import": "आयात करें", "Importing...": "आयात हो रहा है...", "Include Retweets": "रीट्वीट शामिल करें", "Invalid Patreon auth": "अमान्य Patreon ऑथ", "Invalid Patreon auth. Please check your settings.": "अमान्य Patreon ऑथ। कृपया अपनी सेटिंग्स जाँचें।", "Invalid auth token. Please check your settings.": "अमान्य ऑथ टोकन। कृपया सेटिंग्स जाँचें।", "Invalid username format": "अमान्य उपयोगकर्ता नाम प्रारूप", "Just now": "अभी", "Joined": "जुड़े", "Language": "भाषा", "Larger size, same quality": "आकार बड़ा, गुणवत्ता समान", "Last Page": "अंतिम पृष्ठ", "Load Database": "डेटाबेस लोड करें", "Load from database": "डेटाबेस से लोड करें", "Localized": "स्थानीयकृत", "Media": "मीडिया", "Media: {{media}}": "मीडिया: {{media}}", "Need help with Auth Token? See": "ऑथ टोकन में मदद चाहिए? देखें", "Next": "अगला", "No accounts yet": "अभी तक कोई खाता नहीं", "No content available": "कोई सामग्री उपलब्ध नहीं", "No media files found": "कोई मीडिया फ़ाइलें नहीं मिलीं", "Overwrite": "ओवरराइट करें", "Overwrite Existing Data?": "मौजूदा डेटा ओवरराइट करें?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "भुगतान करने वाले सदस्य Patreon प्रमाणीकरण सत्यापित करने के बाद स्वचालित रूप से प्रमाणीकरण टोकन उत्पन्न कर सकते हैं—कोई मैन्युअल खोज की आवश्यकता नहीं है।", "Patreon": "Patreon", "Patreon Auth": "Patreon ऑथ", "Patreon auth verified successfully": "Patreon ऑथ सफलतापूर्वक सत्यापित", "Please configure authentication in the Auth tab first": "कृपया पहले ऑथ टैब में प्रमाणीकरण कॉन्फ़िगर करें", "Please enter Patreon auth first": "कृपया पहले Patreon ऑथ दर्ज करें", "Please verify Patreon auth first": "कृपया पहले Patreon ऑथ सत्यापित करें", "Please visit a profile page for auto-detection": "कृपया ऑटो-डिटेक्शन के लिए प्रोफ़ाइल पेज पर जाएं", "Posts": "पोस्ट", "Posts: {{posts}}": "पोस्ट: {{posts}}", "Prev": "पिछला", "Preview": "पूर्वावलोकन", "Refresh": "ताज़ा करें", "Refreshing": "ताज़ा कर रहा है", "Report bugs or request features:": "बग रिपोर्ट करें या फीचर का अनुरोध करें:", "Request timeout": "अनुरोध समय समाप्त", "Reset": "रीसेट करें", "Reset Settings": "सेटिंग्स रीसेट करें", "Remove Group": "समूह हटाएं", "Resume": "जारी रखें", "Server": "सर्वर", "Server Timeout": "सर्वर टाइमआउट", "Select a group": "एक समूह चुनें", "Select All": "सभी चुनें", "selected": "चयनित", "More options": "अधिक विकल्प", "Explore Database": "डेटाबेस एक्सप्लोर करें", "Settings": "सेटिंग्स", "Smaller size, same quality": "आकार छोटा, गुणवत्ता समान", "Something went wrong.": "कुछ गलत हो गया।", "Sound Effects": "ध्वनि प्रभाव", "Start": "प्रारंभ", "Stop": "रोकें", "Stop Fetch": "डेटा लाना बंद करें", "Subscribe": "सदस्यता लें", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Patreon पर $5 के लिए सदस्यता लें और आपका प्रमाणीकरण कोड कुछ मिनटों के भीतर आपको स्वचालित रूप से ईमेल किया जाएगा।", "System Default": "सिस्टम डिफ़ॉल्ट", "Text": "पाठ", "Theme": "थीम", "Time Formats:": "समय प्रारूप:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "सेकंड में सर्वर प्रतिक्रियाओं के लिए टाइमआउट। टाइमआउट होने पर स्वचालित रूप से टोकन उत्पन्न करें।", "Toggle visibility": "दिखाएँ/छुपाएँ", "Token generated successfully": "टोकन सफलतापूर्वक जनरेट हुआ ({{current}}/{{total}})", "Token generation failed. Please try again": "टोकन जनरेशन विफल। कृपया पुनः प्रयास करें", "Ungroup": "असमूहीकृत", "Update": "अपडेट करें", "Update will fetch the latest data and overwrite the database. Continue?": "अपडेट नवीनतम डेटा प्राप्त करेगा और डेटाबेस को ओवरराइट करेगा। जारी रखें?", "Updating...": "अपडेट हो रहा है...", "If downloads fail, use concurrent 1": "यदि डाउनलोड विफल होते हैं, तो concurrent 1 का उपयोग करें", "Use Dashboard to fetch data.": "डेटा प्राप्त करने के लिए डैशबोर्ड का उपयोग करें।", "Use code": "कोड उपयोग करें", "Userscript": "यूज़रस्क्रिप्ट", "Verification failed. Please try again": "सत्यापन विफल। कृपया पुनः प्रयास करें", "Verified": "सत्यापित", "Verify": "सत्यापित करें", "Verifying": "सत्यापित किया जा रहा है", "Version": "संस्करण", "Video": "वीडियो", "for Patreon Auth, click Verify to unlock demo. Test at": 'Patreon प्रमाणीकरण के लिए, डेमो अनलॉक करने हेतु "सत्यापित करें" पर क्लिक करें। परीक्षण करें:', "the guide": "मार्गदर्शिका", "to get your Patreon Auth code and start downloading with ease!": "अपना Patreon ऑथ कोड प्राप्त करें और आसानी से डाउनलोड शुरू करें!" } }; const id = { "common": { "Abort": "Batalkan", "Add": "Tambah", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Data akun untuk @{{username}} sudah ada di database. Apakah Anda ingin menimpanya?", "Advanced Settings": "Pengaturan Lanjutan", "All": "Semua", "All Groups": "Semua Grup", "Are you sure to clear all data in the database?": "Apakah Anda yakin ingin menghapus semua data di database?", "Are you sure you want to delete account data? This action cannot be undone": "Apakah Anda yakin ingin menghapus data {{username}}? Tindakan ini tidak dapat dibatalkan.", "Are you sure you want to reset settings to defaults?": "Apakah Anda yakin ingin mereset pengaturan ke default?", "Auth": "Autentikasi", "Auth Token": "Token Autentikasi", "Back": "Kembali", "Batch: {{page}}": "Batch: {{page}}", "Cancel": "Batal", "Change Language": "Ubah Bahasa", "Change Theme": "Ubah Tema", "Choose the server closest to your location for best performance": "Pilih server yang paling dekat dengan lokasi Anda untuk performa terbaik", "Chrome": "Chrome", "Clear": "Hapus", "Close": "Tutup", "Combined Examples:": "Contoh Gabungan:", "Common Formats:": "Format Umum:", "Concurrent Downloads": "Unduhan Bersamaan", "Convert & Download": "Konversi & Unduh", "Convert Animated GIFs": "Konversi GIF", "Convert GIFs (External)": "Konversi GIF (Eksternal)", "Converting GIFs...": "Mengonversi GIF...", "Converting...": "Mengonversi...", "Copied": "Disalin", "Copy": "Salin", "Current Media: {{current}} • Total Media: {{total}}": "Media Saat Ini: {{current}} • Total Media: {{total}}", "Dashboard": "Dasbor", "Database": "Database", "Date Formats:": "Format Tanggal:", "Date Since": "Tanggal Mulai", "Date Time Format": "Format Tanggal Waktu", "Date Until": "Tanggal Sampai", "Delete": "Hapus", "Delete Account Data": "Hapus Data Akun", "Delete selected group": "Hapus grup yang dipilih", "Deleting...": "Menghapus...", "Demo mode is only available for @xbatchdemo": "Mode demo hanya tersedia untuk @xbatchdemo", "Download": "Unduh", "Downloading...": "Mengunduh...", "Empty dates will fetch all available media": "Tanggal kosong akan mengambil semua media yang tersedia", "Enter your Patreon auth": "Masukkan autentikasi Patreon Anda", "Enter your auth token": "Masukkan token autentikasi Anda", "Enter group name": "Masukkan nama grup", "Error:": "Kesalahan:", "Export": "Ekspor", "Exporting...": "Mengekspor...", "Failed to download media": "Gagal mengunduh media", "Failed to fetch data": "Gagal mengambil data", "Failed to generate token": "Gagal menghasilkan token", "Failed to refresh tokens": "Gagal memperbarui token", "Clear dates": "Hapus tanggal", "Failed to load data": "Gagal memuat data", "Fetched in {{time}}": "Diambil dalam {{time}}", "Fetch": "Ambil", "Fetch All": "Ambil Semua", "Fetch GIF": "Ambil GIF", "Fetch Image": "Ambil Gambar", "Fetch Text": "Ambil Teks", "Fetch Video": "Ambil Video", "Fetching...": "Mengambil...", "Filter by Date Range": "Filter berdasarkan Rentang Tanggal", "First Page": "Halaman Pertama", "Followers": "Pengikut", "Following": "Mengikuti", "Font Family": "Jenis Font", "GIF": "GIF", "Generate": "Hasilkan", "Generate Auth Token": "Buat Token Auth", "Generating token...": "Menghasilkan token...", "Global Settings": "Pengaturan Global", "Group": "Grup", "Group Account": "Grup Akun", "HTTP error! status: {{status}}": "Kesalahan HTTP! status: {{status}}", "Home": "Beranda", "{{hours}}h ago": "{{hours}}j lalu", "{{minutes}}m ago": "{{minutes}}m lalu", "{{days}}d ago": "{{days}}h lalu", "Image": "Gambar", "Import": "Impor", "Importing...": "Mengimpor...", "Include Retweets": "Sertakan Retweet", "Invalid Patreon auth": "Autentikasi Patreon tidak valid", "Invalid Patreon auth. Please check your settings.": "Autentikasi Patreon tidak valid. Silakan periksa pengaturan Anda.", "Invalid auth token. Please check your settings.": "Token autentikasi tidak valid. Silakan periksa pengaturan Anda.", "Invalid username format": "Format username tidak valid", "Just now": "Baru saja", "Joined": "Bergabung", "Language": "Bahasa", "Larger size, same quality": "Ukuran lebih besar, kualitas sama", "Last Page": "Halaman Terakhir", "Load Database": "Muat Database", "Load from database": "Muat dari database", "Localized": "Terlokalisasi", "Media": "Media", "Media: {{media}}": "Media: {{media}}", "Need help with Auth Token? See": "Butuh bantuan dengan Token Autentikasi? Lihat", "Next": "Selanjutnya", "No accounts yet": "Belum ada akun", "No content available": "Tidak ada konten tersedia", "No media files found": "Tidak ada file media ditemukan", "Overwrite": "Timpa", "Overwrite Existing Data?": "Timpa Data yang Ada?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Anggota berbayar dapat secara otomatis menghasilkan token autentikasi setelah memverifikasi autentikasi Patreon—tidak perlu pencarian manual.", "Patreon": "Patreon", "Patreon Auth": "Autentikasi Patreon", "Patreon auth verified successfully": "Autentikasi Patreon berhasil diverifikasi", "Please configure authentication in the Auth tab first": "Silakan konfigurasi autentikasi di tab Auth terlebih dahulu", "Please enter Patreon auth first": "Silakan masukkan autentikasi Patreon terlebih dahulu", "Please verify Patreon auth first": "Silakan verifikasi autentikasi Patreon terlebih dahulu", "Please visit a profile page for auto-detection": "Silakan kunjungi halaman profil untuk deteksi otomatis", "Posts": "Postingan", "Posts: {{posts}}": "Postingan: {{posts}}", "Prev": "Sebelumnya", "Preview": "Pratinjau", "Refresh": "Perbarui", "Refreshing": "Memperbarui", "Report bugs or request features:": "Laporkan bug atau minta fitur:", "Request timeout": "Waktu habis permintaan", "Reset": "Reset", "Reset Settings": "Reset Pengaturan", "Remove Group": "Hapus Grup", "Resume": "Lanjutkan", "Server": "Server", "Server Timeout": "Batas Waktu Server", "Select a group": "Pilih grup", "Select All": "Pilih Semua", "selected": "dipilih", "More options": "Opsi Lainnya", "Explore Database": "Jelajahi Database", "Settings": "Pengaturan", "Smaller size, same quality": "Ukuran lebih kecil, kualitas sama", "Something went wrong.": "Terjadi kesalahan.", "Sound Effects": "Efek Suara", "Start": "Mulai", "Stop": "Berhenti", "Stop Fetch": "Hentikan Fetch", "Subscribe": "Berlangganan", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Berlangganan seharga $5 di Patreon dan kode autentikasi Anda akan otomatis dikirim melalui email dalam beberapa menit.", "System Default": "Bawaan Sistem", "Text": "Teks", "Theme": "Tema", "Time Formats:": "Format Waktu:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Batas waktu untuk respons server dalam detik. Otomatis menghasilkan token jika terjadi batas waktu.", "Toggle visibility": "Alihkan visibilitas", "Token generated successfully": "Token berhasil dihasilkan ({{current}}/{{total}})", "Token generation failed. Please try again": "Pembuatan token gagal. Silakan coba lagi", "Ungroup": "Tanpa Grup", "Update": "Perbarui", "Update will fetch the latest data and overwrite the database. Continue?": "Pembaruan akan mengambil data terbaru dan menimpa database. Lanjutkan?", "Updating...": "Memperbarui...", "If downloads fail, use concurrent 1": "Jika unduhan gagal, gunakan concurrent 1", "Use Dashboard to fetch data.": "Gunakan Dasbor untuk mengambil data.", "Use code": "Gunakan kode", "Userscript": "Userscript", "Verification failed. Please try again": "Verifikasi gagal. Silakan coba lagi", "Verified": "Terverifikasi", "Verify": "Verifikasi", "Verifying": "Memverifikasi", "Version": "Versi", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": "untuk Autentikasi Patreon, klik Verifikasi untuk membuka demo. Tes di", "the guide": "panduannya", "to get your Patreon Auth code and start downloading with ease!": "untuk mendapatkan kode Autentikasi Patreon dan mulai mengunduh dengan mudah!" } }; const it = { "common": { "Abort": "Interrompi", "Add": "Aggiungi", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "I dati dell'account per @{{username}} esistono già nel database. Vuoi sovrascriverli?", "Advanced Settings": "Impostazioni avanzate", "All": "Tutto", "All Groups": "Tutti i Gruppi", "Are you sure to clear all data in the database?": "Sei sicuro di voler cancellare tutti i dati nel database?", "Are you sure you want to delete account data? This action cannot be undone": "Sei sicuro di voler eliminare i dati di {{username}}? Questa azione non può essere annullata.", "Are you sure you want to reset settings to defaults?": "Sei sicuro di voler ripristinare le impostazioni predefinite?", "Auth": "Autenticazione", "Auth Token": "Token di Autenticazione", "Back": "Indietro", "Batch: {{page}}": "Batch: {{page}}", "Cancel": "Annulla", "Change Language": "Cambia Lingua", "Change Theme": "Cambia Tema", "Choose the server closest to your location for best performance": "Scegli il server più vicino alla tua posizione per le migliori prestazioni", "Chrome": "Chrome", "Clear": "Cancella", "Close": "Chiudi", "Combined Examples:": "Esempi Combinati:", "Common Formats:": "Formati Comuni:", "Concurrent Downloads": "Download Simultanei", "Convert & Download": "Converti e Scarica", "Convert Animated GIFs": "Converti GIF", "Convert GIFs (External)": "Converti GIF (Esterno)", "Converting GIFs...": "Conversione GIF...", "Converting...": "Conversione...", "Copied": "Copiato", "Copy": "Copia", "Current Media: {{current}} • Total Media: {{total}}": "Media Corrente: {{current}} • Media Totale: {{total}}", "Dashboard": "Dashboard", "Database": "Database", "Date Formats:": "Formati Data:", "Date Since": "Data Da", "Date Time Format": "Formato Data Ora", "Date Until": "Data Fino", "Delete": "Elimina", "Delete Account Data": "Elimina Dati Account", "Delete selected group": "Elimina gruppo selezionato", "Deleting...": "Eliminazione...", "Demo mode is only available for @xbatchdemo": "La modalità demo è disponibile solo per @xbatchdemo", "Download": "Scarica", "Downloading...": "Download in corso...", "Empty dates will fetch all available media": "Date vuote recupereranno tutti i media disponibili", "Enter your Patreon auth": "Inserisci la tua autenticazione Patreon", "Enter your auth token": "Inserisci il tuo token di autenticazione", "Enter group name": "Inserisci nome gruppo", "Error:": "Errore:", "Export": "Esporta", "Exporting...": "Esportazione...", "Failed to download media": "Impossibile scaricare i media", "Failed to fetch data": "Impossibile recuperare i dati", "Failed to generate token": "Impossibile generare il token", "Failed to refresh tokens": "Impossibile aggiornare i token", "Clear dates": "Cancella date", "Failed to load data": "Impossibile caricare i dati", "Fetched in {{time}}": "Recuperato in {{time}}", "Fetch": "Recupera", "Fetch All": "Recupera tutto", "Fetch GIF": "Recupera GIF", "Fetch Image": "Recupera immagine", "Fetch Text": "Recupera testo", "Fetch Video": "Recupera video", "Fetching...": "Recupero...", "Filter by Date Range": "Filtra per intervallo di date", "First Page": "Prima Pagina", "Followers": "Follower", "Following": "Seguiti", "Font Family": "Famiglia di Font", "GIF": "GIF", "Generate": "Genera", "Generate Auth Token": "Genera Token di Autenticazione", "Generating token...": "Generazione token...", "Global Settings": "Impostazioni Globali", "Group": "Gruppo", "Group Account": "Raggruppa Account", "HTTP error! status: {{status}}": "Errore HTTP! stato: {{status}}", "Home": "Home", "{{hours}}h ago": "{{hours}}h fa", "{{minutes}}m ago": "{{minutes}}m fa", "{{days}}d ago": "{{days}}g fa", "Image": "Immagine", "Import": "Importa", "Importing...": "Importazione...", "Include Retweets": "Includi Retweet", "Invalid Patreon auth": "Autenticazione Patreon non valida", "Invalid Patreon auth. Please check your settings.": "Autenticazione Patreon non valida. Controlla le impostazioni.", "Invalid auth token. Please check your settings.": "Token di autenticazione non valido. Controlla le impostazioni.", "Invalid username format": "Formato nome utente non valido", "Just now": "Proprio ora", "Joined": "Iscritto", "Language": "Lingua", "Larger size, same quality": "Dimensione maggiore, stessa qualità", "Last Page": "Ultima Pagina", "Load Database": "Carica Database", "Load from database": "Carica dal database", "Localized": "Localizzato", "Media": "Media", "Media: {{media}}": "Media: {{media}}", "Need help with Auth Token? See": "Hai bisogno di aiuto con il Token di Autenticazione? Vedi", "Next": "Succ", "No accounts yet": "Nessun account ancora", "No content available": "Nessun contenuto disponibile", "No media files found": "Nessun file multimediale trovato", "Overwrite": "Sovrascrivi", "Overwrite Existing Data?": "Sovrascrivere i Dati Esistenti?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "I membri paganti possono generare automaticamente i token di autenticazione dopo aver verificato l'autenticazione Patreon—nessuna ricerca manuale richiesta.", "Patreon": "Patreon", "Patreon Auth": "Autenticazione Patreon", "Patreon auth verified successfully": "Autenticazione Patreon verificata con successo", "Please configure authentication in the Auth tab first": "Configura prima l'autenticazione nella scheda Auth", "Please enter Patreon auth first": "Inserisci prima l'autenticazione Patreon", "Please verify Patreon auth first": "Verifica prima l'autenticazione Patreon", "Please visit a profile page for auto-detection": "Visita una pagina profilo per il rilevamento automatico", "Posts": "Post", "Posts: {{posts}}": "Post: {{posts}}", "Prev": "Prec", "Preview": "Anteprima", "Refresh": "Aggiorna", "Refreshing": "Aggiornamento", "Report bugs or request features:": "Segnala bug o richiedi funzionalità:", "Request timeout": "Timeout della richiesta", "Reset": "Ripristina", "Reset Settings": "Ripristina Impostazioni", "Remove Group": "Rimuovi Gruppo", "Resume": "Riprendi", "Server": "Server", "Server Timeout": "Timeout Server", "Select a group": "Seleziona un gruppo", "Select All": "Seleziona tutto", "selected": "selezionato", "More options": "Altre opzioni", "Explore Database": "Esplora database", "Settings": "Impostazioni", "Smaller size, same quality": "Dimensione ridotta, stessa qualità", "Something went wrong.": "Qualcosa è andato storto.", "Sound Effects": "Effetti Sonori", "Start": "Avvia", "Stop": "Ferma", "Stop Fetch": "Interrompi Recupero", "Subscribe": "Abbonati", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Abbonati per $5 su Patreon e il tuo codice di autenticazione ti verrà inviato automaticamente via email entro pochi minuti.", "System Default": "Predefinito di Sistema", "Text": "Testo", "Theme": "Tema", "Time Formats:": "Formati Ora:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Timeout per le risposte del server in secondi. Genera automaticamente il token se si verifica un timeout.", "Toggle visibility": "Attiva/disattiva visibilità", "Token generated successfully": "Token generato con successo ({{current}}/{{total}})", "Token generation failed. Please try again": "Generazione token fallita. Riprova", "Ungroup": "Senza Gruppo", "Update": "Aggiorna", "Update will fetch the latest data and overwrite the database. Continue?": "L'aggiornamento recupererà i dati più recenti e sovrascriverà il database. Continuare?", "Updating...": "Aggiornamento...", "If downloads fail, use concurrent 1": "Se i download falliscono, usa concurrent 1", "Use Dashboard to fetch data.": "Usa la Dashboard per recuperare i dati.", "Use code": "Usa il codice", "Userscript": "Userscript", "Verification failed. Please try again": "Verifica fallita. Riprova", "Verified": "Verificato", "Verify": "Verifica", "Verifying": "Verifica in corso", "Version": "Versione", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": "per l'autenticazione Patreon, clicca Verifica per sbloccare la demo. Testa su", "the guide": "la guida", "to get your Patreon Auth code and start downloading with ease!": "per ottenere il tuo codice di autenticazione Patreon e iniziare a scaricare facilmente!" } }; const ja = { "common": { "Abort": "中止", "Add": "追加", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}} のアカウントデータは既にデータベースに存在します。上書きしますか?", "Advanced Settings": "詳細設定", "All": "すべて", "All Groups": "すべてのグループ", "Are you sure to clear all data in the database?": "データベースのすべてのデータをクリアしてもよろしいですか?", "Are you sure you want to delete account data? This action cannot be undone": "{{username}}のデータを削除してもよろしいですか?この操作は元に戻せません。", "Are you sure you want to reset settings to defaults?": "設定をデフォルトにリセットしてもよろしいですか?", "Auth": "認証", "Auth Token": "認証トークン", "Back": "戻る", "Batch: {{page}}": "バッチ: {{page}}", "Cancel": "キャンセル", "Change Language": "言語を変更", "Change Theme": "テーマを変更", "Choose the server closest to your location for best performance": "最高のパフォーマンスを得るために、お住まいの地域に最も近いサーバーを選択してください", "Chrome": "Chrome", "Clear": "クリア", "Close": "閉じる", "Combined Examples:": "組み合わせ例:", "Common Formats:": "一般的な形式:", "Concurrent Downloads": "同時ダウンロード数", "Convert & Download": "変換してダウンロード", "Convert Animated GIFs": "GIFを変換", "Convert GIFs (External)": "GIFを変換(外部)", "Converting GIFs...": "GIF変換中...", "Converting...": "変換中...", "Copied": "コピーしました", "Copy": "コピー", "Current Media: {{current}} • Total Media: {{total}}": "現在のメディア: {{current}} • 合計メディア: {{total}}", "Dashboard": "ダッシュボード", "Database": "データベース", "Date Formats:": "日付形式:", "Date Since": "開始日", "Date Time Format": "日時フォーマット", "Date Until": "終了日", "Delete": "削除", "Delete Account Data": "アカウントデータの削除", "Delete selected group": "選択したグループを削除", "Deleting...": "削除中...", "Demo mode is only available for @xbatchdemo": "デモモードは @xbatchdemo のみ利用できます", "Download": "ダウンロード", "Downloading...": "ダウンロード中...", "Empty dates will fetch all available media": "日付が空の場合、利用可能なすべてのメディアを取得します", "Enter your Patreon auth": "Patreon認証を入力", "Enter your auth token": "認証トークンを入力", "Enter group name": "グループ名を入力", "Error:": "エラー:", "Export": "エクスポート", "Exporting...": "エクスポート中...", "Failed to download media": "メディアダウンロードに失敗しました", "Failed to fetch data": "データ取得に失敗しました", "Failed to generate token": "トークン生成に失敗しました", "Failed to refresh tokens": "トークンの更新に失敗しました", "Clear dates": "日付をクリア", "Failed to load data": "データの読み込みに失敗しました", "Fetched in {{time}}": "{{time}}で取得", "Fetch": "取得", "Fetch All": "すべて取得", "Fetch GIF": "GIFを取得", "Fetch Image": "画像を取得", "Fetch Text": "テキストを取得", "Fetch Video": "ビデオを取得", "Fetching...": "取得中...", "Filter by Date Range": "日付範囲でフィルター", "First Page": "最初のページ", "Followers": "フォロワー", "Following": "フォロー中", "Font Family": "フォントファミリー", "GIF": "GIF", "Generate": "生成", "Generate Auth Token": "認証トークンを生成", "Generating token...": "トークン生成中...", "Global Settings": "グローバル設定", "Group": "グループ", "Group Account": "アカウントをグループ化", "HTTP error! status: {{status}}": "HTTP エラー! ステータス: {{status}}", "Home": "ホーム", "{{hours}}h ago": "{{hours}}時間前", "{{minutes}}m ago": "{{minutes}}分前", "{{days}}d ago": "{{days}}日前", "Image": "画像", "Import": "インポート", "Importing...": "インポート中...", "Include Retweets": "リツイートを含む", "Invalid Patreon auth": "無効なPatreon認証", "Invalid Patreon auth. Please check your settings.": "無効なPatreon認証です。設定を確認してください。", "Invalid auth token. Please check your settings.": "無効な認証トークンです。設定を確認してください。", "Invalid username format": "無効なユーザー名形式", "Just now": "たった今", "Joined": "参加日", "Language": "言語", "Larger size, same quality": "サイズは大きく、品質は同じです", "Last Page": "最後のページ", "Load Database": "データベースを読み込む", "Load from database": "データベースから読み込む", "Localized": "ローカライズ済み", "Media": "メディア", "Media: {{media}}": "メディア: {{media}}", "Need help with Auth Token? See": "認証トークンでお困りですか?こちらをご覧ください:", "Next": "次へ", "No accounts yet": "まだアカウントがありません", "No content available": "利用可能なコンテンツがありません", "No media files found": "メディアファイルが見つかりません", "Overwrite": "上書き", "Overwrite Existing Data?": "既存のデータを上書きしますか?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "有料メンバーは、Patreon認証を確認した後、認証トークンを自動的に生成できます—手動検索は不要です。", "Patreon": "Patreon", "Patreon Auth": "Patreon認証", "Patreon auth verified successfully": "Patreon認証が正常に確認されました", "Please configure authentication in the Auth tab first": "最初に認証タブで認証を設定してください", "Please enter Patreon auth first": "最初にPatreon認証を入力してください", "Please verify Patreon auth first": "最初にPatreon認証を確認してください", "Please visit a profile page for auto-detection": "プロフィールページを訪問して自動検出してください", "Posts": "投稿", "Posts: {{posts}}": "投稿: {{posts}}", "Prev": "前へ", "Preview": "プレビュー", "Refresh": "更新", "Refreshing": "更新中", "Report bugs or request features:": "バグ報告や機能リクエストはこちら:", "Request timeout": "リクエストタイムアウト", "Reset": "リセット", "Reset Settings": "設定のリセット", "Remove Group": "グループを削除", "Resume": "再開", "Server": "サーバー", "Server Timeout": "サーバータイムアウト", "Select a group": "グループを選択", "Select All": "すべて選択", "selected": "選択済み", "More options": "その他のオプション", "Explore Database": "データベースを探索", "Settings": "設定", "Smaller size, same quality": "サイズは小さく、品質は同じです", "Something went wrong.": "何かが間違っています。", "Sound Effects": "サウンドエフェクト", "Start": "開始", "Stop": "停止", "Stop Fetch": "取得を停止", "Subscribe": "購読する", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Patreonで$5のサブスクリプションを購入すると、認証コードが数分以内に自動的にメールで送信されます。", "System Default": "システムデフォルト", "Text": "テキスト", "Theme": "テーマ", "Time Formats:": "時刻形式:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "サーバー応答のタイムアウト(秒単位)。タイムアウトが発生した場合、トークンを自動生成します。", "Toggle visibility": "表示/非表示を切り替え", "Token generated successfully": "トークンが正常に生成されました ({{current}}/{{total}})", "Token generation failed. Please try again": "トークン生成に失敗しました。再試行してください", "Ungroup": "グループなし", "Update": "更新", "Update will fetch the latest data and overwrite the database. Continue?": "更新により最新データを取得し、データベースを上書きします。続行しますか?", "Updating...": "更新中...", "If downloads fail, use concurrent 1": "ダウンロードが失敗した場合は、concurrent 1を使用してください", "Use Dashboard to fetch data.": "ダッシュボードを使用してデータを取得してください。", "Use code": "コードを使用", "Userscript": "ユーザースクリプト", "Verification failed. Please try again": "検証に失敗しました。再試行してください", "Verified": "確認済み", "Verify": "確認", "Verifying": "確認中", "Version": "バージョン", "Video": "ビデオ", "for Patreon Auth, click Verify to unlock demo. Test at": "Patreon 認証用。デモを有効にするには「確認」をクリック。テスト先:", "the guide": "ガイド", "to get your Patreon Auth code and start downloading with ease!": "Patreon 認証コードを入手して、簡単にダウンロードを開始しましょう!" } }; const ko = { "common": { "Abort": "중단", "Add": "추가", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}}의 계정 데이터가 이미 데이터베이스에 존재합니다. 덮어쓰시겠습니까?", "Advanced Settings": "고급 설정", "All": "전체", "All Groups": "모든 그룹", "Are you sure to clear all data in the database?": "데이터베이스의 모든 데이터를 삭제하시겠습니까?", "Are you sure you want to delete account data? This action cannot be undone": "{{username}}의 데이터를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", "Are you sure you want to reset settings to defaults?": "설정을 기본값으로 재설정하시겠습니까?", "Auth": "인증", "Auth Token": "인증 토큰", "Back": "뒤로", "Batch: {{page}}": "배치: {{page}}", "Cancel": "취소", "Change Language": "언어 변경", "Change Theme": "테마 변경", "Choose the server closest to your location for best performance": "최상의 성능을 위해 가장 가까운 서버를 선택하세요", "Chrome": "Chrome", "Clear": "삭제", "Close": "닫기", "Combined Examples:": "결합 예시:", "Common Formats:": "일반 형식:", "Concurrent Downloads": "동시 다운로드", "Convert & Download": "변환 및 다운로드", "Convert Animated GIFs": "GIF 변환", "Convert GIFs (External)": "GIF 변환 (외부)", "Converting GIFs...": "GIF 변환 중...", "Converting...": "변환 중...", "Copied": "복사됨", "Copy": "복사", "Current Media: {{current}} • Total Media: {{total}}": "현재 미디어: {{current}} • 전체 미디어: {{total}}", "Dashboard": "대시보드", "Database": "데이터베이스", "Date Formats:": "날짜 형식:", "Date Since": "시작 날짜", "Date Time Format": "날짜 시간 형식", "Date Until": "종료 날짜", "Delete": "삭제", "Delete Account Data": "계정 데이터 삭제", "Delete selected group": "선택한 그룹 삭제", "Deleting...": "삭제 중...", "Demo mode is only available for @xbatchdemo": "데모 모드는 @xbatchdemo에게만 제공됩니다", "Download": "다운로드", "Downloading...": "다운로드 중...", "Empty dates will fetch all available media": "날짜가 비어있으면 사용 가능한 모든 미디어를 가져옵니다", "Enter your Patreon auth": "Patreon 인증을 입력하세요", "Enter your auth token": "인증 토큰을 입력하세요", "Enter group name": "그룹 이름 입력", "Error:": "오류:", "Export": "내보내기", "Exporting...": "내보내는 중...", "Failed to download media": "미디어 다운로드 실패", "Failed to fetch data": "데이터 가져오기 실패", "Failed to generate token": "토큰 생성 실패", "Failed to refresh tokens": "토큰 새로고침 실패", "Clear dates": "날짜 지우기", "Failed to load data": "데이터 불러오기 실패", "Fetched in {{time}}": "{{time}}에 가져옴", "Fetch": "가져오기", "Fetch All": "전체 가져오기", "Fetch GIF": "GIF 가져오기", "Fetch Image": "이미지 가져오기", "Fetch Text": "텍스트 가져오기", "Fetch Video": "비디오 가져오기", "Fetching...": "가져오는 중...", "Filter by Date Range": "날짜 범위로 필터링", "First Page": "첫 페이지", "Followers": "팔로워", "Following": "팔로잉", "Font Family": "글꼴 모음", "GIF": "GIF", "Generate": "생성", "Generate Auth Token": "인증 토큰 생성", "Generating token...": "토큰 생성 중...", "Global Settings": "전역 설정", "Group": "그룹", "Group Account": "계정 그룹화", "HTTP error! status: {{status}}": "HTTP 오류! 상태: {{status}}", "Home": "홈", "{{hours}}h ago": "{{hours}}시간 전", "{{minutes}}m ago": "{{minutes}}분 전", "{{days}}d ago": "{{days}}일 전", "Image": "이미지", "Import": "가져오기", "Importing...": "가져오는 중...", "Include Retweets": "리트윗 포함", "Invalid Patreon auth": "잘못된 Patreon 인증", "Invalid Patreon auth. Please check your settings.": "잘못된 Patreon 인증입니다. 설정을 확인해주세요.", "Invalid auth token. Please check your settings.": "잘못된 인증 토큰입니다. 설정을 확인해주세요.", "Invalid username format": "잘못된 사용자명 형식", "Just now": "방금 전", "Joined": "가입일", "Language": "언어", "Larger size, same quality": "더 큰 용량, 동일한 품질", "Last Page": "마지막 페이지", "Load Database": "데이터베이스 불러오기", "Load from database": "데이터베이스에서 불러오기", "Localized": "현지화됨", "Media": "미디어", "Media: {{media}}": "미디어: {{media}}", "Need help with Auth Token? See": "인증 토큰이 필요하신가요? 다음을 참조하세요:", "Next": "다음", "No accounts yet": "아직 계정이 없습니다", "No content available": "사용 가능한 콘텐츠가 없습니다", "No media files found": "미디어 파일을 찾을 수 없습니다", "Overwrite": "덮어쓰기", "Overwrite Existing Data?": "기존 데이터를 덮어쓰시겠습니까?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "유료 회원은 Patreon 인증을 확인한 후 자동으로 인증 토큰을 생성할 수 있습니다—수동 검색이 필요하지 않습니다.", "Patreon": "Patreon", "Patreon Auth": "Patreon 인증", "Patreon auth verified successfully": "Patreon 인증이 성공적으로 확인되었습니다", "Please configure authentication in the Auth tab first": "먼저 Auth 탭에서 인증을 구성해주세요", "Please enter Patreon auth first": "먼저 Patreon 인증을 입력해주세요", "Please verify Patreon auth first": "먼저 Patreon 인증을 확인해주세요", "Please visit a profile page for auto-detection": "자동 감지를 위해 프로필 페이지를 방문해주세요", "Posts": "게시물", "Posts: {{posts}}": "게시물: {{posts}}", "Prev": "이전", "Preview": "미리보기", "Refresh": "새로고침", "Refreshing": "새로고침 중", "Report bugs or request features:": "버그 신고 또는 기능 요청:", "Request timeout": "요청 시간 초과", "Reset": "재설정", "Reset Settings": "설정 재설정", "Remove Group": "그룹 제거", "Resume": "재개", "Server": "서버", "Server Timeout": "서버 타임아웃", "Select a group": "그룹 선택", "Select All": "모두 선택", "selected": "선택됨", "More options": "더 많은 옵션", "Explore Database": "데이터베이스 탐색", "Settings": "설정", "Smaller size, same quality": "더 작은 용량, 동일한 품질", "Something went wrong.": "문제가 발생했습니다.", "Sound Effects": "사운드 효과", "Start": "시작", "Stop": "중지", "Stop Fetch": "가져오기 중지", "Subscribe": "구독하기", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Patreon에서 $5로 구독하면 인증 코드가 몇 분 내에 자동으로 이메일로 전송됩니다.", "System Default": "시스템 기본값", "Text": "텍스트", "Theme": "테마", "Time Formats:": "시간 형식:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "서버 응답의 타임아웃(초 단위). 타임아웃이 발생하면 토큰을 자동으로 생성합니다.", "Toggle visibility": "표시/숨기기", "Token generated successfully": "토큰이 성공적으로 생성되었습니다 ({{current}}/{{total}})", "Token generation failed. Please try again": "토큰 생성 실패. 다시 시도해주세요", "Ungroup": "그룹 없음", "Update": "업데이트", "Update will fetch the latest data and overwrite the database. Continue?": "업데이트는 최신 데이터를 가져와 데이터베이스를 덮어씁니다. 계속하시겠습니까?", "Updating...": "업데이트 중...", "If downloads fail, use concurrent 1": "다운로드가 실패하면 concurrent 1을 사용하세요", "Use Dashboard to fetch data.": "대시보드를 사용하여 데이터를 가져와주세요.", "Use code": "코드를 사용", "Userscript": "유저스크립트", "Verification failed. Please try again": "확인 실패. 다시 시도해주세요", "Verified": "확인됨", "Verify": "확인", "Verifying": "확인 중", "Version": "버전", "Video": "비디오", "for Patreon Auth, click Verify to unlock demo. Test at": "Patreon 인증용입니다. 데모를 해제하려면 ‘확인’을 클릭하세요. 테스트:", "the guide": "가이드", "to get your Patreon Auth code and start downloading with ease!": "Patreon 인증 코드를 받아 손쉽게 다운로드를 시작하세요!" } }; const nl = { "common": { "Abort": "Afbreken", "Add": "Toevoegen", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Accountgegevens voor @{{username}} bestaan al in de database. Wil je deze overschrijven?", "Advanced Settings": "Geavanceerde instellingen", "All": "Alles", "All Groups": "Alle Groepen", "Are you sure to clear all data in the database?": "Weet je zeker dat je alle gegevens in de database wilt wissen?", "Are you sure you want to delete account data? This action cannot be undone": "Weet je zeker dat je de gegevens van {{username}} wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.", "Are you sure you want to reset settings to defaults?": "Weet je zeker dat je de instellingen wilt resetten naar standaard?", "Auth": "Authenticatie", "Auth Token": "Authenticatietoken", "Back": "Terug", "Batch: {{page}}": "Batch: {{page}}", "Cancel": "Annuleren", "Change Language": "Verander Taal", "Change Theme": "Verander Thema", "Choose the server closest to your location for best performance": "Kies de server die het dichtst bij uw locatie ligt voor de beste prestaties", "Chrome": "Chrome", "Clear": "Wissen", "Close": "Sluiten", "Combined Examples:": "Gecombineerde Voorbeelden:", "Common Formats:": "Veelgebruikte Formaten:", "Concurrent Downloads": "Gelijktijdige Downloads", "Convert & Download": "Converteren & Downloaden", "Convert Animated GIFs": "Converteer GIF's", "Convert GIFs (External)": "Converteer GIF's (Extern)", "Converting GIFs...": "GIF's converteren...", "Converting...": "Converteren...", "Copied": "Gekopieerd", "Copy": "Kopiëren", "Current Media: {{current}} • Total Media: {{total}}": "Huidige Media: {{current}} • Totale Media: {{total}}", "Dashboard": "Dashboard", "Database": "Database", "Date Formats:": "Datumformaten:", "Date Since": "Datum Vanaf", "Date Time Format": "Datum Tijd Formaat", "Date Until": "Datum Tot", "Delete": "Verwijderen", "Delete Account Data": "Accountgegevens Verwijderen", "Delete selected group": "Geselecteerde groep verwijderen", "Deleting...": "Verwijderen...", "Demo mode is only available for @xbatchdemo": "Demomodus is alleen beschikbaar voor @xbatchdemo", "Download": "Downloaden", "Downloading...": "Downloaden...", "Empty dates will fetch all available media": "Lege datums halen alle beschikbare media op", "Enter your Patreon auth": "Voer je Patreon-authenticatie in", "Enter your auth token": "Voer je authenticatietoken in", "Enter group name": "Voer groepsnaam in", "Error:": "Fout:", "Export": "Exporteren", "Exporting...": "Exporteren...", "Failed to download media": "Kan media niet downloaden", "Failed to fetch data": "Kan gegevens niet ophalen", "Failed to generate token": "Kan token niet genereren", "Failed to refresh tokens": "Kan tokens niet vernieuwen", "Clear dates": "Datums wissen", "Failed to load data": "Kan gegevens niet laden", "Fetched in {{time}}": "Opgehaald in {{time}}", "Fetch": "Ophalen", "Fetch All": "Alles ophalen", "Fetch GIF": "GIF ophalen", "Fetch Image": "Afbeelding ophalen", "Fetch Text": "Tekst ophalen", "Fetch Video": "Video ophalen", "Fetching...": "Ophalen...", "Filter by Date Range": "Filteren op datumbereik", "First Page": "Eerste Pagina", "Followers": "Volgers", "Following": "Volgend", "Font Family": "Lettertypefamilie", "GIF": "GIF", "Generate": "Genereren", "Generate Auth Token": "Authenticatietoken genereren", "Generating token...": "Token genereren...", "Global Settings": "Algemene Instellingen", "Group": "Groep", "Group Account": "Account Groeperen", "HTTP error! status: {{status}}": "HTTP-fout! status: {{status}}", "Home": "Home", "{{hours}}h ago": "{{hours}}u geleden", "{{minutes}}m ago": "{{minutes}}m geleden", "{{days}}d ago": "{{days}}d geleden", "Image": "Afbeelding", "Import": "Importeren", "Importing...": "Importeren...", "Include Retweets": "Retweets opnemen", "Invalid Patreon auth": "Ongeldige Patreon-authenticatie", "Invalid Patreon auth. Please check your settings.": "Ongeldige Patreon-authenticatie. Controleer je instellingen.", "Invalid auth token. Please check your settings.": "Ongeldig authenticatietoken. Controleer je instellingen.", "Invalid username format": "Ongeldige gebruikersnaam", "Just now": "Zojuist", "Joined": "Lid sinds", "Language": "Taal", "Larger size, same quality": "Grotere grootte, zelfde kwaliteit", "Last Page": "Laatste Pagina", "Load Database": "Database laden", "Load from database": "Laden vanuit database", "Localized": "Gelokaliseerd", "Media": "Media", "Media: {{media}}": "Media: {{media}}", "Need help with Auth Token? See": "Hulp nodig met Authenticatietoken? Zie", "Next": "Volgende", "No accounts yet": "Nog geen accounts", "No content available": "Geen inhoud beschikbaar", "No media files found": "Geen mediabestanden gevonden", "Overwrite": "Overschrijven", "Overwrite Existing Data?": "Bestaande Gegevens Overschrijven?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Betaalde leden kunnen automatisch authenticatietokens genereren na verificatie van Patreon-authenticatie—geen handmatig zoeken vereist.", "Patreon": "Patreon", "Patreon Auth": "Patreon Authenticatie", "Patreon auth verified successfully": "Patreon-authenticatie succesvol geverifieerd", "Please configure authentication in the Auth tab first": "Configureer eerst de authenticatie in het Auth-tabblad", "Please enter Patreon auth first": "Voer eerst Patreon-authenticatie in", "Please verify Patreon auth first": "Verifieer eerst Patreon-authenticatie", "Please visit a profile page for auto-detection": "Bezoek een profielpagina voor automatische detectie", "Posts": "Berichten", "Posts: {{posts}}": "Berichten: {{posts}}", "Prev": "Vorige", "Preview": "Voorbeeld", "Refresh": "Vernieuwen", "Refreshing": "Vernieuwen", "Report bugs or request features:": "Rapporteer bugs of vraag functies aan:", "Request timeout": "Verzoek time-out", "Reset": "Reset", "Reset Settings": "Reset Instellingen", "Remove Group": "Groep Verwijderen", "Resume": "Hervatten", "Server": "Server", "Server Timeout": "Server-time-out", "Select a group": "Selecteer een groep", "Select All": "Alles selecteren", "selected": "geselecteerd", "More options": "Meer opties", "Explore Database": "Database verkennen", "Settings": "Instellingen", "Smaller size, same quality": "Kleinere grootte, zelfde kwaliteit", "Something went wrong.": "Er is iets misgegaan.", "Sound Effects": "Geluidseffecten", "Start": "Start", "Stop": "Stop", "Stop Fetch": "Ophalen stoppen", "Subscribe": "Abonneren", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Abonneer je voor $5 op Patreon en je authenticatiecode wordt automatisch per e-mail naar je gestuurd binnen een paar minuten.", "System Default": "Systeemstandaard", "Text": "Tekst", "Theme": "Thema", "Time Formats:": "Tijdformaten:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Time-out voor server-reacties in seconden. Genereer automatisch een token als er een time-out optreedt.", "Toggle visibility": "Schakel zichtbaarheid", "Token generated successfully": "Token succesvol gegenereerd ({{current}}/{{total}})", "Token generation failed. Please try again": "Tokengeneratie mislukt. Probeer opnieuw", "Ungroup": "Niet Gegroepeerd", "Update": "Bijwerken", "Update will fetch the latest data and overwrite the database. Continue?": "Bijwerken haalt de laatste gegevens op en overschrijft de database. Doorgaan?", "Updating...": "Bijwerken...", "If downloads fail, use concurrent 1": "Als downloads mislukken, gebruik concurrent 1", "Use Dashboard to fetch data.": "Gebruik Dashboard om gegevens op te halen.", "Use code": "Gebruik code", "Userscript": "Userscript", "Verification failed. Please try again": "Verificatie mislukt. Probeer opnieuw", "Verified": "Geverifieerd", "Verify": "Verifiëren", "Verifying": "Verifiëren", "Version": "Versie", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": "voor Patreon Auth, klik op Verifiëren om demo te ontgrendelen. Test op", "the guide": "de handleiding", "to get your Patreon Auth code and start downloading with ease!": "om je Patreon Auth-code te krijgen en gemakkelijk te beginnen met downloaden!" } }; const pt = { "common": { "Abort": "Abortar", "Add": "Adicionar", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Os dados da conta @{{username}} já existem no banco de dados. Deseja substituí-los?", "Advanced Settings": "Configurações avançadas", "All": "Tudo", "All Groups": "Todos os Grupos", "Are you sure to clear all data in the database?": "Tem certeza de que deseja limpar todos os dados do banco de dados?", "Are you sure you want to delete account data? This action cannot be undone": "Tem certeza de que deseja excluir os dados de {{username}}? Esta ação não pode ser desfeita.", "Are you sure you want to reset settings to defaults?": "Tem certeza de que deseja redefinir as configurações para o padrão?", "Auth": "Autenticação", "Auth Token": "Token de autenticação", "Back": "Voltar", "Batch: {{page}}": "Lote: {{page}}", "Cancel": "Cancelar", "Change Language": "Alterar Idioma", "Change Theme": "Alterar Tema", "Choose the server closest to your location for best performance": "Escolha o servidor mais próximo da sua localização para melhor desempenho", "Chrome": "Chrome", "Clear": "Limpar", "Close": "Fechar", "Combined Examples:": "Exemplos Combinados:", "Common Formats:": "Formatos Comuns:", "Concurrent Downloads": "Downloads simultâneos", "Convert & Download": "Converter e baixar", "Convert Animated GIFs": "Converter GIFs", "Convert GIFs (External)": "Converter GIFs (Externo)", "Converting GIFs...": "Convertendo GIFs...", "Converting...": "Convertendo...", "Copied": "Copiado", "Copy": "Copiar", "Current Media: {{current}} • Total Media: {{total}}": "Mídia atual: {{current}} • Mídia total: {{total}}", "Dashboard": "Painel", "Database": "Banco de Dados", "Date Formats:": "Formatos de Data:", "Date Since": "Data Desde", "Date Time Format": "Formato de Data e Hora", "Date Until": "Data Até", "Delete": "Excluir", "Delete Account Data": "Excluir dados da conta", "Delete selected group": "Excluir grupo selecionado", "Deleting...": "Excluindo...", "Demo mode is only available for @xbatchdemo": "O modo demonstração está disponível apenas para @xbatchdemo", "Download": "Baixar", "Downloading...": "Baixando...", "Empty dates will fetch all available media": "Datas vazias buscarão todas as mídias disponíveis", "Enter your Patreon auth": "Insira sua autenticação do Patreon", "Enter your auth token": "Insira seu token de autenticação", "Enter group name": "Digite o nome do grupo", "Error:": "Erro:", "Export": "Exportar", "Exporting...": "Exportando...", "Failed to download media": "Falha ao baixar a mídia", "Failed to fetch data": "Falha ao buscar os dados", "Failed to generate token": "Falha ao gerar o token", "Failed to refresh tokens": "Falha ao atualizar os tokens", "Clear dates": "Limpar datas", "Failed to load data": "Falha ao carregar os dados", "Fetched in {{time}}": "Obtido em {{time}}", "Fetch": "Buscar", "Fetch All": "Buscar tudo", "Fetch GIF": "Buscar GIF", "Fetch Image": "Buscar imagem", "Fetch Text": "Buscar texto", "Fetch Video": "Buscar vídeo", "Fetching...": "Obtendo...", "Filter by Date Range": "Filtrar por intervalo de datas", "First Page": "Primeira Página", "Followers": "Seguidores", "Following": "Seguindo", "Font Family": "Família de Fonte", "GIF": "GIF", "Generate": "Gerar", "Generate Auth Token": "Gerar Token de Autenticação", "Generating token...": "Gerando token...", "Global Settings": "Configurações Globais", "Group": "Grupo", "Group Account": "Agrupar Conta", "HTTP error! status: {{status}}": "Erro HTTP! status: {{status}}", "Home": "Início", "{{hours}}h ago": "há {{hours}}h", "{{minutes}}m ago": "há {{minutes}}m", "{{days}}d ago": "há {{days}}d", "Image": "Imagem", "Import": "Importar", "Importing...": "Importando...", "Include Retweets": "Incluir Retweets", "Invalid Patreon auth": "Autenticação do Patreon inválida", "Invalid Patreon auth. Please check your settings.": "Autenticação do Patreon inválida. Verifique suas configurações.", "Invalid auth token. Please check your settings.": "Token de autenticação inválido. Verifique suas configurações.", "Invalid username format": "Formato de nome de usuário inválido", "Just now": "Agora mesmo", "Joined": "Entrou em", "Language": "Idioma", "Larger size, same quality": "Tamanho maior, mesma qualidade", "Last Page": "Última Página", "Load Database": "Carregar Banco de Dados", "Load from database": "Carregar do banco de dados", "Localized": "Localizado", "Media": "Mídia", "Media: {{media}}": "Mídia: {{media}}", "Need help with Auth Token? See": "Precisa de ajuda com o token de autenticação? Veja", "Next": "Próximo", "No accounts yet": "Ainda não há contas", "No content available": "Nenhum conteúdo disponível", "No media files found": "Nenhum arquivo de mídia encontrado", "Overwrite": "Substituir", "Overwrite Existing Data?": "Substituir dados existentes?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Membros pagos podem gerar automaticamente tokens de autenticação após verificar a autenticação do Patreon—nenhuma busca manual necessária.", "Patreon": "Patreon", "Patreon Auth": "Autenticação do Patreon", "Patreon auth verified successfully": "Autenticação do Patreon verificada com sucesso", "Please configure authentication in the Auth tab first": "Configure a autenticação na aba Auth primeiro", "Please enter Patreon auth first": "Insira primeiro a autenticação do Patreon", "Please verify Patreon auth first": "Verifique primeiro a autenticação do Patreon", "Please visit a profile page for auto-detection": "Visite uma página de perfil para detecção automática", "Posts": "Publicações", "Posts: {{posts}}": "Publicações: {{posts}}", "Prev": "Anterior", "Preview": "Visualizar", "Refresh": "Atualizar", "Refreshing": "Atualizando", "Report bugs or request features:": "Relate bugs ou solicite recursos:", "Request timeout": "Tempo limite da solicitação", "Reset": "Redefinir", "Reset Settings": "Redefinir configurações", "Remove Group": "Remover Grupo", "Resume": "Retomar", "Server": "Servidor", "Server Timeout": "Tempo limite do servidor", "Select a group": "Selecione um grupo", "Select All": "Selecionar tudo", "selected": "selecionado", "More options": "Mais opções", "Explore Database": "Explorar banco de dados", "Settings": "Configurações", "Smaller size, same quality": "Tamanho menor, mesma qualidade", "Something went wrong.": "Algo deu errado.", "Sound Effects": "Efeitos Sonoros", "Start": "Iniciar", "Stop": "Parar", "Stop Fetch": "Parar Busca", "Subscribe": "Assine", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Assine por $5 no Patreon e seu código de autenticação será enviado automaticamente por e-mail em alguns minutos.", "System Default": "Padrão do Sistema", "Text": "Texto", "Theme": "Tema", "Time Formats:": "Formatos de Hora:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Tempo limite para respostas do servidor em segundos. Gere token automaticamente se ocorrer tempo limite.", "Toggle visibility": "Mostrar/ocultar", "Token generated successfully": "Token gerado com sucesso ({{current}}/{{total}})", "Token generation failed. Please try again": "Falha na geração do token. Tente novamente", "Ungroup": "Sem Grupo", "Update": "Atualizar", "Update will fetch the latest data and overwrite the database. Continue?": "A atualização buscará os dados mais recentes e sobrescreverá o banco de dados. Continuar?", "Updating...": "Atualizando...", "If downloads fail, use concurrent 1": "Se os downloads falharem, use concurrent 1", "Use Dashboard to fetch data.": "Use o Painel para buscar os dados.", "Use code": "Use o código", "Userscript": "Script de usuário", "Verification failed. Please try again": "Falha na verificação. Tente novamente", "Verified": "Verificado", "Verify": "Verificar", "Verifying": "Verificando", "Version": "Versão", "Video": "Vídeo", "for Patreon Auth, click Verify to unlock demo. Test at": 'para Autenticação do Patreon, clique em "Verificar" para desbloquear a demonstração. Teste em', "the guide": "o guia", "to get your Patreon Auth code and start downloading with ease!": "para obter seu código de autenticação do Patreon e começar a baixar com facilidade!" } }; const ru = { "common": { "Abort": "Отменить", "Add": "Добавить", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Данные аккаунта @{{username}} уже существуют в базе данных. Перезаписать их?", "Advanced Settings": "Дополнительные настройки", "All": "Все", "All Groups": "Все Группы", "Are you sure to clear all data in the database?": "Вы уверены, что хотите очистить все данные в базе данных?", "Are you sure you want to delete account data? This action cannot be undone": "Вы уверены, что хотите удалить данные {{username}}? Это действие нельзя отменить.", "Are you sure you want to reset settings to defaults?": "Вы уверены, что хотите сбросить настройки к значениям по умолчанию?", "Auth": "Аутентификация", "Auth Token": "Токен аутентификации", "Back": "Назад", "Batch: {{page}}": "Пакет: {{page}}", "Cancel": "Отмена", "Change Language": "Изменить язык", "Change Theme": "Изменить тему", "Choose the server closest to your location for best performance": "Выберите ближайший к вам сервер для лучшей производительности", "Chrome": "Chrome", "Clear": "Очистить", "Close": "Закрыть", "Combined Examples:": "Комбинированные примеры:", "Common Formats:": "Общие форматы:", "Concurrent Downloads": "Одновременные загрузки", "Convert & Download": "Конвертировать и скачать", "Convert Animated GIFs": "Конвертировать GIF", "Convert GIFs (External)": "Конвертировать GIF (внешний)", "Converting GIFs...": "Конвертация GIF...", "Converting...": "Конвертация...", "Copied": "Скопировано", "Copy": "Копировать", "Current Media: {{current}} • Total Media: {{total}}": "Текущая медиа: {{current}} • Всего медиа: {{total}}", "Dashboard": "Панель управления", "Database": "База данных", "Date Formats:": "Форматы дат:", "Date Since": "Дата С", "Date Time Format": "Формат даты и времени", "Date Until": "Дата По", "Delete": "Удалить", "Delete Account Data": "Удалить данные аккаунта", "Delete selected group": "Удалить выбранную группу", "Deleting...": "Удаление...", "Demo mode is only available for @xbatchdemo": "Демо-режим доступен только для @xbatchdemo", "Download": "Скачать", "Downloading...": "Загрузка...", "Empty dates will fetch all available media": "Пустые даты загрузят все доступные медиа", "Enter your Patreon auth": "Введите авторизацию Patreon", "Enter your auth token": "Введите токен аутентификации", "Enter group name": "Введите название группы", "Error:": "Ошибка:", "Export": "Экспорт", "Exporting...": "Экспорт...", "Failed to download media": "Не удалось скачать медиа", "Failed to fetch data": "Не удалось получить данные", "Failed to generate token": "Не удалось сгенерировать токен", "Failed to refresh tokens": "Не удалось обновить токены", "Clear dates": "Очистить даты", "Failed to load data": "Не удалось загрузить данные", "Fetched in {{time}}": "Получено за {{time}}", "Fetch": "Получить", "Fetch All": "Получить всё", "Fetch GIF": "Получить GIF", "Fetch Image": "Получить изображение", "Fetch Text": "Получить текст", "Fetch Video": "Получить видео", "Fetching...": "Получение...", "Filter by Date Range": "Фильтр по диапазону дат", "First Page": "Первая Страница", "Followers": "Подписчики", "Following": "Подписки", "Font Family": "Семейство шрифтов", "GIF": "GIF", "Generate": "Создать", "Generate Auth Token": "Сгенерировать токен аутентификации", "Generating token...": "Генерация токена...", "Global Settings": "Глобальные настройки", "Group": "Группа", "Group Account": "Группировать Аккаунт", "HTTP error! status: {{status}}": "Ошибка HTTP! статус: {{status}}", "Home": "Главная", "{{hours}}h ago": "{{hours}}ч назад", "{{minutes}}m ago": "{{minutes}}м назад", "{{days}}d ago": "{{days}}д назад", "Image": "Изображение", "Import": "Импорт", "Importing...": "Импорт...", "Include Retweets": "Включить ретвиты", "Invalid Patreon auth": "Недействительная авторизация Patreon", "Invalid Patreon auth. Please check your settings.": "Недействительная авторизация Patreon. Проверьте настройки.", "Invalid auth token. Please check your settings.": "Недействительный токен аутентификации. Проверьте настройки.", "Invalid username format": "Недопустимый формат имени пользователя", "Just now": "Только что", "Joined": "Дата регистрации", "Language": "Язык", "Larger size, same quality": "Больший размер, то же качество", "Last Page": "Последняя Страница", "Load Database": "Загрузить базу данных", "Load from database": "Загрузить из базы данных", "Localized": "Локализованный", "Media": "Медиа", "Media: {{media}}": "Медиа: {{media}}", "Need help with Auth Token? See": "Нужна помощь с токеном аутентификации? См.", "Next": "Далее", "No accounts yet": "Пока нет аккаунтов", "No content available": "Контент недоступен", "No media files found": "Медиафайлы не найдены", "Overwrite": "Перезаписать", "Overwrite Existing Data?": "Перезаписать существующие данные?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Платные участники могут автоматически генерировать токены аутентификации после проверки аутентификации Patreon—ручной поиск не требуется.", "Patreon": "Patreon", "Patreon Auth": "Авторизация Patreon", "Patreon auth verified successfully": "Авторизация Patreon успешно проверена", "Please configure authentication in the Auth tab first": "Сначала настройте аутентификацию на вкладке Auth", "Please enter Patreon auth first": "Сначала введите авторизацию Patreon", "Please verify Patreon auth first": "Сначала подтвердите авторизацию Patreon", "Please visit a profile page for auto-detection": "Посетите страницу профиля для автоопределения", "Posts": "Публикации", "Posts: {{posts}}": "Публикации: {{posts}}", "Prev": "Назад", "Preview": "Предпросмотр", "Refresh": "Обновить", "Refreshing": "Обновление", "Report bugs or request features:": "Сообщить об ошибках или запросить функции:", "Request timeout": "Таймаут запроса", "Reset": "Сброс", "Reset Settings": "Сбросить настройки", "Remove Group": "Удалить Группу", "Resume": "Продолжить", "Server": "Сервер", "Server Timeout": "Тайм-аут сервера", "Select a group": "Выберите группу", "Select All": "Выбрать все", "selected": "выбрано", "More options": "Дополнительные опции", "Explore Database": "Исследовать базу данных", "Settings": "Настройки", "Smaller size, same quality": "Меньший размер, то же качество", "Something went wrong.": "Что-то пошло не так.", "Sound Effects": "Звуковые Эффекты", "Start": "Старт", "Stop": "Стоп", "Stop Fetch": "Остановить получение", "Subscribe": "Подписаться", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Подпишитесь на $5 в Patreon, и ваш код аутентификации будет автоматически отправлен вам по электронной почте в течение нескольких минут.", "System Default": "Системный по умолчанию", "Text": "Текст", "Theme": "Тема", "Time Formats:": "Форматы времени:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Тайм-аут для ответов сервера в секундах. Автоматически генерировать токен при возникновении тайм-аута.", "Toggle visibility": "Показать/скрыть", "Token generated successfully": "Токен успешно сгенерирован ({{current}}/{{total}})", "Token generation failed. Please try again": "Не удалось сгенерировать токен. Попробуйте ещё раз", "Ungroup": "Без Группы", "Update": "Обновить", "Update will fetch the latest data and overwrite the database. Continue?": "Обновление получит последние данные и перезапишет базу данных. Продолжить?", "Updating...": "Обновление...", "If downloads fail, use concurrent 1": "Если загрузки не удаются, используйте concurrent 1", "Use Dashboard to fetch data.": "Используйте панель, чтобы получить данные.", "Use code": "Используйте код", "Userscript": "Пользовательский скрипт", "Verification failed. Please try again": "Не удалось выполнить проверку. Попробуйте ещё раз", "Verified": "Проверено", "Verify": "Проверить", "Verifying": "Проверка...", "Version": "Версия", "Video": "Видео", "for Patreon Auth, click Verify to unlock demo. Test at": "для аутентификации Patreon, нажмите «Проверить», чтобы разблокировать демо. Тест:", "the guide": "руководство", "to get your Patreon Auth code and start downloading with ease!": "чтобы получить код аутентификации Patreon и с лёгкостью начать скачивание!" } }; const th = { "common": { "Abort": "ยกเลิก", "Add": "เพิ่ม", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "ข้อมูลบัญชีสำหรับ @{{username}} มีอยู่แล้วในฐานข้อมูล คุณต้องการเขียนทับหรือไม่?", "Advanced Settings": "การตั้งค่าขั้นสูง", "All": "ทั้งหมด", "All Groups": "กลุ่มทั้งหมด", "Are you sure to clear all data in the database?": "คุณแน่ใจหรือไม่ที่จะล้างข้อมูลทั้งหมดในฐานข้อมูล?", "Are you sure you want to delete account data? This action cannot be undone": "คุณแน่ใจหรือไม่ที่จะลบข้อมูล {{username}}? การกระทำนี้ไม่สามารถยกเลิกได้", "Are you sure you want to reset settings to defaults?": "คุณแน่ใจหรือไม่ว่าต้องการรีเซ็ตการตั้งค่าเป็นค่าเริ่มต้น?", "Auth": "การยืนยันตัวตน", "Auth Token": "โทเค็นการยืนยันตัวตน", "Back": "กลับ", "Batch: {{page}}": "แบทช์: {{page}}", "Cancel": "ยกเลิก", "Change Language": "เปลี่ยนภาษา", "Change Theme": "เปลี่ยนธีม", "Choose the server closest to your location for best performance": "เลือกเซิร์ฟเวอร์ที่ใกล้ที่สุดกับตำแหน่งของคุณเพื่อประสิทธิภาพที่ดีที่สุด", "Chrome": "Chrome", "Clear": "ล้าง", "Close": "ปิด", "Combined Examples:": "ตัวอย่างรวม:", "Common Formats:": "รูปแบบทั่วไป:", "Concurrent Downloads": "ดาวน์โหลดพร้อมกัน", "Convert & Download": "แปลงและดาวน์โหลด", "Convert Animated GIFs": "แปลง GIF", "Convert GIFs (External)": "แปลง GIF (ภายนอก)", "Converting GIFs...": "กำลังแปลง GIF...", "Converting...": "กำลังแปลง...", "Copied": "คัดลอกแล้ว", "Copy": "คัดลอก", "Current Media: {{current}} • Total Media: {{total}}": "สื่อปัจจุบัน: {{current}} • สื่อทั้งหมด: {{total}}", "Dashboard": "แดชบอร์ด", "Database": "ฐานข้อมูล", "Date Formats:": "รูปแบบวันที่:", "Date Since": "วันที่เริ่มต้น", "Date Time Format": "รูปแบบวันที่และเวลา", "Date Until": "วันที่สิ้นสุด", "Delete": "ลบ", "Delete Account Data": "ลบข้อมูลบัญชี", "Delete selected group": "ลบกลุ่มที่เลือก", "Deleting...": "กำลังลบ...", "Demo mode is only available for @xbatchdemo": "โหมดสาธิตใช้ได้เฉพาะสำหรับ @xbatchdemo เท่านั้น", "Download": "ดาวน์โหลด", "Downloading...": "กำลังดาวน์โหลด...", "Empty dates will fetch all available media": "วันที่ว่างจะดึงสื่อทั้งหมดที่มี", "Enter your Patreon auth": "ป้อนการยืนยันตัวตน Patreon ของคุณ", "Enter your auth token": "ป้อนโทเค็นการยืนยันตัวตนของคุณ", "Enter group name": "ใส่ชื่อกลุ่ม", "Error:": "ข้อผิดพลาด:", "Export": "ส่งออก", "Exporting...": "กำลังส่งออก...", "Failed to download media": "ไม่สามารถดาวน์โหลดสื่อ", "Failed to fetch data": "ไม่สามารถดึงข้อมูล", "Failed to generate token": "ไม่สามารถสร้างโทเค็น", "Failed to refresh tokens": "ไม่สามารถรีเฟรชโทเค็น", "Clear dates": "ล้างวันที่", "Failed to load data": "ไม่สามารถโหลดข้อมูล", "Fetched in {{time}}": "ดึงข้อมูลใน {{time}}", "Fetch": "ดึง", "Fetch All": "ดึงทั้งหมด", "Fetch GIF": "ดึง GIF", "Fetch Image": "ดึงรูปภาพ", "Fetch Text": "ดึงข้อความ", "Fetch Video": "ดึงวิดีโอ", "Fetching...": "กำลังดึงข้อมูล...", "Filter by Date Range": "กรองตามช่วงวันที่", "First Page": "หน้าแรก", "Followers": "ผู้ติดตาม", "Following": "กำลังติดตาม", "Font Family": "ตระกูลฟอนต์", "GIF": "GIF", "Generate": "สร้าง", "Generate Auth Token": "สร้างโทเค็นการยืนยันตัวตน", "Generating token...": "กำลังสร้างโทเค็น...", "Global Settings": "การตั้งค่าทั่วไป", "Group": "กลุ่ม", "Group Account": "จัดกลุ่มบัญชี", "HTTP error! status: {{status}}": "ข้อผิดพลาด HTTP! สถานะ: {{status}}", "Home": "หน้าแรก", "{{hours}}h ago": "{{hours}}ชม. ที่แล้ว", "{{minutes}}m ago": "{{minutes}}นาที ที่แล้ว", "{{days}}d ago": "{{days}}วัน ที่แล้ว", "Image": "รูปภาพ", "Import": "นำเข้า", "Importing...": "กำลังนำเข้า...", "Include Retweets": "รวมรีทวีต", "Invalid Patreon auth": "การยืนยันตัวตน Patreon ไม่ถูกต้อง", "Invalid Patreon auth. Please check your settings.": "การยืนยันตัวตน Patreon ไม่ถูกต้อง โปรดตรวจสอบการตั้งค่าของคุณ", "Invalid auth token. Please check your settings.": "โทเค็นการยืนยันตัวตนไม่ถูกต้อง โปรดตรวจสอบการตั้งค่าของคุณ", "Invalid username format": "รูปแบบชื่อผู้ใช้ไม่ถูกต้อง", "Just now": "เมื่อสักครู่", "Joined": "เข้าร่วม", "Language": "ภาษา", "Larger size, same quality": "ขนาดใหญ่ขึ้น คุณภาพเท่าเดิม", "Last Page": "หน้าสุดท้าย", "Load Database": "โหลดฐานข้อมูล", "Load from database": "โหลดจากฐานข้อมูล", "Localized": "แปลเป็นภาษาท้องถิ่น", "Media": "สื่อ", "Media: {{media}}": "สื่อ: {{media}}", "Need help with Auth Token? See": "ต้องการความช่วยเหลือเกี่ยวกับโทเค็นการยืนยันตัวตนหรือไม่? ดู", "Next": "ถัดไป", "No accounts yet": "ยังไม่มีบัญชี", "No content available": "ไม่มีเนื้อหาที่ใช้ได้", "No media files found": "ไม่พบไฟล์สื่อ", "Overwrite": "เขียนทับ", "Overwrite Existing Data?": "เขียนทับข้อมูลที่มีอยู่?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "สมาชิกที่จ่ายเงินสามารถสร้างโทเค็นยืนยันตัวตนได้โดยอัตโนมัติหลังจากยืนยัน Patreon auth—ไม่จำเป็นต้องค้นหาด้วยตนเอง", "Patreon": "Patreon", "Patreon Auth": "การยืนยันตัวตน Patreon", "Patreon auth verified successfully": "ยืนยันการยืนยันตัวตน Patreon สำเร็จ", "Please configure authentication in the Auth tab first": "โปรดกำหนดค่าการยืนยันตัวตนในแท็บ Auth ก่อน", "Please enter Patreon auth first": "โปรดป้อนการยืนยันตัวตน Patreon ก่อน", "Please verify Patreon auth first": "โปรดยืนยันการยืนยันตัวตน Patreon ก่อน", "Please visit a profile page for auto-detection": "โปรดไปที่หน้าโปรไฟล์สำหรับการตรวจจับอัตโนมัติ", "Posts": "โพสต์", "Posts: {{posts}}": "โพสต์: {{posts}}", "Prev": "ก่อนหน้า", "Preview": "ดูตัวอย่าง", "Refresh": "รีเฟรช", "Refreshing": "กำลังรีเฟรช", "Report bugs or request features:": "รายงานบั๊กหรือขอฟีเจอร์:", "Request timeout": "หมดเวลาการร้องขอ", "Reset": "รีเซ็ต", "Reset Settings": "รีเซ็ตการตั้งค่า", "Remove Group": "ลบกลุ่ม", "Resume": "ดำเนินการต่อ", "Server": "เซิร์ฟเวอร์", "Server Timeout": "หมดเวลาของเซิร์ฟเวอร์", "Select a group": "เลือกกลุ่ม", "Select All": "เลือกทั้งหมด", "selected": "เลือกแล้ว", "More options": "ตัวเลือกเพิ่มเติม", "Explore Database": "สำรวจฐานข้อมูล", "Settings": "การตั้งค่า", "Smaller size, same quality": "ขนาดเล็กลง คุณภาพเท่าเดิม", "Something went wrong.": "เกิดข้อผิดพลาดบางอย่าง", "Sound Effects": "เอฟเฟกต์เสียง", "Start": "เริ่ม", "Stop": "หยุด", "Stop Fetch": "หยุดการดึงข้อมูล", "Subscribe": "สมัครสมาชิก", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "สมัครสมาชิก $5 บน Patreon และรหัสยืนยันตัวตนของคุณจะถูกส่งอีเมลให้คุณโดยอัตโนมัติภายในไม่กี่นาที", "System Default": "ค่าเริ่มต้นของระบบ", "Text": "ข้อความ", "Theme": "ธีม", "Time Formats:": "รูปแบบเวลา:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "หมดเวลาสำหรับการตอบกลับของเซิร์ฟเวอร์เป็นวินาที สร้างโทเค็นอัตโนมัติหากเกิดหมดเวลา", "Toggle visibility": "สลับการมองเห็น", "Token generated successfully": "สร้างโทเค็นสำเร็จ ({{current}}/{{total}})", "Token generation failed. Please try again": "การสร้างโทเค็นล้มเหลว โปรดลองอีกครั้ง", "Ungroup": "ไม่มีกลุ่ม", "Update": "อัปเดต", "Update will fetch the latest data and overwrite the database. Continue?": "การอัปเดตจะดึงข้อมูลล่าสุดและเขียนทับฐานข้อมูล ดำเนินการต่อหรือไม่?", "Updating...": "กำลังอัปเดต...", "If downloads fail, use concurrent 1": "หากดาวน์โหลดล้มเหลว ให้ใช้ concurrent 1", "Use Dashboard to fetch data.": "ใช้แดชบอร์ดเพื่อดึงข้อมูล", "Use code": "ใช้รหัส", "Userscript": "Userscript", "Verification failed. Please try again": "การยืนยันล้มเหลว โปรดลองอีกครั้ง", "Verified": "ยืนยันแล้ว", "Verify": "ยืนยัน", "Verifying": "กำลังยืนยัน", "Version": "เวอร์ชัน", "Video": "วิดีโอ", "for Patreon Auth, click Verify to unlock demo. Test at": "สำหรับการยืนยันตัวตน Patreon คลิกยืนยันเพื่อปลดล็อกสาธิต ทดสอบที่", "the guide": "คู่มือ", "to get your Patreon Auth code and start downloading with ease!": "เพื่อรับรหัสการยืนยันตัวตน Patreon และเริ่มดาวน์โหลดได้อย่างง่ายดาย!" } }; const tr = { "common": { "Abort": "İptal Et", "Add": "Ekle", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "@{{username}} için hesap verileri veritabanında zaten mevcut. Üzerine yazmak istiyor musunuz?", "Advanced Settings": "Gelişmiş Ayarlar", "All": "Tümü", "All Groups": "Tüm Gruplar", "Are you sure to clear all data in the database?": "Veritabanındaki tüm verileri temizlemek istediğinizden emin misiniz?", "Are you sure you want to delete account data? This action cannot be undone": "{{username}} verilerini silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", "Are you sure you want to reset settings to defaults?": "Ayarları varsayılanlara sıfırlamak istediğinizden emin misiniz?", "Auth": "Kimlik Doğrulama", "Auth Token": "Kimlik Doğrulama Jetonu", "Back": "Geri", "Batch: {{page}}": "Toplu İşlem: {{page}}", "Cancel": "İptal", "Change Language": "Dil Değiştir", "Change Theme": "Tema Değiştir", "Choose the server closest to your location for best performance": "En iyi performans için konumunuza en yakın sunucuyu seçin", "Chrome": "Chrome", "Clear": "Temizle", "Close": "Kapat", "Combined Examples:": "Birleşik Örnekler:", "Common Formats:": "Yaygın Formatlar:", "Concurrent Downloads": "Eşzamanlı İndirmeler", "Convert & Download": "Dönüştür ve İndir", "Convert Animated GIFs": "GIF Dönüştür", "Convert GIFs (External)": "GIF Dönüştür (Harici)", "Converting GIFs...": "GIF'ler dönüştürülüyor...", "Converting...": "Dönüştürülüyor...", "Copied": "Kopyalandı", "Copy": "Kopyala", "Current Media: {{current}} • Total Media: {{total}}": "Mevcut Medya: {{current}} • Toplam Medya: {{total}}", "Dashboard": "Kontrol Paneli", "Database": "Veritabanı", "Date Formats:": "Tarih Formatları:", "Date Since": "Başlangıç Tarihi", "Date Time Format": "Tarih Saat Formatı", "Date Until": "Bitiş Tarihi", "Delete": "Sil", "Delete Account Data": "Hesap Verilerini Sil", "Delete selected group": "Seçili grubu sil", "Deleting...": "Siliniyor...", "Demo mode is only available for @xbatchdemo": "Demo modu yalnızca @xbatchdemo için kullanılabilir", "Download": "İndir", "Downloading...": "İndiriliyor...", "Empty dates will fetch all available media": "Boş tarihler mevcut tüm medyayı getirecek", "Enter your Patreon auth": "Patreon kimlik doğrulamanızı girin", "Enter your auth token": "Kimlik doğrulama jetonunuzu girin", "Enter group name": "Grup adını girin", "Error:": "Hata:", "Export": "Dışa Aktar", "Exporting...": "Dışa aktarılıyor...", "Failed to download media": "Medya indirilemedi", "Failed to fetch data": "Veri alınamadı", "Failed to generate token": "Jeton oluşturulamadı", "Failed to refresh tokens": "Token'lar yenilenemedi", "Clear dates": "Tarihleri temizle", "Failed to load data": "Veri yüklenemedi", "Fetched in {{time}}": "{{time}} içinde alındı", "Fetch": "Al", "Fetch All": "Tümünü al", "Fetch GIF": "GIF al", "Fetch Image": "Resim al", "Fetch Text": "Metin al", "Fetch Video": "Video al", "Fetching...": "Alınıyor...", "Filter by Date Range": "Tarih aralığına göre filtrele", "First Page": "İlk Sayfa", "Followers": "Takipçiler", "Following": "Takip Edilenler", "Font Family": "Yazı Tipi Ailesi", "GIF": "GIF", "Generate": "Oluştur", "Generate Auth Token": "Kimlik Doğrulama Token'ı Oluştur", "Generating token...": "Jeton oluşturuluyor...", "Global Settings": "Genel Ayarlar", "Group": "Grup", "Group Account": "Hesabı Grupla", "HTTP error! status: {{status}}": "HTTP hatası! durum: {{status}}", "Home": "Ana Sayfa", "{{hours}}h ago": "{{hours}}s önce", "{{minutes}}m ago": "{{minutes}}d önce", "{{days}}d ago": "{{days}}g önce", "Image": "Resim", "Import": "İçe Aktar", "Importing...": "İçe aktarılıyor...", "Include Retweets": "Retweetleri Dahil Et", "Invalid Patreon auth": "Geçersiz Patreon kimlik doğrulaması", "Invalid Patreon auth. Please check your settings.": "Geçersiz Patreon kimlik doğrulaması. Lütfen ayarlarınızı kontrol edin.", "Invalid auth token. Please check your settings.": "Geçersiz kimlik doğrulama jetonu. Lütfen ayarlarınızı kontrol edin.", "Invalid username format": "Geçersiz kullanıcı adı formatı", "Just now": "Az önce", "Joined": "Katıldı", "Language": "Dil", "Larger size, same quality": "Daha büyük boyut, aynı kalite", "Last Page": "Son Sayfa", "Load Database": "Veritabanını Yükle", "Load from database": "Veritabanından yükle", "Localized": "Yerelleştirilmiş", "Media": "Medya", "Media: {{media}}": "Medya: {{media}}", "Need help with Auth Token? See": "Kimlik Doğrulama Jetonu için yardıma mı ihtiyacınız var? Bakın:", "Next": "Sonraki", "No accounts yet": "Henüz hesap yok", "No content available": "İçerik mevcut değil", "No media files found": "Medya dosyası bulunamadı", "Overwrite": "Üzerine Yaz", "Overwrite Existing Data?": "Mevcut Verilerin Üzerine Yazılsın mı?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Ücretli üyeler Patreon kimlik doğrulamasını doğruladıktan sonra otomatik olarak kimlik doğrulama tokenları oluşturabilir—manuel arama gerekmez.", "Patreon": "Patreon", "Patreon Auth": "Patreon Kimlik Doğrulaması", "Patreon auth verified successfully": "Patreon kimlik doğrulaması başarıyla doğrulandı", "Please configure authentication in the Auth tab first": "Lütfen önce Kimlik Doğrulama sekmesinde kimlik doğrulamayı yapılandırın", "Please enter Patreon auth first": "Lütfen önce Patreon kimlik doğrulamasını girin", "Please verify Patreon auth first": "Lütfen önce Patreon kimlik doğrulamasını doğrulayın", "Please visit a profile page for auto-detection": "Otomatik algılama için lütfen bir profil sayfasını ziyaret edin", "Posts": "Gönderiler", "Posts: {{posts}}": "Gönderiler: {{posts}}", "Prev": "Önceki", "Preview": "Önizleme", "Refresh": "Yenile", "Refreshing": "Yenileniyor", "Report bugs or request features:": "Hata bildirin veya özellik isteyin:", "Request timeout": "İstek zaman aşımı", "Reset": "Sıfırla", "Reset Settings": "Ayarları Sıfırla", "Remove Group": "Grubu Kaldır", "Resume": "Devam Et", "Server": "Sunucu", "Server Timeout": "Sunucu Zaman Aşımı", "Select a group": "Bir grup seç", "Select All": "Tümünü seç", "selected": "seçildi", "More options": "Daha fazla seçenek", "Explore Database": "Veritabanını keşfet", "Settings": "Ayarlar", "Smaller size, same quality": "Daha küçük boyut, aynı kalite", "Something went wrong.": "Bir şeyler ters gitti.", "Sound Effects": "Ses Efektleri", "Start": "Başlat", "Stop": "Durdur", "Stop Fetch": "Almayı Durdur", "Subscribe": "Abone Ol", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Patreon'da $5 karşılığında abone olun ve kimlik doğrulama kodunuz birkaç dakika içinde otomatik olarak e-posta ile gönderilecektir.", "System Default": "Sistem Varsayılanı", "Text": "Metin", "Theme": "Tema", "Time Formats:": "Saat Formatları:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Sunucu yanıtları için saniye cinsinden zaman aşımı. Zaman aşımı oluşursa otomatik olarak token oluşturun.", "Toggle visibility": "Görünürlüğü değiştir", "Token generated successfully": "Jeton başarıyla oluşturuldu ({{current}}/{{total}})", "Token generation failed. Please try again": "Jeton oluşturma başarısız. Lütfen tekrar deneyin", "Ungroup": "Grupsuz", "Update": "Güncelle", "Update will fetch the latest data and overwrite the database. Continue?": "Güncelleme en son verileri alacak ve veritabanının üzerine yazacak. Devam edilsin mi?", "Updating...": "Güncelleniyor...", "If downloads fail, use concurrent 1": "İndirmeler başarısız olursa, concurrent 1 kullanın", "Use Dashboard to fetch data.": "Veri almak için Kontrol Panelini kullanın.", "Use code": "Kodu kullan", "Userscript": "Kullanıcı Betiği", "Verification failed. Please try again": "Doğrulama başarısız. Lütfen tekrar deneyin", "Verified": "Doğrulandı", "Verify": "Doğrula", "Verifying": "Doğrulanıyor", "Version": "Sürüm", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": "Patreon Kimlik Doğrulaması için, demoyu açmak için Doğrula'ya tıklayın. Test edin:", "the guide": "kılavuz", "to get your Patreon Auth code and start downloading with ease!": "Patreon Kimlik Doğrulama kodunuzu almak ve kolayca indirmeye başlamak için!" } }; const vi = { "common": { "Abort": "Hủy bỏ", "Add": "Thêm", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "Dữ liệu tài khoản cho @{{username}} đã tồn tại trong cơ sở dữ liệu. Bạn có muốn ghi đè không?", "Advanced Settings": "Cài đặt nâng cao", "All": "Tất cả", "All Groups": "Tất cả Nhóm", "Are you sure to clear all data in the database?": "Bạn có chắc muốn xóa tất cả dữ liệu trong cơ sở dữ liệu không?", "Are you sure you want to delete account data? This action cannot be undone": "Bạn có chắc muốn xóa dữ liệu của {{username}} không? Hành động này không thể hoàn tác.", "Are you sure you want to reset settings to defaults?": "Bạn có chắc muốn đặt lại cài đặt về mặc định không?", "Auth": "Xác thực", "Auth Token": "Token xác thực", "Back": "Quay lại", "Batch: {{page}}": "Đợt: {{page}}", "Cancel": "Hủy", "Change Language": "Đổi ngôn ngữ", "Change Theme": "Đổi giao diện", "Choose the server closest to your location for best performance": "Chọn máy chủ gần vị trí của bạn nhất để có hiệu suất tốt nhất", "Chrome": "Chrome", "Clear": "Xóa", "Close": "Đóng", "Combined Examples:": "Ví dụ kết hợp:", "Common Formats:": "Định dạng phổ biến:", "Concurrent Downloads": "Tải xuống đồng thời", "Convert & Download": "Chuyển đổi và Tải xuống", "Convert Animated GIFs": "Chuyển đổi GIF", "Convert GIFs (External)": "Chuyển đổi GIF (Bên ngoài)", "Converting GIFs...": "Đang chuyển đổi GIF...", "Converting...": "Đang chuyển đổi...", "Copied": "Đã sao chép", "Copy": "Sao chép", "Current Media: {{current}} • Total Media: {{total}}": "Phương tiện hiện tại: {{current}} • Tổng phương tiện: {{total}}", "Dashboard": "Bảng điều khiển", "Database": "Cơ sở dữ liệu", "Date Formats:": "Định dạng ngày:", "Date Since": "Ngày Từ", "Date Time Format": "Định dạng ngày giờ", "Date Until": "Ngày Đến", "Delete": "Xóa", "Delete Account Data": "Xóa dữ liệu tài khoản", "Delete selected group": "Xóa nhóm đã chọn", "Deleting...": "Đang xóa...", "Demo mode is only available for @xbatchdemo": "Chế độ demo chỉ khả dụng cho @xbatchdemo", "Download": "Tải xuống", "Downloading...": "Đang tải xuống...", "Empty dates will fetch all available media": "Ngày trống sẽ tải tất cả phương tiện có sẵn", "Enter your Patreon auth": "Nhập xác thực Patreon của bạn", "Enter your auth token": "Nhập token xác thực của bạn", "Enter group name": "Nhập tên nhóm", "Error:": "Lỗi:", "Export": "Xuất", "Exporting...": "Đang xuất...", "Failed to download media": "Không thể tải xuống phương tiện", "Failed to fetch data": "Không thể lấy dữ liệu", "Failed to generate token": "Không thể tạo token", "Failed to refresh tokens": "Không thể làm mới token", "Clear dates": "Xóa ngày tháng", "Failed to load data": "Không thể tải dữ liệu", "Fetched in {{time}}": "Đã lấy trong {{time}}", "Fetch": "Lấy", "Fetch All": "Lấy tất cả", "Fetch GIF": "Lấy GIF", "Fetch Image": "Lấy hình ảnh", "Fetch Text": "Lấy văn bản", "Fetch Video": "Lấy video", "Fetching...": "Đang lấy...", "Filter by Date Range": "Lọc theo khoảng ngày", "First Page": "Trang Đầu", "Followers": "Người theo dõi", "Following": "Đang theo dõi", "Font Family": "Họ Phông Chữ", "GIF": "GIF", "Generate": "Tạo", "Generate Auth Token": "Tạo Token Xác thực", "Generating token...": "Đang tạo token...", "Global Settings": "Cài đặt chung", "Group": "Nhóm", "Group Account": "Nhóm Tài khoản", "HTTP error! status: {{status}}": "Lỗi HTTP! trạng thái: {{status}}", "Home": "Trang chủ", "{{hours}}h ago": "{{hours}}h trước", "{{minutes}}m ago": "{{minutes}}m trước", "{{days}}d ago": "{{days}}d trước", "Image": "Hình ảnh", "Import": "Nhập", "Importing...": "Đang nhập...", "Include Retweets": "Bao gồm Retweet", "Invalid Patreon auth": "Xác thực Patreon không hợp lệ", "Invalid Patreon auth. Please check your settings.": "Xác thực Patreon không hợp lệ. Vui lòng kiểm tra cài đặt của bạn.", "Invalid auth token. Please check your settings.": "Token xác thực không hợp lệ. Vui lòng kiểm tra cài đặt của bạn.", "Invalid username format": "Định dạng tên người dùng không hợp lệ", "Just now": "Vừa xong", "Joined": "Đã tham gia", "Language": "Ngôn ngữ", "Larger size, same quality": "Kích thước lớn hơn, chất lượng tương tự", "Last Page": "Trang Cuối", "Load Database": "Tải Cơ Sở Dữ Liệu", "Load from database": "Tải từ cơ sở dữ liệu", "Localized": "Đã bản địa hóa", "Media": "Phương tiện", "Media: {{media}}": "Phương tiện: {{media}}", "Need help with Auth Token? See": "Cần trợ giúp với Token xác thực? Xem", "Next": "Tiếp", "No accounts yet": "Chưa có tài khoản", "No content available": "Không có nội dung khả dụng", "No media files found": "Không tìm thấy tệp phương tiện", "Overwrite": "Ghi đè", "Overwrite Existing Data?": "Ghi đè dữ liệu hiện có?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "Thành viên trả phí có thể tự động tạo token xác thực sau khi xác minh Patreon auth—không cần tìm kiếm thủ công.", "Patreon": "Patreon", "Patreon Auth": "Xác thực Patreon", "Patreon auth verified successfully": "Xác thực Patreon thành công", "Please configure authentication in the Auth tab first": "Vui lòng cấu hình xác thực trong tab Xác thực trước", "Please enter Patreon auth first": "Vui lòng nhập xác thực Patreon trước", "Please verify Patreon auth first": "Vui lòng xác minh xác thực Patreon trước", "Please visit a profile page for auto-detection": "Vui lòng truy cập trang hồ sơ để tự động phát hiện", "Posts": "Bài viết", "Posts: {{posts}}": "Bài viết: {{posts}}", "Prev": "Trước", "Preview": "Xem trước", "Refresh": "Làm mới", "Refreshing": "Đang làm mới", "Report bugs or request features:": "Báo cáo lỗi hoặc yêu cầu tính năng:", "Request timeout": "Hết thời gian yêu cầu", "Reset": "Đặt lại", "Reset Settings": "Đặt lại cài đặt", "Remove Group": "Xóa Nhóm", "Resume": "Tiếp tục", "Server": "Máy chủ", "Server Timeout": "Hết thời gian chờ máy chủ", "Select a group": "Chọn một nhóm", "Select All": "Chọn tất cả", "selected": "đã chọn", "More options": "Tùy chọn khác", "Explore Database": "Khám phá cơ sở dữ liệu", "Settings": "Cài đặt", "Smaller size, same quality": "Kích thước nhỏ hơn, chất lượng tương tự", "Something went wrong.": "Đã xảy ra lỗi.", "Sound Effects": "Hiệu Ứng Âm Thanh", "Start": "Bắt đầu", "Stop": "Dừng", "Stop Fetch": "Dừng Lấy dữ liệu", "Subscribe": "Đăng ký", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "Đăng ký $5 trên Patreon và mã xác thực của bạn sẽ được tự động gửi qua email trong vòng vài phút.", "System Default": "Mặc Định Hệ Thống", "Text": "Văn bản", "Theme": "Giao diện", "Time Formats:": "Định dạng giờ:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "Thời gian chờ cho phản hồi máy chủ tính bằng giây. Tự động tạo token nếu xảy ra hết thời gian chờ.", "Toggle visibility": "Chuyển đổi hiển thị", "Token generated successfully": "Tạo token thành công ({{current}}/{{total}})", "Token generation failed. Please try again": "Tạo token thất bại. Vui lòng thử lại", "Ungroup": "Không Nhóm", "Update": "Cập nhật", "Update will fetch the latest data and overwrite the database. Continue?": "Cập nhật sẽ lấy dữ liệu mới nhất và ghi đè cơ sở dữ liệu. Tiếp tục?", "Updating...": "Đang cập nhật...", "If downloads fail, use concurrent 1": "Nếu tải xuống thất bại, sử dụng concurrent 1", "Use Dashboard to fetch data.": "Sử dụng Bảng điều khiển để lấy dữ liệu.", "Use code": "Sử dụng mã", "Userscript": "Userscript", "Verification failed. Please try again": "Xác minh thất bại. Vui lòng thử lại", "Verified": "Đã xác minh", "Verify": "Xác minh", "Verifying": "Đang xác minh", "Version": "Phiên bản", "Video": "Video", "for Patreon Auth, click Verify to unlock demo. Test at": "cho Xác thực Patreon, nhấp Xác minh để mở khóa demo. Thử nghiệm tại", "the guide": "hướng dẫn", "to get your Patreon Auth code and start downloading with ease!": "để nhận mã Xác thực Patreon và bắt đầu tải xuống dễ dàng!" } }; const zh_Hans = { "common": { "Abort": "中止", "Add": "添加", "Account data for @{{username}} already exists in the database. Do you want to overwrite it?": "账户 @{{username}} 的数据已存在于数据库中。您要覆盖吗?", "Advanced Settings": "高级设置", "All": "全部", "All Groups": "所有组", "Are you sure to clear all data in the database?": "确定要清空数据库中的所有数据吗?", "Are you sure you want to delete account data? This action cannot be undone": "您确定要删除 {{username}} 的数据吗?此操作无法撤销。", "Are you sure you want to reset settings to defaults?": "确定要将设置重置为默认值吗?", "Auth": "认证", "Auth Token": "认证令牌", "Back": "返回", "Batch: {{page}}": "批次:{{page}}", "Cancel": "取消", "Change Language": "更改语言", "Change Theme": "更改主题", "Choose the server closest to your location for best performance": "选择离您最近的服务器以获得最佳性能", "Chrome": "Chrome", "Clear": "清空", "Close": "关闭", "Combined Examples:": "组合示例:", "Common Formats:": "常用格式:", "Concurrent Downloads": "并发下载", "Convert & Download": "转换并下载", "Convert Animated GIFs": "转换 GIF", "Convert GIFs (External)": "转换 GIF(外部)", "Converting GIFs...": "正在转换 GIF...", "Converting...": "转换中...", "Copied": "已复制", "Copy": "复制", "Current Media: {{current}} • Total Media: {{total}}": "当前媒体:{{current}} • 总媒体:{{total}}", "Dashboard": "仪表板", "Database": "数据库", "Date Formats:": "日期格式:", "Date Since": "开始日期", "Date Time Format": "日期时间格式", "Date Until": "结束日期", "Delete": "删除", "Delete Account Data": "删除账户数据", "Delete selected group": "删除选定的组", "Deleting...": "正在删除...", "Demo mode is only available for @xbatchdemo": "演示模式仅适用于 @xbatchdemo", "Download": "下载", "Downloading...": "正在下载...", "Empty dates will fetch all available media": "空日期将获取所有可用媒体", "Enter your Patreon auth": "输入您的 Patreon 认证", "Enter your auth token": "输入您的认证令牌", "Enter group name": "输入组名", "Error:": "错误:", "Export": "导出", "Exporting...": "正在导出...", "Failed to download media": "下载媒体失败", "Failed to fetch data": "获取数据失败", "Failed to generate token": "生成令牌失败", "Failed to refresh tokens": "刷新令牌失败", "Clear dates": "清除日期", "Failed to load data": "加载数据失败", "Fetched in {{time}}": "在 {{time}} 内获取", "Fetch": "获取", "Fetch All": "获取全部", "Fetch GIF": "获取 GIF", "Fetch Image": "获取图片", "Fetch Text": "获取文本", "Fetch Video": "获取视频", "Fetching...": "正在获取...", "Filter by Date Range": "按日期范围过滤", "First Page": "第一页", "Followers": "粉丝", "Following": "正在关注", "Font Family": "字体系列", "GIF": "GIF", "Generate": "生成", "Generate Auth Token": "生成认证令牌", "Generating token...": "正在生成令牌...", "Global Settings": "全局设置", "Group": "组", "Group Account": "分组账户", "HTTP error! status: {{status}}": "HTTP 错误!状态:{{status}}", "Home": "主页", "{{hours}}h ago": "{{hours}}小时前", "{{minutes}}m ago": "{{minutes}}分钟前", "{{days}}d ago": "{{days}}天前", "Image": "图片", "Import": "导入", "Importing...": "正在导入...", "Include Retweets": "包含转推", "Invalid Patreon auth": "无效的 Patreon 认证", "Invalid Patreon auth. Please check your settings.": "无效的 Patreon 认证,请检查您的设置。", "Invalid auth token. Please check your settings.": "无效的认证令牌,请检查您的设置。", "Invalid username format": "无效的用户名格式", "Just now": "刚刚", "Joined": "加入时间", "Language": "语言", "Larger size, same quality": "体积更大,质量相同", "Last Page": "最后一页", "Load Database": "加载数据库", "Load from database": "从数据库加载", "Localized": "本地化", "Media": "媒体", "Media: {{media}}": "媒体:{{media}}", "Need help with Auth Token? See": "需要获取认证令牌的帮助?请查看", "Next": "下一页", "No accounts yet": "尚未有账户", "No content available": "无可用内容", "No media files found": "未找到媒体文件", "Overwrite": "覆盖", "Overwrite Existing Data?": "覆盖现有数据?", "Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required.": "付费会员在验证 Patreon 身份验证后可以自动生成身份验证令牌—无需手动搜索。", "Patreon": "Patreon", "Patreon Auth": "Patreon 认证", "Patreon auth verified successfully": "Patreon 认证验证成功", "Please configure authentication in the Auth tab first": "请先在认证选项卡中配置身份验证", "Please enter Patreon auth first": "请先输入 Patreon 认证", "Please verify Patreon auth first": "请先验证 Patreon 认证", "Please visit a profile page for auto-detection": "请访问个人资料页面进行自动检测", "Posts": "帖子", "Posts: {{posts}}": "帖子:{{posts}}", "Prev": "上一页", "Preview": "预览", "Refresh": "刷新", "Refreshing": "刷新中", "Report bugs or request features:": "报告问题或请求功能:", "Request timeout": "请求超时", "Reset": "重置", "Reset Settings": "重置设置", "Remove Group": "移除组", "Resume": "继续", "Server": "服务器", "Server Timeout": "服务器超时", "Select a group": "选择一个组", "Select All": "全选", "selected": "已选择", "More options": "更多选项", "Explore Database": "浏览数据库", "Settings": "设置", "Smaller size, same quality": "体积更小,质量相同", "Something went wrong.": "出错了。", "Sound Effects": "音效", "Start": "开始", "Stop": "停止", "Stop Fetch": "停止获取", "Subscribe": "订阅", "Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes.": "在 Patreon 上订阅 $5,您的身份验证代码将在几分钟内自动通过电子邮件发送给您。", "System Default": "系统默认", "Text": "文本", "Theme": "主题", "Time Formats:": "时间格式:", "Timeout for server responses in seconds. Auto-generate token if timeout occurs.": "服务器响应的超时时间(秒)。如果发生超时,自动生成令牌。", "Toggle visibility": "显示/隐藏", "Token generated successfully": "令牌生成成功 ({{current}}/{{total}})", "Token generation failed. Please try again": "令牌生成失败,请重试", "Ungroup": "未分组", "Update": "更新", "Update will fetch the latest data and overwrite the database. Continue?": "更新将获取最新数据并覆盖数据库。继续吗?", "Updating...": "更新中...", "If downloads fail, use concurrent 1": "如果下载失败,请使用 concurrent 1", "Use Dashboard to fetch data.": "使用仪表板获取数据。", "Use code": "使用代码", "Userscript": "用户脚本", "Verification failed. Please try again": "验证失败,请重试", "Verified": "已验证", "Verify": "验证", "Verifying": "正在验证", "Version": "版本", "Video": "视频", "for Patreon Auth, click Verify to unlock demo. Test at": "用于 Patreon 认证,点击“验证”以解锁演示。测试地址:", "the guide": "指南", "to get your Patreon Auth code and start downloading with ease!": "即可获取您的 Patreon 认证码,轻松开始下载!" } }; const resources = { "ar": ar, "de": de, "en": en$1, "es": es, "fil": fil, "fr": fr, "hi": hi, "id": id, "it": it, "ja": ja, "ko": ko, "nl": nl, "pt": pt, "ru": ru, "th": th, "tr": tr, "vi": vi, "zh-Hans": zh_Hans }; const logLinesSignal = signals.signal([]); const APP_NAME = "twitter-x-media-batch-downloader-pro"; class Logger { index = 0; buffer = []; bufferTimer = null; info(line, ...args) { this.writeBuffer({ type: "info", line, index: this.index++ }); } warn(line, ...args) { this.writeBuffer({ type: "warn", line, index: this.index++ }); } error(line, ...args) { console.error(`[${APP_NAME}]`, line, ...args); this.writeBuffer({ type: "error", line, index: this.index++ }); } errorWithBanner(msg, err, ...args) { this.error( `${msg} (Message: ${err?.message ?? "none"}) Report bugs: [email protected]`, ...args ); } writeBuffer(log) { this.buffer.push(log); if (this.bufferTimer) { clearTimeout(this.bufferTimer); } this.bufferTimer = window.setTimeout(() => { this.bufferTimer = null; this.flushBuffer(); }, 0); } flushBuffer() { logLinesSignal.value = [...logLinesSignal.value, ...this.buffer]; this.buffer = []; } } const logger = new Logger(); function safeJSONParse(text) { try { return JSON.parse(text); } catch (e) { logger.error(e.message); return null; } } function cx(...classNames) { return classNames.filter(Boolean).join(" "); } function isEqual(obj1, obj2) { return JSON.stringify(obj1) === JSON.stringify(obj2); } function formatDateTime(date, format) { if (typeof date === "number" || typeof date === "string") { date = dayjs(date); } return date.format(format); } function sanitizeFilename(name) { return name.replace(/[\\/:*?"<>|]/g, "-").replace(/\s+/g, "_").replace(/_+/g, "_").replace(/^_+|_+$/g, ""); } const version = "1.1.1"; const pkg = { version }; const DEFAULT_APP_OPTIONS = { theme: "light", soundEffects: true, dateTimeFormat: "YYYY-MM-DD HH:mm:ss Z", language: "en", fontFamily: "system", version: pkg.version, convertAnimatedGifs: false, convertGifsExternal: false, downloadConcurrency: 1, mediaType: "all", includeRetweets: false, apiServer: "washington", apiTimeout: 60 }; const THEMES = [ "abyss", "acid", "aqua", "autumn", "black", "bumblebee", "business", "caramellatte", "cmyk", "coffee", "corporate", "cupcake", "cyberpunk", "dark", "dim", "dracula", "emerald", "fantasy", "forest", "garden", "halloween", "lemonade", "light", "lofi", "luxury", "night", "nord", "pastel", "retro", "silk", "sunset", "synthwave", "valentine", "winter", "wireframe" ]; const LOCAL_STORAGE_KEY = "twitter-x-media-batch-downloader-pro"; class AppOptionsManager { appOptions = { ...DEFAULT_APP_OPTIONS }; previous = { ...DEFAULT_APP_OPTIONS }; signal = new signals.Signal(0); constructor() { this.loadAppOptions(); } get(key, defaultValue) { return this.appOptions[key] ?? defaultValue; } set(key, value) { this.appOptions[key] = value; this.saveAppOptions(); } loadAppOptions() { const stored = safeJSONParse(localStorage.getItem(LOCAL_STORAGE_KEY) || "{}"); const migrated = { ...stored }; if ("fetchMode" in migrated) { delete migrated.fetchMode; } if ("timelineType" in migrated) { delete migrated.timelineType; } if (migrated.mediaType && !["all", "image", "video", "gif", "text"].includes(migrated.mediaType)) { migrated.mediaType = "all"; } const oldApiServers = { "oregon": "washington" }; if (migrated.apiServer && oldApiServers[migrated.apiServer]) { migrated.apiServer = oldApiServers[migrated.apiServer]; } this.appOptions = { ...this.appOptions, ...migrated }; const oldVersion = this.appOptions.version ?? ""; const newVersion = DEFAULT_APP_OPTIONS.version; if (JSON.stringify(stored) !== JSON.stringify(migrated)) { setTimeout(() => this.saveAppOptions(), 0); } else if (newVersion.startsWith("1.1") && oldVersion.startsWith("1.0")) { setTimeout(() => this.saveAppOptions(), 0); } this.previous = { ...this.appOptions }; this.signal.value++; } saveAppOptions() { const oldValue = this.previous; const newValue = { ...this.appOptions, version: pkg.version }; if (isEqual(oldValue, newValue)) { return; } this.appOptions = newValue; localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(this.appOptions)); this.previous = { ...this.appOptions }; this.signal.value++; } } const appOptionsManager = new AppOptionsManager(); const LANGUAGES_CONFIG = { ar: { name: "العربية", nameEn: "Arabic (العربية)", test: (code) => /^ar/.test(code) }, "zh-Hans": { name: "中文", nameEn: "Chinese (中文)", test: (code) => /^zh/.test(code) }, nl: { name: "Nederlands", nameEn: "Dutch (Nederlands)", test: (code) => /^nl/.test(code) }, en: { name: "English", nameEn: "English", test: (code) => /^en/.test(code) }, fil: { name: "Filipino", nameEn: "Filipino", test: (code) => /^fil/.test(code) }, fr: { name: "Français", nameEn: "French (Français)", test: (code) => /^fr/.test(code) }, de: { name: "Deutsch", nameEn: "German (Deutsch)", test: (code) => /^de/.test(code) }, hi: { name: "हिन्दी", nameEn: "Hindi (हिन्दी)", test: (code) => /^hi/.test(code) }, id: { name: "Bahasa Indonesia", nameEn: "Indonesian (Bahasa Indonesia)", test: (code) => /^id/.test(code) }, it: { name: "Italiano", nameEn: "Italian (Italiano)", test: (code) => /^it/.test(code) }, ja: { name: "日本語", nameEn: "Japanese (日本語)", test: (code) => /^ja/.test(code) }, ko: { name: "한국어", nameEn: "Korean (한국어)", test: (code) => /^ko/.test(code) }, pt: { name: "Português", nameEn: "Portuguese (Português)", test: (code) => /^pt/.test(code) }, ru: { name: "Русский", nameEn: "Russian (Русский)", test: (code) => /^ru/.test(code) }, es: { name: "Español", nameEn: "Spanish (Español)", test: (code) => /^es/.test(code) }, th: { name: "ไทย", nameEn: "Thai (ไทย)", test: (code) => /^th/.test(code) }, tr: { name: "Türkçe", nameEn: "Turkish (Türkçe)", test: (code) => /^tr/.test(code) }, vi: { name: "Tiếng Việt", nameEn: "Vietnamese (Tiếng Việt)", test: (code) => /^vi/.test(code) } }; function detectBrowserLanguage() { const language = window.navigator.language || "en"; for (const [langTag, langConf] of Object.entries(LANGUAGES_CONFIG)) { if (langConf.test(language)) { return langTag; } } return language; } const languageDetector = { type: "languageDetector", detect: function() { return appOptionsManager.get("language") || detectBrowserLanguage(); } }; function initI18n() { if (i18next.isInitialized) { return i18next; } i18next.on("languageChanged", (lng) => { if (!appOptionsManager.get("language")) { appOptionsManager.set("language", lng); } }); i18next.use(languageDetector).init({ initImmediate: true, defaultNS: "common", fallbackLng: "en", nsSeparator: "::", debug: false, resources }); return i18next; } function useTranslation(ns) { const i18n = initI18n(); const [t, setT] = hooks.useState(() => i18n.getFixedT(null, ns ?? null)); const isMountedRef = hooks.useRef(true); const previousNamespaceRef = hooks.useRef(ns); hooks.useEffect(() => { isMountedRef.current = true; if (previousNamespaceRef.current !== ns) { previousNamespaceRef.current = ns; setT(() => i18n.getFixedT(null, ns ?? null)); } function boundReset() { if (isMountedRef.current) { setT(() => i18n.getFixedT(null, ns ?? null)); } } i18n.on("languageChanged", boundReset); return () => { isMountedRef.current = false; i18n.off("languageChanged", boundReset); }; }, [ns]); return { t, i18n }; } function Trans({ i18nKey, ns = "common" }) { const { t } = useTranslation(ns); return u("span", { children: t(i18nKey) }); } class ErrorBoundary extends preact.Component { state = { error: null }; static getDerivedStateFromError(err) { return { error: err.message }; } componentDidCatch(err) { logger.error(err.message, err); this.setState({ error: err.message }); } render() { const i18n = initI18n(); const isArabic = (i18n.language || "").startsWith("ar"); if (this.state.error) { return u("div", { class: "alert alert-error alert-soft p-2", children: [ u(IconExclamationCircle, {}), u("div", { dir: isArabic ? "rtl" : void 0, children: [ u("h3", { class: "font-bold leading-normal", children: u(Trans, { ns: "common", i18nKey: "Something went wrong." }) }), u("p", { class: "text-xs", children: [ u(Trans, { ns: "common", i18nKey: "Error:" }), " ", this.state.error ] }) ] }) ] }); } return this.props.children; } } const API_SERVERS = { stockholm: "https://eu-north-1.exyezed.cc", mumbai: "https://ap-south-1.exyezed.cc", paris: "https://eu-west-3.exyezed.cc", cleveland: "https://us-east-2.exyezed.cc", capetown: "https://af-south-1.exyezed.cc", dublin: "https://eu-west-1.exyezed.cc", dubai: "https://me-central-1.exyezed.cc", frankfurt: "https://eu-central-1.exyezed.cc", saopaulo: "https://sa-east-1.exyezed.cc", hongkong: "https://ap-east-1.exyezed.cc", tokyo: "https://ap-northeast-1.exyezed.cc", washington: "https://us-east-1.exyezed.cc", seoul: "https://ap-northeast-2.exyezed.cc", osaka: "https://ap-northeast-3.exyezed.cc", london: "https://eu-west-2.exyezed.cc", portland: "https://us-west-2.exyezed.cc", sanfrancisco: "https://us-west-1.exyezed.cc", singapore: "https://ap-southeast-1.exyezed.cc", sydney: "https://ap-southeast-2.exyezed.cc" }; function getAPITimeout() { const timeout = appOptionsManager.get("apiTimeout") ?? 60; return Math.min(Math.max(timeout, 1), 300) * 1e3; } function getSelectedServer() { const server = appOptionsManager.get("apiServer") ?? "washington"; return API_SERVERS[server] || API_SERVERS.washington; } const mediaDownloaderAPI = { async fetchMediaData(username, authToken, patreonAuth, params) { const mediaType = params?.mediaType ?? "all"; const dateSince = params?.dateSince; const dateUntil = params?.dateUntil; const includeRetweets = params?.includeRetweets ?? false; const onProgress = params?.onProgress; const abortSignal = params?.abortSignal; const selectedServer = getSelectedServer(); let endpoint; let baseRequestBody; if (dateSince || dateUntil) { endpoint = "/date"; baseRequestBody = { username, auth_token: authToken, start_date: dateSince || "", end_date: dateUntil || "", media_filter: mediaType, retweets: includeRetweets, batch_size: 200, patreon_auth: patreonAuth === "xbatchdemo" ? null : patreonAuth, demo_code: patreonAuth === "xbatchdemo" ? "xbatchdemo" : null }; } else { endpoint = "/timeline"; let timelineType; if (mediaType === "text" || includeRetweets) { timelineType = "tweets"; } else { timelineType = "timeline"; } baseRequestBody = { username, auth_token: authToken, timeline_type: timelineType, batch_size: 200, media_type: mediaType, retweets: includeRetweets, patreon_auth: patreonAuth === "xbatchdemo" ? null : patreonAuth, demo_code: patreonAuth === "xbatchdemo" ? "xbatchdemo" : null }; } let allTimeline = []; let allAccountInfo = null; let cursor = params?.initialCursor || null; let completed = false; let totalFetched = 0; const seenKeys = new Set(); const globalTimeout = getAPITimeout(); let fetchCompleted = false; const globalTimeoutId = setTimeout(() => { if (!fetchCompleted && abortSignal && !abortSignal.aborted) { const callback = abortSignal.__timeoutCallback; if (callback && typeof callback === "function") { callback(); } else { abortSignal.abort?.(); } } }, globalTimeout); try { while (!completed && !abortSignal?.aborted) { const requestBody = { ...baseRequestBody, cursor: cursor || void 0 }; if (abortSignal?.aborted) { break; } const batchResponse = await this.makePostRequest(selectedServer + endpoint, requestBody, abortSignal); if (abortSignal?.aborted) { break; } const newTimelineItems = batchResponse.timeline || []; const deduplicatedItems = []; const seenTweetIds = new Set(); for (const item of newTimelineItems) { const key = `${item.tweet_id}|${item.url || ""}`; if (!seenKeys.has(key)) { seenKeys.add(key); deduplicatedItems.push(item); } } if (deduplicatedItems.length > 0) { allTimeline.push(...deduplicatedItems); totalFetched += deduplicatedItems.length; } if (!allAccountInfo && batchResponse.account_info) { allAccountInfo = batchResponse.account_info; } cursor = batchResponse.cursor || batchResponse.metadata?.cursor || null; const responseCompleted = batchResponse.completed ?? batchResponse.metadata?.completed ?? false; const hasMore = !!cursor && !responseCompleted; completed = !cursor || responseCompleted; if (abortSignal?.aborted) { break; } if (!abortSignal?.aborted && onProgress && deduplicatedItems.length > 0) { onProgress(totalFetched, deduplicatedItems.length, cursor, deduplicatedItems, allAccountInfo || void 0); } if (abortSignal?.aborted) { break; } if (!hasMore) { break; } if (!abortSignal?.aborted) { await new Promise((resolve) => setTimeout(resolve, 100)); } } clearTimeout(globalTimeoutId); if (abortSignal?.aborted && cursor) { return { account_info: allAccountInfo || { name: username, nick: username, date: "", followers_count: 0, friends_count: 0, profile_image: "", statuses_count: 0 }, timeline: allTimeline, metadata: { batch_size: 200, cursor, has_more: true, new_entries: allTimeline.length, page: 0 }, cursor, completed: false }; } fetchCompleted = true; if (allTimeline.length === 0) { const emptyResponse = { account_info: allAccountInfo || { name: username, nick: username, date: "", followers_count: 0, friends_count: 0, profile_image: "", statuses_count: 0 }, metadata: { batch_size: 200, cursor, has_more: false, new_entries: 0, page: 0 }, timeline: [] }; this.validateNonEmptyResult(emptyResponse); return emptyResponse; } const finalResponse = { account_info: allAccountInfo || { name: username, nick: username, date: "", followers_count: 0, friends_count: 0, profile_image: "", statuses_count: 0 }, metadata: { batch_size: 200, cursor: cursor || null, has_more: !completed && cursor !== null, new_entries: allTimeline.length, page: 0 }, timeline: allTimeline }; return finalResponse; } catch (error) { clearTimeout(globalTimeoutId); fetchCompleted = true; if (allTimeline.length > 0) { return { account_info: allAccountInfo || { name: username, nick: username, date: "", followers_count: 0, friends_count: 0, profile_image: "", statuses_count: 0 }, metadata: { batch_size: 200, cursor, has_more: !completed && cursor !== null, new_entries: totalFetched, page: 0 }, timeline: allTimeline }; } throw error; } finally { clearTimeout(globalTimeoutId); } }, createAPIError(message, status) { let type = "unknown"; let isRetryable = false; if (status === 400) { type = "validation"; isRetryable = false; } else if (status === 401) { type = "authentication"; isRetryable = false; } else if (status === 500) { type = "server"; if (message.includes("Could not authenticate you") || message.includes("401") || message.includes("Unauthorized")) { isRetryable = true; } else { isRetryable = true; } } else if (message.includes("Network error") || message.includes("timeout")) { type = "network"; isRetryable = true; } return { message, status, type, isRetryable }; }, async makeRequest(url) { return new Promise((resolve, reject) => { if (typeof GM_xmlhttpRequest !== "undefined") { GM_xmlhttpRequest({ method: "GET", url, timeout: getAPITimeout(), headers: { "Accept": "application/json", "Content-Type": "application/json" }, onload: (response) => { try { if (response.status === 400) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 400); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status === 401) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 401); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status === 500) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 500); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status !== 200) { const apiError = this.createAPIError(`HTTP error! status: ${response.status}`, response.status); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } const data = JSON.parse(response.responseText); if (!this.validateResponse(data)) { const apiError = this.createAPIError("Invalid API response structure"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } resolve(data); } catch (parseError) { if (parseError instanceof Error && parseError.message.startsWith("Invalid")) { reject(parseError); } else { const apiError = this.createAPIError("Failed to parse API response"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); } } }, onerror: () => { const apiError = this.createAPIError("Network error occurred"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); }, ontimeout: () => { const apiError = this.createAPIError("Request timeout - please try again"); apiError.isRetryable = true; const error = new Error(apiError.message); error.apiError = apiError; reject(error); } }); } else { this.makeRequestWithFetch(url).then(resolve).catch(reject); } }); }, async makePostRequest(url, body, abortSignal) { return new Promise((resolve, reject) => { if (typeof GM_xmlhttpRequest !== "undefined") { GM_xmlhttpRequest({ method: "POST", url, timeout: getAPITimeout(), headers: { "Accept": "application/json", "Content-Type": "application/json" }, data: JSON.stringify(body), onload: (response) => { try { if (response.status === 400) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 400); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status === 401) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 401); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status === 500) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 500); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } if (response.status !== 200) { const apiError = this.createAPIError(`HTTP error! status: ${response.status}`, response.status); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } const data = JSON.parse(response.responseText); if (!this.validateResponse(data)) { const apiError = this.createAPIError("Invalid API response structure"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); return; } resolve(data); } catch (parseError) { if (parseError instanceof Error && parseError.message.startsWith("Invalid")) { reject(parseError); } else { const apiError = this.createAPIError("Failed to parse API response"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); } } }, onerror: () => { const apiError = this.createAPIError("Network error occurred"); const error = new Error(apiError.message); error.apiError = apiError; reject(error); }, ontimeout: () => { const apiError = this.createAPIError("Request timeout - please try again"); const error = new Error(apiError.message); error.apiError = apiError; error.apiError.isRetryable = true; reject(error); } }); } else { this.makePostRequestWithFetch(url, body).then(resolve).catch(reject); } }); }, async makeRequestWithFetch(url) { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), getAPITimeout()); try { const response = await fetch(url, { method: "GET", signal: controller.signal, headers: { "Accept": "application/json", "Content-Type": "application/json" } }); clearTimeout(timeoutId); if (response.status === 400) { const errorData = await response.json(); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 400); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (response.status === 401) { const errorData = await response.json(); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 401); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (response.status === 500) { const errorData = await response.json(); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 500); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (!response.ok) { const apiError = this.createAPIError(`HTTP error! status: ${response.status}`, response.status); const error = new Error(apiError.message); error.apiError = apiError; throw error; } const data = await response.json(); if (!this.validateResponse(data)) { const apiError = this.createAPIError("Invalid API response structure"); const error = new Error(apiError.message); error.apiError = apiError; throw error; } return data; } catch (error) { clearTimeout(timeoutId); if (error instanceof Error) { if (error.name === "AbortError") { const apiError2 = this.createAPIError("Request timeout - please try again"); const err2 = new Error(apiError2.message); err2.apiError = apiError2; err2.apiError.isRetryable = true; throw err2; } throw error; } const apiError = this.createAPIError("Unknown error occurred"); const err = new Error(apiError.message); err.apiError = apiError; throw err; } }, async makePostRequestWithFetch(url, body, abortSignal) { if (abortSignal?.aborted) { const apiError = this.createAPIError("Request aborted"); const error = new Error(apiError.message); error.apiError = apiError; throw error; } const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), getAPITimeout()); if (abortSignal) { abortSignal.addEventListener("abort", () => { controller.abort(); }); } try { const response = await fetch(url, { method: "POST", signal: controller.signal, headers: { "Accept": "application/json", "Content-Type": "application/json" }, body: JSON.stringify(body) }); clearTimeout(timeoutId); if (response.status === 400) { const errorData = await response.json(); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 400); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (response.status === 401) { const errorData = await response.json(); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 401); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (response.status === 500) { const errorData = await response.json(); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; const apiError = this.createAPIError(errorMsg, 500); const error = new Error(apiError.message); error.apiError = apiError; throw error; } if (!response.ok) { const apiError = this.createAPIError(`HTTP error! status: ${response.status}`, response.status); const error = new Error(apiError.message); error.apiError = apiError; throw error; } const data = await response.json(); if (!this.validateResponse(data)) { const apiError = this.createAPIError("Invalid API response structure"); const error = new Error(apiError.message); error.apiError = apiError; throw error; } return data; } catch (error) { clearTimeout(timeoutId); if (error instanceof Error) { if (error.name === "AbortError") { const apiError2 = this.createAPIError("Request timeout - please try again"); const err2 = new Error(apiError2.message); err2.apiError = apiError2; err2.apiError.isRetryable = true; throw err2; } throw error; } const apiError = this.createAPIError("Unknown error occurred"); const err = new Error(apiError.message); err.apiError = apiError; throw err; } }, validateResponse(data) { return data && typeof data === "object" && data.account_info && typeof data.account_info === "object" && data.metadata && typeof data.metadata === "object" && Array.isArray(data.timeline); }, formatUsername(username) { return username.replace(/^@/, "").trim().toLowerCase(); }, validateUsername(username) { const cleanUsername = this.formatUsername(username); return /^[a-zA-Z0-9_]{1,15}$/.test(cleanUsername); }, validateNonEmptyResult(data) { const isEmpty = data.timeline.length === 0 && (data.metadata.items_processed === 0 || data.metadata.new_entries === 0); if (isEmpty) { const isDateRangeSearch = !!data.metadata.date_range; let errorMsg = ""; let errorData = void 0; if (isDateRangeSearch) { const { since, until } = data.metadata.date_range; errorMsg = "No media found for date range {{since}} to {{until}}"; errorData = { since, until }; } else if (data.metadata.items_processed === 0) { errorMsg = "No tweets found for this account"; } else { errorMsg = "No media found in {{count}} tweets"; errorData = { count: data.metadata.items_processed }; } const apiError = this.createAPIError(errorMsg, 404); apiError.type = "validation"; apiError.isRetryable = false; const error = new Error(errorMsg); error.apiError = apiError; error.errorData = errorData; throw error; } }, validateAuthToken(token) { return token.trim().length > 10; }, validatePatreonAuth(auth) { return auth.trim().length > 0; }, async verifyPatreonAuth(patreonAuth) { if (patreonAuth === "xbatchdemo") { return { valid: true }; } const endpoint = "/verify"; const selectedServer = getSelectedServer(); const url = selectedServer + endpoint; const requestBody = { patreon_auth: patreonAuth }; return new Promise((resolve, reject) => { if (typeof GM_xmlhttpRequest !== "undefined") { GM_xmlhttpRequest({ method: "POST", url, timeout: getAPITimeout(), headers: { "Accept": "application/json", "Content-Type": "application/json" }, data: JSON.stringify(requestBody), onload: (response) => { try { if (response.status === 400) { const errorData = JSON.parse(response.responseText); resolve({ valid: false }); return; } if (response.status !== 200) { resolve({ valid: false }); return; } const data = JSON.parse(response.responseText); const isValid = data.valid === true && data.status === "active"; resolve({ valid: isValid }); } catch (parseError) { resolve({ valid: false }); } }, onerror: () => { resolve({ valid: false }); }, ontimeout: () => { resolve({ valid: false }); } }); } else { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), getAPITimeout()); fetch(url, { method: "POST", signal: controller.signal, headers: { "Accept": "application/json", "Content-Type": "application/json" }, body: JSON.stringify(requestBody) }).then(async (response) => { clearTimeout(timeoutId); if (response.status === 400) { return { valid: false }; } if (!response.ok) { return { valid: false }; } const data = await response.json(); const isValid = data.valid === true && data.status === "active"; return { valid: isValid }; }).then(resolve).catch(() => { clearTimeout(timeoutId); resolve({ valid: false }); }); } }); }, async generateAuthToken(patreonAuth) { const endpoint = `/token/${patreonAuth}`; const selectedServer = getSelectedServer(); try { const response = await this.makeAuthRequest(selectedServer + endpoint); return response; } catch (error) { throw new Error("Failed to generate token"); } }, async makeAuthRequest(url) { return new Promise((resolve, reject) => { if (typeof GM_xmlhttpRequest !== "undefined") { GM_xmlhttpRequest({ method: "GET", url, timeout: getAPITimeout(), headers: { "Accept": "application/json", "Content-Type": "application/json" }, onload: (response) => { try { if (response.status !== 200) { reject(new Error(`HTTP error! status: ${response.status}`)); return; } const data = JSON.parse(response.responseText); resolve(data); } catch (parseError) { reject(new Error("Failed to parse API response")); } }, onerror: () => { reject(new Error("Network error occurred")); }, ontimeout: () => { reject(new Error("Request timeout - please try again")); } }); } else { this.makeAuthRequestWithFetch(url).then(resolve).catch(reject); } }); }, async makeAuthRequestWithFetch(url) { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), getAPITimeout()); try { const response = await fetch(url, { method: "GET", signal: controller.signal, headers: { "Accept": "application/json", "Content-Type": "application/json" } }); clearTimeout(timeoutId); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data = await response.json(); return data; } catch (error) { clearTimeout(timeoutId); if (error instanceof Error) { if (error.name === "AbortError") { throw new Error("Request timeout - please try again"); } throw error; } throw new Error("Unknown error occurred"); } }, async refreshAuthTokens(patreonAuth) { const endpoint = "/token"; const selectedServer = getSelectedServer(); const url = selectedServer + endpoint; const requestBody = { patreon_auth: patreonAuth }; return new Promise((resolve, reject) => { if (typeof GM_xmlhttpRequest !== "undefined") { GM_xmlhttpRequest({ method: "POST", url, timeout: getAPITimeout(), headers: { "Accept": "application/json", "Content-Type": "application/json" }, data: JSON.stringify(requestBody), onload: (response) => { try { if (response.status === 401) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || errorData.detail || "Invalid Patreon authentication"; reject(new Error(errorMsg)); return; } if (response.status !== 200) { const errorData = JSON.parse(response.responseText); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; reject(new Error(errorMsg)); return; } const data = JSON.parse(response.responseText); if (!data || typeof data !== "object" || !Array.isArray(data.tokens)) { reject(new Error("Invalid token response structure")); return; } const result = { success: data.success ?? true, tokens: data.tokens ?? [], count: data.count ?? data.tokens?.length ?? 0, message: data.message ?? "Tokens retrieved successfully" }; resolve(result); } catch (parseError) { reject(new Error("Failed to parse token response")); } }, onerror: () => { reject(new Error("Network error occurred")); }, ontimeout: () => { reject(new Error("Request timeout - please try again")); } }); } else { const controller = new AbortController(); const timeoutId = setTimeout(() => controller.abort(), getAPITimeout()); fetch(url, { method: "POST", signal: controller.signal, headers: { "Accept": "application/json", "Content-Type": "application/json" }, body: JSON.stringify(requestBody) }).then(async (response) => { clearTimeout(timeoutId); const responseText = await response.text(); if (response.status === 401) { const errorData = JSON.parse(responseText); const errorMsg = errorData.error || errorData.detail || "Invalid Patreon authentication"; throw new Error(errorMsg); } if (!response.ok) { const errorData = JSON.parse(responseText); const errorMsg = errorData.error || errorData.detail || `HTTP error! status: ${response.status}`; throw new Error(errorMsg); } const data = JSON.parse(responseText); if (!data || typeof data !== "object" || !Array.isArray(data.tokens)) { throw new Error("Invalid token response structure"); } return { success: data.success ?? true, tokens: data.tokens ?? [], count: data.count ?? data.tokens?.length ?? 0, message: data.message ?? "Tokens retrieved successfully" }; }).then(resolve).catch((error) => { clearTimeout(timeoutId); if (error instanceof Error) { if (error.name === "AbortError") { reject(new Error("Request timeout - please try again")); } else { reject(error); } } else { reject(new Error("Unknown error occurred")); } }); } }); } }; class MediaDownloaderDB extends Dexie { accounts; auth_settings; groups; constructor() { super("TwitterXMediaBatchDownloaderPro"); this.version(1).stores({ accounts: "++id, username, cached_at", auth_settings: "++id" }); this.version(2).stores({ accounts: "++id, username, cached_at, batch_identifier", auth_settings: "++id" }); this.version(3).stores({ accounts: "++id, username, cached_at, batch_identifier, batch_mode", auth_settings: "++id" }); this.version(4).stores({ accounts: "++id, username, cached_at, batch_identifier, batch_mode", auth_settings: "++id", groups: "++id, name, created_at" }); this.version(5).stores({ accounts: "++id, username, cached_at, batch_identifier, batch_mode, group", auth_settings: "++id", groups: "++id, name, created_at" }); } } const mediaDB = new MediaDownloaderDB(); const dbState = { totalAccounts: signals.signal(0), dbChangeSignal: signals.signal(0) }; async function updateTotalCount() { try { dbState.totalAccounts.value = await mediaDB.accounts.count(); } catch { } } const mediaDownloaderDB = { async saveAccount(data) { return await mediaDB.transaction("rw", mediaDB.accounts, async () => { const account = { ...data, cached_at: Date.now() }; let existing; if (account.batch_mode === "date_range") { const dateRangeAccounts = await mediaDB.accounts.where("username").equals(data.username).filter( (acc) => acc.batch_mode === "date_range" && acc.date_since === data.date_since && acc.date_until === data.date_until && acc.media_type === data.media_type ).toArray(); if (dateRangeAccounts.length > 0) { dateRangeAccounts.sort((a, b) => b.cached_at - a.cached_at); existing = dateRangeAccounts[0]; } } else { const regularAccounts = await mediaDB.accounts.where("username").equals(data.username).filter((acc) => { const sameMode = !acc.batch_mode || acc.batch_mode !== "date_range"; const sameDateRange = !acc.date_since && !data.date_since || acc.date_since === data.date_since && acc.date_until === data.date_until; const sameMediaType = acc.media_type === data.media_type; return sameMode && sameDateRange && sameMediaType; }).toArray(); if (regularAccounts.length > 0) { regularAccounts.sort((a, b) => b.cached_at - a.cached_at); existing = regularAccounts[0]; } } let id2; if (existing) { await mediaDB.accounts.update(existing.id, account); id2 = existing.id; } else { id2 = await mediaDB.accounts.add(account); } if (account.group) { await this.addGroup(account.group); } await updateTotalCount(); dbState.dbChangeSignal.value++; return id2; }); }, async insertAccount(data) { const id2 = await mediaDB.accounts.add(data); await updateTotalCount(); dbState.dbChangeSignal.value++; return id2; }, async getAccounts(page = 1, limit = 3, filterByBatch = false, filterByDateRange = false, filterByBatchDateRange = false) { const offset = (page - 1) * limit; let collection = mediaDB.accounts.orderBy("cached_at").reverse(); if (filterByDateRange) { collection = collection.filter((acc) => acc.batch_mode === "date_range"); } else if (filterByBatchDateRange) { collection = collection.filter((acc) => acc.batch_mode === "date_range"); } else if (filterByBatch) { collection = collection.filter((acc) => !acc.batch_mode || acc.batch_mode !== "date_range"); } return await collection.offset(offset).limit(limit).toArray(); }, async getAccountsCount(filterByBatch = false, filterByDateRange = false, filterByBatchDateRange = false) { if (filterByDateRange) { return await mediaDB.accounts.filter((acc) => acc.batch_mode === "date_range").count(); } else if (filterByBatchDateRange) { return await mediaDB.accounts.filter((acc) => acc.batch_mode === "date_range").count(); } else if (filterByBatch) { return await mediaDB.accounts.filter((acc) => !acc.batch_mode || acc.batch_mode !== "date_range").count(); } return await mediaDB.accounts.count(); }, async getAccountByUsername(username) { return await mediaDB.accounts.where("username").equals(username).first(); }, async getAccountsByUsername(username) { return await mediaDB.accounts.where("username").equals(username).reverse().sortBy("cached_at"); }, async getAccountsByUsernameAndMode(username, mode, dateSince, dateUntil, mediaType) { if (mode === "date_range") { return await mediaDB.accounts.where("username").equals(username).filter( (acc) => acc.batch_mode === "date_range" && acc.date_since === dateSince && acc.date_until === dateUntil && acc.media_type === mediaType ).toArray(); } else { return await mediaDB.accounts.where("username").equals(username).filter( (acc) => (!acc.batch_mode || acc.batch_mode !== "date_range") && acc.media_type === mediaType ).toArray(); } }, async updateAccount(id2, data) { await mediaDB.accounts.update(id2, data); if (data.group) { await this.addGroup(data.group); } dbState.dbChangeSignal.value++; }, async deleteAccount(id2) { await mediaDB.accounts.delete(id2); await updateTotalCount(); dbState.dbChangeSignal.value++; }, async saveAuthSettings(authToken, patreonAuth, showAuthToken, showPatreonAuth) { const existing = await mediaDB.auth_settings.toCollection().first(); const base = existing ? { ...existing } : {}; const settings = { ...base, auth_token: authToken, patreon_auth: patreonAuth, updated_at: Date.now(), patreon_verified: base.patreon_verified && base.patreon_verified_auth === patreonAuth ? base.patreon_verified : false, patreon_verified_auth: base.patreon_verified && base.patreon_verified_auth === patreonAuth ? base.patreon_verified_auth : patreonAuth, show_auth_token: showAuthToken !== void 0 ? showAuthToken : base.show_auth_token, show_patreon_auth: showPatreonAuth !== void 0 ? showPatreonAuth : base.show_patreon_auth }; if (existing) { await mediaDB.auth_settings.update(existing.id, settings); return existing.id; } else { return await mediaDB.auth_settings.add(settings); } }, async setPatreonVerified(verified) { const existing = await mediaDB.auth_settings.toCollection().first(); if (existing) { await mediaDB.auth_settings.update(existing.id, { patreon_verified: verified, patreon_verified_auth: existing.patreon_auth, updated_at: Date.now() }); } else { await mediaDB.auth_settings.add({ auth_token: "", patreon_auth: "", patreon_verified: verified, patreon_verified_auth: "", updated_at: Date.now() }); } }, async getAuthSettings() { return await mediaDB.auth_settings.toCollection().first(); }, async saveTokenList(tokenList, currentIndex = 0) { const existing = await mediaDB.auth_settings.toCollection().first(); if (existing) { await mediaDB.auth_settings.update(existing.id, { token_list: tokenList, current_token_index: currentIndex, last_token_refresh: Date.now(), updated_at: Date.now() }); } else { await mediaDB.auth_settings.add({ auth_token: tokenList[currentIndex] || "", patreon_auth: "", token_list: tokenList, current_token_index: currentIndex, last_token_refresh: Date.now(), updated_at: Date.now() }); } }, async getNextToken() { const settings = await mediaDB.auth_settings.toCollection().first(); if (!settings || !settings.token_list || settings.token_list.length === 0) { return null; } const currentIndex = settings.current_token_index ?? 0; if (currentIndex >= settings.token_list.length) { return null; } const token = settings.token_list[currentIndex]; if (!token) { return null; } await mediaDB.auth_settings.update(settings.id, { current_token_index: currentIndex + 1, auth_token: token, updated_at: Date.now() }); return token; }, async getAllGroups() { try { await mediaDB.open(); const groups = await mediaDB.groups.toArray(); return groups.map((g2) => g2.name).sort(); } catch (error) { if (error?.name !== "NotFoundError" && error?.name !== "InvalidStateError") { console.error("Error loading groups:", error); } return []; } }, async addGroup(groupName) { try { await mediaDB.open(); const existing = await mediaDB.groups.where("name").equals(groupName).first(); if (!existing) { await mediaDB.groups.add({ name: groupName, created_at: Date.now() }); } } catch (error) { if (error?.name !== "NotFoundError" && error?.name !== "InvalidStateError") { console.error("Error adding group:", error); } } }, async removeGroup(groupName) { try { await mediaDB.open(); await mediaDB.groups.where("name").equals(groupName).delete(); } catch (error) { if (error?.name !== "NotFoundError" && error?.name !== "InvalidStateError") { console.error("Error removing group:", error); } } }, async getAllAccounts() { return await mediaDB.accounts.orderBy("cached_at").reverse().toArray(); }, async clearAll() { await mediaDB.accounts.clear(); dbState.totalAccounts.value = 0; dbState.dbChangeSignal.value++; } }; class Crc32 { constructor() { this.crc = -1; } append(data) { var crc = this.crc | 0; var table = this.table; for (var offset = 0, len = data.length | 0; offset < len; offset++) { crc = crc >>> 8 ^ table[(crc ^ data[offset]) & 255]; } this.crc = crc; } get() { return ~this.crc; } } Crc32.prototype.table = (() => { var i; var j2; var t; var table = []; for (i = 0; i < 256; i++) { t = i; for (j2 = 0; j2 < 8; j2++) { t = t & 1 ? t >>> 1 ^ 3988292384 : t >>> 1; } table[i] = t; } return table; })(); const getDataHelper = (byteLength) => { var uint8 = new Uint8Array(byteLength); return { array: uint8, view: new DataView(uint8.buffer) }; }; const pump = (zipObj) => zipObj.reader.read().then((chunk) => { if (chunk.done) return zipObj.writeFooter(); const outputData = chunk.value; zipObj.crc.append(outputData); zipObj.uncompressedLength += outputData.length; zipObj.compressedLength += outputData.length; zipObj.ctrl.enqueue(outputData); }); function createWriter(underlyingSource) { const files = Object.create(null); const filenames = []; const encoder = new TextEncoder(); let offset = 0; let activeZipIndex = 0; let ctrl; let activeZipObject, closed; function next() { activeZipIndex++; activeZipObject = files[filenames[activeZipIndex]]; if (activeZipObject) processNextChunk(); else if (closed) closeZip(); } var zipWriter = { enqueue(fileLike) { if (closed) throw new TypeError( "Cannot enqueue a chunk into a readable stream that is closed or has been requested to be closed" ); let name = fileLike.name.trim(); const date = new Date( typeof fileLike.lastModified === "undefined" ? Date.now() : fileLike.lastModified ); if (fileLike.directory && !name.endsWith("/")) name += "/"; if (files[name]) throw new Error("File already exists."); const nameBuf = encoder.encode(name); filenames.push(name); const zipObject = files[name] = { level: 0, ctrl, directory: !!fileLike.directory, nameBuf, comment: encoder.encode(fileLike.comment || ""), compressedLength: 0, uncompressedLength: 0, writeHeader() { var header = getDataHelper(26); var data = getDataHelper(30 + nameBuf.length); zipObject.offset = offset; zipObject.header = header; if (zipObject.level !== 0 && !zipObject.directory) { header.view.setUint16(4, 2048); } header.view.setUint32(0, 335546376); header.view.setUint16( 6, (date.getHours() << 6 | date.getMinutes()) << 5 | date.getSeconds() / 2, true ); header.view.setUint16( 8, (date.getFullYear() - 1980 << 4 | date.getMonth() + 1) << 5 | date.getDate(), true ); header.view.setUint16(22, nameBuf.length, true); data.view.setUint32(0, 1347093252); data.array.set(header.array, 4); data.array.set(nameBuf, 30); offset += data.array.length; ctrl.enqueue(data.array); }, writeFooter() { var footer = getDataHelper(16); footer.view.setUint32(0, 1347094280); if (zipObject.crc) { zipObject.header.view.setUint32(10, zipObject.crc.get(), true); zipObject.header.view.setUint32(14, zipObject.compressedLength, true); zipObject.header.view.setUint32(18, zipObject.uncompressedLength, true); footer.view.setUint32(4, zipObject.crc.get(), true); footer.view.setUint32(8, zipObject.compressedLength, true); footer.view.setUint32(12, zipObject.uncompressedLength, true); } ctrl.enqueue(footer.array); offset += zipObject.compressedLength + 16; next(); }, fileLike }; if (!activeZipObject) { activeZipObject = zipObject; processNextChunk(); } }, close() { if (closed) throw new TypeError( "Cannot close a readable stream that has already been requested to be closed" ); if (!activeZipObject) closeZip(); closed = true; } }; function closeZip() { var length = 0; var index = 0; var indexFilename, file; for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) { file = files[filenames[indexFilename]]; length += 46 + file.nameBuf.length + file.comment.length; } const data = getDataHelper(length + 22); for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) { file = files[filenames[indexFilename]]; data.view.setUint32(index, 1347092738); data.view.setUint16(index + 4, 5120); data.array.set(file.header.array, index + 6); data.view.setUint16(index + 32, file.comment.length, true); if (file.directory) { data.view.setUint8(index + 38, 16); } data.view.setUint32(index + 42, file.offset, true); data.array.set(file.nameBuf, index + 46); data.array.set(file.comment, index + 46 + file.nameBuf.length); index += 46 + file.nameBuf.length + file.comment.length; } data.view.setUint32(index, 1347093766); data.view.setUint16(index + 8, filenames.length, true); data.view.setUint16(index + 10, filenames.length, true); data.view.setUint32(index + 12, length, true); data.view.setUint32(index + 16, offset, true); ctrl.enqueue(data.array); ctrl.close(); } function processNextChunk() { if (!activeZipObject) return; if (activeZipObject.directory) return activeZipObject.writeFooter(activeZipObject.writeHeader()); if (activeZipObject.reader) return pump(activeZipObject); if (activeZipObject.fileLike.stream) { activeZipObject.crc = new Crc32(); activeZipObject.reader = activeZipObject.fileLike.stream().getReader(); activeZipObject.writeHeader(); } else next(); } return new ReadableStream({ start: (c) => { ctrl = c; if (underlyingSource.start) Promise.resolve(underlyingSource.start(zipWriter)); }, pull() { return processNextChunk() || underlyingSource.pull && Promise.resolve(underlyingSource.pull(zipWriter)); } }); } async function streamToFile(readableStream, filename, useNativePicker = true, onProgress) { await streamToBlobDownload(readableStream, filename, onProgress); } async function streamToBlobDownload(readableStream, filename, onProgress) { const chunks = []; let bytesWritten = 0; const reader = readableStream.getReader(); try { while (true) { const { done, value } = await reader.read(); if (done) break; chunks.push(value); bytesWritten += value.byteLength || value.length || 0; if (onProgress) ; } } finally { reader.releaseLock(); } const blob = new Blob(chunks); fileSaverEs.saveAs(blob, filename); } async function zipStreamDownload(zipFilename, files, onProgress, rateLimit = 1e3, concurrency = 1, abortSignal) { let current = 0; const total = files.length; if (concurrency <= 1) { const fileIterator = files.values(); const readableZipStream2 = createWriter({ async pull(ctrl) { if (abortSignal?.aborted) { ctrl.close(); return; } const fileInfo = fileIterator.next(); if (fileInfo.done) { ctrl.close(); } else { const { filename, url } = fileInfo.value; try { const res = await fetch(url); if (abortSignal?.aborted) { ctrl.close(); return; } ctrl.enqueue({ name: filename, stream: () => res.body }); onProgress?.(++current, total, fileInfo.value); await new Promise((resolve) => setTimeout(resolve, rateLimit)); } catch (error) { if (abortSignal?.aborted) { ctrl.close(); return; } throw error; } } } }); await streamToFile(readableZipStream2, zipFilename); return; } let completed = 0; let fileIndex = 0; const queue = []; let resolveNext = null; let isZipClosed = false; const downloadWorker = async () => { while (fileIndex < files.length) { if (abortSignal?.aborted) { fileIndex = files.length; break; } const currentFileIndex = fileIndex++; const file = files[currentFileIndex]; if (!file) continue; try { const fetchPromise = fetch(file.url); const abortCheckInterval = 100; const res = await Promise.race([ fetchPromise, new Promise((_, reject) => { const checkInterval = setInterval(() => { if (abortSignal?.aborted) { clearInterval(checkInterval); reject(new Error("Download aborted")); } }, abortCheckInterval); fetchPromise.finally(() => clearInterval(checkInterval)); }) ]); if (abortSignal?.aborted) { fileIndex = files.length; break; } const body = res.body; if (!body) { logger.error(`No response body for ${file.filename}`); continue; } queue.push({ name: file.filename, stream: () => body, original: file }); if (resolveNext) { const resolve = resolveNext; resolveNext = null; resolve(); } } catch (error) { if (abortSignal?.aborted) { fileIndex = files.length; break; } logger.error(`Failed to download ${file.filename}:`, error); } } if (resolveNext && !isZipClosed) { const resolve = resolveNext; resolveNext = null; resolve(); } }; const workers = Array.from({ length: Math.min(concurrency, files.length) }, () => downloadWorker()); const readableZipStream = createWriter({ async pull(ctrl) { if (abortSignal?.aborted && queue.length === 0) { isZipClosed = true; ctrl.close(); return; } while (queue.length === 0 && fileIndex < files.length && !abortSignal?.aborted) { await new Promise((resolve) => { resolveNext = resolve; }); if (abortSignal?.aborted) { break; } } if (queue.length > 0) { const fileData = queue.shift(); if (fileData) { ctrl.enqueue({ name: fileData.name, stream: fileData.stream }); onProgress?.(++completed, total, fileData.original); } } else if (fileIndex >= files.length || abortSignal?.aborted) { isZipClosed = true; ctrl.close(); } } }); await Promise.all([ streamToFile(readableZipStream, zipFilename), ...workers ]); } function getGifShotOptions() { return { sampleInterval: 10, numWorkers: 2, numFrames: 30, interval: 0.1, frameDuration: 0.1, crossOrigin: "anonymous" }; } class MediaDownloader { isDownloading = false; createdBlobUrls = []; abortController = null; async downloadAccountMedia(account, onProgress, batchInfo) { if (this.isDownloading) { throw new Error("Download already in progress"); } this.isDownloading = true; this.abortController = new AbortController(); try { const timeline = account.timeline; const username = mediaDownloaderAPI.formatUsername(account.username); const downloadDate = formatDateTime(Date.now(), "YYYYMMDD_HHmmss"); let zipFilename; const dateRangeSuffix = account.date_since || account.date_until ? `_${(account.date_since || "none").replace(/-/g, "")}-${(account.date_until || "none").replace(/-/g, "")}` : ""; if (batchInfo?.mode === "date_range" || dateRangeSuffix) { zipFilename = `${username}_${downloadDate}${dateRangeSuffix}.zip`; } else { zipFilename = `${username}_${downloadDate}.zip`; } const files = this.createFileList(timeline, username); if (files.length === 0) { throw new Error("No media files found"); } const shouldConvertGifs = appOptionsManager.get("convertAnimatedGifs") ?? true; if (shouldConvertGifs) { await this.downloadWithGifConversion(zipFilename, files, onProgress, this.abortController?.signal); } else { const progressCallback = (current, total, file) => { const percentage = Math.round(current / total * 100); onProgress?.({ current, total, percentage, currentFile: file?.filename, converting: false }); }; await zipStreamDownload( zipFilename, files, progressCallback, 500, appOptionsManager.get("downloadConcurrency") ?? 1, this.abortController?.signal ); } } catch (error) { if (error?.message !== "Download aborted") { throw error; } } finally { this.isDownloading = false; this.abortController = null; this.createdBlobUrls.forEach((url) => { URL.revokeObjectURL(url); }); this.createdBlobUrls = []; } } createFileList(timeline, username) { const files = []; const usedFilenames = new Set(); const mediaGroups = { photo: timeline.filter((item) => item.type === "photo"), video: timeline.filter((item) => item.type === "video"), animated_gif: timeline.filter((item) => item.type === "animated_gif"), text: timeline.filter((item) => item.type === "text") }; Object.entries(mediaGroups).forEach(([type, items]) => { if (items.length === 0) return; const folderName = type === "photo" ? "image" : type === "animated_gif" ? "gif" : type; items.forEach((item) => { const extension = this.getFileExtension(item); const baseFilename = `${username}_${this.formatDateForFilename(item.date)}_${item.tweet_id}`; const filename = this.getUniqueFilename(baseFilename, extension, usedFilenames); const fullPath = `${folderName}/${filename}`; if (item.type === "text") { const textContent = item.content || ""; const blob = new Blob([textContent], { type: "text/plain;charset=utf-8" }); const blobUrl = URL.createObjectURL(blob); this.createdBlobUrls.push(blobUrl); files.push({ filename: fullPath, url: blobUrl }); } else { files.push({ filename: fullPath, url: item.url }); } usedFilenames.add(filename); }); }); return files; } getFileExtension(item) { switch (item.type) { case "photo": const photoMatch = item.url.match(/format=(\w+)/); return photoMatch?.[1] || "jpg"; case "video": return "mp4"; case "animated_gif": const shouldConvertGifs = appOptionsManager.get("convertAnimatedGifs") ?? true; return shouldConvertGifs ? "gif" : "mp4"; case "text": return "txt"; default: return "unknown"; } } formatDateForFilename(dateStr) { const m = dateStr.match(/(\d{4})-(\d{2})-(\d{2}).*?(\d{2}):(\d{2}):(\d{2})/); if (m) { const [, y, mo, d, h2, mi, s] = m; return `${y}${mo}${d}_${h2}${mi}${s}`; } const d2 = new Date(dateStr); if (!isNaN(d2.getTime())) { const pad = (n) => String(n).padStart(2, "0"); return `${d2.getFullYear()}${pad(d2.getMonth() + 1)}${pad(d2.getDate())}_${pad(d2.getHours())}${pad(d2.getMinutes())}${pad(d2.getSeconds())}`; } return dateStr.replace(/\D/g, ""); } getUniqueFilename(baseFilename, extension, usedFilenames) { let filename = `${baseFilename}.${extension}`; let counter = 1; while (usedFilenames.has(filename)) { filename = `${baseFilename}_${counter}.${extension}`; counter++; } return filename; } isDownloadInProgress() { return this.isDownloading; } abortDownload() { if (this.abortController) { this.abortController.abort(); } } async downloadWithGifConversion(zipFilename, files, onProgress, abortSignal) { const gifFiles = files.filter((f2) => f2.filename.startsWith("gif/")); const convertedFiles = []; for (let i = 0; i < gifFiles.length; i++) { if (abortSignal?.aborted) { if (convertedFiles.length > 0) { const partialFiles = [ ...files.filter((f2) => !f2.filename.startsWith("gif/")), ...convertedFiles ]; const downloadProgressCallback2 = (current, total, file) => { const downloadProgress = 50 + Math.round(current / total * 50); onProgress?.({ current, total, percentage: downloadProgress, currentFile: file?.filename, converting: false }); }; await zipStreamDownload( zipFilename, partialFiles, downloadProgressCallback2, 500, appOptionsManager.get("downloadConcurrency") ?? 1, void 0 ); } throw new Error("Download aborted"); } const gifFile = gifFiles[i]; if (!gifFile) continue; const conversionProgress = Math.round((i + 1) / gifFiles.length * 50); onProgress?.({ current: i, total: gifFiles.length, percentage: conversionProgress, currentFile: gifFile.filename, converting: true }); try { const gifData = await this.convertVideoToGifWithAbort(gifFile.url, abortSignal); if (gifData) { gifFile.url = gifData; convertedFiles.push(gifFile); } } catch (error) { if (error?.message === "Download aborted") { if (convertedFiles.length > 0) { const partialFiles = [ ...files.filter((f2) => !f2.filename.startsWith("gif/")), ...convertedFiles ]; const downloadProgressCallback2 = (current, total, file) => { const downloadProgress = 50 + Math.round(current / total * 50); onProgress?.({ current, total, percentage: downloadProgress, currentFile: file?.filename, converting: false }); }; await zipStreamDownload( zipFilename, partialFiles, downloadProgressCallback2, 500, appOptionsManager.get("downloadConcurrency") ?? 1, void 0 ); } throw error; } } } const downloadProgressCallback = (current, total, file) => { const downloadProgress = 50 + Math.round(current / total * 50); onProgress?.({ current, total, percentage: downloadProgress, currentFile: file?.filename, converting: false }); }; await zipStreamDownload( zipFilename, files, downloadProgressCallback, 500, appOptionsManager.get("downloadConcurrency") ?? 1, abortSignal ); } convertVideoToGif(videoUrl) { return new Promise((resolve) => { if (!gifshot.isExistingVideoGIFSupported()) { resolve(null); return; } const gifOptions = getGifShotOptions(); { this.getVideoDimensions(videoUrl).then(({ width, height }) => { gifshot.createGIF({ video: videoUrl, gifWidth: width, gifHeight: height, ...gifOptions }, (obj) => { this.handleGifConversionResult(obj, resolve); }); }).catch((error) => { gifshot.createGIF({ video: videoUrl, ...gifOptions }, (obj) => { this.handleGifConversionResult(obj, resolve); }); }); } }); } convertVideoToGifWithAbort(videoUrl, abortSignal) { if (!abortSignal) { return this.convertVideoToGif(videoUrl); } return new Promise((resolve, reject) => { if (abortSignal.aborted) { reject(new Error("Download aborted")); return; } let onAbort; onAbort = () => { reject(new Error("Download aborted")); }; abortSignal.addEventListener("abort", onAbort, { once: true }); this.convertVideoToGif(videoUrl).then((result) => { if (onAbort) { abortSignal.removeEventListener("abort", onAbort); } resolve(result); }).catch((error) => { if (onAbort) { abortSignal.removeEventListener("abort", onAbort); } reject(error); }); }); } handleGifConversionResult(obj, resolve) { if (obj.error) { resolve(null); } else if (obj.image) { try { const dataUrl = obj.image; const base64Data = dataUrl.split(",")[1]; if (!base64Data) { resolve(null); return; } const byteCharacters = atob(base64Data); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], { type: "image/gif" }); const blobUrl = URL.createObjectURL(blob); this.createdBlobUrls.push(blobUrl); resolve(blobUrl); } catch (error) { resolve(null); } } else { resolve(null); } } getVideoDimensions(videoUrl) { return new Promise((resolve, reject) => { const video = document.createElement("video"); video.crossOrigin = "anonymous"; video.onloadedmetadata = () => { const width = video.videoWidth; const height = video.videoHeight; video.remove(); if (width && height) { resolve({ width, height }); } else { reject(new Error("Could not determine video dimensions")); } }; video.onerror = () => { video.remove(); reject(new Error("Failed to load video for dimension detection")); }; setTimeout(() => { video.remove(); reject(new Error("Timeout while detecting video dimensions")); }, 1e4); video.src = videoUrl; }); } } const mediaDownloader = new MediaDownloader(); const urlParser = { getCurrentUsername() { try { const pathname = window.location.pathname; const pathParts = pathname.replace(/^\/+/, "").split("/"); const username = pathParts[0]; if (!username) return null; const skipPaths = [ "i", "home", "explore", "notifications", "messages", "settings", "compose", "search", "hashtag", "lists", "moments", "bookmarks", "profile", "login", "logout", "signup", "welcome", "help", "tos", "privacy", "about", "download", "jobs", "ads", "analytics", "connect", "intent", "oauth", "account", "share" ]; if (skipPaths.includes(username.toLowerCase())) { return null; } if (this.isValidUsername(username)) { return username; } return null; } catch (error) { return null; } }, isValidUsername(username) { if (!username || typeof username !== "string") return false; const cleanUsername = username.replace(/^@/, ""); return /^[a-zA-Z0-9_]{1,15}$/.test(cleanUsername); }, isUserProfilePage() { const username = this.getCurrentUsername(); if (!username) return false; const pathname = window.location.pathname; const pathParts = pathname.replace(/^\/+/, "").split("/"); if (pathParts.length === 1) ; if (pathParts.length === 2 && pathParts[1] === "") ; const profileTabs = ["with_replies", "media", "likes", "followers", "following"]; if (pathParts.length === 2 && pathParts[1] && profileTabs.includes(pathParts[1])) { return true; } return false; }, onUrlChange(callback) { let currentUrl = window.location.href; const checkUrlChange = () => { const newUrl = window.location.href; if (newUrl !== currentUrl) { currentUrl = newUrl; const username = this.getCurrentUsername(); callback(username); } }; const interval = setInterval(checkUrlChange, 1e3); const handlePopState = () => { setTimeout(() => { const username = this.getCurrentUsername(); callback(username); }, 100); }; window.addEventListener("popstate", handlePopState); return () => { clearInterval(interval); window.removeEventListener("popstate", handlePopState); }; }, getProfileInfo() { return { username: this.getCurrentUsername(), isProfilePage: this.isUserProfilePage() }; } }; const dashboardState = { username: signals.signal(""), accountData: signals.signal(null), showAccountInfo: signals.signal(false), currentAccountUsername: signals.signal(null), isLoading: signals.signal(false), errorMessage: signals.signal(""), isDownloading: signals.signal(false), downloadProgress: signals.signal(0), downloadError: signals.signal(""), isConverting: signals.signal(false), currentFile: signals.signal(""), downloadingType: signals.signal(null), downloadCurrent: signals.signal(0), downloadTotal: signals.signal(0), detectedUsername: signals.signal(null), isProfilePage: signals.signal(false), currentPage: signals.signal(0), hasMore: signals.signal(false), isAutoBatching: signals.signal(false), isPaused: signals.signal(false), aggregatedTimeline: signals.signal([]), currentBatchTimeline: signals.signal([]), aggregatedCount: signals.signal(0), fetchedPages: signals.signal([]), pageMediaCounts: signals.signal({}), loadingDirection: signals.signal(null), resetForNewAccount(newUsername) { const currentUsername = this.currentAccountUsername.value; if (currentUsername && newUsername && currentUsername !== newUsername) { this.username.value = ""; this.accountData.value = null; this.showAccountInfo.value = false; this.isLoading.value = false; this.errorMessage.value = ""; this.downloadProgress.value = 0; this.downloadError.value = ""; this.isDownloading.value = false; this.isConverting.value = false; this.currentFile.value = ""; this.downloadingType.value = null; this.downloadCurrent.value = 0; this.downloadTotal.value = 0; this.currentPage.value = 0; this.hasMore.value = false; this.isAutoBatching.value = false; this.isPaused.value = false; this.aggregatedTimeline.value = []; this.currentBatchTimeline.value = []; this.aggregatedCount.value = 0; this.fetchedPages.value = []; this.pageMediaCounts.value = {}; this.loadingDirection.value = null; } this.currentAccountUsername.value = newUsername; }, resetInteractionStates() { this.isLoading.value = false; this.errorMessage.value = ""; this.downloadProgress.value = 0; this.downloadError.value = ""; this.isDownloading.value = false; this.isConverting.value = false; this.currentFile.value = ""; this.downloadingType.value = null; this.downloadCurrent.value = 0; this.downloadTotal.value = 0; } }; const databaseDownloadState = { downloadingId: signals.signal(null), downloadProgress: signals.signal({}), downloadCurrent: signals.signal({}), downloadTotal: signals.signal({}), downloadCurrentFile: signals.signal({}), downloadConverting: signals.signal({}), resetDownloadState(accountId) { this.downloadProgress.value = { ...this.downloadProgress.value, [accountId]: 0 }; this.downloadCurrent.value = { ...this.downloadCurrent.value, [accountId]: 0 }; this.downloadTotal.value = { ...this.downloadTotal.value, [accountId]: 0 }; this.downloadCurrentFile.value = { ...this.downloadCurrentFile.value, [accountId]: "" }; this.downloadConverting.value = { ...this.downloadConverting.value, [accountId]: false }; }, clearDownloadState(accountId) { if (this.downloadingId.value === accountId) { this.downloadingId.value = null; } this.resetDownloadState(accountId); } }; const authState = { patreonVerified: signals.signal(false), patreonAuth: signals.signal(""), authToken: signals.signal("") }; function g(n, t) { for (var e in t) n[e] = t[e]; return n; } function E(n, t) { for (var e in n) if ("__source" !== e && !(e in t)) return true; for (var r in t) if ("__source" !== r && n[r] !== t[r]) return true; return false; } function N(n, t) { this.props = n, this.context = t; } (N.prototype = new preact.Component()).isPureReactComponent = true, N.prototype.shouldComponentUpdate = function(n, t) { return E(this.props, n) || E(this.state, t); }; var T = preact.options.__b; preact.options.__b = function(n) { n.type && n.type.__f && n.ref && (n.props.ref = n.ref, n.ref = null), T && T(n); }; var F = preact.options.__e; preact.options.__e = function(n, t, e, r) { if (n.then) { for (var u2, o = t; o = o.__; ) if ((u2 = o.__c) && u2.__c) return null == t.__e && (t.__e = e.__e, t.__k = e.__k), u2.__c(n, t); } F(n, t, e, r); }; var U = preact.options.unmount; function V(n, t, e) { return n && (n.__c && n.__c.__H && (n.__c.__H.__.forEach(function(n2) { "function" == typeof n2.__c && n2.__c(); }), n.__c.__H = null), null != (n = g({}, n)).__c && (n.__c.__P === e && (n.__c.__P = t), n.__c.__e = true, n.__c = null), n.__k = n.__k && n.__k.map(function(n2) { return V(n2, t, e); })), n; } function W(n, t, e) { return n && e && (n.__v = null, n.__k = n.__k && n.__k.map(function(n2) { return W(n2, t, e); }), n.__c && n.__c.__P === t && (n.__e && e.appendChild(n.__e), n.__c.__e = true, n.__c.__P = e)), n; } function P() { this.__u = 0, this.o = null, this.__b = null; } function j(n) { var t = n.__.__c; return t && t.__a && t.__a(n); } function B() { this.i = null, this.l = null; } preact.options.unmount = function(n) { var t = n.__c; t && t.__R && t.__R(), t && 32 & n.__u && (n.type = null), U && U(n); }, (P.prototype = new preact.Component()).__c = function(n, t) { var e = t.__c, r = this; null == r.o && (r.o = []), r.o.push(e); var u2 = j(r.__v), o = false, i = function() { o || (o = true, e.__R = null, u2 ? u2(l) : l()); }; e.__R = i; var l = function() { if (!--r.__u) { if (r.state.__a) { var n2 = r.state.__a; r.__v.__k[0] = W(n2, n2.__c.__P, n2.__c.__O); } var t2; for (r.setState({ __a: r.__b = null }); t2 = r.o.pop(); ) t2.forceUpdate(); } }; r.__u++ || 32 & t.__u || r.setState({ __a: r.__b = r.__v.__k[0] }), n.then(i, i); }, P.prototype.componentWillUnmount = function() { this.o = []; }, P.prototype.render = function(n, e) { if (this.__b) { if (this.__v.__k) { var r = document.createElement("div"), o = this.__v.__k[0].__c; this.__v.__k[0] = V(this.__b, r, o.__O = o.__P); } this.__b = null; } var i = e.__a && preact.createElement(preact.Fragment, null, n.fallback); return i && (i.__u &= -33), [preact.createElement(preact.Fragment, null, e.__a ? null : n.children), i]; }; var H = function(n, t, e) { if (++e[1] === e[0] && n.l.delete(t), n.props.revealOrder && ("t" !== n.props.revealOrder[0] || !n.l.size)) for (e = n.i; e; ) { for (; e.length > 3; ) e.pop()(); if (e[1] < e[0]) break; n.i = e = e[2]; } }; function Z(n) { return this.getChildContext = function() { return n.context; }, n.children; } function Y(n) { var e = this, r = n.h; if (e.componentWillUnmount = function() { preact.render(null, e.v), e.v = null, e.h = null; }, e.h && e.h !== r && e.componentWillUnmount(), !e.v) { for (var u2 = e.__v; null !== u2 && !u2.__m && null !== u2.__; ) u2 = u2.__; e.h = r, e.v = { nodeType: 1, parentNode: r, childNodes: [], __k: { __m: u2.__m }, contains: function() { return true; }, insertBefore: function(n2, t) { this.childNodes.push(n2), e.h.insertBefore(n2, t); }, removeChild: function(n2) { this.childNodes.splice(this.childNodes.indexOf(n2) >>> 1, 1), e.h.removeChild(n2); } }; } preact.render(preact.createElement(Z, { context: e.context }, n.__v), e.v); } function $(n, e) { var r = preact.createElement(Y, { __v: n, h: e }); return r.containerInfo = e, r; } (B.prototype = new preact.Component()).__a = function(n) { var t = this, e = j(t.__v), r = t.l.get(n); return r[0]++, function(u2) { var o = function() { t.props.revealOrder ? (r.push(u2), H(t, n, r)) : u2(); }; e ? e(o) : o(); }; }, B.prototype.render = function(n) { this.i = null, this.l = new Map(); var t = preact.toChildArray(n.children); n.revealOrder && "b" === n.revealOrder[0] && t.reverse(); for (var e = t.length; e--; ) this.l.set(t[e], this.i = [1, 0, this.i]); return n.children; }, B.prototype.componentDidUpdate = B.prototype.componentDidMount = function() { var n = this; this.l.forEach(function(t, e) { H(n, e, t); }); }; var q = "undefined" != typeof Symbol && Symbol.for && Symbol.for("react.element") || 60103, G = /^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/, J = /^on(Ani|Tra|Tou|BeforeInp|Compo)/, K = /[A-Z0-9]/g, Q = "undefined" != typeof document, X = function(n) { return ("undefined" != typeof Symbol && "symbol" == typeof Symbol() ? /fil|che|rad/ : /fil|che|ra/).test(n); }; preact.Component.prototype.isReactComponent = {}, ["componentWillMount", "componentWillReceiveProps", "componentWillUpdate"].forEach(function(t) { Object.defineProperty(preact.Component.prototype, t, { configurable: true, get: function() { return this["UNSAFE_" + t]; }, set: function(n) { Object.defineProperty(this, t, { configurable: true, writable: true, value: n }); } }); }); var en = preact.options.event; function rn() { } function un() { return this.cancelBubble; } function on() { return this.defaultPrevented; } preact.options.event = function(n) { return en && (n = en(n)), n.persist = rn, n.isPropagationStopped = un, n.isDefaultPrevented = on, n.nativeEvent = n; }; var cn = { enumerable: false, configurable: true, get: function() { return this.class; } }, fn = preact.options.vnode; preact.options.vnode = function(n) { "string" == typeof n.type && (function(n2) { var t = n2.props, e = n2.type, u2 = {}, o = -1 === e.indexOf("-"); for (var i in t) { var l = t[i]; if (!("value" === i && "defaultValue" in t && null == l || Q && "children" === i && "noscript" === e || "class" === i || "className" === i)) { var c = i.toLowerCase(); "defaultValue" === i && "value" in t && null == t.value ? i = "value" : "download" === i && true === l ? l = "" : "translate" === c && "no" === l ? l = false : "o" === c[0] && "n" === c[1] ? "ondoubleclick" === c ? i = "ondblclick" : "onchange" !== c || "input" !== e && "textarea" !== e || X(t.type) ? "onfocus" === c ? i = "onfocusin" : "onblur" === c ? i = "onfocusout" : J.test(i) && (i = c) : c = i = "oninput" : o && G.test(i) ? i = i.replace(K, "-$&").toLowerCase() : null === l && (l = void 0), "oninput" === c && u2[i = c] && (i = "oninputCapture"), u2[i] = l; } } "select" == e && u2.multiple && Array.isArray(u2.value) && (u2.value = preact.toChildArray(t.children).forEach(function(n3) { n3.props.selected = -1 != u2.value.indexOf(n3.props.value); })), "select" == e && null != u2.defaultValue && (u2.value = preact.toChildArray(t.children).forEach(function(n3) { n3.props.selected = u2.multiple ? -1 != u2.defaultValue.indexOf(n3.props.value) : u2.defaultValue == n3.props.value; })), t.class && !t.className ? (u2.class = t.class, Object.defineProperty(u2, "className", cn)) : (t.className && !t.class || t.class && t.className) && (u2.class = u2.className = t.className), n2.props = u2; })(n), n.$$typeof = q, fn && fn(n); }; var an = preact.options.__r; preact.options.__r = function(n) { an && an(n), n.__c; }; var sn = preact.options.diffed; preact.options.diffed = function(n) { sn && sn(n); var t = n.props, e = n.__e; null != e && "textarea" === n.type && "value" in t && t.value !== e.value && (e.value = null == t.value ? "" : t.value); }; function Title() { return u("h2", { class: "text-lg font-bold", children: [ "Twitter/X Media Batch Downloader ", u("span", { class: "text-warning", children: "Pro" }) ] }); } function Modal({ show, onClose, title, children, class: className, actions }) { if (!show) { return null; } const modalContent = u("dialog", { class: "modal", open: true, onClose: () => onClose?.(), children: [ u("div", { class: cx("modal-box transition-all duration-300 ease-in-out", className), children: [ u("div", { class: "flex items-center justify-between mb-4", children: [ title ? u("h2", { class: "text-lg font-bold", children: title }) : u("span", {}), u("div", { class: "flex items-center gap-2", children: [ actions, u("form", { method: "dialog", children: u( "button", { class: "btn btn-sm btn-circle btn-ghost", "aria-label": "Close", children: u(IconX, { size: 18 }) } ) }) ] }) ] }), u(ErrorBoundary, { children }) ] }), u("form", { method: "dialog", class: "modal-backdrop", children: u("button", { "aria-label": "Close", children: "close" }) }) ] }); const portalTarget = document.getElementById("tmd-root")?.shadowRoot?.getElementById("tmd-portal-root") || document.getElementById("tmd-root")?.shadowRoot || document.body; return $(modalContent, portalTarget); } const lastPlayTime = {}; const DEBOUNCE_MS = 150; function canPlaySound(soundName) { const now = Date.now(); const lastTime = lastPlayTime[soundName] || 0; if (now - lastTime < DEBOUNCE_MS) { return false; } lastPlayTime[soundName] = now; return true; } function playSuccessSound() { if (!canPlaySound("success")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 800; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.3, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.3); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.3); setTimeout(() => { const oscillator2 = audioContext.createOscillator(); const gainNode2 = audioContext.createGain(); oscillator2.connect(gainNode2); gainNode2.connect(audioContext.destination); oscillator2.frequency.value = 1e3; oscillator2.type = "sine"; gainNode2.gain.setValueAtTime(0.3, audioContext.currentTime); gainNode2.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.3); oscillator2.start(audioContext.currentTime); oscillator2.stop(audioContext.currentTime + 0.3); }, 100); } catch (error) { } } function playErrorSound() { if (!canPlaySound("error")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 200; oscillator.type = "sawtooth"; gainNode.gain.setValueAtTime(0.3, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.4); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.4); } catch (error) { } } function playToggleOnSound() { if (!canPlaySound("toggleOn")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 600; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.2, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.15); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.15); } catch (error) { } } function playToggleOffSound() { if (!canPlaySound("toggleOff")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 400; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.2, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.15); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.15); } catch (error) { } } function playTabClickSound() { if (!canPlaySound("tabClick")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 700; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.15, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.1); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.1); } catch (error) { } } function playRadioClickSound() { if (!canPlaySound("radioClick")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 550; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.12, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.08); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.08); } catch (error) { } } function playClickSound() { if (!canPlaySound("click")) return; if (!appOptionsManager.get("soundEffects", true)) return; try { const audioContext = new (window.AudioContext || window.webkitAudioContext)(); const oscillator = audioContext.createOscillator(); const gainNode = audioContext.createGain(); oscillator.connect(gainNode); gainNode.connect(audioContext.destination); oscillator.frequency.value = 650; oscillator.type = "sine"; gainNode.gain.setValueAtTime(0.1, audioContext.currentTime); gainNode.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.06); oscillator.start(audioContext.currentTime); oscillator.stop(audioContext.currentTime + 0.06); } catch (error) { } } function playDeleteSound() { return; } function Dashboard({ loadFromDatabaseAccount } = {}) { const { t, i18n } = useTranslation(); const isArabic = (i18n.language || "").startsWith("ar"); const { accountData, showAccountInfo, detectedUsername, isProfilePage, isLoading, errorMessage, isDownloading, downloadProgress, downloadError, isConverting, currentFile, downloadCurrent, downloadTotal } = dashboardState; const showOverwriteModal = signals.useSignal(false); const pendingFetchUsername = signals.useSignal(""); const pendingFetchParams = signals.useSignal(null); const convertGifsExternal = signals.useSignal(appOptionsManager.get("convertGifsExternal") ?? false); const mediaType = signals.useSignal(appOptionsManager.get("mediaType") ?? "all"); const isLoadingFromDB = signals.useSignal(false); const previousMediaCount = signals.useSignal(null); const mediaIncrement = signals.useSignal(0); const incrementTimeoutRef = signals.useSignal(null); const hasDBData = signals.useSignal(false); const isLoadedFromDB = signals.useSignal(false); const isUpdating = signals.useSignal(false); const showUpdateConfirmModal = signals.useSignal(false); const showTimeoutModal = signals.useSignal(false); const hasResumeCursor = signals.useSignal(false); const isRetrying = signals.useSignal(false); const fetchAbortController = signals.useSignal(null); const currentFetchTotal = signals.useSignal(0); const retryAbortController = signals.useSignal(null); const retryTokenCurrent = signals.useSignal(0); const retryTokenTotal = signals.useSignal(0); const dateSince = signals.useSignal(""); const dateUntil = signals.useSignal(""); const advancedSettingsOpen = signals.useSignal(false); const fetchElapsedSeconds = signals.useSignal(0); const fetchStartTime = signals.useSignal(null); const lastFetchDuration = signals.useSignal(null); hooks.useEffect(() => { if (isLoading.value) { fetchStartTime.value = Date.now(); fetchElapsedSeconds.value = 0; const interval = setInterval(() => { if (fetchStartTime.value) { const elapsed = Math.floor((Date.now() - fetchStartTime.value) / 1e3); fetchElapsedSeconds.value = elapsed; } }, 1e3); return () => { clearInterval(interval); if (fetchStartTime.value) { const duration = Math.floor((Date.now() - fetchStartTime.value) / 1e3); lastFetchDuration.value = duration; } fetchStartTime.value = null; fetchElapsedSeconds.value = 0; }; } else { fetchStartTime.value = null; fetchElapsedSeconds.value = 0; } }, [isLoading.value]); const formatTime = (seconds) => { const mins = Math.floor(seconds / 60); const secs = seconds % 60; if (mins > 0) { return `${mins}m ${secs.toString().padStart(2, "0")}s`; } return `${secs}s`; }; const getRemainingTime = () => { const timeout = appOptionsManager.get("apiTimeout") ?? 60; const remaining = timeout - fetchElapsedSeconds.value; return Math.max(0, remaining); }; hooks.useEffect(() => { if (detectedUsername.value) { checkDBData(detectedUsername.value); } }, [dateSince.value, dateUntil.value]); hooks.useEffect(() => { const updateUsernameFromUrl = () => { const profileInfo = urlParser.getProfileInfo(); const newDetectedUsername = profileInfo.username; dashboardState.resetForNewAccount(newDetectedUsername); detectedUsername.value = newDetectedUsername; isProfilePage.value = profileInfo.isProfilePage; if (newDetectedUsername) { checkDBData(newDetectedUsername); } else { hasDBData.value = false; } }; updateUsernameFromUrl(); (async () => { try { const settings = await mediaDownloaderDB.getAuthSettings(); authState.patreonVerified.value = Boolean(settings?.patreon_verified); authState.patreonAuth.value = settings?.patreon_auth || ""; } catch { } })(); const cleanup = urlParser.onUrlChange(() => { updateUsernameFromUrl(); }); return cleanup; }, []); hooks.useEffect(() => { appOptionsManager.signal.subscribe(() => { convertGifsExternal.value = appOptionsManager.get("convertGifsExternal") ?? false; mediaType.value = appOptionsManager.get("mediaType") ?? "all"; }); }, []); const checkDBData = async (username) => { try { const cleanUsername = mediaDownloaderAPI.formatUsername(username); const hasDateRange = !!(dateSince.value || dateUntil.value); const currentMediaType = mediaType.value; let count = 0; if (hasDateRange) { const dateRangeAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter( (acc) => acc.batch_mode === "date_range" && acc.date_since === dateSince.value && acc.date_until === dateUntil.value && acc.media_type === currentMediaType ).count(); count = dateRangeAccounts; } else { const regularAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter( (acc) => (!acc.batch_mode || acc.batch_mode !== "date_range") && acc.media_type === currentMediaType ).count(); count = regularAccounts; } hasDBData.value = count > 0; } catch { hasDBData.value = false; } }; hooks.useEffect(() => { const unsubscribe = appOptionsManager.signal.subscribe(() => { if (detectedUsername.value) { checkDBData(detectedUsername.value); } }); return unsubscribe; }, []); hooks.useEffect(() => { if (detectedUsername.value) { checkDBData(detectedUsername.value); } }, [dbState.dbChangeSignal.value]); hooks.useEffect(() => { if (!loadFromDatabaseAccount?.value) return; const accountInfo = loadFromDatabaseAccount.value; if (accountInfo.username) { detectedUsername.value = accountInfo.username; if (accountInfo.date_since || accountInfo.date_until) { dateSince.value = accountInfo.date_since || ""; dateUntil.value = accountInfo.date_until || ""; } else { dateSince.value = ""; dateUntil.value = ""; } if (accountInfo.media_type) { mediaType.value = accountInfo.media_type; appOptionsManager.set("mediaType", accountInfo.media_type); } handleLoadFromDatabase(); loadFromDatabaseAccount.value = null; } }, [loadFromDatabaseAccount?.value]); const stopRetry = () => { isRetrying.value = false; if (fetchAbortController.value) { fetchAbortController.value.abort(); fetchAbortController.value = null; } isLoading.value = false; if (retryAbortController.value) { retryAbortController.value.abort(); retryAbortController.value = null; } errorMessage.value = ""; }; const retryWithTokenGeneration = async (cleanUsername, authSettings) => { const controller = new AbortController(); retryAbortController.value = controller; isRetrying.value = true; while (isRetrying.value && !controller.signal.aborted) { if (!isRetrying.value || controller.signal.aborted) { break; } try { const nextToken = await mediaDownloaderDB.getNextToken(); let tokenToUse; if (nextToken) { tokenToUse = nextToken; const settings = await mediaDownloaderDB.getAuthSettings(); retryTokenCurrent.value = (settings?.current_token_index ?? 1) - 1; retryTokenTotal.value = settings?.token_list?.length ?? 0; } else { const tokenResult = await mediaDownloaderAPI.generateAuthToken(authSettings.patreon_auth); tokenToUse = tokenResult.auth_token; retryTokenCurrent.value = tokenResult.current_index || 0; retryTokenTotal.value = tokenResult.total_tokens || 0; } if (!isRetrying.value || controller.signal.aborted) { break; } authSettings.auth_token = tokenToUse; authState.authToken.value = tokenToUse; await mediaDownloaderDB.saveAuthSettings( tokenToUse, authSettings.patreon_auth ); if (!isRetrying.value || controller.signal.aborted) { break; } await mediaDownloaderDB.setPatreonVerified(true); if (!isRetrying.value || controller.signal.aborted) { break; } isRetrying.value = false; await handleFetchMedia(true); retryAbortController.value = null; return; } catch (error) { if (!isRetrying.value || controller.signal.aborted) { break; } const waitCompleted = await new Promise((resolve) => { const timeoutId = setTimeout(() => { cleanup(); resolve(true); }, 2e3); const checkInterval = setInterval(() => { if (!isRetrying.value || controller.signal.aborted) { cleanup(); resolve(false); } }, 100); const cleanup = () => { clearTimeout(timeoutId); clearInterval(checkInterval); }; }); if (!waitCompleted) { break; } } } isRetrying.value = false; retryAbortController.value = null; }; const handleFetchMedia = async (skipOverwriteCheck = false) => { playClickSound(); const rawUsername = detectedUsername.value || ""; if (!rawUsername) { errorMessage.value = t("Please visit a profile page for auto-detection"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const authSettings = await mediaDownloaderDB.getAuthSettings(); if (!authSettings) { errorMessage.value = t("Please configure authentication in the Auth tab first"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const latestToken = authState.authToken.value || authSettings.auth_token; if (latestToken && latestToken !== authSettings.auth_token) { authSettings.auth_token = latestToken; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); if ((authSettings.patreon_auth || "").trim() === "xbatchdemo" && cleanUsername !== "xbatchdemo") { errorMessage.value = t("Demo mode is only available for @xbatchdemo"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } if (!mediaDownloaderAPI.validateUsername(cleanUsername)) { errorMessage.value = t("Invalid username format"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } if (!mediaDownloaderAPI.validateAuthToken(authSettings.auth_token)) { errorMessage.value = t("Invalid auth token. Please check your settings."); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } if (!mediaDownloaderAPI.validatePatreonAuth(authSettings.patreon_auth)) { errorMessage.value = t("Invalid Patreon auth. Please check your settings."); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; if (!skipOverwriteCheck) { const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; const existingAccounts = await mediaDownloaderDB.getAccountsByUsernameAndMode( cleanUsername, batchMode, dateSince.value || void 0, dateUntil.value || void 0, mediaType2 ); if (existingAccounts.length > 0) { pendingFetchUsername.value = cleanUsername; pendingFetchParams.value = { authSettings }; showOverwriteModal.value = true; return; } } const resetBatchState = () => { dashboardState.currentPage.value = 0; dashboardState.hasMore.value = false; dashboardState.isAutoBatching.value = false; dashboardState.isPaused.value = false; dashboardState.aggregatedTimeline.value = []; dashboardState.currentBatchTimeline.value = []; dashboardState.aggregatedCount.value = 0; dashboardState.fetchedPages.value = []; dashboardState.pageMediaCounts.value = {}; }; resetBatchState(); isLoadedFromDB.value = false; let resumeCursor = null; try { const existingAccounts = await mediaDownloaderDB.getAccountsByUsername(cleanUsername); if (existingAccounts.length > 0) { const matchingAccount = existingAccounts.filter( (acc) => acc.media_type === mediaType2 && acc.date_since === (dateSince.value || void 0) && acc.date_until === (dateUntil.value || void 0) ).sort((a, b) => b.cached_at - a.cached_at)[0]; if (matchingAccount?.metadata?.cursor && matchingAccount.metadata.has_more) { resumeCursor = matchingAccount.metadata.cursor; } } } catch (error) { } const abortController = new AbortController(); fetchAbortController.value = abortController; currentFetchTotal.value = 0; abortController.signal.__timeoutCallback = () => { if (isLoading.value && !abortController.signal.aborted) { fetchStartTime.value = null; fetchElapsedSeconds.value = 0; showTimeoutModal.value = true; } }; if (resumeCursor) { try { const existingAccounts = await mediaDownloaderDB.getAccountsByUsername(cleanUsername); const matchingAccount = existingAccounts.filter( (acc) => acc.media_type === mediaType2 && acc.date_since === (dateSince.value || void 0) && acc.date_until === (dateUntil.value || void 0) ).sort((a, b) => b.cached_at - a.cached_at)[0]; if (matchingAccount && matchingAccount.timeline.length > 0) { dashboardState.aggregatedTimeline.value = matchingAccount.timeline; dashboardState.aggregatedCount.value = matchingAccount.timeline.length; previousMediaCount.value = matchingAccount.timeline.length; } else { dashboardState.aggregatedTimeline.value = []; dashboardState.aggregatedCount.value = 0; previousMediaCount.value = 0; } } catch (error) { dashboardState.aggregatedTimeline.value = []; dashboardState.aggregatedCount.value = 0; previousMediaCount.value = 0; } } else { dashboardState.aggregatedTimeline.value = []; dashboardState.aggregatedCount.value = 0; previousMediaCount.value = 0; } dashboardState.fetchedPages.value = []; dashboardState.pageMediaCounts.value = {}; if (incrementTimeoutRef.value !== null) { clearTimeout(incrementTimeoutRef.value); incrementTimeoutRef.value = null; } mediaIncrement.value = 0; isLoading.value = true; errorMessage.value = ""; try { const data = await mediaDownloaderAPI.fetchMediaData( cleanUsername, authSettings.auth_token, authSettings.patreon_auth, { mediaType: mediaType2, dateSince: dateSince.value || void 0, dateUntil: dateUntil.value || void 0, includeRetweets: appOptionsManager.get("includeRetweets") ?? false, initialCursor: resumeCursor || void 0, onProgress: (total, newItems, cursor, newTimeline, accountInfo) => { currentFetchTotal.value = total; if (newTimeline && newTimeline.length > 0) { const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url || ""}`)); const merged = [...dashboardState.aggregatedTimeline.value]; let addedCount = 0; for (const item of newTimeline) { const key = `${item.tweet_id}|${item.url || ""}`; if (!seen.has(key)) { seen.add(key); merged.push(item); addedCount++; } } dashboardState.aggregatedTimeline.value = merged; const newCount = merged.length; dashboardState.aggregatedCount.value = newCount; let increment = 0; if (previousMediaCount.value !== null) { increment = newCount - previousMediaCount.value; } else { increment = newCount; } if (increment > 0) { mediaIncrement.value = increment; if (incrementTimeoutRef.value !== null) { clearTimeout(incrementTimeoutRef.value); } incrementTimeoutRef.value = window.setTimeout(() => { mediaIncrement.value = 0; incrementTimeoutRef.value = null; }, 1e3); } previousMediaCount.value = newCount; const accountInfoToUse = accountInfo || accountData.value?.account_info || { name: cleanUsername, nick: cleanUsername, date: "", followers_count: 0, friends_count: 0, profile_image: "", statuses_count: 0 }; accountData.value = { account_info: accountInfoToUse, timeline: merged, metadata: { batch_size: 200, cursor: cursor || null, has_more: cursor !== null, new_entries: merged.length, page: 0 } }; if (!abortController.signal.aborted && accountData.value && merged.length > 0) { const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: { ...accountData.value.metadata, new_entries: merged.length }, timeline: merged, batch_mode: batchMode, batch_identifier: void 0, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }).then(() => { if (!abortController.signal.aborted) { checkDBData(cleanUsername).catch(() => { }); } }).catch(() => { }); } if (!showAccountInfo.value) { showAccountInfo.value = true; } } }, abortSignal: abortController.signal } ); if (abortController.signal.aborted) { if (dashboardState.aggregatedTimeline.value.length > 0 && accountData.value) { try { const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: { ...accountData.value.metadata, new_entries: dashboardState.aggregatedTimeline.value.length }, timeline: dashboardState.aggregatedTimeline.value, batch_mode: batchMode, batch_identifier: void 0, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } catch (error) { } } isLoading.value = false; currentFetchTotal.value = 0; mediaIncrement.value = 0; if (incrementTimeoutRef.value !== null) { clearTimeout(incrementTimeoutRef.value); incrementTimeoutRef.value = null; } return; } accountData.value = { ...data, timeline: dashboardState.aggregatedTimeline.value, metadata: { ...data.metadata, new_entries: dashboardState.aggregatedTimeline.value.length } }; dashboardState.currentBatchTimeline.value = dashboardState.aggregatedTimeline.value; dashboardState.hasMore.value = Boolean(data?.metadata?.has_more); dashboardState.currentPage.value = data?.metadata?.page ?? 0; if (!showAccountInfo.value) { showAccountInfo.value = true; } if (accountData.value) { try { const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: accountData.value.metadata, timeline: accountData.value.timeline, batch_mode: batchMode, batch_identifier: void 0, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } catch (error) { } } isLoading.value = false; currentFetchTotal.value = 0; if (incrementTimeoutRef.value !== null) { clearTimeout(incrementTimeoutRef.value); incrementTimeoutRef.value = null; } mediaIncrement.value = 0; previousMediaCount.value = dashboardState.aggregatedCount.value || 0; } catch (error) { const apiError = error?.apiError; const errorData = error?.errorData; const raw = error instanceof Error ? error.message : ""; const isDemoMode = (authSettings.patreon_auth || "").trim() === "xbatchdemo"; const isTimeoutError = raw.includes("timeout") || raw.includes("Timeout"); const isGalleryDLAuthError = raw.includes("Could not authenticate you") || raw.includes("Failed to fetch data") && raw.includes("401"); const shouldRetry = apiError?.isRetryable === true || isGalleryDLAuthError || isTimeoutError; if (shouldRetry && !isRetrying.value && !isDemoMode) { errorMessage.value = ""; retryWithTokenGeneration(cleanUsername, authSettings); return; } else { let msg = ""; if (apiError) { if (errorData) { const translated = i18n.t(raw, errorData); msg = translated !== raw ? translated : raw; } else { msg = raw ? t(raw) || raw : t("Failed to fetch data"); } } else { const httpMatch = raw.match(/^HTTP error! status: (\d+)/); msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to fetch data"); } errorMessage.value = msg; playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); } isLoading.value = false; currentFetchTotal.value = 0; } }; const confirmOverwrite = async () => { showOverwriteModal.value = false; pendingFetchUsername.value = ""; pendingFetchParams.value = null; await handleFetchMedia(true); }; const cancelOverwrite = () => { showOverwriteModal.value = false; pendingFetchUsername.value = ""; pendingFetchParams.value = null; }; const handleLoadFromDatabase = async () => { const rawUsername = detectedUsername.value || ""; if (!rawUsername) { errorMessage.value = t("Please visit a profile page for auto-detection"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); isLoadingFromDB.value = true; try { let accounts; const currentMediaType = mediaType.value; if (dateSince.value || dateUntil.value) { const dateRangeAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter( (acc) => acc.batch_mode === "date_range" && acc.date_since === dateSince.value && acc.date_until === dateUntil.value && acc.media_type === currentMediaType ).reverse().sortBy("cached_at"); accounts = dateRangeAccounts; } else { const regularAccounts = await mediaDB.accounts.where("username").equals(cleanUsername).filter( (acc) => (!acc.batch_mode || acc.batch_mode !== "date_range") && acc.media_type === currentMediaType ).reverse().sortBy("cached_at"); accounts = regularAccounts; } if (accounts.length === 0) { return; } const latestAccount = accounts[0]; if (latestAccount.date_since || latestAccount.date_until) { dateSince.value = latestAccount.date_since || ""; dateUntil.value = latestAccount.date_until || ""; } accountData.value = { account_info: latestAccount.account_info, metadata: latestAccount.metadata, timeline: latestAccount.timeline }; dashboardState.currentBatchTimeline.value = latestAccount.timeline; dashboardState.aggregatedTimeline.value = latestAccount.timeline; dashboardState.aggregatedCount.value = latestAccount.timeline.length; showAccountInfo.value = true; isLoadedFromDB.value = true; if (detectedUsername.value) { await checkDBData(detectedUsername.value); } } catch (error) { errorMessage.value = t("Failed to load data"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); } finally { isLoadingFromDB.value = false; } }; const saveAggregatedData = async () => { if (!accountData.value) return; }; const handleBack = async () => { if (accountData.value && !isLoadedFromDB.value) { await saveAggregatedData(); } showAccountInfo.value = false; accountData.value = null; isLoadedFromDB.value = false; dashboardState.resetInteractionStates(); }; const handleUpdateDataClick = () => { showUpdateConfirmModal.value = true; }; const cancelUpdate = () => { showUpdateConfirmModal.value = false; }; const confirmUpdate = async () => { showUpdateConfirmModal.value = false; await handleUpdateData(); }; const checkResumeCursor = async () => { try { const rawUsername = detectedUsername.value || ""; if (!rawUsername) { hasResumeCursor.value = false; return; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const existingAccounts = await mediaDownloaderDB.getAccountsByUsername(cleanUsername); const matchingAccount = existingAccounts.filter( (acc) => acc.media_type === mediaType2 && acc.date_since === (dateSince.value || void 0) && acc.date_until === (dateUntil.value || void 0) ).sort((a, b) => b.cached_at - a.cached_at)[0]; hasResumeCursor.value = !!(matchingAccount?.metadata?.cursor && matchingAccount.metadata.has_more); } catch (error) { hasResumeCursor.value = false; } }; const handleResume = async () => { await handleFetchMedia(true); }; const handleTimeoutGenerateToken = async () => { showTimeoutModal.value = false; fetchStartTime.value = null; fetchElapsedSeconds.value = 0; if (dashboardState.aggregatedTimeline.value.length > 0 && accountData.value) { try { const rawUsername = detectedUsername.value || ""; if (rawUsername) { const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: { ...accountData.value.metadata, new_entries: dashboardState.aggregatedTimeline.value.length }, timeline: dashboardState.aggregatedTimeline.value, batch_mode: batchMode, batch_identifier: void 0, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } } catch (error) { } } try { const authSettings = await mediaDownloaderDB.getAuthSettings(); if (authSettings?.patreon_auth) { let newToken = null; const settings = await mediaDownloaderDB.getAuthSettings(); if (settings?.token_list && settings.token_list.length > 0) { const currentIndex = settings.current_token_index ?? 0; if (currentIndex < settings.token_list.length) { const nextToken = await mediaDownloaderDB.getNextToken(); if (nextToken) { newToken = nextToken; } } } if (!newToken) { try { await mediaDownloaderAPI.refreshAuthTokens(authSettings.patreon_auth); const updatedSettings = await mediaDownloaderDB.getAuthSettings(); if (updatedSettings?.token_list && updatedSettings.token_list.length > 0) { const nextToken = await mediaDownloaderDB.getNextToken(); if (nextToken) { newToken = nextToken; } } } catch (refreshError) { } } if (!newToken) { const tokenResult = await mediaDownloaderAPI.generateAuthToken(authSettings.patreon_auth); if (tokenResult.auth_token) { newToken = tokenResult.auth_token; } } if (newToken) { await mediaDownloaderDB.saveAuthSettings(newToken, authSettings.patreon_auth); authState.authToken.value = newToken; fetchStartTime.value = null; fetchElapsedSeconds.value = 0; await new Promise((resolve) => setTimeout(resolve, 100)); await handleFetchMedia(true); } else { errorMessage.value = t("Failed to generate token"); playErrorSound(); } } } catch (error) { errorMessage.value = t("Failed to generate token"); playErrorSound(); } }; const handleTimeoutStop = async () => { showTimeoutModal.value = false; fetchStartTime.value = null; fetchElapsedSeconds.value = 0; if (dashboardState.aggregatedTimeline.value.length > 0 && accountData.value) { try { const rawUsername = detectedUsername.value || ""; if (rawUsername) { const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: { ...accountData.value.metadata, new_entries: dashboardState.aggregatedTimeline.value.length }, timeline: dashboardState.aggregatedTimeline.value, batch_mode: batchMode, batch_identifier: void 0, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } } catch (error) { } } if (fetchAbortController.value) { fetchAbortController.value.abort(); fetchAbortController.value = null; } isLoading.value = false; currentFetchTotal.value = 0; mediaIncrement.value = 0; if (incrementTimeoutRef.value !== null) { clearTimeout(incrementTimeoutRef.value); incrementTimeoutRef.value = null; } }; hooks.useEffect(() => { checkResumeCursor(); const unsubscribe = detectedUsername.subscribe(() => { checkResumeCursor(); }); return unsubscribe; }, []); const handleUpdateData = async () => { isUpdating.value = true; const rawUsername = detectedUsername.value || ""; if (!rawUsername) { errorMessage.value = t("Please visit a profile page for auto-detection"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const authSettings = await mediaDownloaderDB.getAuthSettings(); if (!authSettings) { errorMessage.value = t("Please configure authentication in the Auth tab first"); playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); return; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); const mediaType2 = appOptionsManager.get("mediaType") ?? "all"; const resetBatchState = () => { dashboardState.currentPage.value = 0; dashboardState.hasMore.value = false; dashboardState.isAutoBatching.value = false; dashboardState.isPaused.value = false; dashboardState.aggregatedTimeline.value = []; dashboardState.currentBatchTimeline.value = []; dashboardState.aggregatedCount.value = 0; dashboardState.fetchedPages.value = []; dashboardState.pageMediaCounts.value = {}; }; const fetchPage = async (page, reveal = false) => { isLoading.value = true; errorMessage.value = ""; try { const data = await mediaDownloaderAPI.fetchMediaData( cleanUsername, authSettings.auth_token, authSettings.patreon_auth, { mediaType: mediaType2, dateSince: dateSince.value || void 0, dateUntil: dateUntil.value || void 0, includeRetweets: appOptionsManager.get("includeRetweets") ?? false } ); accountData.value = data; dashboardState.currentBatchTimeline.value = data.timeline; dashboardState.hasMore.value = Boolean(data?.metadata?.has_more); dashboardState.currentPage.value = data?.metadata?.page ?? page; const seen = new Set(dashboardState.aggregatedTimeline.value.map((i) => `${i.tweet_id}|${i.url}`)); const merged = [...dashboardState.aggregatedTimeline.value]; if (!dashboardState.fetchedPages.value.includes(page)) { dashboardState.fetchedPages.value = [...dashboardState.fetchedPages.value, page]; let newMediaCount = 0; for (const item of data.timeline) { const key = `${item.tweet_id}|${item.url}`; if (!seen.has(key)) { seen.add(key); merged.push(item); newMediaCount++; } } dashboardState.pageMediaCounts.value = { ...dashboardState.pageMediaCounts.value, [page]: newMediaCount }; dashboardState.aggregatedTimeline.value = merged; dashboardState.aggregatedCount.value = merged.length; } if (reveal) { showAccountInfo.value = true; } try { const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: data.account_info, metadata: data.metadata, timeline: data.timeline, batch_mode: batchMode, batch_identifier: void 0, media_type: mediaType2, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } catch { } } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to fetch data"); errorMessage.value = msg; playErrorSound(); setTimeout(() => errorMessage.value = "", 2e3); throw error; } finally { isLoading.value = false; } }; try { resetBatchState(); isLoadedFromDB.value = false; await fetchPage(0, true); } catch { } finally { isUpdating.value = false; } }; const handleDownloadMedia = async () => { if (!accountData.value) return; playClickSound(); try { dashboardState.downloadingType.value = "all"; isDownloading.value = true; downloadError.value = ""; downloadProgress.value = 0; const aggregatedTimeline = dashboardState.aggregatedTimeline.value.length > 0 ? dashboardState.aggregatedTimeline.value : accountData.value.timeline; const account = { username: accountData.value.account_info.name, account_info: accountData.value.account_info, metadata: accountData.value.metadata, timeline: aggregatedTimeline, cached_at: Date.now(), date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }; const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; const batchInfo = { mode: batchMode, page: dashboardState.currentPage.value }; await mediaDownloader.downloadAccountMedia(account, (progress) => { downloadProgress.value = progress.percentage; isConverting.value = progress.converting || false; currentFile.value = progress.currentFile || ""; dashboardState.downloadCurrent.value = progress.current; dashboardState.downloadTotal.value = progress.total; }, batchInfo); playSuccessSound(); } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Failed to download media"); downloadError.value = msg; playErrorSound(); setTimeout(() => downloadError.value = "", 2e3); } finally { dashboardState.downloadingType.value = null; isDownloading.value = false; downloadProgress.value = 0; isConverting.value = false; currentFile.value = ""; dashboardState.downloadCurrent.value = 0; dashboardState.downloadTotal.value = 0; } }; if (showAccountInfo.value && accountData.value) { const account = accountData.value.account_info; const metadata = accountData.value.metadata; return u(preact.Fragment, { children: [ u("div", { class: "space-y-6", children: [ u("div", { class: "flex items-center gap-4 mb-6", children: [ u("div", { class: "flex items-center gap-2", children: [ u("button", { class: "btn btn-sm", onClick: handleBack, children: [ u(IconChevronLeft, { size: 16 }), t("Back") ] }), (isLoadedFromDB.value || isUpdating.value) && u("div", { class: "join", children: [ hasResumeCursor.value && u("button", { class: "btn btn-info btn-sm join-item", onClick: handleResume, disabled: isLoading.value, children: [ u(IconRefresh, { size: 16 }), t("Resume") ] }), u("button", { class: "btn btn-accent btn-sm join-item", onClick: handleUpdateDataClick, disabled: isLoading.value, children: isLoading.value && isUpdating.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Updating...") ] }) : u(preact.Fragment, { children: [ u(IconCloudUp, { size: 16 }), t("Update") ] }) }) ] }) ] }), u("div", { class: "ml-auto flex items-center gap-2", children: (() => { if (isLoadedFromDB.value) { return null; } dashboardState.currentPage.value; isLoading.value && dashboardState.loadingDirection.value === "prev"; isLoading.value && dashboardState.loadingDirection.value === "next"; return null; })() }) ] }), u("div", { class: "card bg-base-200 card-border", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [ u("div", { class: "avatar", children: u("div", { class: "w-16 rounded-box", children: u( "img", { src: account.profile_image, alt: account.nick, onError: (e) => { const target = e.target; target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E'; } } ) }) }), u("div", { class: "grow", children: [ u("div", { class: "flex items-center gap-2 flex-wrap", children: [ u("h3", { class: "font-semibold text-base", children: account.nick }), (() => { if (isLoadedFromDB.value) { return null; } const hasDateRange = metadata?.date_range || dateSince.value || dateUntil.value; if (!hasDateRange) { dashboardState.currentPage.value; } return null; })(), metadata?.date_range && u("div", { class: "badge badge-soft badge-info badge-sm", children: [ metadata.date_range.since.replace(/-/g, ""), " - ", metadata.date_range.until.replace(/-/g, "") ] }), (dateSince.value || dateUntil.value) && !metadata?.date_range && u("div", { class: "badge badge-soft badge-info badge-sm", children: [ (dateSince.value || "none").replace(/-/g, ""), " - ", (dateUntil.value || "none").replace(/-/g, "") ] }) ] }), u("p", { class: "text-sm opacity-70", children: [ "@", account.name ] }), u("p", { class: "text-sm opacity-50 mt-1", children: [ t("Posts: {{posts}}", { posts: account.statuses_count.toLocaleString() }), " • ", (() => { if (isLoadedFromDB.value) { return u(preact.Fragment, { children: [ t("Media: {{media}}", { media: metadata.new_entries.toLocaleString() }), mediaIncrement.value > 0 && u("span", { class: "text-success font-semibold ml-1", children: [ "+", mediaIncrement.value.toLocaleString() ] }) ] }); } const mediaCount = dashboardState.aggregatedCount.value || metadata.new_entries; return u(preact.Fragment, { children: [ t("Media: {{media}}", { media: mediaCount.toLocaleString() }), mediaIncrement.value > 0 && u("span", { class: "text-success font-semibold ml-1", children: [ "+", mediaIncrement.value.toLocaleString() ] }) ] }); })(), lastFetchDuration.value !== null && !isLoading.value && u(preact.Fragment, { children: [ " • ", u("span", { class: "opacity-60", children: t("Fetched in {{time}}", { time: formatTime(lastFetchDuration.value) }) }) ] }) ] }) ] }) ] }) }) }), u("div", { class: "space-y-4", children: [ isDownloading.value && u("div", { class: "space-y-2", children: [ u("div", { class: "flex justify-between text-sm", children: [ u("span", { children: [ isConverting.value ? t("Converting GIFs...") : t("Downloading..."), downloadTotal.value > 0 && ` (${downloadCurrent.value.toLocaleString()}/${downloadTotal.value.toLocaleString()})` ] }), u("span", { children: [ downloadProgress.value, "%" ] }) ] }), u("progress", { class: "progress progress-primary w-full", value: downloadProgress.value, max: "100" }), currentFile.value && u("div", { class: "text-xs opacity-70 truncate", children: currentFile.value }) ] }), u("div", { class: "flex justify-center gap-2", children: isDownloading.value ? u( "button", { class: "btn btn-error btn-sm", onClick: () => mediaDownloader.abortDownload(), children: [ u(IconPlayerStop, { size: 16 }), t("Stop") ] } ) : isLoading.value ? ( u("div", { class: "flex flex-col items-center gap-1", children: [ u("div", { class: "join", children: [ u( "button", { class: "btn btn-neutral btn-sm join-item", disabled: true, children: [ u("span", { class: "loading loading-spinner loading-xs" }), u("span", { children: t("Fetching...") }) ] } ), u( "button", { class: "btn btn-error btn-sm join-item", onClick: async () => { if (fetchAbortController.value) { fetchAbortController.value.abort(); fetchAbortController.value = null; } if (dashboardState.aggregatedTimeline.value.length > 0 && accountData.value) { try { const cleanUsername = mediaDownloaderAPI.formatUsername(detectedUsername.value || ""); const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: { ...accountData.value.metadata, new_entries: dashboardState.aggregatedTimeline.value.length }, timeline: dashboardState.aggregatedTimeline.value, batch_mode: batchMode, batch_identifier: void 0, media_type: mediaType.value, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } catch (error) { } } isLoading.value = false; currentFetchTotal.value = 0; mediaIncrement.value = 0; if (incrementTimeoutRef.value !== null) { clearTimeout(incrementTimeoutRef.value); incrementTimeoutRef.value = null; } }, children: [ u(IconPlayerStop, { size: 16 }), t("Stop") ] } ) ] }), u("div", { class: "flex items-center gap-1 text-xs opacity-60", children: [ u("span", { class: "font-mono", children: formatTime(fetchElapsedSeconds.value) }), u("span", { children: "/" }), u("span", { class: "font-mono", children: formatTime(getRemainingTime()) }) ] }) ] }) ) : u(preact.Fragment, { children: [ (() => { if (isLoadedFromDB.value) { return null; } return null; })(), (() => { const labelKey = "Download"; return u( "button", { class: "btn btn-neutral btn-sm", onClick: handleDownloadMedia, disabled: (dashboardState.aggregatedCount.value || metadata.new_entries) === 0, children: [ u(IconDownload, { size: 16 }), t(labelKey) ] } ); })() ] }) }), downloadError.value && u("div", { role: "alert", class: "alert alert-error alert-soft", children: [ u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: downloadError.value }) ] }) ] }) ] }), u(Modal, { show: showTimeoutModal.value, onClose: handleTimeoutStop, title: t("Request timeout"), class: "max-w-sm", children: u("div", { class: "space-y-4", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Request timeout - please try again") }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: handleTimeoutStop, children: t("Stop Fetch") } ), u( "button", { class: "btn btn-sm btn-primary", onClick: handleTimeoutGenerateToken, children: [ u(IconKey, { size: 16 }), t("Generate Auth Token") ] } ) ] }) ] }) }), u(Modal, { show: showUpdateConfirmModal.value, onClose: cancelUpdate, title: t("Update"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Update will fetch the latest data and overwrite the database. Continue?") }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: cancelUpdate, children: t("Cancel") } ), u( "button", { class: "btn btn-sm btn-warning", onClick: confirmUpdate, children: [ u(IconCloudUp, { size: 16 }), t("Update") ] } ) ] }) ] }) }) ] }); } const handleExternalConvert = async () => { const rawUsername = detectedUsername.value || ""; if (!rawUsername) { errorMessage.value = t("Please visit a profile page for auto-detection"); setTimeout(() => errorMessage.value = "", 2e3); return; } const authSettings = await mediaDownloaderDB.getAuthSettings(); if (!authSettings) { errorMessage.value = t("Please configure authentication in the Auth tab first"); setTimeout(() => errorMessage.value = "", 2e3); return; } const cleanUsername = mediaDownloaderAPI.formatUsername(rawUsername); if (!mediaDownloaderAPI.validateUsername(cleanUsername)) { errorMessage.value = t("Invalid username format"); setTimeout(() => errorMessage.value = "", 2e3); return; } const patreonAuth = authSettings.patreon_auth || ""; const authToken = authSettings.auth_token || ""; if (!patreonAuth || !authToken) { errorMessage.value = t("Please configure authentication in the Auth tab first"); setTimeout(() => errorMessage.value = "", 2e3); return; } let url; if (patreonAuth.trim() === "xbatchdemo") { url = `https://convert.exyezed.cc/demo/xbatchdemo/${encodeURIComponent(authToken)}/xbatchdemo`; } else { url = `https://convert.exyezed.cc/${encodeURIComponent(patreonAuth)}/${encodeURIComponent(authToken)}/${encodeURIComponent(cleanUsername)}`; } window.open(url, "_blank", "noopener,noreferrer"); }; return u("div", { class: "space-y-4", children: [ u("div", { class: "space-y-4", children: [ isRetrying.value && u("div", { role: "alert", class: "alert alert-info alert-soft", children: [ u("span", { class: "loading loading-spinner loading-sm" }), u("span", { dir: isArabic ? "rtl" : void 0, children: [ t("Generating token..."), " ", retryTokenTotal.value > 0 && `(${retryTokenCurrent.value}/${retryTokenTotal.value})` ] }) ] }), u("div", { role: "alert", class: `alert alert-soft ${!authState.patreonVerified.value ? "alert-warning" : "alert-info"}`, children: [ !authState.patreonVerified.value ? u(IconAlertTriangle, { size: 20 }) : u(IconUserFilled, { size: 20 }), u("div", { class: "flex-1", dir: isArabic ? "rtl" : void 0, children: !authState.patreonVerified.value ? u("div", { children: t("Please verify Patreon auth first") }) : detectedUsername.value ? u("div", { children: u("span", { dir: "ltr", children: [ "@", detectedUsername.value ] }) }) : u("div", { class: "font-semibold", children: t("Please visit a profile page for auto-detection") }) }), detectedUsername.value && hasDBData.value && authState.patreonVerified.value && u("div", { class: "tooltip tooltip-left", "data-tip": t("Load from database"), children: u( "button", { class: "btn btn-sm btn-square btn-soft btn-info", onClick: handleLoadFromDatabase, disabled: isLoadingFromDB.value || !detectedUsername.value, "aria-label": t("Load from database"), children: isLoadingFromDB.value ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconDatabaseImport, { size: 16 }) } ) }) ] }), u("div", { class: "collapse collapse-arrow bg-base-200 border border-base-300 rounded-box", children: [ u( "input", { type: "checkbox", checked: advancedSettingsOpen.value, onChange: (e) => { advancedSettingsOpen.value = e.target.checked; } } ), u("div", { class: "collapse-title text-sm font-medium", children: t("Advanced Settings") }), u("div", { class: "collapse-content", children: u("div", { class: "space-y-4 pt-2", children: [ u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm", children: t("Media") }), u( "select", { class: "select select-bordered select-sm w-32", value: mediaType.value, onChange: (e) => { playClickSound(); const value = e.target.value; mediaType.value = value; appOptionsManager.set("mediaType", value); }, children: [ u("option", { value: "all", children: t("All") }), u("option", { value: "image", children: t("Image") }), u("option", { value: "video", children: t("Video") }), u("option", { value: "gif", children: t("GIF") }), u("option", { value: "text", children: t("Text") }) ] } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Include Retweets") }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("includeRetweets") ?? false, onChange: (e) => { const checked = e.target.checked; checked ? playToggleOnSound() : playToggleOffSound(); appOptionsManager.set("includeRetweets", checked); } } ) ] }), u("div", { class: "relative", children: [ (dateSince.value || dateUntil.value) && u( "button", { class: "btn btn-circle btn-xs btn-error absolute -top-2 -right-2 z-10", onClick: () => { dateSince.value = ""; dateUntil.value = ""; }, "aria-label": t("Clear dates"), children: u(IconX, { size: 12 }) } ), u("div", { class: "card bg-base-100 card-border", children: u("div", { class: "card-body p-4", children: [ u("div", { class: "grid grid-cols-2 gap-3", children: [ u("div", { class: "form-control", children: [ u("label", { class: "label py-1", children: u("span", { class: "label-text text-xs", children: t("Date Since") }) }), u( "input", { type: "date", class: "input input-sm input-bordered w-full", value: dateSince.value, onInput: (e) => { dateSince.value = e.target.value; }, placeholder: "YYYY-MM-DD" } ) ] }), u("div", { class: "form-control", children: [ u("label", { class: "label py-1", children: u("span", { class: "label-text text-xs", children: t("Date Until") }) }), u( "input", { type: "date", class: "input input-sm input-bordered w-full", value: dateUntil.value, onInput: (e) => { dateUntil.value = e.target.value; }, placeholder: "YYYY-MM-DD" } ) ] }) ] }), (dateSince.value || dateUntil.value) && u("div", { class: "flex items-center gap-1 text-xs opacity-60 mt-1", children: [ u(IconInfoCircle, { size: 14 }), u("span", { children: t("Empty dates will fetch all available media") }) ] }) ] }) }) ] }) ] }) }) ] }), u("div", { class: "flex flex-col items-center gap-2", children: [ u("div", { class: "join", children: isLoading.value && !isRetrying.value ? u(preact.Fragment, { children: [ u( "button", { class: "btn btn-sm join-item btn-neutral", disabled: true, children: [ u("span", { class: "loading loading-spinner loading-xs" }), u("span", { children: t("Fetching...") }) ] } ), u( "button", { class: "btn btn-sm join-item btn-error", onClick: async () => { if (fetchAbortController.value) { fetchAbortController.value.abort(); fetchAbortController.value = null; } if (dashboardState.aggregatedTimeline.value.length > 0 && accountData.value) { try { const cleanUsername = mediaDownloaderAPI.formatUsername(detectedUsername.value || ""); const batchMode = dateSince.value || dateUntil.value ? "date_range" : void 0; await mediaDownloaderDB.saveAccount({ username: cleanUsername, account_info: accountData.value.account_info, metadata: { ...accountData.value.metadata, new_entries: dashboardState.aggregatedTimeline.value.length }, timeline: dashboardState.aggregatedTimeline.value, batch_mode: batchMode, batch_identifier: void 0, media_type: mediaType.value, date_since: dateSince.value || void 0, date_until: dateUntil.value || void 0 }); await checkDBData(cleanUsername); } catch (error) { } } isLoading.value = false; currentFetchTotal.value = 0; mediaIncrement.value = 0; if (incrementTimeoutRef.value !== null) { clearTimeout(incrementTimeoutRef.value); incrementTimeoutRef.value = null; } }, children: [ u(IconPlayerStop, { size: 16 }), t("Stop") ] } ) ] }) : u(preact.Fragment, { children: [ u("div", { class: "join", children: [ hasResumeCursor.value && u( "button", { class: "btn btn-info btn-sm join-item", onClick: handleResume, disabled: !detectedUsername.value || !authState.patreonVerified.value || isLoading.value, children: [ u(IconRefresh, { size: 16 }), t("Resume") ] } ), u( "button", { class: `btn btn-sm join-item ${isRetrying.value ? "btn-error" : "btn-neutral"}`, onClick: () => isRetrying.value ? stopRetry() : handleFetchMedia(), disabled: !detectedUsername.value || !authState.patreonVerified.value, children: (() => { if (isRetrying.value) { return u(preact.Fragment, { children: [ u(IconPlayerStop, { size: 16 }), t("Abort") ] }); } const fetchKey = mediaType.value === "all" ? "Fetch All" : mediaType.value === "video" ? "Fetch Video" : mediaType.value === "image" ? "Fetch Image" : mediaType.value === "gif" ? "Fetch GIF" : mediaType.value === "text" ? "Fetch Text" : "Fetch"; return u(preact.Fragment, { children: [ u(IconCloudDown, { size: 16 }), t(fetchKey) ] }); })() } ) ] }), convertGifsExternal.value ? u( "button", { class: "btn btn-accent btn-sm join-item", onClick: handleExternalConvert, disabled: !detectedUsername.value || !authState.patreonVerified.value, children: [ u(IconPhotoEdit, { size: 16 }), t("Convert Animated GIFs") ] } ) : null ] }) }), isLoading.value && u("div", { class: "flex items-center gap-1 text-xs opacity-60", children: [ u("span", { class: "font-mono", children: formatTime(fetchElapsedSeconds.value) }), u("span", { children: "/" }), u("span", { class: "font-mono", children: formatTime(getRemainingTime()) }), currentFetchTotal.value > 0 && u(preact.Fragment, { children: [ u("span", { class: "opacity-50", children: "•" }), u("span", { children: [ currentFetchTotal.value, " items" ] }) ] }) ] }) ] }), errorMessage.value && u("div", { role: "alert", class: "alert alert-error alert-soft", children: [ u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: errorMessage.value }) ] }) ] }), u(Modal, { show: showOverwriteModal.value, onClose: cancelOverwrite, title: t("Overwrite Existing Data?"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Account data for @{{username}} already exists in the database. Do you want to overwrite it?", { username: pendingFetchUsername.value }) }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: cancelOverwrite, children: t("Cancel") } ), u( "button", { class: "btn btn-sm btn-warning", onClick: confirmOverwrite, children: [ u(IconWriting, { size: 16 }), t("Overwrite") ] } ) ] }) ] }) }) ] }); } function ViewDatabaseModal({ isOpen, onClose, account, onDeleteEntry, onLoadDatabase }) { const { t } = useTranslation(); const typeFilter = signals.useSignal("all"); const currentPage = signals.useSignal(1); const deletingEntry = signals.useSignal(""); const previewUrl = signals.useSignal(""); const previewType = signals.useSignal(""); const previewIndex = signals.useSignal(-1); const touchStartX = hooks.useRef(0); const touchEndX = hooks.useRef(0); const previousAccountId = hooks.useRef(void 0); const downloadingFiles = signals.useSignal( new Set()); const convertingFiles = signals.useSignal( new Set()); const isCopied = signals.useSignal(false); const failedThumbnails = signals.useSignal( new Set()); hooks.useEffect(() => { if (account?.id !== previousAccountId.current) { typeFilter.value = "all"; currentPage.value = 1; previousAccountId.current = account?.id; } }, [account?.id]); if (!account) return null; const ITEMS_PER_PAGE = 5; const filteredTimeline = typeFilter.value === "all" ? account.timeline : account.timeline.filter((item) => item.type === typeFilter.value); const totalPages = Math.ceil(filteredTimeline.length / ITEMS_PER_PAGE); const photoCount = account.timeline.filter((i) => i.type === "photo").length; const videoCount = account.timeline.filter((i) => i.type === "video").length; const gifCount = account.timeline.filter((i) => i.type === "animated_gif").length; const handleTypeFilter = (type) => { typeFilter.value = type; currentPage.value = 1; }; const handleOpenFile = (url) => { window.open(url, "_blank", "noopener,noreferrer"); }; const handleOpenPreview = (item, itemIndex) => { previewIndex.value = itemIndex; previewType.value = item.type; previewUrl.value = item.type === "text" ? "text" : item.url; }; const handleCopyText = async (text) => { try { await navigator.clipboard.writeText(text); playSuccessSound(); isCopied.value = true; setTimeout(() => { isCopied.value = false; }, 500); } catch (err) { const textArea = document.createElement("textarea"); textArea.value = text; textArea.style.position = "fixed"; textArea.style.opacity = "0"; document.body.appendChild(textArea); textArea.select(); try { document.execCommand("copy"); playSuccessSound(); isCopied.value = true; setTimeout(() => { isCopied.value = false; }, 500); } catch (e) { playErrorSound(); } document.body.removeChild(textArea); } }; const handleDownloadFile = async (url, date, type, tweetId, content) => { const fileKey = `${tweetId}_${url || "text"}`; if (downloadingFiles.value.has(fileKey)) { return; } try { downloadingFiles.value = new Set([...downloadingFiles.value, fileKey]); let finalBlob; let ext = "jpg"; if (type === "text") { const textContent = content || ""; finalBlob = new Blob([textContent], { type: "text/plain;charset=utf-8" }); ext = "txt"; } else { const shouldConvertGif = type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true); if (shouldConvertGif) { convertingFiles.value = new Set([...convertingFiles.value, fileKey]); try { const gifBlob = await convertVideoToGif(url); if (gifBlob) { finalBlob = gifBlob; ext = "gif"; } else { const response = await fetch(url); finalBlob = await response.blob(); ext = "mp4"; } } catch (error) { const response = await fetch(url); finalBlob = await response.blob(); ext = "mp4"; } finally { convertingFiles.value = new Set([...convertingFiles.value].filter((k) => k !== fileKey)); } } else { const response = await fetch(url); finalBlob = await response.blob(); if (type === "photo") { const photoMatch = url.match(/format=(\w+)/); ext = photoMatch?.[1] || "jpg"; } else if (type === "video") { ext = "mp4"; } else if (type === "animated_gif") { ext = "mp4"; } } } const formatDateForFilename = (dateStr2) => { const m = dateStr2.match(/(\d{4})-(\d{2})-(\d{2}).*?(\d{2}):(\d{2}):(\d{2})/); if (m) { const [, y, mo, d, h2, mi, s] = m; return `${y}${mo}${d}_${h2}${mi}${s}`; } const d2 = new Date(dateStr2); if (!isNaN(d2.getTime())) { const pad = (n) => String(n).padStart(2, "0"); return `${d2.getFullYear()}${pad(d2.getMonth() + 1)}${pad(d2.getDate())}_${pad(d2.getHours())}${pad(d2.getMinutes())}${pad(d2.getSeconds())}`; } return dateStr2.replace(/\D/g, ""); }; const dateStr = formatDateForFilename(date); const filename = `${account.username}_${dateStr}_${tweetId}.${ext}`; const link = document.createElement("a"); link.href = URL.createObjectURL(finalBlob); link.download = filename; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(link.href); } catch (error) { } finally { downloadingFiles.value = new Set([...downloadingFiles.value].filter((k) => k !== fileKey)); } }; const convertVideoToGif = (videoUrl) => { return new Promise((resolve) => { if (!gifshot.isExistingVideoGIFSupported()) { resolve(null); return; } const gifOptions = getGifShotOptions(); { getVideoDimensions(videoUrl).then(({ width, height }) => { gifshot.createGIF({ video: videoUrl, gifWidth: width, gifHeight: height, ...gifOptions }, (obj) => { handleGifConversionResult(obj, resolve); }); }).catch((error) => { gifshot.createGIF({ video: videoUrl, ...gifOptions }, (obj) => { handleGifConversionResult(obj, resolve); }); }); } }); }; const handleGifConversionResult = (obj, resolve) => { if (obj.error) { resolve(null); } else if (obj.image) { try { const dataUrl = obj.image; const base64Data = dataUrl.split(",")[1]; if (!base64Data) { resolve(null); return; } const byteCharacters = atob(base64Data); const byteNumbers = new Array(byteCharacters.length); for (let i = 0; i < byteCharacters.length; i++) { byteNumbers[i] = byteCharacters.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); const blob = new Blob([byteArray], { type: "image/gif" }); resolve(blob); } catch (error) { resolve(null); } } else { resolve(null); } }; const getVideoDimensions = (videoUrl) => { return new Promise((resolve, reject) => { const video = document.createElement("video"); video.crossOrigin = "anonymous"; video.onloadedmetadata = () => { const width = video.videoWidth; const height = video.videoHeight; video.remove(); if (width && height) { resolve({ width, height }); } else { reject(new Error("Could not determine video dimensions")); } }; video.onerror = () => { video.remove(); reject(new Error("Failed to load video for dimension detection")); }; video.src = videoUrl; }); }; const handleDeleteEntry = async (tweetId, url) => { const key = `${tweetId}|${url}`; deletingEntry.value = key; try { await onDeleteEntry(tweetId, url); } finally { deletingEntry.value = ""; } }; const getTypeIcon = (type) => { switch (type) { case "photo": return u(IconPhoto, { size: 24 }); case "video": return u(IconVideo, { size: 24 }); case "animated_gif": return u(IconGif, { size: 24 }); case "text": return u(IconFileText, { size: 24 }); default: return null; } }; const formatDate = (timestamp) => { const fmt = appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss"; return dayjs(timestamp).format(fmt); }; const formatTimeAgo = (timestamp) => { const now = dayjs(); const then = dayjs(timestamp); const diff = now.diff(then, "second"); const years = Math.floor(diff / (365 * 24 * 60 * 60)); const days = Math.floor(diff % (365 * 24 * 60 * 60) / (24 * 60 * 60)); const hours = Math.floor(diff % (24 * 60 * 60) / (60 * 60)); const minutes = Math.floor(diff % (60 * 60) / 60); const seconds = diff % 60; const parts = []; if (years > 0) parts.push(`${years}y`); if (days > 0) parts.push(`${days}d`); if (hours > 0) parts.push(`${hours}h`); if (minutes > 0) parts.push(`${minutes}m`); if (seconds > 0 && parts.length === 0) parts.push(`${seconds}s`); return parts.slice(0, 2).join(" ") + " ago"; }; const formatNumber = (num) => { if (num === void 0 || num === null) return "0"; if (num >= 1e6) { return (num / 1e6).toFixed(1) + "M"; } if (num >= 1e3) { return (num / 1e3).toFixed(1) + "K"; } return num.toString(); }; const getThumbnailUrl = (url, type, tweetId) => { if (!url) return url; if (type === "animated_gif" && url.includes("tweet_video/")) { const match = url.match(/tweet_video\/([^\/\.]+)/); if (match && match[1]) { return `https://pbs.twimg.com/tweet_video_thumb/${match[1]}?format=jpg&name=360x360`; } } if (url.includes("name=orig")) { return url.replace("name=orig", "name=360x360"); } if (url.includes("name=large")) { return url.replace("name=large", "name=360x360"); } if (url.includes("name=medium")) { return url.replace("name=medium", "name=360x360"); } if (url.includes("name=thumb")) { return url.replace("name=thumb", "name=360x360"); } if (url.includes("pbs.twimg.com/media/")) { const separator = url.includes("?") ? "&" : "?"; return `${url}${separator}name=360x360`; } return url; }; const handleSwipeLeft = () => { if (previewIndex.value < filteredTimeline.length - 1) { const nextItem = filteredTimeline[previewIndex.value + 1]; if (nextItem) { previewIndex.value = previewIndex.value + 1; previewType.value = nextItem.type; previewUrl.value = nextItem.type === "text" ? "text" : nextItem.url; } } }; const handleSwipeRight = () => { if (previewIndex.value > 0) { const prevItem = filteredTimeline[previewIndex.value - 1]; if (prevItem) { previewIndex.value = previewIndex.value - 1; previewType.value = prevItem.type; previewUrl.value = prevItem.type === "text" ? "text" : prevItem.url; } } }; const handleTouchStart = (e) => { if (e.touches[0]) { touchStartX.current = e.touches[0].clientX; touchEndX.current = e.touches[0].clientX; } }; const handleTouchMove = (e) => { if (e.touches[0]) { touchEndX.current = e.touches[0].clientX; } }; const handleTouchEnd = () => { if (touchStartX.current === 0 || touchEndX.current === 0) { touchStartX.current = 0; touchEndX.current = 0; return; } const swipeThreshold = 50; const diff = touchStartX.current - touchEndX.current; if (Math.abs(diff) > swipeThreshold) { if (diff > 0) { handleSwipeLeft(); } else { handleSwipeRight(); } } touchStartX.current = 0; touchEndX.current = 0; }; hooks.useEffect(() => { if (!previewUrl.value && previewType.value !== "text") return; const handleKeyDown = (e) => { if (e.key === "ArrowLeft" && previewIndex.value > 0) { const prevItem = filteredTimeline[previewIndex.value - 1]; if (prevItem) { previewIndex.value = previewIndex.value - 1; previewType.value = prevItem.type; previewUrl.value = prevItem.type === "text" ? "text" : prevItem.url; } } else if (e.key === "ArrowRight" && previewIndex.value < filteredTimeline.length - 1) { const nextItem = filteredTimeline[previewIndex.value + 1]; if (nextItem) { previewIndex.value = previewIndex.value + 1; previewType.value = nextItem.type; previewUrl.value = nextItem.type === "text" ? "text" : nextItem.url; } } else if (e.key === "Escape") { previewUrl.value = ""; previewType.value = ""; previewIndex.value = -1; } }; window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [previewUrl.value, previewType.value, previewIndex.value, filteredTimeline]); return u(preact.Fragment, { children: [ u(Modal, { show: isOpen, onClose, title: t("Database"), children: u("div", { class: "space-y-4", children: [ u("div", { class: "card bg-base-200 border border-base-300", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [ u("div", { class: "avatar", children: u("div", { class: "w-16 rounded-box", children: u( "img", { src: account.account_info.profile_image, alt: account.account_info.nick, onError: (e) => { const target = e.target; target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E'; } } ) }) }), u("div", { class: "grow", children: [ u("h3", { class: "font-semibold text-base", children: [ account.account_info.nick, " ", u("span", { class: "font-normal opacity-70", children: [ "(@", account.username, ")" ] }) ] }), u("p", { class: "text-xs opacity-60 mb-1", children: [ u("span", { class: "font-bold", children: t("Joined") }), " ", formatDateTime(account.account_info.date, appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss") ] }), u("div", { class: "flex gap-3 text-xs opacity-60", children: [ u("span", { children: [ u("span", { class: "font-bold", children: account.account_info.statuses_count.toLocaleString() }), " ", t("Posts") ] }), u("span", { children: [ u("span", { class: "font-bold", children: account.account_info.followers_count.toLocaleString() }), " ", t("Followers") ] }), u("span", { children: [ u("span", { class: "font-bold", children: account.account_info.friends_count.toLocaleString() }), " ", t("Following") ] }) ] }) ] }), onLoadDatabase && u("div", { class: "tooltip tooltip-left", "data-tip": t("Load Database"), children: u( "button", { class: "btn btn-sm btn-square btn-soft btn-info", onClick: onLoadDatabase, "aria-label": t("Load Database"), children: u(IconDatabaseImport, { size: 16 }) } ) }) ] }) }) }), account.media_type === "all" && u("div", { class: "flex items-center gap-2 justify-between", children: [ u("div", { class: "flex items-center gap-2", children: [ u("div", { class: "tooltip", "data-tip": `${t("All")} (${account.timeline.length.toLocaleString()})`, children: u( "button", { class: `btn btn-sm btn-square ${typeFilter.value === "all" ? "btn-neutral" : "btn-ghost"}`, onClick: () => handleTypeFilter("all"), "aria-label": t("All"), children: u(IconLibraryPhoto, { size: 18 }) } ) }), photoCount > 0 && u("div", { class: "tooltip", "data-tip": `${t("Image")} (${photoCount.toLocaleString()})`, children: u( "button", { class: `btn btn-sm btn-square ${typeFilter.value === "photo" ? "btn-primary" : "btn-ghost"}`, onClick: () => handleTypeFilter("photo"), "aria-label": t("Image"), children: u(IconPhoto, { size: 18 }) } ) }), videoCount > 0 && u("div", { class: "tooltip", "data-tip": `${t("Video")} (${videoCount.toLocaleString()})`, children: u( "button", { class: `btn btn-sm btn-square ${typeFilter.value === "video" ? "btn-secondary" : "btn-ghost"}`, onClick: () => handleTypeFilter("video"), "aria-label": t("Video"), children: u(IconVideo, { size: 18 }) } ) }), gifCount > 0 && u("div", { class: "tooltip", "data-tip": `${t("GIF")} (${gifCount.toLocaleString()})`, children: u( "button", { class: `btn btn-sm btn-square ${typeFilter.value === "animated_gif" ? "btn-accent" : "btn-ghost"}`, onClick: () => handleTypeFilter("animated_gif"), "aria-label": t("GIF"), children: u(IconGif, { size: 18 }) } ) }) ] }), totalPages > 1 && u("div", { class: "join", children: [ u("div", { class: "tooltip tooltip-left", "data-tip": t("First Page"), children: u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = 1, disabled: currentPage.value === 1, "aria-label": t("First Page"), children: "«" } ) }), u("div", { class: "tooltip tooltip-left", "data-tip": t("Last Page"), children: u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = totalPages, disabled: currentPage.value === totalPages, "aria-label": t("Last Page"), children: "»" } ) }) ] }) ] }), account.media_type !== "all" && totalPages > 1 && u("div", { class: "flex justify-start", children: u("div", { class: "join", children: [ u("div", { class: "tooltip tooltip-right", "data-tip": t("First Page"), children: u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = 1, disabled: currentPage.value === 1, "aria-label": t("First Page"), children: "«" } ) }), u("div", { class: "tooltip tooltip-right", "data-tip": t("Last Page"), children: u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = totalPages, disabled: currentPage.value === totalPages, "aria-label": t("Last Page"), children: "»" } ) }) ] }) }), u("div", { class: "space-y-4", children: (() => { const page = currentPage.value; const startIndex = (page - 1) * ITEMS_PER_PAGE; const endIndex = startIndex + ITEMS_PER_PAGE; const items = filteredTimeline.slice(startIndex, endIndex); return items.map((item) => { const key = `${item.tweet_id}|${item.url}`; const fileKey = `${item.tweet_id}_${item.url}`; const isDeleting = deletingEntry.value === key; const isDownloading = downloadingFiles.value.has(fileKey); const isConverting = convertingFiles.value.has(fileKey); return u("div", { class: "relative w-full", children: [ u( "button", { class: "btn btn-circle btn-xs btn-error absolute -top-2 -right-2 z-10", onClick: () => handleDeleteEntry(item.tweet_id, item.url), disabled: isDeleting || isDownloading, children: isDeleting ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconTrash, { size: 12 }) } ), u("div", { class: "card bg-base-200 border border-base-300", children: u("div", { class: "card-body p-3", children: u("div", { class: "flex items-center gap-3", children: [ u("div", { class: "shrink-0", children: (item.type === "photo" || item.type === "animated_gif") && !failedThumbnails.value.has(item.url) ? u( "div", { class: "w-12 h-12 rounded overflow-hidden bg-base-300 flex items-center justify-center relative cursor-pointer hover:opacity-80 transition-opacity", onClick: () => { const itemIndex = filteredTimeline.findIndex((i) => `${i.tweet_id}|${i.url}` === key); if (item.type === "text") { handleOpenPreview(item, itemIndex); } else if (item.url) { handleOpenFile(item.url); } }, role: "button", tabIndex: 0, onKeyDown: (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); const itemIndex = filteredTimeline.findIndex((i) => `${i.tweet_id}|${i.url}` === key); if (item.type === "text") { handleOpenPreview(item, itemIndex); } else if (item.url) { handleOpenFile(item.url); } } }, children: [ u( "img", { src: getThumbnailUrl(item.url, item.type, item.tweet_id), alt: "Thumbnail", class: "w-full h-full object-cover", loading: "lazy", onError: () => { failedThumbnails.value = new Set([...failedThumbnails.value, item.url]); } } ), item.type === "animated_gif" && u("div", { class: "absolute inset-0 flex items-center justify-center bg-black/30", children: u(IconGif, { size: 16, class: "text-white" }) }) ] } ) : u( "div", { class: `w-12 h-12 rounded flex items-center justify-center cursor-pointer hover:opacity-80 transition-opacity ${item.type === "photo" ? "bg-primary/20" : item.type === "video" ? "bg-secondary/20" : item.type === "text" ? "bg-warning/20" : "bg-accent/20"}`, onClick: () => { const itemIndex = filteredTimeline.findIndex((i) => `${i.tweet_id}|${i.url}` === key); if (item.type === "text") { handleOpenPreview(item, itemIndex); } else if (item.url) { handleOpenFile(item.url); } }, role: "button", tabIndex: 0, onKeyDown: (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); const itemIndex = filteredTimeline.findIndex((i) => `${i.tweet_id}|${i.url}` === key); if (item.type === "text") { handleOpenPreview(item, itemIndex); } else if (item.url) { handleOpenFile(item.url); } } }, children: u("div", { class: `${item.type === "photo" ? "text-primary" : item.type === "video" ? "text-secondary" : item.type === "text" ? "text-warning" : "text-accent"}`, children: getTypeIcon(item.type) }) } ) }), u("div", { class: "grow min-w-0", children: [ u( "a", { class: "link link-hover text-sm font-mono", href: `https://x.com/${account.username}/status/${item.tweet_id}`, target: "_blank", rel: "noopener noreferrer", children: item.tweet_id } ), u("p", { class: "text-xs opacity-60", children: [ formatDate(item.date), " (", formatTimeAgo(item.date), ")" ] }) ] }), u("div", { class: "shrink-0 flex items-center gap-1", children: [ u("div", { class: "tooltip tooltip-left", "data-tip": t("Preview"), children: u( "button", { class: "btn btn-xs btn-square", onClick: () => { const itemIndex = filteredTimeline.findIndex((i) => `${i.tweet_id}|${i.url}` === key); previewIndex.value = itemIndex; previewType.value = item.type; previewUrl.value = item.type === "text" ? "text" : item.url; }, "aria-label": t("Preview"), disabled: isDeleting, children: u(IconEye, { size: 14 }) } ) }), u("div", { class: "tooltip tooltip-left", "data-tip": isConverting ? t("Converting...") : item.type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true) ? t("Convert & Download") : t("Download"), children: u( "button", { class: `btn btn-xs btn-square ${isConverting ? "btn-warning" : "btn-success"}`, onClick: () => handleDownloadFile(item.url, item.date, item.type, item.tweet_id, "content" in item ? item.content : void 0), "aria-label": isConverting ? t("Converting...") : item.type === "animated_gif" && (appOptionsManager.get("convertAnimatedGifs") ?? true) ? t("Convert & Download") : t("Download"), disabled: isDeleting || isDownloading, children: isDownloading ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconFileDownload, { size: 14 }) } ) }) ] }) ] }) }) }) ] }, key); }); })() }), totalPages > 1 && u("div", { class: "flex justify-center", children: u("div", { class: "join", children: [ u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = Math.max(1, currentPage.value - 1), disabled: currentPage.value === 1, children: "«" } ), u("button", { class: "join-item btn btn-sm", children: [ currentPage.value, "/", totalPages ] }), u( "button", { class: "join-item btn btn-sm", onClick: () => currentPage.value = Math.min(totalPages, currentPage.value + 1), disabled: currentPage.value === totalPages, children: "»" } ) ] }) }), filteredTimeline.length === 0 && u("div", { class: "text-center py-8 opacity-50", children: u("p", { children: t("No media files found") }) }) ] }) }), (previewUrl.value || previewType.value) && $( u( "div", { class: "fixed inset-0 bg-black/90 backdrop-blur-sm flex items-center justify-center z-1000 px-4", onTouchStart: handleTouchStart, onTouchMove: handleTouchMove, onTouchEnd: handleTouchEnd, children: [ u( "button", { class: "btn btn-square btn-error absolute top-4 right-4 z-10", onClick: () => { previewUrl.value = ""; previewType.value = ""; previewIndex.value = -1; }, "aria-label": t("Close"), children: u(IconX, { size: 24 }) } ), (() => { const currentItem = filteredTimeline[previewIndex.value]; if (currentItem) { return u("div", { class: "absolute top-4 left-1/2 transform -translate-x-1/2 flex flex-wrap items-center justify-center gap-3 px-4 py-2 bg-black/70 backdrop-blur-sm rounded-lg text-xs text-white", children: [ currentItem.view_count !== void 0 && u("div", { class: "flex items-center gap-1", children: [ u(IconEye, { size: 14 }), u("span", { children: formatNumber(currentItem.view_count) }) ] }), currentItem.favorite_count !== void 0 && u("div", { class: "flex items-center gap-1", children: [ u("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", children: u("path", { d: "M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z" }) }), u("span", { children: formatNumber(currentItem.favorite_count) }) ] }), currentItem.retweet_count !== void 0 && u("div", { class: "flex items-center gap-1", children: [ u(IconRepeat, { size: 14 }), u("span", { children: formatNumber(currentItem.retweet_count) }) ] }), currentItem.bookmark_count !== void 0 && u("div", { class: "flex items-center gap-1", children: [ u("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", children: u("path", { d: "M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z" }) }), u("span", { children: formatNumber(currentItem.bookmark_count) }) ] }), currentItem.source && u("div", { class: "flex items-center gap-1", children: u("span", { children: currentItem.source }) }), currentItem.tweet_id && u("div", { class: "flex items-center gap-1 opacity-60", children: u("span", { children: currentItem.tweet_id }) }) ] }); } return null; })(), u("div", { class: "absolute bottom-4 left-1/2 transform -translate-x-1/2 flex flex-col items-center gap-2", children: [ u("div", { class: "px-4 py-2 bg-black/70 backdrop-blur-sm rounded-lg text-xs text-white", children: u("span", { class: "text-sm", children: [ (previewIndex.value + 1).toLocaleString(), " / ", filteredTimeline.length.toLocaleString() ] }) }), (() => { const currentItem = filteredTimeline[previewIndex.value]; if (currentItem) { return u("div", { class: "px-4 py-2 bg-black/70 backdrop-blur-sm rounded-lg text-xs text-white whitespace-nowrap", children: u("span", { class: "text-xs", children: [ formatDate(currentItem.date), " (", formatTimeAgo(currentItem.date), ")" ] }) }); } return null; })() ] }), previewIndex.value > 0 && u( "button", { class: "btn btn-circle btn-lg btn-neutral absolute left-4 hidden md:flex", onClick: () => { const prevItem = filteredTimeline[previewIndex.value - 1]; if (prevItem) { previewIndex.value = previewIndex.value - 1; previewType.value = prevItem.type; previewUrl.value = prevItem.type === "text" ? "text" : prevItem.url; } }, "aria-label": t("Prev"), children: u(IconChevronLeft, { size: 32 }) } ), previewIndex.value < filteredTimeline.length - 1 && u( "button", { class: "btn btn-circle btn-lg btn-neutral absolute right-4 hidden md:flex", onClick: () => { const nextItem = filteredTimeline[previewIndex.value + 1]; if (nextItem) { previewIndex.value = previewIndex.value + 1; previewType.value = nextItem.type; previewUrl.value = nextItem.type === "text" ? "text" : nextItem.url; } }, "aria-label": t("Next"), children: u(IconChevronRight, { size: 32 }) } ), previewType.value === "photo" ? u( "img", { src: previewUrl.value, alt: "Preview", class: "max-w-full max-h-full object-contain" } ) : previewType.value === "text" ? u("div", { class: "relative", children: [ (() => { const currentItem = filteredTimeline[previewIndex.value]; if (currentItem && "content" in currentItem && currentItem.content) { return u( "button", { class: `btn btn-sm btn-square absolute -top-2 -right-2 z-10 ${isCopied.value ? "btn-success" : "btn-primary"}`, onClick: () => handleCopyText(currentItem.content), "aria-label": t("Copy"), children: isCopied.value ? u(IconCircleCheck, { size: 16 }) : u(IconCopy, { size: 16 }) } ); } return null; })(), u("div", { class: "max-w-2xl w-full max-h-[80vh] overflow-auto bg-base-100 rounded-lg p-4 md:p-6", children: (() => { const currentItem = filteredTimeline[previewIndex.value]; if (currentItem && "content" in currentItem && currentItem.content) { const linkifyText = (text) => { const urlRegex = /(https?:\/\/[^\s]+|www\.[^\s]+|[a-zA-Z0-9-]+\.[a-zA-Z]{2,}[^\s]*)/g; const parts = text.split(urlRegex); return parts.map((part, index) => { if (urlRegex.test(part)) { let url = part; if (!url.startsWith("http://") && !url.startsWith("https://")) { url = "https://" + url; } return u( "a", { href: url, target: "_blank", rel: "noopener noreferrer", class: "link link-primary break-all", onClick: (e) => { e.stopPropagation(); window.open(url, "_blank", "noopener,noreferrer"); }, children: part }, index ); } return u("span", { children: part }, index); }); }; return u("div", { class: "prose prose-sm max-w-none", children: u("p", { class: "whitespace-pre-wrap wrap-break-word", children: linkifyText(currentItem.content) }) }); } return u("div", { class: "text-center opacity-50", children: u("p", { children: t("No content available") }) }); })() }) ] }) : u( "video", { src: previewUrl.value, controls: true, autoplay: true, class: "max-w-full max-h-full" } ) ] } ), document.getElementById("tmd-root")?.shadowRoot?.getElementById("tmd-portal-root") || document.getElementById("tmd-root")?.shadowRoot || document.body ) ] }); } function Database({ isVisible, onCountChange, onLoadToDashboard } = {}) { const { t, i18n } = useTranslation(); const isArabic = (i18n.language || "").startsWith("ar"); const allFilteredAccounts = signals.useSignal([]); const isLoading = signals.useSignal(true); const currentPage = signals.useSignal(1); const ITEMS_PER_PAGE = 3; const totalCount = signals.useSignal(0); const dateRangeCount = signals.useSignal(0); const filterByDateRange = signals.useSignal(false); const filterByGroup = signals.useSignal(null); const showGroupModal = signals.useSignal(false); const accountToGroup = signals.useSignal(null); const availableGroups = signals.useSignal([]); const allAccounts = signals.useSignal([]); const newGroupName = signals.useSignal(""); const totalPages = signals.computed(() => Math.max(1, Math.ceil(allFilteredAccounts.value.length / ITEMS_PER_PAGE))); const accounts = signals.computed(() => { const startIndex = (currentPage.value - 1) * ITEMS_PER_PAGE; const endIndex = startIndex + ITEMS_PER_PAGE; return allFilteredAccounts.value.slice(startIndex, endIndex); }); const showDeleteModal = signals.useSignal(false); const showClearModal = signals.useSignal(false); const accountToDelete = signals.useSignal(null); const deletingId = signals.useSignal(null); const exportingId = signals.useSignal(null); const { downloadingId, downloadProgress, downloadCurrent, downloadTotal, downloadCurrentFile, downloadConverting } = databaseDownloadState; const viewingAccount = signals.useSignal(null); const showViewModal = signals.useSignal(false); const isImporting = signals.useSignal(false); const isExportingAll = signals.useSignal(false); const isClearingAll = signals.useSignal(false); const fileInputRef = hooks.useRef(null); const selectedAccounts = signals.useSignal( new Set()); const isBulkDownloading = signals.useSignal(false); const dateFormat = signals.useSignal(appOptionsManager.get("dateTimeFormat")); hooks.useEffect(() => { appOptionsManager.signal.subscribe(() => { dateFormat.value = appOptionsManager.get("dateTimeFormat"); }); }, []); hooks.useEffect(() => { if (isVisible !== false) { loadAccounts(); } }, [isVisible]); hooks.useEffect(() => { const unsubscribe = dbState.dbChangeSignal.subscribe(() => { loadAccounts(); }); return unsubscribe; }, []); const loadAccounts = async () => { try { isLoading.value = true; const accounts2 = await mediaDownloaderDB.getAllAccounts(); allAccounts.value = accounts2; try { const groups = await mediaDownloaderDB.getAllGroups(); availableGroups.value = groups; } catch (error) { console.error("Error loading groups:", error); availableGroups.value = []; } let filtered = accounts2; if (filterByDateRange.value) { filtered = filtered.filter( (acc) => acc.date_since && acc.date_until && (acc.batch_mode === "date_range" || acc.batch_mode === "batch_date_range") ); } if (filterByGroup.value !== null) { if (filterByGroup.value === "") { filtered = filtered.filter((acc) => !acc.group); } else { filtered = filtered.filter((acc) => acc.group === filterByGroup.value); } } totalCount.value = accounts2.length; dateRangeCount.value = accounts2.filter( (acc) => acc.date_since && acc.date_until && (acc.batch_mode === "date_range" || acc.batch_mode === "batch_date_range") ).length; filtered.sort((a, b) => b.cached_at - a.cached_at); allFilteredAccounts.value = filtered; if (currentPage.value > totalPages.value) { currentPage.value = 1; } if (onCountChange) { onCountChange(filtered.length); } } catch (error) { console.error("Failed to load accounts:", error); } finally { isLoading.value = false; } }; const processJsonFile = async (text, fileName) => { try { const data = JSON.parse(text); let normalizedBatchMode = void 0; if (data.batch_mode === "date_range" || data.batch_mode === "batch_date_range") { normalizedBatchMode = "date_range"; } else if (data.batch_mode === "single" || data.batch_mode === "batch" || data.batch_mode === "auto") { normalizedBatchMode = void 0; } let normalizedMediaType = data.media_type || "all"; if (normalizedMediaType && !["all", "image", "video", "gif", "text"].includes(normalizedMediaType)) { normalizedMediaType = "all"; } const normalizedTimeline = (data.timeline || []).map((item) => ({ date: item.date, tweet_id: item.tweet_id, type: item.type, url: item.url || "", content: item.content, width: item.width, height: item.height, view_count: item.view_count, bookmark_count: item.bookmark_count, favorite_count: item.favorite_count, retweet_count: item.retweet_count, reply_count: item.reply_count, source: item.source })); const account = { username: data.username, account_info: data.account_info, timeline: normalizedTimeline, cached_at: data.cached_at || Date.now(), metadata: data.metadata || { new_entries: 0 }, batch_mode: normalizedBatchMode, batch_identifier: data.batch_identifier, timeline_type: data.timeline_type, media_type: normalizedMediaType, date_since: data.date_since, date_until: data.date_until, group: data.group }; await mediaDownloaderDB.saveAccount(account); playSuccessSound(); } catch (error) { console.error("Failed to process JSON file:", error); playErrorSound(); throw error; } }; const importAccounts = async (files) => { isImporting.value = true; try { for (const file of Array.from(files)) { if (file.name.toLowerCase().endsWith(".zip")) { const arrayBuffer = await file.arrayBuffer(); const unzipped = await new Promise((resolve, reject) => { fflate.unzip(new Uint8Array(arrayBuffer), (err, data) => { if (err) reject(err); else resolve(data); }); }); for (const [filename, content] of Object.entries(unzipped)) { if (filename.toLowerCase().endsWith(".json")) { const text = new TextDecoder().decode(content); await processJsonFile(text, filename); } } await loadAccounts(); playClickSound(); } else if (file.name.toLowerCase().endsWith(".json")) { const text = await file.text(); await processJsonFile(text, file.name); await loadAccounts(); playClickSound(); } } } catch (error) { console.error("Failed to import accounts:", error); playErrorSound(); } finally { isImporting.value = false; } }; const onFilesSelected = async (e) => { const input = e.currentTarget; const files = input.files; if (files && files.length) { await importAccounts(files); } }; const handleImportClick = () => { fileInputRef.current?.click(); }; const handleDownloadAccount = async (account) => { if (!account.id) return; downloadingId.value = account.id; databaseDownloadState.resetDownloadState(account.id); try { const batchMode = account.batch_mode === "date_range" ? "date_range" : void 0; const batchInfo = batchMode ? { mode: batchMode, page: 1 } : void 0; await mediaDownloader.downloadAccountMedia(account, (progress) => { downloadProgress.value = { ...downloadProgress.value, [account.id]: progress.percentage }; downloadCurrent.value = { ...downloadCurrent.value, [account.id]: progress.current }; downloadTotal.value = { ...downloadTotal.value, [account.id]: progress.total }; downloadCurrentFile.value = { ...downloadCurrentFile.value, [account.id]: progress.currentFile || "" }; downloadConverting.value = { ...downloadConverting.value, [account.id]: progress.converting || false }; }, batchInfo); playSuccessSound(); } catch (error) { if (error?.message !== "Download aborted") { playErrorSound(); } } finally { databaseDownloadState.clearDownloadState(account.id); } }; const handleBulkDownload = async () => { if (selectedAccounts.value.size === 0) return; isBulkDownloading.value = true; const accountsToDownload = allFilteredAccounts.value.filter((acc) => acc.id && selectedAccounts.value.has(acc.id)); try { for (const account of accountsToDownload) { if (!account.id) continue; downloadingId.value = account.id; databaseDownloadState.resetDownloadState(account.id); try { const batchMode = account.batch_mode === "date_range" ? "date_range" : void 0; const batchInfo = batchMode ? { mode: batchMode, page: 1 } : void 0; await mediaDownloader.downloadAccountMedia(account, (progress) => { downloadProgress.value = { ...downloadProgress.value, [account.id]: progress.percentage }; downloadCurrent.value = { ...downloadCurrent.value, [account.id]: progress.current }; downloadTotal.value = { ...downloadTotal.value, [account.id]: progress.total }; downloadCurrentFile.value = { ...downloadCurrentFile.value, [account.id]: progress.currentFile || "" }; downloadConverting.value = { ...downloadConverting.value, [account.id]: progress.converting || false }; }, batchInfo); } catch (error) { if (error?.message !== "Download aborted") { console.error(`Failed to download ${account.username}:`, error); } } finally { databaseDownloadState.clearDownloadState(account.id); } } playSuccessSound(); selectedAccounts.value = new Set(); } catch (error) { playErrorSound(); } finally { isBulkDownloading.value = false; } }; const toggleSelectAccount = (accountId) => { if (!accountId) return; const newSelected = new Set(selectedAccounts.value); if (newSelected.has(accountId)) { newSelected.delete(accountId); } else { newSelected.add(accountId); } selectedAccounts.value = newSelected; }; const toggleSelectAll = () => { const allFilteredIds = new Set(allFilteredAccounts.value.filter((acc) => acc.id).map((acc) => acc.id)); const allSelected = allFilteredIds.size > 0 && Array.from(allFilteredIds).every((id2) => selectedAccounts.value.has(id2)); if (allSelected) { selectedAccounts.value = new Set(); } else { selectedAccounts.value = new Set(allFilteredIds); } }; const selectedCount = signals.computed(() => selectedAccounts.value.size); const exportAccount = async (account) => { if (!account.id) return; try { exportingId.value = account.id; const exportData = { username: account.username, account_info: account.account_info, metadata: account.metadata, timeline: account.timeline, cached_at: account.cached_at, batch_mode: account.batch_mode, batch_identifier: account.batch_identifier, timeline_type: account.timeline_type, media_type: account.media_type, date_since: account.date_since, date_until: account.date_until, cached_at_formatted: formatDate(account.cached_at), exported_at: Date.now(), exported_at_formatted: formatDate(Date.now()), date_time_format: dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss" }; const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss"; const now = dayjs(); const exportTs = now.format("YYYYMMDD_HHmmss"); const mediaTypeSuffix = account.media_type && account.media_type !== "all" ? `_${account.media_type}` : ""; const fileName = `${sanitizeFilename(account.username)}_${exportTs}${mediaTypeSuffix}.json`; const blob = new Blob([JSON.stringify(exportData, null, 2)], { type: "application/json" }); fileSaverEs.saveAs(blob, fileName); playSuccessSound(); } catch (error) { console.error("Failed to export account:", error); playErrorSound(); } finally { exportingId.value = null; } }; const openDeleteDialog = (account) => { accountToDelete.value = account; showDeleteModal.value = true; }; const confirmDelete = async () => { const account = accountToDelete.value; if (!account?.id) return; try { deletingId.value = account.id; await mediaDownloaderDB.deleteAccount(account.id); playDeleteSound(); await loadAccounts(); if (onCountChange) { const allAccounts2 = await mediaDownloaderDB.getAllAccounts(); onCountChange(allAccounts2.length); } } catch (error) { console.error("Failed to delete account:", error); playErrorSound(); } finally { deletingId.value = null; showDeleteModal.value = false; accountToDelete.value = null; } }; const closeDeleteDialog = () => { showDeleteModal.value = false; accountToDelete.value = null; }; const openClearDialog = () => { showClearModal.value = true; }; const closeClearDialog = () => { showClearModal.value = false; }; const handleDeleteEntry = async (tweetId, url) => { if (!viewingAccount.value?.id) return; try { const account = viewingAccount.value; const updatedTimeline = account.timeline.filter( (item) => !(item.tweet_id === tweetId && item.url === url) ); await mediaDownloaderDB.saveAccount({ ...account, timeline: updatedTimeline, metadata: { ...account.metadata, new_entries: updatedTimeline.length } }); viewingAccount.value = { ...account, timeline: updatedTimeline, metadata: { ...account.metadata, new_entries: updatedTimeline.length } }; await loadAccounts(); } catch (error) { console.error("Failed to delete entry:", error); playErrorSound(); } }; const handleLoadDatabase = () => { if (!viewingAccount.value?.username || !onLoadToDashboard) return; const account = viewingAccount.value; onLoadToDashboard({ username: account.username, batch_mode: account.batch_mode === "date_range" ? "date_range" : void 0, date_since: account.date_since, date_until: account.date_until, media_type: account.media_type }); viewingAccount.value = null; }; const confirmClearAll = async () => { try { isClearingAll.value = true; await mediaDownloaderDB.clearAll(); await loadAccounts(); if (onCountChange) { onCountChange(0); } showClearModal.value = false; } catch (error) { console.error("Failed to clear all accounts:", error); playErrorSound(); } finally { isClearingAll.value = false; } }; const formatDate = (timestamp) => { const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss"; return dayjs(timestamp).format(fmt); }; const formatTimeAgo = (timestamp) => { const now = dayjs(); const then = dayjs(timestamp); const diff = now.diff(then, "second"); if (diff < 60) return t("Just now"); if (diff < 3600) return t("{{minutes}}m ago", { minutes: Math.floor(diff / 60) }); if (diff < 86400) return t("{{hours}}h ago", { hours: Math.floor(diff / 3600) }); if (diff < 604800) return t("{{days}}d ago", { days: Math.floor(diff / 86400) }); return formatDate(timestamp); }; const goToPage = (page) => { if (page >= 1 && page <= totalPages.value) { currentPage.value = page; } }; const exportAllAccounts = async () => { try { isExportingAll.value = true; const allAccounts2 = await mediaDownloaderDB.getAllAccounts(); if (!allAccounts2.length) return; const fmt = dateFormat.value || appOptionsManager.get("dateTimeFormat") || "YYYY-MM-DD HH:mm:ss"; const now = dayjs(); const exportTs = now.format("YYYYMMDD_HHmmss"); const files = allAccounts2.map((account, index2) => { const exportData = { username: account.username, account_info: account.account_info, metadata: account.metadata, timeline: account.timeline, cached_at: account.cached_at, batch_mode: account.batch_mode, batch_identifier: account.batch_identifier, timeline_type: account.timeline_type, media_type: account.media_type, date_since: account.date_since, date_until: account.date_until, cached_at_formatted: dayjs(account.cached_at).format(fmt), exported_at: now.valueOf(), exported_at_formatted: now.format(fmt), date_time_format: fmt }; const mediaTypeSuffix = account.media_type && account.media_type !== "all" ? `_${account.media_type}` : ""; const uniqueSuffix = allAccounts2.filter((a) => a.username === account.username).length > 1 ? `_${index2 + 1}` : ""; const fileName = `${sanitizeFilename(account.username)}_${exportTs}${mediaTypeSuffix}${uniqueSuffix}.json`; const content = JSON.stringify(exportData, null, 2); const blob = new Blob([content], { type: "application/json" }); return { name: fileName, blob }; }); let index = 0; const readableZipStream = createWriter({ pull(ctrl) { if (index >= files.length) { ctrl.close(); return; } const file = files[index]; if (!file) { ctrl.close(); return; } index += 1; ctrl.enqueue({ name: file.name, stream: () => file.blob.stream() }); } }); const chunks = []; const writableOutputStream = new WritableStream({ write(chunk) { chunks.push(chunk); } }); await readableZipStream.pipeTo(writableOutputStream); const arrayBuffer = await new Blob(chunks).arrayBuffer(); const zipBlob = new Blob([arrayBuffer]); const zipFilename = `twitter-x-media-batch-downloader-pro_${exportTs}.zip`; fileSaverEs.saveAs(zipBlob, zipFilename); playSuccessSound(); } catch (error) { playErrorSound(); } finally { isExportingAll.value = false; } }; if (isLoading.value) { return u("div", { class: "space-y-6", children: [ u("div", { class: "flex items-center justify-between", children: [ u("div", { class: "flex items-center gap-2", children: [ u("div", { class: "skeleton h-8 w-24" }), u("div", { class: "skeleton h-8 w-24" }) ] }), u("div", { class: "flex items-center gap-2", children: [ u("div", { class: "skeleton h-8 w-8" }), u("div", { class: "skeleton h-8 w-8" }) ] }) ] }), [1, 2, 3].map((i) => u("div", { class: "card bg-base-200 border border-base-300 w-full", children: u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [ u("div", { class: "skeleton w-16 h-16 rounded-xl shrink-0" }), u("div", { class: "grow space-y-2", children: [ u("div", { class: "skeleton h-4 w-32" }), u("div", { class: "skeleton h-3 w-24" }), u("div", { class: "flex gap-2", children: [ u("div", { class: "skeleton h-5 w-16" }), u("div", { class: "skeleton h-5 w-16" }), u("div", { class: "skeleton h-5 w-12" }) ] }), u("div", { class: "skeleton h-3 w-40" }) ] }), u("div", { class: "skeleton w-8 h-8 rounded-lg shrink-0" }) ] }) }) }, i)) ] }); } return u(preact.Fragment, { children: [ u("div", { class: "space-y-6", children: [ u("div", { class: "flex items-center justify-between", children: [ u("div", { class: "flex items-center gap-2", children: [ u( "input", { type: "file", class: "hidden", ref: fileInputRef, accept: ".json,.zip,application/json,application/zip", multiple: true, onChange: onFilesSelected } ), u("div", { class: "tooltip tooltip-right", "data-tip": t("Filter by Date Range"), children: u( "button", { class: `btn btn-sm btn-square ${filterByDateRange.value ? "btn-active btn-primary" : ""}`, "aria-label": t("Filter by Date Range"), onClick: () => { filterByDateRange.value = !filterByDateRange.value; currentPage.value = 1; loadAccounts(); }, disabled: isImporting.value || isExportingAll.value || isClearingAll.value || dateRangeCount.value === 0, children: u(IconCalendarWeek, { size: 16 }) } ) }), u("div", { class: "dropdown dropdown-bottom", children: [ u("div", { tabIndex: 0, role: "button", class: "btn btn-sm", children: [ filterByGroup.value === null ? t("All Groups") : filterByGroup.value === "" ? t("Ungroup") : u(preact.Fragment, { children: [ filterByGroup.value, " (", allFilteredAccounts.value.length, ")" ] }), u("svg", { width: "12px", height: "12px", class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 2048 2048", children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" }) }) ] }), u("ul", { tabIndex: 0, class: "dropdown-content menu bg-base-200 rounded-box z-20 w-52 p-2 shadow-lg border border-base-300", children: [ u("li", { children: u( "button", { class: filterByGroup.value === null ? "active" : "", onClick: () => { filterByGroup.value = null; currentPage.value = 1; loadAccounts(); }, children: t("All Groups") } ) }), u("li", { children: u( "button", { class: filterByGroup.value === "" ? "active" : "", onClick: () => { filterByGroup.value = ""; currentPage.value = 1; loadAccounts(); }, children: t("Ungroup") } ) }), availableGroups.value.map((group) => { const count = allAccounts.value.filter((acc) => acc.group === group).length; return u("li", { children: u( "button", { class: filterByGroup.value === group ? "active" : "", onClick: () => { filterByGroup.value = group; currentPage.value = 1; loadAccounts(); }, children: [ group, " (", count, ")" ] } ) }, group); }) ] }) ] }) ] }), u("div", { class: "flex items-center gap-2", children: [ u("div", { class: "dropdown dropdown-end", children: [ u("div", { tabIndex: 0, role: "button", class: "btn btn-sm btn-square btn-ghost", "aria-label": t("More options"), children: u(IconDots, { size: 16 }) }), u("ul", { tabIndex: 0, class: "dropdown-content menu bg-base-200 rounded-box z-20 w-52 p-2 shadow-lg border border-base-300", children: [ u("li", { children: u( "button", { onClick: (e) => { e.stopPropagation(); handleImportClick(); }, disabled: isImporting.value, children: isImporting.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Importing...") ] }) : u(preact.Fragment, { children: [ u(IconDatabaseImport, { size: 16 }), u("span", { children: [ t("Import"), " (.json/.zip)" ] }) ] }) } ) }), u("li", { children: u( "button", { onClick: async (e) => { e.stopPropagation(); await exportAllAccounts(); }, disabled: isExportingAll.value || isImporting.value || totalCount.value === 0, children: isExportingAll.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Exporting...") ] }) : u(preact.Fragment, { children: [ u(IconDatabaseExport, { size: 16 }), u("span", { children: [ t("Export"), " (.zip)" ] }) ] }) } ) }), u("li", { children: u( "button", { onClick: (e) => { e.stopPropagation(); openClearDialog(); }, disabled: isImporting.value || isExportingAll.value || isClearingAll.value || totalCount.value === 0, class: "text-error", children: [ u(IconDatabaseX, { size: 16 }), t("Clear") ] } ) }) ] }) ] }), u("div", { class: "tooltip tooltip-left", "data-tip": t("Download"), children: u( "button", { class: "btn btn-success btn-sm", onClick: handleBulkDownload, disabled: selectedCount.value === 0 || isBulkDownloading.value || downloadingId.value !== null, children: isBulkDownloading.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Downloading...") ] }) : u(preact.Fragment, { children: [ u(IconFileZip, { size: 16 }), selectedCount.value > 0 ? `${t("Download")} (${selectedCount.value})` : t("Download") ] }) } ) }) ] }) ] }), allFilteredAccounts.value.length > 0 && u("div", { class: "flex items-center gap-2 pb-2", children: [ u( "input", { type: "checkbox", class: "checkbox checkbox-sm", checked: (() => { const allFilteredIds = new Set(allFilteredAccounts.value.filter((acc) => acc.id).map((acc) => acc.id)); return allFilteredIds.size > 0 && Array.from(allFilteredIds).every((id2) => selectedAccounts.value.has(id2)); })(), indeterminate: (() => { const allFilteredIds = new Set(allFilteredAccounts.value.filter((acc) => acc.id).map((acc) => acc.id)); return selectedAccounts.value.size > 0 && selectedAccounts.value.size < allFilteredIds.size; })(), onChange: toggleSelectAll } ), u("span", { class: "text-sm opacity-70", children: selectedCount.value > 0 ? `${selectedCount.value} ${t("selected")}` : t("Select All") }) ] }), accounts.value.map((account) => u("div", { class: "relative w-full", children: [ account.group && u("div", { class: "badge badge-soft badge-info badge-sm absolute -top-2 -left-2 z-10", children: account.group }), u( "button", { class: "btn btn-circle btn-xs btn-error absolute -top-2 -right-2 z-10", onClick: () => openDeleteDialog(account), children: deletingId.value === account.id ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconTrash, { size: 12 }) } ), u("div", { class: "card bg-base-200 border border-base-300 w-full", children: [ u("div", { class: "card-body p-4", children: u("div", { class: "flex items-center gap-4", children: [ u("div", { class: "flex items-center gap-2", children: u( "input", { type: "checkbox", class: "checkbox checkbox-sm", checked: account.id ? selectedAccounts.value.has(account.id) : false, onChange: () => toggleSelectAccount(account.id), disabled: !account.id } ) }), u("div", { class: "flex flex-col items-center gap-1", children: u("div", { class: "avatar", children: u( "div", { class: "w-16 rounded-xl cursor-pointer hover:opacity-80 transition-opacity", onClick: () => { viewingAccount.value = account; showViewModal.value = true; }, role: "button", tabIndex: 0, onKeyDown: (e) => { if (e.key === "Enter" || e.key === " ") { e.preventDefault(); viewingAccount.value = account; showViewModal.value = true; } }, "aria-label": t("Explore Database"), children: u( "img", { src: account.account_info.profile_image, alt: account.account_info.nick, onError: (e) => { const target = e.target; target.src = 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="gray"%3E%3Ccircle cx="12" cy="12" r="10"/%3E%3C/svg%3E'; } } ) } ) }) }), u("div", { class: "grow", children: [ u("div", { class: "flex items-center gap-2 flex-wrap", children: [ u("h3", { class: "font-semibold text-base", children: account.account_info.nick }), account.batch_mode === "date_range" && account.date_since && account.date_until && u("div", { class: "badge badge-soft badge-info badge-sm", children: [ account.date_since, " → ", account.date_until ] }) ] }), u("p", { class: "text-sm opacity-70", children: u( "a", { class: "link link-hover", href: `https://x.com/${account.username}`, target: "_blank", rel: "noopener noreferrer", children: [ "@", account.username ] } ) }), u("div", { class: "flex gap-2 mt-1", children: [ account.media_type && u("div", { class: "badge badge-soft badge-primary badge-sm", children: account.media_type === "all" ? t("All") : account.media_type === "image" ? t("Image") : account.media_type === "video" ? t("Video") : account.media_type === "gif" ? t("GIF") : account.media_type === "text" ? t("Text") : t("All") }), u("div", { class: "badge badge-soft badge-secondary badge-sm", children: account.metadata.new_entries.toLocaleString() }) ] }), u("p", { class: "text-xs opacity-50 mt-1", children: [ formatDate(account.cached_at), " (", formatTimeAgo(account.cached_at), ")" ] }) ] }), u("div", { class: "flex items-center gap-1", children: [ u("div", { class: "dropdown dropdown-end", children: [ u("div", { tabIndex: 0, role: "button", class: "btn btn-sm btn-square btn-ghost", "aria-label": t("More options"), children: u(IconDots, { size: 16 }) }), u("ul", { tabIndex: 0, class: "dropdown-content menu bg-base-200 rounded-box z-1 w-48 p-2 shadow-lg border border-base-300", children: [ u("li", { children: u( "button", { onClick: async () => { accountToGroup.value = account; newGroupName.value = account.group || ""; try { const groups = await mediaDownloaderDB.getAllGroups(); availableGroups.value = groups; } catch (error) { console.error("Error loading groups:", error); availableGroups.value = []; } showGroupModal.value = true; }, disabled: deletingId.value === account.id, children: [ u(IconTags, { size: 16 }), t("Group") ] } ) }), u("li", { children: u( "button", { onClick: () => { if (!account.username || !onLoadToDashboard) return; onLoadToDashboard({ username: account.username, batch_mode: account.batch_mode === "date_range" ? "date_range" : void 0, date_since: account.date_since, date_until: account.date_until, media_type: account.media_type }); }, disabled: deletingId.value === account.id || !onLoadToDashboard, children: [ u(IconDatabaseImport, { size: 16 }), t("Load Database") ] } ) }), u("li", { children: u( "button", { onClick: () => { viewingAccount.value = account; showViewModal.value = true; }, disabled: deletingId.value === account.id, children: [ u(IconDatabaseSearch, { size: 16 }), t("Explore Database") ] } ) }), u("li", { children: u( "button", { onClick: () => exportAccount(account), disabled: exportingId.value === account.id || deletingId.value === account.id || downloadingId.value === account.id, children: [ exportingId.value === account.id ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconDatabaseExport, { size: 16 }), u("span", { children: [ t("Export"), " (.json)" ] }) ] } ) }) ] }) ] }), u("div", { class: "tooltip tooltip-left", "data-tip": t("Download"), children: u( "button", { class: "btn btn-success btn-sm btn-square", "aria-label": t("Download"), onClick: () => handleDownloadAccount(account), disabled: downloadingId.value === account.id || deletingId.value === account.id || exportingId.value === account.id, children: downloadingId.value === account.id ? u("span", { class: "loading loading-spinner loading-xs" }) : u(IconFileZip, { size: 16 }) } ) }) ] }) ] }) }), downloadingId.value === account.id && account.id && downloadProgress.value[account.id] !== void 0 && u("div", { class: "px-4 pb-4 space-y-2", children: [ u("div", { class: "flex justify-between text-sm", children: [ u("span", { children: [ downloadConverting.value[account.id] ? t("Converting GIFs...") : t("Downloading..."), (downloadTotal.value[account.id] ?? 0) > 0 && ` (${(downloadCurrent.value[account.id] ?? 0).toLocaleString()}/${(downloadTotal.value[account.id] ?? 0).toLocaleString()})` ] }), u("span", { children: [ downloadProgress.value[account.id], "%" ] }) ] }), u( "progress", { class: "progress progress-primary w-full", value: downloadProgress.value[account.id], max: "100" } ), downloadCurrentFile.value[account.id] && u("div", { class: "text-xs opacity-70 truncate", children: downloadCurrentFile.value[account.id] }), u("div", { class: "flex justify-center", children: u( "button", { class: "btn btn-error btn-sm", onClick: () => mediaDownloader.abortDownload(), children: [ u(IconPlayerStop, { size: 16 }), t("Stop") ] } ) }) ] }) ] }) ] }, account.id)), accounts.value.length === 0 && u("div", { class: "text-center", children: [ u("div", { class: "opacity-50 mb-2", children: u(IconDatabase, { size: 36, class: "mx-auto" }) }), u("p", { class: "text-sm font-medium mb-1", children: t("No accounts yet") }), u("p", { class: "text-xs opacity-70", children: t("Use Dashboard to fetch data.") }) ] }), totalPages.value > 1 && u("div", { class: "flex justify-center", children: u("div", { class: "join", children: [ u( "button", { class: "join-item btn btn-sm", onClick: () => goToPage(currentPage.value - 1), disabled: currentPage.value === 1, children: "«" } ), u("button", { class: "join-item btn btn-sm", children: [ currentPage.value, "/", totalPages.value ] }), u( "button", { class: "join-item btn btn-sm", onClick: () => goToPage(currentPage.value + 1), disabled: currentPage.value === totalPages.value, children: "»" } ) ] }) }) ] }), u(Modal, { show: showDeleteModal.value, onClose: closeDeleteDialog, title: t("Delete Account Data"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure you want to delete account data? This action cannot be undone", { username: accountToDelete.value?.username || "" }) }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: closeDeleteDialog, children: t("Cancel") } ), u( "button", { class: "btn btn-sm btn-error", onClick: confirmDelete, disabled: deletingId.value === accountToDelete.value?.id, children: deletingId.value === accountToDelete.value?.id ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Deleting...") ] }) : u(preact.Fragment, { children: [ u(IconTrash, { size: 16 }), t("Delete") ] }) } ) ] }) ] }) }), u(Modal, { show: showClearModal.value, onClose: closeClearDialog, title: t("Clear"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure to clear all data in the database?") }), u("div", { class: "modal-action", children: [ u( "button", { class: "btn btn-sm btn-ghost", onClick: closeClearDialog, children: t("Cancel") } ), u( "button", { class: "btn btn-sm btn-error", onClick: confirmClearAll, disabled: isClearingAll.value, children: isClearingAll.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Deleting...") ] }) : u(preact.Fragment, { children: [ u(IconDatabaseX, { size: 16 }), t("Clear") ] }) } ) ] }) ] }) }), u( Modal, { show: showGroupModal.value, onClose: () => { showGroupModal.value = false; accountToGroup.value = null; newGroupName.value = ""; }, title: t("Group Account"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ availableGroups.value.length > 0 && u("div", { class: "flex items-center gap-2", children: [ u( "select", { class: "select select-bordered select-sm flex-1", value: newGroupName.value || "", onChange: (e) => { const groupName = e.target.value; newGroupName.value = groupName; }, children: [ u("option", { value: "", children: t("Select a group") }), availableGroups.value.map((group) => u("option", { value: group, children: group }, group)) ] } ), availableGroups.value.length > 0 && u("div", { class: "tooltip tooltip-left", "data-tip": t("Delete selected group"), children: u( "button", { class: "btn btn-sm btn-square btn-error", disabled: !newGroupName.value || !availableGroups.value.includes(newGroupName.value), onClick: () => { if (newGroupName.value && availableGroups.value.includes(newGroupName.value)) { const groupToDelete = newGroupName.value; const accountsInGroup = allAccounts.value.filter((acc) => acc.group === groupToDelete); Promise.all(accountsInGroup.map( (acc) => acc.id ? mediaDownloaderDB.updateAccount(acc.id, { group: void 0 }) : Promise.resolve() )).then(() => { return mediaDownloaderDB.removeGroup(groupToDelete); }).then(() => { playSuccessSound(); loadAccounts(); showGroupModal.value = false; accountToGroup.value = null; newGroupName.value = ""; }).catch(() => { playErrorSound(); }); } }, children: u(IconTrash, { size: 16 }) } ) }) ] }), u("div", { children: u( "input", { type: "text", class: "input input-bordered input-sm w-full", placeholder: t("Enter group name"), value: newGroupName.value, onInput: (e) => { newGroupName.value = e.target.value; }, onFocus: (e) => { const select = e.target.closest(".space-y-2")?.querySelector("select"); if (select && newGroupName.value) { const optionValues = Array.from(select.options).map((opt) => opt.value); if (optionValues.includes(newGroupName.value)) { select.value = ""; } } }, onKeyDown: (e) => { if (e.key === "Enter") { const groupName = newGroupName.value.trim(); if (groupName && accountToGroup.value?.id) { playClickSound(); mediaDownloaderDB.updateAccount(accountToGroup.value.id, { group: groupName }).then(() => { playSuccessSound(); newGroupName.value = ""; loadAccounts(); showGroupModal.value = false; accountToGroup.value = null; }).catch(() => { playErrorSound(); }); } } } } ) }), u("div", { class: "modal-action", children: [ accountToGroup.value?.group && u( "button", { class: "btn btn-sm btn-ghost", onClick: () => { if (accountToGroup.value?.id) { playClickSound(); mediaDownloaderDB.updateAccount(accountToGroup.value.id, { group: void 0 }).then(() => { playSuccessSound(); loadAccounts(); showGroupModal.value = false; accountToGroup.value = null; newGroupName.value = ""; }).catch(() => { playErrorSound(); }); } }, children: t("Remove Group") } ), u( "button", { class: "btn btn-sm btn-primary", onClick: () => { const groupName = newGroupName.value.trim(); if (groupName && accountToGroup.value?.id) { playClickSound(); mediaDownloaderDB.addGroup(groupName).then(() => { return mediaDownloaderDB.updateAccount(accountToGroup.value.id, { group: groupName }); }).then(async () => { try { const groups = await mediaDownloaderDB.getAllGroups(); availableGroups.value = groups; } catch (error) { console.error("Error loading groups:", error); } playSuccessSound(); newGroupName.value = ""; loadAccounts(); showGroupModal.value = false; accountToGroup.value = null; }).catch(() => { playErrorSound(); }); } }, disabled: !newGroupName.value.trim() || !accountToGroup.value?.id, children: t("Add") } ) ] }) ] }) } ), u( ViewDatabaseModal, { isOpen: showViewModal.value, onClose: () => { showViewModal.value = false; viewingAccount.value = null; }, account: viewingAccount.value, onDeleteEntry: handleDeleteEntry, onLoadDatabase: handleLoadDatabase } ) ] }); } function Auth() { const { t, i18n } = useTranslation(); const isArabic = (i18n.language || "").startsWith("ar"); const authToken = signals.useSignal(""); const patreonAuth = signals.useSignal(""); const showAuthToken = signals.useSignal(false); const showPatreonAuth = signals.useSignal(false); const isPatreonValid = signals.useSignal(false); const isVerifying = signals.useSignal(false); const isGenerating = signals.useSignal(false); const isRefreshing = signals.useSignal(false); const verificationMessage = signals.useSignal(""); const verificationSuccess = signals.useSignal(false); const generationMessage = signals.useSignal(""); const generationSuccess = signals.useSignal(false); const refreshMessage = signals.useSignal(""); const refreshSuccess = signals.useSignal(false); const isCopied = signals.useSignal(false); const lastVerifiedPatreonAuth = signals.useSignal(""); const hasInvalidVerify = signals.useSignal(false); const hasTokenList = signals.useSignal(false); hooks.useEffect(() => { const initAuth = async () => { await loadAuthSettings(); await checkAndAutoRefreshToken(); }; initAuth(); const interval = setInterval(() => { checkAndAutoRefreshToken(); }, 60 * 60 * 1e3); return () => clearInterval(interval); }, []); hooks.useEffect(() => { const updateLocalToken = () => { if (authState.authToken.value && authState.authToken.value !== authToken.value) { authToken.value = authState.authToken.value; } }; updateLocalToken(); const unsubscribe = authState.authToken.subscribe(updateLocalToken); return unsubscribe; }, []); const loadAuthSettings = async () => { try { const settings = await mediaDownloaderDB.getAuthSettings(); if (settings) { authToken.value = settings.auth_token; patreonAuth.value = settings.patreon_auth; isPatreonValid.value = Boolean(settings.patreon_verified) && settings.patreon_verified_auth === settings.patreon_auth; authState.authToken.value = settings.auth_token; authState.patreonAuth.value = settings.patreon_auth; authState.patreonVerified.value = isPatreonValid.value; if (settings.show_auth_token !== void 0) { showAuthToken.value = settings.show_auth_token; } if (settings.show_patreon_auth !== void 0) { showPatreonAuth.value = settings.show_patreon_auth; } hasTokenList.value = Boolean(settings.token_list && settings.token_list.length > 0); if (isPatreonValid.value) { lastVerifiedPatreonAuth.value = settings.patreon_auth; } else if (settings.patreon_auth && settings.patreon_verified === false && settings.patreon_verified_auth === settings.patreon_auth) { lastVerifiedPatreonAuth.value = settings.patreon_auth; hasInvalidVerify.value = true; } } } catch (error) { } }; const autoSaveAuthToken = async (value) => { try { await mediaDownloaderDB.saveAuthSettings(value, patreonAuth.value, showAuthToken.value, showPatreonAuth.value); authState.authToken.value = value; } catch (error) { } }; const autoSavePatreonAuth = async (value) => { try { await mediaDownloaderDB.saveAuthSettings(authToken.value, value, showAuthToken.value, showPatreonAuth.value); await mediaDownloaderDB.setPatreonVerified(false); authState.patreonAuth.value = value; authState.patreonVerified.value = false; } catch (error) { } if (value !== lastVerifiedPatreonAuth.value) { hasInvalidVerify.value = false; isPatreonValid.value = false; verificationMessage.value = ""; } }; const verifyPatreonAuth = async () => { if (!patreonAuth.value.trim()) { verificationMessage.value = t("Please enter Patreon auth first"); setTimeout(() => verificationMessage.value = "", 2e3); return; } try { isVerifying.value = true; verificationMessage.value = ""; const data = await mediaDownloaderAPI.verifyPatreonAuth(patreonAuth.value); isPatreonValid.value = data.valid; await mediaDownloaderDB.setPatreonVerified(data.valid); authState.patreonVerified.value = data.valid; verificationSuccess.value = data.valid; verificationMessage.value = data.valid ? t("Patreon auth verified successfully") : t("Invalid Patreon auth"); lastVerifiedPatreonAuth.value = patreonAuth.value; hasInvalidVerify.value = !data.valid; if (data.valid) { playSuccessSound(); } else { playErrorSound(); } setTimeout(() => verificationMessage.value = "", 2e3); } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Verification failed. Please try again"); verificationSuccess.value = false; verificationMessage.value = msg; lastVerifiedPatreonAuth.value = patreonAuth.value; hasInvalidVerify.value = true; playErrorSound(); setTimeout(() => verificationMessage.value = "", 2e3); } finally { isVerifying.value = false; } }; const refreshAuthTokens = async (silent = false, skipLoadingState = false) => { if (!isPatreonValid.value) { if (!silent) { refreshMessage.value = t("Please verify Patreon auth first"); setTimeout(() => refreshMessage.value = "", 2e3); } return; } try { if (!skipLoadingState) { isRefreshing.value = true; } if (!silent) { refreshMessage.value = ""; } const data = await mediaDownloaderAPI.refreshAuthTokens(patreonAuth.value); if (data.success && data.tokens && data.tokens.length > 0) { await mediaDownloaderDB.saveTokenList(data.tokens, 0); const firstToken = data.tokens[0]; if (firstToken) { authToken.value = firstToken; await autoSaveAuthToken(firstToken); authState.authToken.value = firstToken; } hasTokenList.value = true; refreshSuccess.value = true; if (!silent) { refreshMessage.value = `Tokens refreshed successfully. ${data.count} tokens available.`; playSuccessSound(); } } else { refreshSuccess.value = false; hasTokenList.value = false; if (!silent) { refreshMessage.value = t("Failed to refresh tokens"); playErrorSound(); } } if (!silent) { setTimeout(() => refreshMessage.value = "", 3e3); } } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || "Token refresh failed. Please try again"; refreshSuccess.value = false; if (!silent) { refreshMessage.value = msg; playErrorSound(); setTimeout(() => refreshMessage.value = "", 3e3); } } finally { if (!skipLoadingState) { isRefreshing.value = false; } } }; const checkAndAutoRefreshToken = async () => { try { const settings = await mediaDownloaderDB.getAuthSettings(); if (!settings || !settings.patreon_verified || !settings.patreon_auth) { return; } if (settings.patreon_verified_auth !== settings.patreon_auth) { return; } const lastRefresh = settings.last_token_refresh; if (!lastRefresh) { return; } const now = Date.now(); const timeSinceLastRefresh = now - lastRefresh; const twentyFourHours = 24 * 60 * 60 * 1e3; if (timeSinceLastRefresh >= twentyFourHours) { patreonAuth.value = settings.patreon_auth; isPatreonValid.value = true; await refreshAuthTokens(true); } } catch (error) { } }; const generateAuthToken = async () => { if (!isPatreonValid.value) { generationMessage.value = t("Please verify Patreon auth first"); setTimeout(() => generationMessage.value = "", 2e3); return; } try { isGenerating.value = true; generationMessage.value = ""; const settings = await mediaDownloaderDB.getAuthSettings(); if (!settings?.token_list || settings.token_list.length === 0) { await refreshAuthTokens(true, true); const updatedSettings = await mediaDownloaderDB.getAuthSettings(); if (updatedSettings?.token_list && updatedSettings.token_list.length > 0) { const nextToken = await mediaDownloaderDB.getNextToken(); if (nextToken) { authToken.value = nextToken; await autoSaveAuthToken(nextToken); authState.authToken.value = nextToken; generationSuccess.value = true; const currentIndex = updatedSettings.current_token_index ?? 0; generationMessage.value = `Token generated successfully. Token ${currentIndex} of ${updatedSettings.token_list.length}`; playSuccessSound(); setTimeout(() => generationMessage.value = "", 2e3); return; } } } if (settings?.token_list && settings.token_list.length > 0) { const nextToken = await mediaDownloaderDB.getNextToken(); if (nextToken) { authToken.value = nextToken; await autoSaveAuthToken(nextToken); authState.authToken.value = nextToken; generationSuccess.value = true; const currentIndex = settings.current_token_index ?? 0; generationMessage.value = `Token generated successfully. Token ${currentIndex} of ${settings.token_list.length}`; playSuccessSound(); setTimeout(() => generationMessage.value = "", 2e3); return; } } const data = await mediaDownloaderAPI.generateAuthToken(patreonAuth.value); if (data.auth_token) { authToken.value = data.auth_token; await autoSaveAuthToken(data.auth_token); authState.authToken.value = data.auth_token; generationSuccess.value = true; generationMessage.value = t("Token generated successfully", { current: data.current_index, total: data.total_tokens }); playSuccessSound(); } else { generationSuccess.value = false; generationMessage.value = t("Failed to generate token"); playErrorSound(); } setTimeout(() => generationMessage.value = "", 2e3); } catch (error) { const raw = error instanceof Error ? error.message : ""; const httpMatch = raw.match(/^HTTP error! status: (\d+)/); const msg = httpMatch ? t("HTTP error! status: {{status}}", { status: httpMatch[1] }) : (raw ? t(raw) : "") || t("Token generation failed. Please try again"); generationSuccess.value = false; generationMessage.value = msg; playErrorSound(); setTimeout(() => generationMessage.value = "", 2e3); } finally { isGenerating.value = false; } }; return u("div", { class: "space-y-6", children: u("div", { class: "space-y-4", children: [ u("div", { children: [ u("label", { class: "label mb-1", children: u("span", { class: "text-sm flex items-center gap-1", children: [ t("Patreon Auth"), u("div", { class: "tooltip tooltip-right max-w-[200px] sm:max-w-none", "data-tip": t("Subscribe for $5 on Patreon and your auth code will be automatically emailed to you within a few minutes."), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }) }), u("div", { class: "join w-full", children: [ u("div", { class: "flex-1", children: u("label", { class: "input input-bordered input-sm join-item flex items-center gap-2 w-full", children: [ u("svg", { class: `h-4 w-4 ${!patreonAuth.value.trim() ? "opacity-50" : isPatreonValid.value ? "text-success" : hasInvalidVerify.value && patreonAuth.value === lastVerifiedPatreonAuth.value ? "text-error" : "opacity-50"}`, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: u( "g", { strokeLinejoin: "round", strokeLinecap: "round", strokeWidth: "2.5", fill: "none", stroke: "currentColor", children: [ u("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10" }), u("path", { d: "m9 12 2 2 4-4" }) ] } ) }), u( "input", { type: showPatreonAuth.value ? "text" : "password", class: "grow font-mono", placeholder: t("Enter your Patreon auth"), value: patreonAuth.value, onInput: (e) => { const value = e.target.value; patreonAuth.value = value; autoSavePatreonAuth(value); } } ), u( "span", { class: "cursor-pointer opacity-70 hover:opacity-100", onClick: async () => { showPatreonAuth.value = !showPatreonAuth.value; try { await mediaDownloaderDB.saveAuthSettings(authToken.value, patreonAuth.value, showAuthToken.value, showPatreonAuth.value); } catch (error) { } }, "aria-label": t("Toggle visibility"), children: showPatreonAuth.value ? u(IconEyeOff, { size: 14 }) : u(IconEye, { size: 14 }) } ) ] }) }), u( "button", { class: `btn btn-sm join-item w-28 ${isPatreonValid.value ? "btn-success" : "btn-neutral"}`, onClick: verifyPatreonAuth, disabled: isVerifying.value || !patreonAuth.value.trim(), children: isVerifying.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Verifying"), "..." ] }) : isPatreonValid.value ? u(preact.Fragment, { children: [ u(IconCircleCheck, { size: 16 }), t("Verified") ] }) : t("Verify") } ) ] }), verificationMessage.value && u("div", { role: "alert", class: `alert alert-soft mt-2 ${verificationSuccess.value ? "alert-success" : "alert-error"}`, children: [ verificationSuccess.value ? u(IconCircleCheck, { size: 20 }) : u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: verificationMessage.value }) ] }) ] }), u("div", { children: [ u("label", { class: "label mb-1", children: u("span", { class: "text-sm flex items-center gap-1", children: [ t("Auth Token"), u("div", { class: "tooltip tooltip-right max-w-[200px] sm:max-w-none", "data-tip": t("Paid members can automatically generate auth tokens after verifying Patreon auth—no manual searching required."), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }) }), u("div", { class: "join w-full", children: [ u("div", { class: "flex-1", children: u("label", { class: "input input-bordered input-sm join-item flex items-center gap-2 w-full", children: [ u("svg", { class: `h-4 w-4 ${authToken.value.trim() ? "text-success" : "opacity-50"}`, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: u( "g", { strokeLinejoin: "round", strokeLinecap: "round", strokeWidth: "2.5", fill: "none", stroke: "currentColor", children: [ u("rect", { width: "18", height: "11", x: "3", y: "11", rx: "2", ry: "2" }), u("circle", { cx: "12", cy: "12", r: "2" }), u("path", { d: "M7 11V7a5 5 0 0 1 10 0v4" }) ] } ) }), u( "input", { type: showAuthToken.value ? "text" : "password", class: "grow font-mono", placeholder: t("Enter your auth token"), value: authToken.value, onInput: (e) => { const value = e.target.value; authToken.value = value; autoSaveAuthToken(value); } } ), u( "span", { class: "cursor-pointer opacity-70 hover:opacity-100", onClick: async () => { showAuthToken.value = !showAuthToken.value; try { await mediaDownloaderDB.saveAuthSettings(authToken.value, patreonAuth.value, showAuthToken.value, showPatreonAuth.value); } catch (error) { } }, "aria-label": t("Toggle visibility"), children: showAuthToken.value ? u(IconEyeOff, { size: 14 }) : u(IconEye, { size: 14 }) } ) ] }) }), u( "button", { class: `btn btn-sm join-item w-28 ${isCopied.value ? "btn-success" : "btn-neutral"}`, onClick: async () => { if (authToken.value) { try { await navigator.clipboard.writeText(authToken.value); playSuccessSound(); isCopied.value = true; setTimeout(() => { isCopied.value = false; }, 500); } catch (err) { const textArea = document.createElement("textarea"); textArea.value = authToken.value; textArea.style.position = "fixed"; textArea.style.opacity = "0"; document.body.appendChild(textArea); textArea.select(); try { document.execCommand("copy"); playSuccessSound(); isCopied.value = true; setTimeout(() => { isCopied.value = false; }, 500); } catch (e) { playErrorSound(); } document.body.removeChild(textArea); } } }, disabled: !authToken.value, children: isCopied.value ? u(preact.Fragment, { children: [ u(IconCircleCheck, { size: 16 }), t("Copied") ] }) : u(preact.Fragment, { children: [ u(IconCopy, { size: 16 }), t("Copy") ] }) } ) ] }), u("div", { class: "join w-full mt-2", children: [ u( "button", { class: "btn btn-primary btn-sm join-item", onClick: generateAuthToken, disabled: isGenerating.value || !isPatreonValid.value || patreonAuth.value.trim() === "xbatchdemo", children: isGenerating.value ? u("span", { class: "loading loading-spinner loading-xs" }) : u(preact.Fragment, { children: [ u(IconKey, { size: 16 }), t("Generate") ] }) } ), u( "button", { class: "btn btn-secondary btn-sm join-item", onClick: () => refreshAuthTokens(false), disabled: isRefreshing.value || !isPatreonValid.value || patreonAuth.value.trim() === "xbatchdemo", children: isRefreshing.value ? u(preact.Fragment, { children: [ u("span", { class: "loading loading-spinner loading-xs" }), t("Refreshing"), "..." ] }) : u(preact.Fragment, { children: [ u(IconRefresh, { size: 16 }), t("Refresh") ] }) } ) ] }), generationMessage.value && u("div", { role: "alert", class: `alert alert-soft mt-2 ${generationSuccess.value ? "alert-success" : "alert-error"}`, children: [ generationSuccess.value ? u(IconCircleCheck, { size: 20 }) : u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: generationMessage.value }) ] }), refreshMessage.value && u("div", { role: "alert", class: `alert alert-soft mt-2 ${refreshSuccess.value ? "alert-success" : "alert-error"}`, children: [ refreshSuccess.value ? u(IconCircleCheck, { size: 20 }) : u(IconCircleX, { size: 20 }), u("span", { dir: isArabic ? "rtl" : void 0, children: refreshMessage.value }) ] }) ] }), u("div", { class: `mt-3 rounded-box bg-base-200 p-2 text-xs space-y-1 ${isArabic ? "text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: [ u("div", { children: [ "• ", t("Use code"), " ", u( "button", { type: "button", class: "text-primary opacity-80 hover:opacity-100 cursor-pointer", onClick: () => { patreonAuth.value = "xbatchdemo"; autoSavePatreonAuth("xbatchdemo"); }, children: "xbatchdemo" } ), " ", t("for Patreon Auth, click Verify to unlock demo. Test at"), " ", u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://x.com/xbatchdemo", target: "_blank", rel: "noopener noreferrer", dir: "ltr", children: " @xbatchdemo" }) ] }), u("div", { children: [ "• ", t("Need help with Auth Token? See"), " ", u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://www.patreon.com/posts/how-to-obtain-127206894", target: "_blank", rel: "noopener noreferrer", children: t("the guide") }) ] }), u("div", { children: [ "• ", u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "https://www.patreon.com/exyezed/membership", target: "_blank", rel: "noopener noreferrer", children: t("Subscribe") }), " ", t("to get your Patreon Auth code and start downloading with ease!") ] }), u("div", { children: [ "• ", t("Report bugs or request features:"), " ", u("a", { class: "text-primary opacity-80 hover:opacity-100", href: "mailto:[email protected]", children: "[email protected]" }) ] }) ] }) ] }) }); } const flagSE = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-se'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23005293'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fecb00'%20d='M176%200v192H0v96h176v192h96V288h368v-96H272V0z'/%3e%3c/svg%3e"; const flagIN = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-in'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23f93'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23128807'%20d='M0%20320h640v160H0z'/%3e%3cg%20transform='matrix(3.2%200%200%203.2%20320%20240)'%3e%3ccircle%20r='20'%20fill='%23008'/%3e%3ccircle%20r='17.5'%20fill='%23fff'/%3e%3ccircle%20r='3.5'%20fill='%23008'/%3e%3cg%20id='in-d'%3e%3cg%20id='in-c'%3e%3cg%20id='in-b'%3e%3cg%20id='in-a'%20fill='%23008'%3e%3ccircle%20r='.9'%20transform='rotate(7.5%20-8.8%20133.5)'/%3e%3cpath%20d='M0%2017.5.6%207%200%202l-.6%205z'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-a'%20width='100%25'%20height='100%25'%20transform='rotate(15)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-b'%20width='100%25'%20height='100%25'%20transform='rotate(30)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-c'%20width='100%25'%20height='100%25'%20transform='rotate(60)'/%3e%3c/g%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(120)'/%3e%3cuse%20xlink:href='%23in-d'%20width='100%25'%20height='100%25'%20transform='rotate(-120)'/%3e%3c/g%3e%3c/svg%3e"; const flagFR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-fr'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23000091'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23e1000f'%20d='M426.7%200H640v480H426.7z'/%3e%3c/svg%3e"; const flagUS = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-us'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23bd3d44'%20d='M0%200h640v480H0'/%3e%3cpath%20stroke='%23fff'%20stroke-width='37'%20d='M0%2055.3h640M0%20129h640M0%20203h640M0%20277h640M0%20351h640M0%20425h640'/%3e%3cpath%20fill='%23192f5d'%20d='M0%200h364.8v258.5H0'/%3e%3cmarker%20id='us-a'%20markerHeight='30'%20markerWidth='30'%3e%3cpath%20fill='%23fff'%20d='m14%200%209%2027L0%2010h28L5%2027z'/%3e%3c/marker%3e%3cpath%20fill='none'%20marker-mid='url(%23us-a)'%20d='m0%200%2016%2011h61%2061%2061%2061%2060L47%2037h61%2061%2060%2061L16%2063h61%2061%2061%2061%2060L47%2089h61%2061%2060%2061L16%20115h61%2061%2061%2061%2060L47%20141h61%2061%2060%2061L16%20166h61%2061%2061%2061%2060L47%20192h61%2061%2060%2061L16%20218h61%2061%2061%2061%2060z'/%3e%3c/svg%3e"; const flagZA = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-za'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='za-a'%3e%3cpath%20fill-opacity='.7'%20d='M-71.9%200h682.7v512H-71.9z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20clip-path='url(%23za-a)'%20transform='translate(67.4)scale(.93748)'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23000001'%20d='M-71.9%20407.8V104.4L154%20256.1z'/%3e%3cpath%20fill='%23000c8a'%20d='m82.2%20512.1%20253.6-170.6H696V512H82.2z'/%3e%3cpath%20fill='%23e1392d'%20d='M66%200h630v170.8H335.7S69.3-1.7%2066%200'/%3e%3cpath%20fill='%23ffb915'%20d='M-71.9%2064v40.4L154%20256-72%20407.8v40.3l284.5-192z'/%3e%3cpath%20fill='%23007847'%20d='M-71.9%2064V0h95l301.2%20204h371.8v104.2H324.3L23%20512h-94.9v-63.9l284.4-192L-71.8%2064z'/%3e%3cpath%20fill='%23fff'%20d='M23%200h59.2l253.6%20170.7H696V204H324.3zm0%20512.1h59.2l253.6-170.6H696v-33.2H324.3L23%20512z'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e"; const flagIE = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ie'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23009A49'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23FF7900'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e"; const flagAE = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ae'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300732f'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='red'%20d='M0%200h220v480H0z'/%3e%3c/svg%3e"; const flagDE = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-de'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fc0'%20d='M0%20320h640v160H0z'/%3e%3cpath%20fill='%23000001'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='red'%20d='M0%20160h640v160H0z'/%3e%3c/svg%3e"; const flagBR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-br'%20viewBox='0%200%20640%20480'%3e%3cg%20stroke-width='1pt'%3e%3cpath%20fill='%23229e45'%20fill-rule='evenodd'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23f8e509'%20fill-rule='evenodd'%20d='m321.4%20436%20301.5-195.7L319.6%2044%2017.1%20240.7z'/%3e%3cpath%20fill='%232b49a3'%20fill-rule='evenodd'%20d='M452.8%20240c0%2070.3-57.1%20127.3-127.6%20127.3A127.4%20127.4%200%201%201%20452.8%20240'/%3e%3cpath%20fill='%23ffffef'%20fill-rule='evenodd'%20d='m283.3%20316.3-4-2.3-4%202%20.9-4.5-3.2-3.4%204.5-.5%202.2-4%201.9%204.2%204.4.8-3.3%203m86%2026.3-3.9-2.3-4%202%20.8-4.5-3.1-3.3%204.5-.5%202.1-4.1%202%204.2%204.4.8-3.4%203.1m-36.2-30-3.4-2-3.5%201.8.8-3.9-2.8-2.9%204-.4%201.8-3.6%201.6%203.7%203.9.7-3%202.7m87-8.5-3.4-2-3.5%201.8.8-3.9-2.7-2.8%203.9-.4%201.8-3.5%201.6%203.6%203.8.7-2.9%202.6m-87.3-22-4-2.2-4%202%20.8-4.6-3.1-3.3%204.5-.5%202.1-4.1%202%204.2%204.4.8-3.4%203.2m-104.6-35-4-2.2-4%202%201-4.6-3.3-3.3%204.6-.5%202-4.1%202%204.2%204.4.8-3.3%203.1m13.3%2057.2-4-2.3-4%202%20.9-4.5-3.2-3.3%204.5-.6%202.1-4%202%204.2%204.4.8-3.3%203.1m132-67.3-3.6-2-3.6%201.8.8-4-2.8-3%204-.5%201.9-3.6%201.7%203.8%204%20.7-3%202.7m-6.7%2038.3-2.7-1.6-2.9%201.4.6-3.2-2.2-2.3%203.2-.4%201.5-2.8%201.3%203%203%20.5-2.2%202.2m-142.2%2050.4-2.7-1.5-2.7%201.3.6-3-2.1-2.2%203-.4%201.4-2.7%201.3%202.8%203%20.6-2.3%202M419%20299.8l-2.2-1.1-2.2%201%20.5-2.3-1.7-1.6%202.4-.3%201.2-2%201%202%202.5.5-1.9%201.5'/%3e%3cpath%20fill='%23ffffef'%20fill-rule='evenodd'%20d='m219.3%20287.6-2.7-1.5-2.7%201.3.6-3-2.1-2.2%203-.4%201.4-2.7%201.3%202.8%203%20.6-2.3%202'/%3e%3cpath%20fill='%23ffffef'%20fill-rule='evenodd'%20d='m219.3%20287.6-2.7-1.5-2.7%201.3.6-3-2.1-2.2%203-.4%201.4-2.7%201.3%202.8%203%20.6-2.3%202m42.3%203-2.6-1.4-2.7%201.3.6-3-2.1-2.2%203-.4%201.4-2.7%201.3%202.8%203%20.5-2.3%202.1m-4.8%2017-2.6-1.5-2.7%201.4.6-3-2.1-2.3%203-.4%201.4-2.7%201.3%202.8%203%20.6-2.3%202m87.4-22.2-2.6-1.6-2.8%201.4.6-3-2-2.3%203-.3%201.4-2.7%201.2%202.8%203%20.5-2.2%202.1m-25.1%203-2.7-1.5-2.7%201.4.6-3-2-2.3%203-.3%201.4-2.8%201.2%202.9%203%20.5-2.2%202.1m-68.8-5.8-1.7-1-1.7.8.4-1.9-1.3-1.4%201.9-.2.8-1.7.8%201.8%201.9.3-1.4%201.3m167.8%2045.4-2.6-1.5-2.7%201.4.6-3-2.1-2.3%203-.4%201.4-2.7%201.3%202.8%203%20.6-2.3%202m-20.8%206-2.2-1.4-2.3%201.2.5-2.6-1.7-1.8%202.5-.3%201.2-2.3%201%202.4%202.5.4-1.9%201.8m10.4%202.3-2-1.2-2.1%201%20.4-2.3-1.6-1.7%202.3-.3%201.1-2%201%202%202.3.5-1.7%201.6m29.1-22.8-2-1-2%201%20.5-2.3-1.6-1.7%202.3-.3%201-2%201%202.1%202.1.4-1.6%201.6m-38.8%2041.8-2.5-1.4-2.7%201.2.6-2.8-2-2%203-.3%201.3-2.5%201.2%202.6%203%20.5-2.3%201.9m.6%2014.2-2.4-1.4-2.4%201.3.6-2.8-1.9-2%202.7-.4%201.2-2.5%201.1%202.6%202.7.5-2%202m-19-23.1-1.9-1.2-2%201%20.4-2.2-1.5-1.7%202.2-.2%201-2%201%202%202.2.4-1.6%201.6m-17.8%202.3-2-1.2-2%201%20.5-2.2-1.6-1.7%202.3-.2%201-2%201%202%202.1.4-1.6%201.6m-30.4-24.6-2-1.1-2%201%20.5-2.3-1.6-1.6%202.2-.3%201-2%201%202%202.2.5-1.6%201.5m3.7%2057-1.6-.9-1.8.9.4-2-1.3-1.4%201.9-.2.9-1.7.8%201.8%201.9.3-1.4%201.3m-46.2-86.6-4-2.3-4%202%20.9-4.5-3.2-3.3%204.5-.6%202.2-4%201.9%204.2%204.4.8-3.3%203.1'/%3e%3cpath%20fill='%23fff'%20fill-rule='evenodd'%20d='M444.4%20285.8a125%20125%200%200%200%205.8-19.8c-67.8-59.5-143.3-90-238.7-83.7a125%20125%200%200%200-8.5%2020.9c113-10.8%20196%2039.2%20241.4%2082.6'/%3e%3cpath%20fill='%23309e3a'%20d='m414%20252.4%202.3%201.3a3%203%200%200%200-.3%202.2%203%203%200%200%200%201.4%201.7q1%20.8%202%20.7.9%200%201.3-.7l.2-.9-.5-1-1.5-1.8a8%208%200%200%201-1.8-3%204%204%200%200%201%202-4.4%204%204%200%200%201%202.3-.2%207%207%200%200%201%202.6%201.2q2.1%201.5%202.6%203.2a4%204%200%200%201-.6%203.3l-2.4-1.5q.5-1%20.2-1.7-.2-.8-1.2-1.4a3%203%200%200%200-1.8-.7%201%201%200%200%200-.9.5q-.3.4-.1%201%20.2.8%201.6%202.2t2%202.5a4%204%200%200%201-.3%204.2%204%204%200%200%201-1.9%201.5%204%204%200%200%201-2.4.3q-1.3-.3-2.8-1.3-2.2-1.5-2.7-3.3a5%205%200%200%201%20.6-4zm-11.6-7.6%202.5%201.3a3%203%200%200%200-.2%202.2%203%203%200%200%200%201.4%201.6q1.1.8%202%20.6.9%200%201.3-.8l.2-.8q0-.5-.5-1l-1.6-1.8q-1.7-1.6-2-2.8a4%204%200%200%201%20.4-3.1%204%204%200%200%201%201.6-1.4%204%204%200%200%201%202.2-.3%207%207%200%200%201%202.6%201q2.3%201.5%202.7%203.1a4%204%200%200%201-.4%203.4l-2.5-1.4q.5-1%20.2-1.7-.4-1-1.3-1.4a3%203%200%200%200-1.9-.6%201%201%200%200%200-.8.5q-.3.4-.1%201%20.3.8%201.7%202.2%201.5%201.5%202%202.4a4%204%200%200%201%200%204.2%204%204%200%200%201-1.8%201.6%204%204%200%200%201-2.4.3%208%208%200%200%201-2.9-1.1%206%206%200%200%201-2.8-3.2%205%205%200%200%201%20.4-4m-14.2-3.8%207.3-12%208.8%205.5-1.2%202-6.4-4-1.6%202.7%206%203.7-1.3%202-6-3.7-2%203.3%206.7%204-1.2%202zm-20.7-17%201.1-2%205.4%202.7-2.5%205q-1.2.3-3%20.2a9%209%200%200%201-3.3-1%208%208%200%200%201-3-2.6%206%206%200%200%201-1-3.5%209%209%200%200%201%201-3.7%208%208%200%200%201%202.6-3%206%206%200%200%201%203.6-1.1q1.4%200%203.2%201%202.4%201.1%203.1%202.8a5%205%200%200%201%20.3%203.5l-2.7-.8a3%203%200%200%200-.2-2q-.4-.9-1.6-1.4a4%204%200%200%200-3.1-.3q-1.5.5-2.6%202.6t-.7%203.8a4%204%200%200%200%202%202.4q.8.5%201.7.5h1.8l.8-1.6zm-90.2-22.3%202-14%204.2.7%201.1%209.8%203.9-9%204.2.6-2%2013.8-2.7-.4%201.7-10.9-4.4%2010.5-2.7-.4-1.1-11.3-1.6%2011zm-14.1-1.7%201.3-14%2010.3%201-.2%202.4-7.5-.7-.3%203%207%20.7-.3%202.4-7-.7-.3%203.8%207.8.7-.2%202.4z'/%3e%3cg%20stroke-opacity='.5'%3e%3cpath%20fill='%23309e3a'%20d='M216.5%20191.3q0-2.2.7-3.6a7%207%200%200%201%201.4-1.9%205%205%200%200%201%201.8-1.2q1.5-.5%203-.5%203.1.1%205%202a7%207%200%200%201%201.6%205.5q0%203.3-2%205.3a7%207%200%200%201-5%201.7%207%207%200%200%201-4.8-2%207%207%200%200%201-1.7-5.3'/%3e%3cpath%20fill='%23f7ffff'%20d='M219.4%20191.3q0%202.3%201%203.6t2.8%201.3a4%204%200%200%200%202.8-1.1q1-1.2%201.1-3.7.1-2.4-1-3.6a4%204%200%200%200-2.7-1.3%204%204%200%200%200-2.8%201.2q-1.1%201.2-1.2%203.6'/%3e%3c/g%3e%3cg%20stroke-opacity='.5'%3e%3cpath%20fill='%23309e3a'%20d='m233%20198.5.2-14h6q2.2%200%203.2.5%201%20.3%201.6%201.3c.6%201%20.6%201.4.6%202.3a4%204%200%200%201-1%202.6%205%205%200%200%201-2.7%201.2l1.5%201.2q.6.6%201.5%202.3l1.7%202.8h-3.4l-2-3.2-1.4-2-.9-.6-1.4-.2h-.6v5.8z'/%3e%3cpath%20fill='%23fff'%20d='M236%20190.5h2q2.1%200%202.6-.2.5-.1.8-.5.4-.6.3-1%200-.9-.4-1.2-.3-.4-1-.6h-2l-2.3-.1z'/%3e%3c/g%3e%3cg%20stroke-opacity='.5'%3e%3cpath%20fill='%23309e3a'%20d='m249%20185.2%205.2.3q1.7%200%202.6.3a5%205%200%200%201%202%201.4%206%206%200%200%201%201.2%202.4q.4%201.4.3%203.3a9%209%200%200%201-.5%203q-.6%201.5-1.7%202.4a5%205%200%200%201-2%201q-1%20.3-2.5.2l-5.3-.3z'/%3e%3cpath%20fill='%23fff'%20d='m251.7%20187.7-.5%209.3h3.8q.8%200%201.2-.5.5-.4.8-1.3t.4-2.6l-.1-2.5a3%203%200%200%200-.8-1.4l-1.2-.7-2.3-.3z'/%3e%3c/g%3e%3cg%20stroke-opacity='.5'%3e%3cpath%20fill='%23309e3a'%20d='m317.6%20210.2%203.3-13.6%204.4%201%203.2%201q1.1.6%201.6%201.9t.2%202.8q-.3%201.2-1%202a4%204%200%200%201-3%201.4q-1%200-3-.5l-1.7-.5-1.2%205.2z'/%3e%3cpath%20fill='%23fff'%20d='m323%20199.6-.8%203.8%201.5.4q1.6.4%202.2.3a2%202%200%200%200%201.6-1.5q0-.7-.2-1.3a2%202%200%200%200-1-.9l-1.9-.5-1.3-.3z'/%3e%3c/g%3e%3cg%20stroke-opacity='.5'%3e%3cpath%20fill='%23309e3a'%20d='m330.6%20214.1%204.7-13.2%205.5%202q2.2.8%203%201.4.8.7%201%201.8c.2%201.1.2%201.5%200%202.3q-.6%201.5-1.8%202.2-1.2.6-3%20.3.6.7%201%201.6l.8%202.7.6%203.1-3.1-1.1-1-3.6-.7-2.4-.6-.8q-.3-.4-1.3-.7l-.5-.2-2%205.6z'/%3e%3cpath%20fill='%23fff'%20d='m336%20207.4%201.9.7q2%20.7%202.5.7t.9-.3q.5-.3.6-.9.3-.6%200-1.2l-.8-.9-2-.7-2-.7-1.2%203.3z'/%3e%3c/g%3e%3cg%20stroke-opacity='.5'%3e%3cpath%20fill='%23309e3a'%20d='M347%20213.6a9%209%200%200%201%201.7-3.2l1.8-1.5%202-.7q1.5-.1%203.1.4a7%207%200%200%201%204.2%203.3q1.2%202.4.2%205.7a7%207%200%200%201-3.4%204.5q-2.3%201.3-5.2.4a7%207%200%200%201-4.2-3.3%207%207%200%200%201-.2-5.6'/%3e%3cpath%20fill='%23fff'%20d='M349.8%20214.4q-.7%202.3%200%203.8c.7%201.5%201.2%201.6%202.3%202q1.5.5%203-.4%201.4-.8%202.1-3.2.8-2.2%200-3.7a4%204%200%200%200-2.2-2%204%204%200%200%200-3%20.3q-1.5.8-2.2%203.2'/%3e%3c/g%3e%3cg%20stroke-opacity='.5'%3e%3cpath%20fill='%23309e3a'%20d='m374.3%20233.1%206.4-12.4%205.3%202.7a10%2010%200%200%201%202.7%201.9q.8.7.8%201.9c0%201.2%200%201.5-.4%202.2a4%204%200%200%201-2%202q-1.5.4-3.1-.2.6%201%20.8%201.7.3.9.4%202.8l.2%203.2-3-1.5-.4-3.7-.3-2.5-.5-1-1.2-.7-.5-.3-2.7%205.2z'/%3e%3cpath%20fill='%23fff'%20d='m380.5%20227.2%201.9%201q1.8%201%202.3%201t1-.2q.4-.2.7-.8t.2-1.2l-.7-1-1.8-1-2-1z'/%3e%3c/g%3e%3cg%20stroke-opacity='.5'%3e%3cpath%20fill='%23309e3a'%20d='M426.1%20258.7a9%209%200%200%201%202.5-2.6%207%207%200%200%201%202.2-.9%206%206%200%200%201%202.2%200q1.5.3%202.8%201.2a7%207%200%200%201%203%204.4q.4%202.6-1.4%205.5a7%207%200%200%201-4.5%203.3%207%207%200%200%201-5.2-1.1%207%207%200%200%201-3-4.4q-.4-2.7%201.4-5.4'/%3e%3cpath%20fill='%23fff'%20d='M428.6%20260.3q-1.4%202-1.1%203.6a4%204%200%200%200%201.6%202.5q1.5%201%203%20.6t2.9-2.4q1.4-2.1%201.1-3.6t-1.6-2.6c-1.4-1.1-2-.8-3-.5q-1.5.3-3%202.4z'/%3e%3c/g%3e%3cpath%20fill='%23309e3a'%20d='m301.8%20204.5%202.3-9.8%207.2%201.7-.3%201.6-5.3-1.2-.5%202.2%204.9%201.1-.4%201.7-4.9-1.2-.6%202.7%205.5%201.3-.4%201.6z'/%3e%3c/g%3e%3c/svg%3e"; const flagHK = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-hk'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23EC1B2E'%20d='M0%200h640v480H0'/%3e%3cpath%20id='hk-a'%20fill='%23fff'%20d='M346.3%20103.1C267%2098%20230.6%20201.9%20305.6%20240.3c-26-22.4-20.6-55.3-10.1-72.4l1.9%201.1c-13.8%2023.5-11.2%2052.7%2011.1%2071-12.7-12.3-9.5-39%2012.1-48.9s23.6-39.3%2016.4-49.1q-14.7-25.6%209.3-38.9M307.9%20164l-4.7%207.4-1.8-8.6-8.6-2.3%207.8-4.3-.6-8.9%206.5%206.1%208.3-3.3-3.7%208.1%205.6%206.8z'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(72%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(144%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(216%20312.5%20243.5)'/%3e%3cuse%20xlink:href='%23hk-a'%20transform='rotate(288%20312.5%20243.5)'/%3e%3c/svg%3e"; const flagJP = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-jp'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='jp-a'%3e%3cpath%20fill-opacity='.7'%20d='M-88%2032h640v480H-88z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%20clip-path='url(%23jp-a)'%20transform='translate(88%20-32)'%3e%3cpath%20fill='%23fff'%20d='M-128%2032h720v480h-720z'/%3e%3ccircle%20cx='523.1'%20cy='344.1'%20r='194.9'%20fill='%23bc002d'%20transform='translate(-168.4%208.6)scale(.76554)'/%3e%3c/g%3e%3c/svg%3e"; const flagKR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-kr'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='kr-a'%3e%3cpath%20fill-opacity='.7'%20d='M-95.8-.4h682.7v512H-95.8z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23kr-a)'%20transform='translate(89.8%20.4)scale(.9375)'%3e%3cpath%20fill='%23fff'%20d='M-95.8-.4H587v512H-95.8Z'/%3e%3cg%20transform='rotate(-56.3%20361.6%20-101.3)scale(10.66667)'%3e%3cg%20id='kr-c'%3e%3cpath%20id='kr-b'%20fill='%23000001'%20d='M-6-26H6v2H-6Zm0%203H6v2H-6Zm0%203H6v2H-6Z'/%3e%3cuse%20xlink:href='%23kr-b'%20width='100%25'%20height='100%25'%20y='44'/%3e%3c/g%3e%3cpath%20stroke='%23fff'%20d='M0%2017v10'/%3e%3cpath%20fill='%23cd2e3a'%20d='M0-12a12%2012%200%200%201%200%2024Z'/%3e%3cpath%20fill='%230047a0'%20d='M0-12a12%2012%200%200%200%200%2024A6%206%200%200%200%200%200Z'/%3e%3ccircle%20cy='-6'%20r='6'%20fill='%23cd2e3a'/%3e%3c/g%3e%3cg%20transform='rotate(-123.7%20191.2%2062.2)scale(10.66667)'%3e%3cuse%20xlink:href='%23kr-c'%20width='100%25'%20height='100%25'/%3e%3cpath%20stroke='%23fff'%20d='M0-23.5v3M0%2017v3.5m0%203v3'/%3e%3c/g%3e%3c/g%3e%3c/svg%3e"; const flagGB = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-gb'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23012169'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23FFF'%20d='m75%200%20244%20181L562%200h78v62L400%20241l240%20178v61h-80L320%20301%2081%20480H0v-60l239-178L0%2064V0z'/%3e%3cpath%20fill='%23C8102E'%20d='m424%20281%20216%20159v40L369%20281zm-184%2020%206%2035L54%20480H0zM640%200v3L391%20191l2-44L590%200zM0%200l239%20176h-60L0%2042z'/%3e%3cpath%20fill='%23FFF'%20d='M241%200v480h160V0zM0%20160v160h640V160z'/%3e%3cpath%20fill='%23C8102E'%20d='M0%20193v96h640v-96zM273%200v480h96V0z'/%3e%3c/svg%3e"; const flagSG = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sg'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sg-a'%3e%3cpath%20fill-opacity='.7'%20d='M0%200h640v480H0z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23sg-a)'%3e%3cpath%20fill='%23fff'%20d='M-20%200h720v480H-20z'/%3e%3cpath%20fill='%23df0000'%20d='M-20%200h720v240H-20z'/%3e%3cpath%20fill='%23fff'%20d='M146%2040.2a84.4%2084.4%200%200%200%20.8%20165.2%2086%2086%200%200%201-106.6-59%2086%2086%200%200%201%2059-106c16-4.6%2030.8-4.7%2046.9-.2z'/%3e%3cpath%20fill='%23fff'%20d='m133%20110%204.9%2015-13-9.2-12.8%209.4%204.7-15.2-12.8-9.3%2015.9-.2%205-15%205%2015h15.8zm17.5%2052%205%2015.1-13-9.2-12.9%209.3%204.8-15.1-12.8-9.4%2015.9-.1%204.9-15.1%205%2015h16zm58.5-.4%204.9%2015.2-13-9.3-12.8%209.3%204.7-15.1-12.8-9.3%2015.9-.2%205-15%205%2015h15.8zm17.4-51.6%204.9%2015.1-13-9.2-12.8%209.3%204.8-15.1-12.9-9.4%2016-.1%204.8-15.1%205%2015h16zm-46.3-34.3%205%2015.2-13-9.3-12.9%209.4%204.8-15.2-12.8-9.4%2015.8-.1%205-15.1%205%2015h16z'/%3e%3c/g%3e%3c/svg%3e"; const flagAU = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-au'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%2300008B'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='m37.5%200%20122%2090.5L281%200h39v31l-120%2089.5%20120%2089V240h-40l-120-89.5L40.5%20240H0v-30l119.5-89L0%2032V0z'/%3e%3cpath%20fill='red'%20d='M212%20140.5%20320%20220v20l-135.5-99.5zm-92%2010%203%2017.5-96%2072H0zM320%200v1.5l-124.5%2094%201-22L295%200zM0%200l119.5%2088h-30L0%2021z'/%3e%3cpath%20fill='%23fff'%20d='M120.5%200v240h80V0zM0%2080v80h320V80z'/%3e%3cpath%20fill='red'%20d='M0%2096.5v48h320v-48zM136.5%200v240h48V0z'/%3e%3cpath%20fill='%23fff'%20d='m527%20396.7-20.5%202.6%202.2%2020.5-14.8-14.4-14.7%2014.5%202-20.5-20.5-2.4%2017.3-11.2-10.9-17.5%2019.6%206.5%206.9-19.5%207.1%2019.4%2019.5-6.7-10.7%2017.6zm-3.7-117.2%202.7-13-9.8-9%2013.2-1.5%205.5-12.1%205.5%2012.1%2013.2%201.5-9.8%209%202.7%2013-11.6-6.6zm-104.1-60-20.3%202.2%201.8%2020.3-14.4-14.5-14.8%2014.1%202.4-20.3-20.2-2.7%2017.3-10.8-10.5-17.5%2019.3%206.8L387%20178l6.7%2019.3%2019.4-6.3-10.9%2017.3%2017.1%2011.2ZM623%20186.7l-20.9%202.7%202.3%2020.9-15.1-14.7-15%2014.8%202.1-21-20.9-2.4%2017.7-11.5-11.1-17.9%2020%206.7%207-19.8%207.2%2019.8%2019.9-6.9-11%2018zm-96.1-83.5-20.7%202.3%201.9%2020.8-14.7-14.8-15.1%2014.4%202.4-20.7-20.7-2.8%2017.7-11L467%2073.5l19.7%206.9%207.3-19.5%206.8%2019.7%2019.8-6.5-11.1%2017.6zM234%20385.7l-45.8%205.4%204.6%2045.9-32.8-32.4-33%2032.2%204.9-45.9-45.8-5.8%2038.9-24.8-24-39.4%2043.6%2015%2015.8-43.4%2015.5%2043.5%2043.7-14.7-24.3%2039.2%2038.8%2025.1Z'/%3e%3c/svg%3e"; const SERVER_CONFIG = { stockholm: { name: "Stockholm", region: "Sweden", flag: flagSE }, mumbai: { name: "Mumbai", region: "India", flag: flagIN }, paris: { name: "Paris", region: "France", flag: flagFR }, cleveland: { name: "Cleveland", region: "USA", flag: flagUS }, capetown: { name: "Cape Town", region: "South Africa", flag: flagZA }, dublin: { name: "Dublin", region: "Ireland", flag: flagIE }, dubai: { name: "Dubai", region: "United Arab Emirates", flag: flagAE }, frankfurt: { name: "Frankfurt", region: "Germany", flag: flagDE }, saopaulo: { name: "São Paulo", region: "Brazil", flag: flagBR }, hongkong: { name: "Hong Kong", region: "Hong Kong", flag: flagHK }, tokyo: { name: "Tokyo", region: "Japan", flag: flagJP }, washington: { name: "Washington, D.C.", region: "USA", flag: flagUS }, seoul: { name: "Seoul", region: "South Korea", flag: flagKR }, osaka: { name: "Osaka", region: "Japan", flag: flagJP }, london: { name: "London", region: "United Kingdom", flag: flagGB }, portland: { name: "Portland", region: "USA", flag: flagUS }, sanfrancisco: { name: "San Francisco", region: "USA", flag: flagUS }, singapore: { name: "Singapore", region: "Singapore", flag: flagSG }, sydney: { name: "Sydney", region: "Australia", flag: flagAU } }; function Settings() { const { t } = useTranslation(); const [, force] = hooks.useState(0); const getApiServer = () => { const server = appOptionsManager.get("apiServer"); if (server && server in SERVER_CONFIG) { return server; } const legacyServer = server; if (legacyServer === "oregon") { appOptionsManager.set("apiServer", "washington"); return "washington"; } if (legacyServer === "frankfurt") { appOptionsManager.set("apiServer", "frankfurt"); return "frankfurt"; } if (legacyServer === "singapore") { appOptionsManager.set("apiServer", "singapore"); return "singapore"; } appOptionsManager.set("apiServer", "washington"); return "washington"; }; const currentServer = getApiServer(); const currentConfig = SERVER_CONFIG[currentServer] || SERVER_CONFIG.washington; return u("div", { class: "space-y-4", children: [ u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Server"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Choose the server closest to your location for best performance"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u("div", { class: "dropdown dropdown-end", children: [ u( "div", { tabIndex: 0, role: "button", class: "btn btn-sm gap-1.5 px-1.5 justify-start", "aria-label": t("Server"), children: [ u("div", { class: "w-5 flex items-center justify-center", children: u( "img", { src: currentConfig.flag, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" } ) }), u("div", { class: "w-24 truncate text-xs text-left", children: currentConfig.name }), u( "svg", { width: "12px", height: "12px", class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 2048 2048", children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" }) } ) ] } ), u( "div", { tabIndex: 0, class: "dropdown-content bg-base-200 text-base-content rounded-box mt-2 max-h-52 overflow-y-auto border-(length:--border) border-white/5 shadow-2xl outline-(length:--border) outline-black/5", children: u("ul", { class: "menu w-48", children: [ u("li", { class: "menu-title text-xs", children: t("Server") }), Object.entries(SERVER_CONFIG).map(([key, config]) => u("li", { children: u( "button", { class: cx("gap-3 px-2", currentServer === key && "[&_svg]:visible"), onClick: () => { playRadioClickSound(); appOptionsManager.set("apiServer", key); force((x) => x + 1); }, children: [ u( "img", { src: config.flag, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" } ), u("div", { class: "flex-1 min-w-0", children: [ u("div", { class: "truncate", children: config.name }), u("div", { class: "text-[10px] opacity-60 truncate", children: config.region }) ] }), u( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", class: "invisible h-3 w-3 shrink-0", children: u("path", { d: "M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z" }) } ) ] } ) }, key)) ] }) } ) ] }) ] }), u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Server Timeout"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Timeout for server responses in seconds. Auto-generate token if timeout occurs."), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u( "input", { type: "number", min: "1", max: "300", class: "input input-bordered input-sm w-16 text-right", value: appOptionsManager.get("apiTimeout") ?? 60, onChange: (e) => { const v = parseInt(e.target.value, 10); let safe = Number.isFinite(v) && v >= 1 ? v : 60; if (safe > 300) { safe = 300; } appOptionsManager.set("apiTimeout", safe); force((x) => x + 1); }, onBlur: (e) => { const v = parseInt(e.target.value, 10); let safe = Number.isFinite(v) && v >= 1 ? v : 60; if (safe > 300) { safe = 300; e.target.value = "300"; } appOptionsManager.set("apiTimeout", safe); force((x) => x + 1); }, "aria-label": t("Server Timeout") } ) ] }), u("div", { class: "divider my-2" }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Convert Animated GIFs"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Larger size, same quality"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("convertAnimatedGifs") ?? true, onChange: (e) => { const checked = e.target.checked; checked ? playToggleOnSound() : playToggleOffSound(); appOptionsManager.set("convertAnimatedGifs", checked); if (checked) { appOptionsManager.set("convertGifsExternal", false); } force((x) => x + 1); } } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Convert GIFs (External)"), u("div", { class: "tooltip tooltip-right", "data-tip": t("Smaller size, same quality"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("convertGifsExternal") ?? false, onChange: (e) => { const checked = e.target.checked; checked ? playToggleOnSound() : playToggleOffSound(); appOptionsManager.set("convertGifsExternal", checked); if (checked) { appOptionsManager.set("convertAnimatedGifs", false); } force((x) => x + 1); } } ) ] }), u("div", { class: "flex items-center justify-between", children: [ u("span", { class: "text-sm flex items-center gap-1", children: [ t("Concurrent Downloads"), u("div", { class: "tooltip tooltip-right", "data-tip": t("If downloads fail, use concurrent 1"), children: u(IconInfoCircle, { size: 14, class: "opacity-70" }) }) ] }), u( "input", { type: "number", min: "1", max: "50", class: "input input-bordered input-sm w-16 text-right", value: appOptionsManager.get("downloadConcurrency") ?? 10, onChange: (e) => { const v = parseInt(e.target.value, 10); const safe = Number.isFinite(v) && v >= 1 && v <= 50 ? v : 10; appOptionsManager.set("downloadConcurrency", safe); force((x) => x + 1); }, "aria-label": t("Concurrent Downloads") } ) ] }) ] }); } function ThemeSelector({ dropdownClasses = "", btnClasses = "btn-ghost", contentClasses = "mt-16" }) { const { t } = useTranslation(); const currentTheme = signals.useSignal(appOptionsManager.get("theme")); hooks.useEffect(() => { const unsub = appOptionsManager.signal.subscribe(() => { currentTheme.value = appOptionsManager.get("theme"); }); return () => { try { unsub?.(); } catch { } }; }, []); hooks.useEffect(() => { document.documentElement.setAttribute("data-theme", currentTheme.value || "light"); }, [currentTheme.value]); const handleThemeChange = (theme) => { playClickSound(); currentTheme.value = theme; appOptionsManager.set("theme", theme); document.documentElement.setAttribute("data-theme", theme); }; return u("div", { class: cx("dropdown dropdown-end block", dropdownClasses), children: [ u( "div", { tabIndex: 0, role: "button", class: cx("btn group btn-sm gap-1.5 px-1.5 justify-start", btnClasses), "aria-label": t("Change Theme"), children: [ u("div", { class: "bg-base-100 group-hover:border-base-content/20 border-base-content/10 grid shrink-0 grid-cols-2 gap-0.5 rounded-md border p-1 transition-colors", children: [ u("div", { class: "bg-base-content size-1 rounded-full" }), u("div", { class: "bg-primary size-1 rounded-full" }), u("div", { class: "bg-secondary size-1 rounded-full" }), u("div", { class: "bg-accent size-1 rounded-full" }) ] }), u("div", { class: "w-24 truncate text-xs capitalize text-left", children: currentTheme.value || "light" }), u( "svg", { width: "12px", height: "12px", class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 2048 2048", children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" }) } ) ] } ), u( "div", { tabIndex: 0, class: cx( "dropdown-content bg-base-200 text-base-content rounded-box mt-2 max-h-60 overflow-y-auto border-(length:--border) border-white/5 shadow-2xl outline-(length:--border) outline-black/5", contentClasses ), children: u("ul", { class: "menu w-56", children: [ u("li", { class: "menu-title text-xs", children: t("Change Theme") }), THEMES.map((theme) => u("li", { children: u( "button", { class: cx( "gap-3 px-2", currentTheme.value === theme && "[&_svg]:visible" ), onClick: () => handleThemeChange(theme), children: [ u( "div", { "data-theme": theme, class: "bg-base-100 grid shrink-0 grid-cols-2 gap-0.5 rounded-md p-1 shadow-sm", children: [ u("div", { class: "bg-base-content size-1 rounded-full" }), u("div", { class: "bg-primary size-1 rounded-full" }), u("div", { class: "bg-secondary size-1 rounded-full" }), u("div", { class: "bg-accent size-1 rounded-full" }) ] } ), u("div", { class: "w-32 truncate capitalize", children: theme }), u( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", class: "invisible h-3 w-3 shrink-0", children: u("path", { d: "M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z" }) } ) ] } ) }, theme)) ] }) } ) ] }); } const flagCN = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-cn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cpath%20id='cn-a'%20fill='%23ff0'%20d='M-.6.8%200-1%20.6.8-1-.3h2z'/%3e%3c/defs%3e%3cpath%20fill='%23ee1c25'%20d='M0%200h640v480H0z'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(71.9991%200%200%2072%20120%20120)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-12.33562%20-20.5871%2020.58684%20-12.33577%20240.3%2048)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(-3.38573%20-23.75998%2023.75968%20-3.38578%20288%2095.8)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(6.5991%20-23.0749%2023.0746%206.59919%20288%20168)'/%3e%3cuse%20xlink:href='%23cn-a'%20width='30'%20height='20'%20transform='matrix(14.9991%20-18.73557%2018.73533%2014.99929%20240%20216)'/%3e%3c/svg%3e"; const flagSA = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-sa'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='sa-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23sa-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23165d31'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23fff'%20d='M65.5%20145.1c-.8%2012-2%2033%208.3%2035.2%2012.3%201.2%205.5-20.8%2010-24.8.8-2%202.3-2%202.4.5v18.7c0%206%204%207.8%207%209%203.2-.2%205.4%200%206.6%203l1.6%2032.3s7.4%202.2%207.8-18.1c.3-12-2.4-21.9-.8-24.2%200-2.3%203-2.4%205-1.3%203.2%202.2%204.6%205%209.6%204%207.6-2.2%2012.2-5.9%2012.3-11.7a47%2047%200%200%200-3.5-16.6c.4-1-1.4-3.7-1-4.7%201.3%202.2%203.4%202%203.8%200-1.3-4.2-3.3-8.3-6.5-10-2.7-2.4-6.7-2-8%203-.8%205.7%202%2012.4%206.1%2018%20.9%202.1%202.1%205.7%201.6%208.9q-3.4%201.8-6.3-1.2s-6-4.5-6-5.6c1.6-10.2.3-11.4-.6-14.3-.6-3.9-2.5-5.2-4-7.8-1.5-1.6-3.5-1.6-4.5%200-2.7%204.6-1.4%2014.5.5%2019%201.4%204.1%203.5%206.7%202.5%206.7-.8%202.3-2.5%201.7-3.8-1a67%2067%200%200%201-2.1-17.4c-.5-4.6-1.1-14.4-4.2-17-1.8-2.4-4.5-1.2-5.5%201a82%2082%200%200%200%20.3%2013.4c2%207.4%202.7%2014%203.7%2021.5.3%2010.1-5.8%204.4-5.5-.7a45%2045%200%200%200-.3-19.4c-1-2.6-2.1-3.2-4.6-2.8-1.9%200-6.8%205.3-8.2%2014.3%200%200-1.2%204.6-1.7%208.7-.7%204.6-3.7%208-5.9-.6-1.8-6.3-3-21.6-6-18z'/%3e%3cpath%20fill='%23fff'%20d='m99%20194.2-32%2015.4c.3-7.3%2015.1-20.4%2025.3-20.5%206.5.1%204.9%202.5%206.6%205.1z'/%3e%3cpath%20fill='%23fff'%20d='M93.3%20204.2c-16.8%2043.5%2039.5%2049.6%2045.8%201.8.6-2%203-3.9%203.4-.7-1.3%2043.3-43.6%2046.2-50.8%2032.6a42%2042%200%200%201-2.5-14.6c-1-8.5-5.5-5.2-6.2%203.2-.7%204.7-.5%206-.5%2010.5%202.2%2034.2%2056.7%2019.5%2065.6-8.7%204.7-15.6-.8-27.1%201.7-27.1%205.4%205.8%2013%20.8%2014.7-1.2.7-1%202.5-1.7%203.7-.4%204.2%203%2011.6%201.6%2013.2-3.7q1.4-8%201.8-16.2c-3.5%201-6%201.7-6.3%203.2l-.7%204.6c-.3%201.5-3.2%201.5-3.4-.4-1.3-6-6.7-6.7-10%202.5-2.1%201.8-6.1%202.2-6.5-.5.5-6.2-2-7-7-4.1l-4.8-36.2c2%200%204%201.5%205.9-.9-2-6.5-6.5-19.7-9-20.7-1.1-1.4-2.1-.5-3.7-.1-2.6.8-5%203-4.2%207.4%203%2018.8%205%2033.1%208.1%2052%20.5%202.1-1.3%205-3.7%204.7-4-2.7-5-8.2-12-8-5%200-10.6%205.5-11.3%2010.7-.9%204.2-1.2%208.7%200%2012.3%203.5%204.2%207.7%203.8%2011.4%202.9%203-1.3%205.5-4.3%206.6-3.6.7.9.1%2010.9-14.3%2018.5-8.7%204-15.7%204.8-19.4-2.3-2.3-4.5.2-21.4-5.6-17.5'/%3e%3cpath%20fill='%23fff'%20d='M165%20160c3.3-1.2%2019.3-19.6%2019.3-19.6l-2.4-2q-1.3-1.1%200-2.2c4-2.4%202.7-7.4.7-9.8a10%2010%200%200%200-8.7.1c-2.8%202.7-3.4%207-1.2%209.6%202.1%201%204.2%203.2%202.8%204.4-6.6%207-24.5%2019.1-22.4%2019.5.4.6%2011.5.6%2011.8%200zm-97%2065c-6%209.6-6.5%2023.9-3.2%2028.2%201.8%202%204.7%202.9%206.8%202.2%203.8-1.6%205.5-9.3%204.6-12q-1.8-3-3.6-.7c-2.6%205.4-3.7%201.7-4-1.3a70%2070%200%200%201%20.8-15.2c.7-4.2%200-3-1.4-1.2m257.1-15.3c-5.8-12.6-13.9-25-16.4-29.7a558%20558%200%200%200-24.8-36c-6.2-7.4%2010.2%203.1-2-11.7l-8.9-7.5c-2-1.4-6.8-4-7.6.2-.4%203.8-.2%205.8.4%208.9.5%202%203.5%205.5%205%207.5a565%20565%200%200%201%2053.8%2086.5c2.6-1.3%202-16.1.5-18.2'/%3e%3cpath%20fill='%23fff'%20d='M299.6%20251.5c-1.2%201.3%202.8%206.8%208%206.8%208.6-1%2016.2-5.8%2023.2-18.6a33%2033%200%200%200%205.3-14.2%20317%20317%200%200%200-5.8-72.4c-.3-2%200-4.4.2-5%20.6-.7%202.5%200%203.5-1.7%201.5-1.5-4-14-7-18.7-1-2.2-1.5-3.6-3.3.2a27%2027%200%200%200-3%2013.6c4.1%2028.5%205.4%2053.4%208%2081.9.3%202.8-.1%206.8-2%208.4a80%2080%200%200%201-27.1%2019.7m116.5-.1c-6.2%203.6-6.2%207.7-1.2%207.8%208.6-1%2018.8-1.7%2025.8-12.3a41%2041%200%200%200%204.2-16%20303%20303%200%200%200-4.7-71.4c-.2-2-1.1-6.7-.8-7.3.6-1.4%203.4.1%204.4-1.5%201.4-1.5-7.3-12.7-10.4-17.5-1-2.2-1.4-3.6-3.3.2a22%2022%200%200%200-1.8%2013.6c4.6%2031%208%2054.2%208.7%2081.6-.4%202.6-.5%204-1.7%207.3-2.7%203.4-5.7%207.8-8.5%209.9-2.8%202-8.8%204-10.7%205.6'/%3e%3cpath%20fill='%23fff'%20d='M420.7%20223.7q.1-10.9-.1-19a34%2034%200%200%200-3-13.5c-1.8-4.1-.7-7.4-1.6-11.8-.8-4.4-.6-11-1.8-16.1-.4-2-1.4-8.5-1.1-9.2.5-1.4%202.4%200%203.4-1.6%201.4-1.5-5-18-8.2-22.7-1.1-2.1-3.3-1.4-5.8%202-2.5%202.3-1.6%207.4-.6%2012.3%206.1%2032.3%2010.8%2061.6%209.8%2092.3-.4%202.6%209-7.8%209-12.7m-45.7-40c-3.9-.2-12-7.7-14.4-12a8%208%200%200%201%20.4-6.5c1.5-1%203.7-2%205.4-1%200%200%201.7%202.4%201.4%202.7%202%201%203%20.5%203.2-.4.1-1.5-.6-2.4-.6-4%20.9-4.6%206-5.3%208-2.4%201.4%201.8%202%205.5%202.1%208%200%201.3-2-.2-3.3%200-1.1.4-1.4%201.8-1.5%203-.2%203.3-.6%208.6-.7%2012.5zm-71.8%2048c1-9.8-.4-27.3-.5-33.1A477%20477%200%200%200%20299%20154c-1.2-8.4%203.4.9%202.8-4-1.5-8.3-6.1-14-11.6-21.5-1.7-2.5-1.7-3-4.4.6-3%206.7-.4%2011.4.4%2016.7%203.9%2017.2%206.2%2033%207.3%2048.7a393%20393%200%200%201%20.4%2049c3%20.1%207.6-4.7%209.3-11.8'/%3e%3cpath%20fill='%23fff'%20d='M434%20216c-6.9-11.6-17.2-24-20-28.7a658%20658%200%200%200-29.2-37.8c-8.5-9%204-1.5-1.6-8.5-4.7-5.1-6-6.8-10.1-9.9-2-1.3-3.2-3.8-4%20.5a83%2083%200%200%200-.2%2011.2c0%201.7%201.8%205%203.4%207%2020.7%2025.5%2043.4%2051.5%2061.6%2084.2%202.6-1.3%201.7-16%200-18z'/%3e%3cpath%20fill='%23165d31'%20d='M122.6%20194.7c-.5.9-1.6%202-1.2%203.1q1%201.4%202.6%201.3c1.1%200%202.7.3%203-.3q1-1.2.6-3.3c-1.2-3-4.4-1.8-5-.8'/%3e%3cpath%20fill='%23fff'%20d='M354.2%20362.5c9.2.4%2015.2.5%2023.3%201.4l9.6-1c10.6-1%2011%2015.1%2011%2015.1%200%209.5-3.7%2010-8.4%2011-2.7.4-4-1.6-5.5-3.6a14%2014%200%200%201-7%20.4l-11.5-.5c-4-.3-6.2.5-10.3.1-.8%201.3-2%203.1-4.4%202.6-2-.3-4.5-6-3.8-10.5%201.5-3.2%201-2.1%201-3.5-37.6-1-75.5-2.7-112.3-2.2-28.8.1-57.2%201.3-85.7%202.5-15.2-.2-26.8-2.6-34.8-14.3.8%200%2038.8%202.1%2049.9%201.4%2020.5-.2%2039.3-1.9%2060.2-2.5%2041.2.7%2082.1.7%20123.3%203.6-4-2.7-4-9%202-10.6.5-.4.8%203.1%201.7%203%204.9-.3%202.7%206.3%201.7%207.6M188.6%20135.3c-6.2%2017.8%203.6%2037.4%2010.4%2035.5%205%202%208-7.4%2010-17.6%201.5-2.9%202.5-3.2%203.2-1.7-.2%2013.6%201%2016.7%204.5%2020.8%207.8%206%2014.3.8%2014.8.3l6-6.1q2.2-2.2%205.1-.3c1.9%201.7%201.6%204.6%205.6%206.6%203.4%201.4%2010.5.4%2012.2-2.5%202.2-3.9%202.8-5.2%203.8-6.6%201.6-2.1%204.3-1.2%204.3-.5-.3%201.2-1.9%202.3-.8%204.5%202%201.4%202.4.5%203.5.2%204-2%207-10.6%207-10.6.1-3.2-1.7-3-2.9-2.2l-3.1%202.1c-2%20.3-5.7%201.6-7.6-1.3-1.9-3.4-1.9-8.3-3.3-11.8%200-.2-2.6-5.5-.2-5.8%201.2.2%203.7.9%204.1-1.2%201.2-2.1-2.6-8-5.3-11-2.3-2.5-5.5-2.8-8.6-.2-2.2%202-1.9%204.2-2.3%206.3a10%2010%200%200%200%202%208.7c2.2%204.2%206.1%209.7%204.8%2017.5%200%200-2.3%203.6-6.3%203.1-1.7-.3-4.4-1-5.8-11.8-1.1-8%20.2-19.4-3.2-24.7-1.3-3.3-2.2-6.4-5.2-.9-.8%202.2-4.3%205.5-1.8%2012.2a36%2036%200%200%201%202%2019c-1.5%202.2-1.8%202.9-3.7%205-2.6%203-5.5%202.2-7.7%201.1-2-1.3-3.6-2-4.6-6.5.2-7%20.6-18.5-.7-20.9-1.9-3.8-5-2.4-6.3-1.2a48%2048%200%200%200-11.5%2023.5c-1.8%205.8-3.7%204.1-5%201.8-3.2-3-3.5-26.7-7.4-22.8'/%3e%3cpath%20fill='%23fff'%20d='M207.4%20174.1c2.9-2%201.6-3.4%205.8.8a72%2072%200%200%201%209.2%2031.3c-.2%202.6%201.6%204.2%202.5%203.6.4-6%2015.1-14.4%2028.6-15.6%202-.5%201-4.4%201.3-6.4-.8-7.5%204.2-14.3%2011.2-14.8%209.6%201.4%2012.8%206.5%2013%2014.2-1.1%2015-16.7%2017.5-25.4%2018.7-1.3.5-1.9%201.1%200%201.8l36.6.2%201.9%201c.2%201-.6.2-2%202.6a30%2030%200%200%200-3.7%2011.5c-10.9%203.6-22.2%205-33.6%206.5-4%202-6%204.7-5.2%207.7%201.4%203.3%2010.2%206.7%2010.2%206.8%201.7%201%203.6%203.5-.5%208.6-17.8-.8-31.7-8.4-36.5-19.1-1.4-1.1-3%200-4%201.4-7%209-13.8%2017-25.7%2021.4-7%201.8-14.3-1.1-17.7-5.7-2.3-2.7-2.2-5.6-3-6.2-3.9%201.7-36.9%2015.7-32.7%209.1%208-8.5%2022-14.9%2034.2-23.3.9-2.9%202.5-12.5%207.3-15.6.3%200-.7%205.6-.6%208%200%202-.2%202.7.2%202.2.9-.5%2015.7-12.2%2017-15.8%201.4-2%20.3-7.2.3-7.4-2.8-7.2-6.7-7.8-8.1-11.4-1.3-4.7-.7-10.1%202-11.7q3.7-3.1%207.9.5c3%202.7%205.6%208%206.4%2011.9-.5%201.5-4-1-5-.3a16%2016%200%200%201%203.7%207.8c2%208.2%201.4%2011.4-.6%2016.7-6.6%2013.9-15%2018-22.4%2023.2-.2%200-.3%203.5%202.4%205.4%201%201%204.9%201.5%209.4%200a55%2055%200%200%200%2022.3-23.3%2051%2051%200%200%200-2.4-22.2c-2.9-6.7-6.3-16.2-6.3-16.4-.1-4.2.2-5.6%202-7.7m-95.8-38.6c4.2%202%2012.2%201.1%2011.8-5.7l-.2-3.1c-.8-2-3.2-1.5-3.7.5-.2.7.3%201.8-.3%202.1-.4.4-1.7.2-1.7-1.7q-.1-1-.7-1.6-.2-.2-.9-.2c-.6%200-.6.1-.9.6l-.3%201.6q-.1.9-.8%201c-.6%200-.5%200-1-.2q-.4-.3-.5-1l-.3-1.6q-.3-.4-1-.6c-2.3%200-2.5%202.7-2.3%203.7-.2.2-.3%204.9%202.8%206.2'/%3e%3cpath%20fill='%23fff'%20d='M235.1%20187.7c4.2%202%2014.3.9%2011.8-5.6l-.2-3.2c-.9-2-3.2-1.5-3.7.6-.2.6.3%201.7-.4%202-.3.4-1.7.2-1.6-1.6q-.1-1-.7-1.7-.3-.2-1-.2c-.5%200-.5.2-.8.7q-.3.7-.3%201.6-.2.8-.9%201c-.5%200-.4%200-.8-.3q-.5-.3-.6-.9l-.3-1.6q-.3-.5-1-.6c-2.3%200-2.5%202.6-2.4%203.6-.1.2-.2%205%203%206.2zm72-21.6c4.2%202%2012.1%201.1%2011.8-5.6l-.2-3.2c-.9-2-3.2-1.5-3.7.5-.2.7.3%201.8-.4%202.2-.3.3-1.7.1-1.6-1.8q-.1-1-.7-1.6-.3-.2-1-.2t-.8.7l-.3%201.5q-.1%201-.9%201c-.8%200-.4%200-.8-.2q-.5-.3-.6-.9%200-1-.3-1.7-.4-.4-1-.5c-2.3%200-2.5%202.6-2.4%203.6-.1.2-.2%204.9%203%206.2zm37.3%2054.3c-7.3%208.3-4.1%2022-2.4%2025%202.4%204.8%204.3%207.9%209%2010.3%204.3%203.1%207.7%201.2%209.5-1%204.3-4.5%204.4-16%206.4-18.2%201.4-4.2%205-3.5%206.7-1.6a17%2017%200%200%200%206.2%205.3c4%203.5%208.8%204.2%2013.6%201%203.2-1.9%205.3-4.2%207.2-8.9%202-5.6%201-31.6.5-47l-4.2-21.5c0-.2-.5-10.2-1-12.5%200-1-.3-1.3.7-1.2%201.1%201%201.2%201%202%201.3%201%20.2%202-1.7%201.3-3.3l-10-18.6c-.8-.8-1.9-1.6-3.2.2a7%207%200%200%200-2.4%205.5l1.3%2013.3%204%2022.6c1.3%2016%201.6%2029.2%202.9%2045.3-.2%206.8-2.3%2012.7-4.3%2013.6%200%200-3%201.7-5-.2-1.5-.6-7.4-9.9-7.4-9.9-3-2.7-5-2-7.1%200-6%205.8-8.6%2016.4-12.7%2023.8-1%201.7-4%203-7.2-.1-8.2-11.3-3.4-27.3-4.4-23.2M309%20126.7c3.8%201.5%206.4%209.2%205.6%2013-.8%204.5-2.8%209.5-4.2%208.9-1.6-.6%201-4.6-.5-8.8-.8-2.8-6-7.8-5.4-9.2-1-3.1%202.2-4.5%204.5-4z'/%3e%3cpath%20fill='%23fff'%20d='M356.6%20225c.7-9.2-.6-14.8-.8-20.2s-6.1-46.6-7.3-50.6c-1.5-7.8%205.7-1%204.9-5.6-2.5-5.6-8.6-13.9-10.5-18.8-1.2-2-.7-4-3.3-.5a42%2042%200%200%200-2.3%2019.2c6.2%2032.3%2012.5%2059.1%2011.5%2089.8%203%200%206.3-6.7%207.8-13.3m64.4-85.3c3.5%201.7%205.5%2011.3%205.1%2014-.7%205-2.5%2010.4-3.8%209.7-1.5-.6.3-7.4-.4-9.5-.8-3-5.5-8.4-5-10-1-3.4%202-4.8%204.1-4.2m-255.7%2067.9c3.3%201.3%205.3%208.3%205%2010.3-.8%203.7-2.5%207.7-3.8%207.1-1.3-.4.3-5.4-.3-7-.3-3.7-4.9-5.7-4.8-7.3-.8-3%202-3.5%204-3.1z'/%3e%3cpath%20fill='%23165d31'%20d='M244.9%20218.2c4.2.2%206.3%203.6%202.4%205-4%201.3-7.7%202.4-7.8%208%201.5%208-2%205.2-4%204.2-2.4-1.8-9.2-6-10.2-15-.1-2.1%201.6-4%204.3-4%204%201.1%2010%201.2%2015.3%201.8'/%3e%3cpath%20fill='%23fff'%20d='M77.4%20124.4c4.8%201.4%205.1%208.6%204.8%2010.7-.7%203.8-2.4%207.9-3.6%207.4-1.4-.5%200-5.7-.7-7.3-.7-2.2-4.8-6.4-4.4-7.6-.9-2.5%202-3.7%203.9-3.2m95.9%2033.6c-3.8%202-5.2%208-2.9%2011.6%202.2%203%205.6%201.9%206%201.9%203.7.4%205.9-6.9%205.9-6.9s.1-2-4.2%201.9c-1.9.3-2-.4-2.5-1.4a9%209%200%200%201%20.5-5.7c.7-1.8-.7-2.6-2.8-1.4m28-36.4c-2%201.3-5.7%205.2-5.8%209.6-.1%202.5-.6%202.5%201%204%201.3%201.8%202.4%201.7%204.8.4a5%205%200%200%200%202.3-3.4c.6-2.8-3%201.4-3.4-1.8-.8-3%201.5-4.2%203.7-7%200-2%200-3.3-2.7-1.8zm22.4%204a60%2060%200%200%200-1.6%2011.1c-.6%202.8%203%204%204.5.4%202.4-6.5%202.4-9.3%202.6-12-.7-4.3-3.6-4.2-5.5.5m142%2072.3c.4-.5%2020-14.4%2020-14.4%202-.7%201.5%207.2.6%207.1a78%2078%200%200%201-20.7%2014.3c-1%20.7-1.9-5.3%200-7zm17.7-.2c3.5%201.7%204.9%2011.8%204.5%2014.5%200%205.4-3.3%209.6-4.7%209-1.4-.7.2-6.7-.5-8.8-.8-3-3.7-8.5-3.2-10.1-1-3.4%201.8-5.2%204-4.6zm-116%2043.4a26%2026%200%200%201%205.6-4.9c2-1%203.8.8%203.7.7.3%202-1.2%203.7-.7%206.3.4%201%20.7%202.2%202.6%201.8%203.1-2.5%206-2.7%209-2.8%202.5.1%202.6%204.2%201%204.2-5.7%201.2-8.2%202.8-12.3%204.3-2%201.2-3.6-.3-3.6-.4s-1.1-1.1-.4-3.7q.3-3.2-2.4-3c-1.2.8-2.4%201.2-3-.3q-.6-1.4.5-2.2m136.6%205.4c.8%201%201.4%202-.1%203.8l-3.7%203.2c-.6%201-1%202.8%201%203.3%203.6%201%2012-4.5%2012-4.6%201.4-1%201-3%20.8-3-.8-.9-2.6-.3-3.8-.5-.6%200-2.5-.2-1.6-2a11%2011%200%200%200%201.6-2.9q.9-1.7-2-2.7c-2.1-.4-3-.2-5.3%200q-1.6.2-1.9%202.3c.1%202.3%201.5%202.2%203%203z'/%3e%3cpath%20fill='%23165d31'%20d='M268.1%20189.7c-.5%201-2.3%201-4%200s-2.7-2.6-2.1-3.5%202.3-.9%204%200%202.6%202.6%202.1%203.5m-89-53.6c-1%20.3-2.4-.6-3-2s-.3-2.6.7-2.9%202.3.7%203%202%20.3%202.7-.8%203zM355.2%20375c9.4.4%2018.2%200%2027.5.5%201.7%201.5.5%205-.6%204.8l-7.8-.3c-.1-3-7.7-2.5-7.5.1-4.1.5-7.8-.1-12-.3-1.2-1.5-1-4.2.4-4.8'/%3e%3c/g%3e%3c/svg%3e"; const flagPT = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20id='flag-icons-pt'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='red'%20d='M256%200h384v480H256z'/%3e%3cpath%20fill='%23060'%20d='M0%200h256v480H0z'/%3e%3cg%20fill='%23ff0'%20fill-rule='evenodd'%20stroke='%23000'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='.6'%3e%3cpath%20d='M339.5%20306.2c-32.3-1-180-93.2-181-108l8.1-13.5c14.7%2021.3%20165.7%20111%20180.6%20107.8z'/%3e%3cpath%20d='M164.9%20182.8c-2.9%207.8%2038.6%2033.4%2088.4%2063.8s92.9%2049%2096%2046.4l1.5-2.8q-.9%201.6-4.3.6c-13.5-3.9-48.6-20-92.1-46.4-43.6-26.4-81.4-50.7-87.3-61a6%206%200%200%201-.6-3.1h-.2l-1.2%202.2zm175.3%20123.8q-.7%201.3-3.5.8c-12-1.3-48.6-19.1-91.9-45-50.4-30.2-92-57.6-87.4-64.8l1.2-2.2.2.1c-4%2012.2%2082.1%2061.4%2087.2%2064.6%2049.8%2030.8%2091.8%2048.9%2095.5%2044.2z'/%3e%3cpath%20d='M256.2%20207.2c32.2-.3%2072-4.4%2095-13.6l-5-8c-13.5%207.5-53.5%2012.5-90.3%2013.2-43.4-.4-74.1-4.5-89.5-14.8l-4.6%208.6c28.2%2012%2057.2%2014.5%2094.4%2014.6'/%3e%3cpath%20d='M352.5%20193.8c-.8%201.3-15.8%206.4-37.8%2010.2a381%20381%200%200%201-58.6%204.3%20416%20416%200%200%201-56.2-3.6c-23.1-3.6-35-8.6-39.5-10.4l1.1-2.2c12.7%205%2024.7%208%2038.7%2010.2A412%20412%200%200%200%20256%20206a392%20392%200%200%200%2058.3-4.3c22.5-3.7%2034.8-8.4%2036.6-10.5zm-4.4-8.1c-2.4%202-14.6%206.3-36%209.7a388%20388%200%200%201-55.8%204c-22%200-40.1-1.6-53.8-3.6-21.8-2.8-33.4-8-37.6-9.4l1.3-2.2c3.3%201.7%2014.4%206.2%2036.5%209.3a385%20385%200%200%200%2053.6%203.4%20384%20384%200%200%200%2055.4-4c21.5-3%2033.1-8.4%2034.9-9.8zM150.3%20246c19.8%2010.7%2063.9%2016%20105.6%2016.4%2038%20.1%2087.4-5.8%20105.9-15.6l-.5-10.7c-5.8%209-58.8%2017.7-105.8%2017.4s-90.7-7.6-105.3-17v9.5'/%3e%3cpath%20d='M362.8%20244.5v2.5c-2.8%203.4-20.2%208.4-42%2012a434%20434%200%200%201-65.4%204.4%20400%20400%200%200%201-62-4.3%20155%20155%200%200%201-44.4-12v-2.9c9.7%206.4%2035.9%2011.2%2044.7%2012.6%2015.8%202.4%2036.1%204.2%2061.7%204.2%2026.9%200%2048.4-1.9%2065-4.4%2015.7-2.3%2038-8.2%2042.4-12.1m0-9v2.5c-2.8%203.3-20.2%208.3-42%2011.9a434%20434%200%200%201-65.4%204.5%20414%20414%200%200%201-62-4.3%20155%20155%200%200%201-44.4-12v-3c9.7%206.5%2036%2011.2%2044.7%2012.6a408%20408%200%200%200%2061.7%204.3c26.9%200%2048.5-2%2065-4.5%2015.7-2.2%2038-8.1%2042.4-12m-107%2068.8c-45.6-.2-84.7-12.4-93-14.4l6%209.4a250%20250%200%200%200%2087.4%2014.3c34.7-1%2065-3.7%2086.3-14.1l6.2-9.8c-14.5%206.9-64%2014.6-93%2014.6'/%3e%3cpath%20d='m344.9%20297.3-2.8%204c-10%203.6-26%207.4-32.6%208.4a296%20296%200%200%201-53.7%205c-40.4-.6-73.5-8.5-89-15.3l-1.3-2.1.2-.4%202.1.9a287%20287%200%200%200%2088.2%2014.5c18.8%200%2037.5-2.1%2052.6-4.8%2023.2-4.7%2032.6-8.2%2035.5-9.8l.7-.4zm5.3-8.8-2%203.5c-5.4%202-20%206.2-41.3%209.2-14%201.9-22.7%203.8-50.6%204.3a347%20347%200%200%201-94.2-14L161%20289a390%20390%200%200%200%2095.4%2014c25.5-.5%2036.4-2.4%2050.3-4.3%2024.8-3.8%2037.3-8%2041-9.1v-.2l2.6-1z'/%3e%3cpath%20d='M350.8%20237.6c.1%2030-15.3%2057-27.6%2068.8a99%2099%200%200%201-67.8%2028.2c-30.3.5-58.8-19.2-66.5-27.9a101%20101%200%200%201-27.5-67.4c1.8-32.8%2014.7-55.6%2033.3-71.3a100%20100%200%200%201%2064.2-22.7%2098%2098%200%200%201%2071%2035.6c12.5%2015.2%2018%2031.7%2020.9%2056.7M255.6%20135a106%20106%200%200%201%20106%20105.2%20105.6%20105.6%200%201%201-211.4%200c-.1-58%2047.3-105.2%20105.4-105.2'/%3e%3cpath%20d='M255.9%20134.5c58.2%200%20105.6%2047.4%20105.6%20105.6S314.1%20345.7%20256%20345.7s-105.6-47.4-105.6-105.6S197.8%20134.5%20256%20134.5zM152.6%20240c0%2056.8%2046.7%20103.3%20103.3%20103.3S359.2%20296.8%20359.2%20240s-46.7-103.3-103.3-103.3S152.6%20183.2%20152.6%20240'/%3e%3cpath%20d='M256%20143.3a97%2097%200%200%201%2096.7%2096.7%2097%2097%200%200%201-96.7%2096.8c-53%200-96.7-43.6-96.7-96.8a97%2097%200%200%201%2096.7-96.7M161.6%20240c0%2052%2042.6%2094.4%2094.4%2094.4s94.4-42.5%2094.4-94.4-42.6-94.4-94.4-94.4a95%2095%200%200%200-94.4%2094.4'/%3e%3cpath%20d='M260.3%20134h-9.1v212.3h9z'/%3e%3cpath%20d='M259.3%20132.8h2.3v214.7h-2.2V132.8zm-9%200h2.4v214.7h-2.3z'/%3e%3cpath%20d='M361.6%20244.2v-7.8l-6.4-6-36.3-9.6-52.2-5.3-63%203.2-44.8%2010.6-9%206.7v7.9l22.9-10.3%2054.4-8.5h52.3l38.4%204.2%2026.6%206.4z'/%3e%3cpath%20d='M256%20223.8c24.9%200%2049%202.3%2068.3%206%2019.8%204%2033.7%209%2038.5%2014.5v2.8c-5.8-7-24.5-12-39-15-19-3.6-43-6-67.9-6-26.1%200-50.5%202.6-69.3%206.2-15%203-35.1%209-37.6%2014.8v-2.9c1.3-4%2016.3-10%2037.3-14.3%2018.9-3.7%2043.3-6.1%2069.6-6.1zm0-9.1a383%20383%200%200%201%2068.3%206c19.8%204%2033.7%209%2038.5%2014.6v2.7c-5.8-6.9-24.5-12-39-14.9-19-3.7-43-6-67.9-6a376%20376%200%200%200-69.2%206.2c-14.5%202.7-35.4%208.9-37.7%2014.7v-2.8c1.4-4%2016.6-10.3%2037.3-14.3%2019-3.7%2043.3-6.2%2069.7-6.2m-.6-46.2c39.3-.2%2073.6%205.5%2089.3%2013.5l5.7%2010c-13.6-7.4-50.6-15-94.9-14-36.1.3-74.7%204-94%2014.4l6.8-11.4c15.9-8.3%2053.3-12.5%2087.1-12.5'/%3e%3cpath%20d='M256%20176.7a354%20354%200%200%201%2061.3%204.3c16%203%2031.3%207.4%2033.5%209.8l1.7%203c-5.3-3.4-18.6-7.3-35.6-10.5s-38.7-4.3-61-4.2c-25.3-.1-45%201.2-61.8%204.2a109%20109%200%200%200-33.3%2010.3l1.7-3.1c6-3%2015.3-6.7%2031.1-9.6%2017.5-3.2%2037.4-4.1%2062.4-4.2m0-9c21.4-.2%2042.6%201%2059.1%204a96%2096%200%200%201%2030.6%2010l2.5%204c-4.2-4.7-20-9.2-34.1-11.6-16.4-2.9-36.7-4-58.1-4.2a361%20361%200%200%200-59.5%204.4%2097%2097%200%200%200-29.6%209.1l2.2-3.3c5.8-3%2015.2-5.8%2027-8.1a357%20357%200%200%201%2059.9-4.4zM308.4%20284a276%20276%200%200%200-52.5-4c-65.5.8-86.6%2013.5-89.2%2017.3l-5-8c16.8-12%2052.4-18.8%2094.6-18.2q32.9.5%2056.6%205l-4.5%208'/%3e%3cpath%20d='M255.6%20278.9c18.2.3%2036%201%2053.3%204.2l-1.2%202.2c-16-3-33.2-4-52-4-24.3-.2-48.7%202.1-70%208.2-6.7%201.9-17.8%206.2-19%209.8l-1.2-2c.4-2.2%207-6.6%2019.6-10%2024.4-7%2047.2-8.3%2070.5-8.4m.8-9.2a327%20327%200%200%201%2057.3%205l-1.3%202.3a299%20299%200%200%200-56-4.9c-24.2%200-49.9%201.8-73.3%208.6-7.5%202.2-20.6%207-21%2010.7l-1.2-2.2c.2-3.4%2011.5-7.9%2021.7-10.8%2023.5-6.9%2049.3-8.6%2073.8-8.7'/%3e%3cpath%20d='m349.4%20290.5-7.8%2012.3-22.7-20.1-58.6-39.5-66.2-36.3-34.3-11.7%207.3-13.6%202.5-1.3%2021.3%205.3%2070.4%2036.3%2040.6%2025.6L336%20272l13.9%2016z'/%3e%3cpath%20d='M158.6%20195.5c6-4%2050.2%2015.6%2096.6%2043.6%2046.1%2028%2090.3%2059.6%2086.3%2065.5l-1.3%202.1-.6.5c.1-.1.8-1%200-3.1-2-6.5-33.4-31.5-85.3-62.9-50.7-30.1-92.9-48.3-97-43.1zM351%20290.4c3.8-7.6-37.2-38.5-88.1-68.6-52-29.5-89.6-46.9-96.5-41.7L165%20183l.4-.5c1.2-1%203.3-1%204.2-1%2011.8.2%2045.5%2015.7%2092.8%2042.8%2020.8%2012%2087.6%2055%2087.3%2067%200%201%20.1%201.2-.3%201.8l1.7-2.6z'/%3e%3c/g%3e%3cg%20transform='translate(0%2026.7)scale(1.06667)'%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.7'%20d='M180.6%20211a59%2059%200%200%200%2017.5%2041.7%2059%2059%200%200%200%2041.8%2017.6%2059%2059%200%200%200%2042-17.4%2059%2059%200%200%200%2017.4-41.8v-79.2l-118.7-.2z'/%3e%3cpath%20fill='red'%20stroke='%23000'%20stroke-width='.5'%20d='M183%20211.1a56%2056%200%200%200%2016.8%2040%2057%2057%200%200%200%2040.2%2016.8%2057%2057%200%200%200%2040.2-16.6%2056%2056%200%200%200%2016.7-40v-77H183v76.8m91-53.7v48.9l-.1%205.1a33%2033%200%200%201-10%2024%2034%2034%200%200%201-24%2010c-9.4%200-17.7-4-23.9-10.2a34%2034%200%200%201-10-24v-54z'/%3e%3cg%20id='pt-e'%3e%3cg%20id='pt-d'%20fill='%23ff0'%20stroke='%23000'%20stroke-width='.5'%3e%3cpath%20stroke='none'%20d='M190.2%20154.4c.1-5.5%204-6.8%204-6.8.1%200%204.3%201.4%204.3%206.9z'/%3e%3cpath%20d='m186.8%20147.7-.7%206.3h4.2c0-5.2%204-6%204-6%20.1%200%204%201.1%204.1%206h4.2l-.8-6.4zm-1%206.4h17q.5%200%20.6.7%200%20.8-.6.8h-17q-.5%200-.6-.8%200-.7.7-.7z'/%3e%3cpath%20d='M192%20154c0-3.3%202.3-4.2%202.3-4.2s2.3%201%202.3%204.2H192m-5.8-9h16.3q.5.1.6.8%200%20.5-.6.6h-16.3q-.5%200-.6-.7%200-.5.6-.6zm.4%201.5H202q.5%200%20.6.7t-.6.7h-15.5q-.6%200-.6-.7t.6-.7zm5-10.6h1.2v.8h.9v-.8h1.3v.9h.9v-1h1.2v2q0%20.6-.5.6h-4.4q-.5%200-.6-.5zm4.6%202.7.3%206.4h-4.3l.3-6.5h3.7'/%3e%3cpath%20id='pt-a'%20d='M191%20141.6v3.4h-4v-3.4z'/%3e%3cuse%20xlink:href='%23pt-a'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3cpath%20id='pt-b'%20d='M186.3%20139h1.2v1h.9v-1h1.2v1h.9v-1h1.2v2q0%20.6-.5.6h-4.3l-.6-.6z'/%3e%3cuse%20xlink:href='%23pt-b'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3cpath%20fill='%23000001'%20stroke='none'%20d='M193.9%20140.6c0-.6.9-.6.9%200v1.6h-.9z'/%3e%3cpath%20id='pt-c'%20fill='%23000001'%20stroke='none'%20d='M188.6%20142.8c0-.6.8-.6.8%200v1.2h-.8z'/%3e%3cuse%20xlink:href='%23pt-c'%20width='100%25'%20height='100%25'%20x='10.6'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20y='46.3'/%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20transform='rotate(-45.2%20312.8%20180)'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-d'%20width='100%25'%20height='100%25'%20x='45.7'/%3e%3cuse%20xlink:href='%23pt-e'%20width='100%25'%20height='100%25'%20transform='matrix(-1%200%200%201%20479.8%200)'/%3e%3cg%20id='pt-f'%20fill='%23fff'%3e%3cpath%20fill='%23039'%20d='M232.6%20202.4a8%208%200%200%200%202.2%205.7%207%207%200%200%200%205.3%202.4q3.2-.2%205.3-2.4a8%208%200%200%200%202.2-5.7v-10.8h-15z'/%3e%3ccircle%20cx='236.1'%20cy='195.7'%20r='1.5'/%3e%3ccircle%20cx='244.4'%20cy='195.7'%20r='1.5'/%3e%3ccircle%20cx='240.2'%20cy='199.7'%20r='1.5'/%3e%3ccircle%20cx='236.1'%20cy='203.9'%20r='1.5'/%3e%3ccircle%20cx='244.4'%20cy='203.9'%20r='1.5'/%3e%3c/g%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20y='-26'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20x='-20.8'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20x='20.8'/%3e%3cuse%20xlink:href='%23pt-f'%20width='100%25'%20height='100%25'%20y='25.8'/%3e%3c/g%3e%3c/svg%3e"; const flagRU = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ru'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%230039a6'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%23d52b1e'%20d='M0%20320h640v160H0z'/%3e%3c/svg%3e"; const flagES = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-es'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23AA151B'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23F1BF00'%20d='M0%20120h640v240H0z'/%3e%3cpath%20fill='%23ad1519'%20d='m127.3%20213.3-.8-.1-1-1-.7-.4-.6-.8s-.7-1.1-.4-2q.5-1.2%201.4-1.5l1.5-.5%201-.4%201.3-.3.5-.3%201-.2%201-.2%201.6.1h4.8c.4%200%201.2.3%201.4.4l2%20.7c.5.1%201.6.3%202.2.6q.8.5%201.1%201l.5%201v1.1l-.5.8-.6%201-.8.6s-.5.5-1%20.4-4.8-.8-7.6-.8-7.3.9-7.3.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='m127.3%20213.3-.8-.1-1-1-.7-.4-.6-.8s-.7-1.1-.4-2q.5-1.2%201.4-1.5l1.5-.5%201-.4%201.3-.3.5-.3%201-.2%201-.2%201.6.1h4.8c.4%200%201.2.3%201.4.4l2%20.7c.5.1%201.6.3%202.2.6q.8.5%201.1%201l.5%201v1.1l-.5.8-.6%201-.8.6s-.5.5-1%20.4-4.8-.8-7.6-.8-7.3.9-7.3.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M133.3%20207q.1-2.1%201.3-2.3%201.3.1%201.4%202.4c0%201.3-.6%202.4-1.4%202.4s-1.3-1.1-1.3-2.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M133.3%20207q.1-2.1%201.3-2.3%201.3.1%201.4%202.4c0%201.3-.6%202.4-1.4%202.4s-1.3-1.1-1.3-2.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M134%20207q0-2%20.7-2.1c.3%200%20.6%201%20.6%202.1q0%202-.6%202.2c-.4%200-.6-1-.6-2.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134%20207q0-2%20.7-2.1c.3%200%20.6%201%20.6%202.1q0%202-.6%202.2c-.4%200-.6-1-.6-2.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M133.8%20204.5q.1-.7.8-.8%201%200%201%20.8-.1.8-1%20.9c-.9.1-.8-.4-.8-.9'/%3e%3cpath%20fill='%23c8b100'%20d='M135.3%20204.2v.6h-1.4v-.6h.5V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M135.3%20204.2v.6h-1.4v-.6h.5V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2h.4'/%3e%3cpath%20fill='%23c8b100'%20d='M135.9%20204.2v.6h-2.5v-.6h1V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M135.9%20204.2v.6h-2.5v-.6h1V203h-.7v-.6h.7v-.5h.5v.5h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.9%20203.7q.6.2.6.8-.1.8-.8.9-1%200-1-.9%200-.6.7-.8'/%3e%3cpath%20fill='%23c8b100'%20d='M134.7%20213.2H130v-1.1l-.3-1.2-.2-1.5c-1.3-1.7-2.5-2.8-2.9-2.5q.1-.5.5-.7c1.1-.7%203.5%201%205.2%203.6l.5.7h3.8l.4-.7c1.8-2.7%204.1-4.3%205.2-3.6q.4.2.5.7c-.4-.3-1.6.8-2.9%202.5l-.2%201.5-.2%201.2-.1%201.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20213.2H130v-1.1l-.3-1.2-.2-1.5c-1.3-1.7-2.5-2.8-2.9-2.5q.1-.5.5-.7c1.1-.7%203.5%201%205.2%203.6l.5.7h3.8l.4-.7c1.8-2.7%204.1-4.3%205.2-3.6q.4.2.5.7c-.4-.3-1.6.8-2.9%202.5l-.2%201.5-.2%201.2-.1%201.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M126.8%20206.8c1-.5%203%201.1%204.6%203.6m11-3.6c-.8-.5-2.8%201.1-4.5%203.6'/%3e%3cpath%20fill='%23c8b100'%20d='m127.8%20215.3-.5-1a27%2027%200%200%201%2014.7%200l-.5.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.5.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.8%20215.3-.5-1a27%2027%200%200%201%2014.7%200l-.5.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.5.8l-.3-.6'/%3e%3cpath%20fill='%23c8b100'%20d='M134.6%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4c-1.4-.5-4-.8-6.5-.8s-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.6%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4c-1.4-.5-4-.8-6.5-.8s-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m142.1%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.4.6-1.1.7-1.4-.6-1.4-.6-.5.7-1%201c-.5%200-1.2-.4-1.2-.4l-.2.5-.3.1.2.5a27%2027%200%200%201%207.2-.9q4.5%200%207.4%201z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142.1%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.4.6-1.1.7-1.4-.6-1.4-.6-.5.7-1%201c-.5%200-1.2-.4-1.2-.4l-.2.5-.3.1.2.5a27%2027%200%200%201%207.2-.9q4.5%200%207.4%201z'/%3e%3cpath%20fill='%23c8b100'%20d='M134.7%20210.7h.2v.4q0%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6-.3.3-.7.2-1%200-1.4-.8-.5.5-1.1.5a2%202%200%200%201-1.2-.6l-1%20.4a2%202%200%200%201-1.3-.6%201.6%201.6%200%200%201-2.4.2%202%202%200%200%201-1.2.6l-1.1-.5q-.4.8-1.4.8l-.7-.2q-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.3.6%201%20.7%201%200%201.1-1v-.3h.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20210.7h.2v.4q0%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6-.3.3-.7.2-1%200-1.4-.8-.5.5-1.1.5a2%202%200%200%201-1.2-.6l-1%20.4a2%202%200%200%201-1.3-.6%201.6%201.6%200%200%201-2.4.2%202%202%200%200%201-1.2.6l-1.1-.5q-.4.8-1.4.8l-.7-.2q-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.3.6%201%20.7%201%200%201.1-1v-.3h.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M134.6%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3a27%2027%200%200%201%207.5-1q4.6%200%207.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M134.6%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3a27%2027%200%200%201%207.5-1q4.6%200%207.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1z'/%3e%3cpath%20fill='%23fff'%20d='M131.8%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M131.8%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='%23ad1519'%20d='M134.7%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M134.7%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='%23058e6e'%20d='M130%20214.9h-.7q-.2%200-.3-.2l.2-.3.7-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M130%20214.9h-.7q-.2%200-.3-.2l.2-.3.7-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4h-.7'/%3e%3cpath%20fill='%23ad1519'%20d='m127.3%20215.3.3-.4h.7l-.4.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.3%20215.3.3-.4h.7l-.4.6-.6-.2'/%3e%3cpath%20fill='%23fff'%20d='M136.6%20214.4q0-.4.4-.4a.4.4%200%200%201%20.5.4.4.4%200%200%201-.5.4.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M136.6%20214.4q0-.4.4-.4a.4.4%200%200%201%20.5.4.4.4%200%200%201-.5.4.4.4%200%200%201-.4-.4z'/%3e%3cpath%20fill='%23058e6e'%20d='M139.3%20214.9h.6a.3.3%200%200%200%20.4-.2l-.3-.3-.6-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M139.3%20214.9h.6a.3.3%200%200%200%20.4-.2l-.3-.3-.6-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4h.7'/%3e%3cpath%20fill='%23ad1519'%20d='m142%20215.4-.3-.5h-.7l.3.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142%20215.4-.3-.5h-.7l.3.6.6-.1'/%3e%3cpath%20fill='%23ad1519'%20d='M134.6%20217.1a25%2025%200%200%201-6-.6%2026%2026%200%200%201%2012.1%200q-2.5.6-6%20.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M134.6%20217.1a25%2025%200%200%201-6-.6%2026%2026%200%200%201%2012.1%200q-2.5.6-6%20.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m142%20212-.1-.3q-.3%200-.4.2%200%20.4.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142%20212-.1-.3q-.3%200-.4.2%200%20.4.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M137.3%20211.2q0-.3-.2-.4l-.2.3q0%20.3.2.4l.3-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M137.3%20211.2q0-.3-.2-.4l-.2.3q0%20.3.2.4l.3-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m132%20211.2.1-.4q.3%200%20.3.3t-.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m132%20211.2.1-.4q.3%200%20.3.3t-.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m127.3%20212%20.1-.3q.3%200%20.4.2%200%20.4-.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m127.3%20212%20.1-.3q.3%200%20.4.2%200%20.4-.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m134.6%20208.5-.8.5.6%201.3.2.1.2-.1.7-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m134.6%20208.5-.8.5.6%201.3.2.1.2-.1.7-1.3-.9-.5'/%3e%3cpath%20fill='%23c8b100'%20d='m132.8%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m132.8%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3-.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m136.4%20210.5-.3.5-1.3-.4-.2-.2.2-.2%201.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m136.4%20210.5-.3.5-1.3-.4-.2-.2.2-.2%201.3-.3.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m129.3%20209-.7.7.9%201%20.2.1.1-.1.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m129.3%20209-.7.7.9%201%20.2.1.1-.1.3-1.3-.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m128%20211.2.4.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m128%20211.2.4.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m131.5%20210.5-.3.6H130l-.2-.2.1-.3%201.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m131.5%20210.5-.3.6H130l-.2-.2.1-.3%201.2-.6.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M126.6%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M129.2%20210.9q0-.5.5-.5t.5.5l-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M129.2%20210.9q0-.5.5-.5t.5.5l-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m140%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m140%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m141.4%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m141.4%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m137.8%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m137.8%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6-.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='m142.5%20211.4.1.6%201.3.2.2-.1v-.2l-1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m142.5%20211.4.1.6%201.3.2.2-.1v-.2l-1-.9-.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='m134.2%20210.4.4-.4q.5%200%20.5.4l-.5.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m134.2%20210.4.4-.4q.5%200%20.5.4l-.5.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M139.1%20210.9q.1-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M139.1%20210.9q.1-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m124.8%20212.2-.6-.7c-.2-.2-.7-.3-.7-.3q0-.2.6-.3l.4.2v-.2s.3%200%20.4.3v1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m124.8%20212.2-.6-.7c-.2-.2-.7-.3-.7-.3q0-.2.6-.3l.4.2v-.2s.3%200%20.4.3v1z'/%3e%3cpath%20fill='%23c8b100'%20d='M124.8%20212q.3-.3.5%200t.2.5l-.5-.1q-.3-.2-.2-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M124.8%20212q.3-.3.5%200t.2.5l-.5-.1q-.3-.2-.2-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='m144.3%20212.2.6-.7.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m144.3%20212.2.6-.7.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M144.3%20212q-.1-.3-.5%200-.3.2-.1.5l.5-.1q.3-.2.1-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M144.3%20212q-.1-.3-.5%200-.3.2-.1.5l.5-.1q.3-.2.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M124%20223h21.4v-5.5H124z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M124%20223h21.4v-5.5H124z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.2%20226.8h16.9a1.4%201.4%200%200%201-1-1.2q.1-1%201-1.3h-16.9q1%20.3%201%201.3a1.3%201.3%200%200%201-1%201.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M126.2%20226.8h16.9a1.4%201.4%200%200%201-1-1.2q.1-1%201-1.3h-16.9q1%20.3%201%201.3a1.3%201.3%200%200%201-1%201.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20226.8h16q1%200%201%20.7t-1%20.8h-16q-.9-.1-1-.8%200-1%201-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20226.8h16q1%200%201%20.7t-1%20.8h-16q-.9-.1-1-.8%200-1%201-.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20223h16q1%20.1%201%20.7t-1%20.6h-16q-.9%200-1-.6.1-.5%201-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20223h16q1%20.1%201%20.7t-1%20.6h-16q-.9%200-1-.6.1-.5%201-.6z'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20317.4q-2.2%200-3.7-.8a8%208%200%200%200-3.8-.8q-2.1%200-3.7.8a8%208%200%200%201-3.8.8q-2.3%200-3.7-.8a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8%208%208%200%200%201-3.8.8v2.4q2.3%200%203.8-.9a8%208%200%200%201%203.7-.8q2.2%200%203.7.8c1.5.8%202.2.9%203.7.9a8%208%200%200%200%203.8-.9q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.9%203.7.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20317.4q-2.2%200-3.7-.8a8%208%200%200%200-3.8-.8q-2.1%200-3.7.8a8%208%200%200%201-3.8.8q-2.3%200-3.7-.8a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8%208%208%200%200%201-3.8.8v2.4q2.3%200%203.8-.9a8%208%200%200%201%203.7-.8q2.2%200%203.7.8c1.5.8%202.2.9%203.7.9a8%208%200%200%200%203.8-.9q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.9%203.7.9z'/%3e%3cpath%20fill='%23ccc'%20d='M149.6%20319.8a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.9-3.8.9s-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a8%208%200%200%201%203.7-.7q2.2%200%203.7.7a8%208%200%200%200%207.5%200%209%209%200%200%201%207.5.1%208%208%200%200%200%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20319.8a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.9-3.8.9s-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a8%208%200%200%201%203.7-.7q2.2%200%203.7.7a8%208%200%200%200%207.5%200%209%209%200%200%201%207.5.1%208%208%200%200%200%203.7.8v-2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20322a7%207%200%200%201-3.7-.8%208%208%200%200%200-3.8-.7q-2.1%200-3.7.7-1.5.9-3.8.9c-2.3%200-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a10%2010%200%200%201%207.4%200%207%207%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20322a7%207%200%200%201-3.7-.8%208%208%200%200%200-3.8-.7q-2.1%200-3.7.7-1.5.9-3.8.9c-2.3%200-2.8-.4-3.7-.9a8%208%200%200%200-3.7-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v2.3q2.3%200%203.8-.9a10%2010%200%200%201%207.4%200%207%207%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.6-.8%203.7-.8%202.3%200%203.8.8c1.5.8%202.2.8%203.7.8V322'/%3e%3cpath%20fill='%23ccc'%20d='M149.6%20326.7a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.9%2010%2010%200%200%201%207.4%200%208%208%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.5-.8%203.8-.8t3.7.8c1.5.8%202.3.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20326.7a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.9%2010%2010%200%200%201%207.4%200%208%208%200%200%200%203.7.9%208%208%200%200%200%203.8-.8q1.5-.8%203.8-.8t3.7.8c1.5.8%202.3.8%203.7.8v2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M149.6%20329a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.8q1.5-.8%203.7-.8t3.7.7a8%208%200%200%200%207.5%200q1.5-.6%203.8-.7t3.7.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M149.6%20329a8%208%200%200%201-3.7-.8q-1.6-.8-3.7-.8a8%208%200%200%200-3.8.8q-1.5.8-3.8.8a7%207%200%200%201-3.7-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.7.8c-1.5.8-2.3.8-3.8.8v-2.3a8%208%200%200%200%203.8-.8q1.5-.8%203.7-.8t3.7.7a8%208%200%200%200%207.5%200q1.5-.6%203.8-.7t3.7.8c1.5.8%202.2.8%203.7.8z'/%3e%3cpath%20fill='%23c8b100'%20d='m126.2%20308%20.2.5c0%201.5-1.3%202.6-2.7%202.6h22a3%203%200%200%201-2.7-2.6v-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='m126.2%20308%20.2.5c0%201.5-1.3%202.6-2.7%202.6h22a3%203%200%200%201-2.7-2.6v-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M126.6%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-.9%200-1-.8.1-.6%201-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.6%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-.9%200-1-.8.1-.6%201-.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M123.7%20316.7h22V311h-22z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M123.7%20316.7h22V311h-22z'/%3e%3cpath%20fill='%23ad1519'%20d='M122%20286.7c-2.2%201.2-3.7%202.5-3.4%203.2q.2.8%201.8%201.6c1.5%201.1%202.5%203%201.7%204a5.5%205.5%200%200%200-.1-8.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M122%20286.7c-2.2%201.2-3.7%202.5-3.4%203.2q.2.8%201.8%201.6c1.5%201.1%202.5%203%201.7%204a5.5%205.5%200%200%200-.1-8.8z'/%3e%3cpath%20fill='%23ccc'%20d='M126.8%20305.6h15.6V229h-15.6v76.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M138%20229.2v76.3m1.7-76.3v76.3m-12.9%200h15.6v-76.4h-15.6v76.5z'/%3e%3cpath%20fill='%23ad1519'%20d='M158.4%20257.7a50%2050%200%200%200-23.3-2c-9.4%201.6-16.5%205.3-15.9%208.4v.2l-3.5-8.2c-.6-3.3%207.2-7.5%2017.6-9.2a43%2043%200%200%201%209.2-.7c6.6%200%2012.4.8%2015.8%202.1v9.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M158.4%20257.7a50%2050%200%200%200-23.3-2c-9.4%201.6-16.5%205.3-15.9%208.4v.2l-3.5-8.2c-.6-3.3%207.2-7.5%2017.6-9.2a43%2043%200%200%201%209.2-.7c6.6%200%2012.4.8%2015.8%202.1v9.4'/%3e%3cpath%20fill='%23ad1519'%20d='M126.8%20267.3c-4.3-.3-7.3-1.4-7.6-3.2q-.3-2.2%203.8-4.5l3.8.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M126.8%20267.3c-4.3-.3-7.3-1.4-7.6-3.2q-.3-2.2%203.8-4.5l3.8.3v7.4'/%3e%3cpath%20fill='%23ad1519'%20d='M142.5%20261.5q4.1.6%205.7%201.9l.1.2c.5%201-1.9%203-5.9%205.4v-7.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M142.5%20261.5q4.1.6%205.7%201.9l.1.2c.5%201-1.9%203-5.9%205.4v-7.5'/%3e%3cpath%20fill='%23ad1519'%20d='M117.1%20282c-.4-1.2%203.8-3.6%209.8-5.8l7.8-3.2c8.3-3.7%2014.4-7.9%2013.6-9.4v-.2c.4.4%201%208%201%208%20.8%201.3-4.8%205.5-12.4%209.1-2.5%201.2-7.6%203-10%204-4.4%201.4-8.7%204.3-8.3%205.3l-1.5-7.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M117.1%20282c-.4-1.2%203.8-3.6%209.8-5.8l7.8-3.2c8.3-3.7%2014.4-7.9%2013.6-9.4v-.2c.4.4%201%208%201%208%20.8%201.3-4.8%205.5-12.4%209.1-2.5%201.2-7.6%203-10%204-4.4%201.4-8.7%204.3-8.3%205.3l-1.5-7.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M125.8%20254c1.9-.6%203.1-1.5%202.5-3q-.6-1.3-2.8-.6l-2.6%201%202.3%205.8.8-.3.8-.3zm-1.2-2.7.7-.3q1-.3%201.4.8.4.8-.5%201.5l-.6.3zm7.3-2.5-.9.3h-.8l1.3%206.1%204.3-.8-.2-.4v-.4l-2.5.6zm8.4%205.2q1.2-3.3%202.7-6.4h-1l-1.8%204.6-2.4-4.3-1%20.1h-1l3.5%206zm8.8-4.7.4-.9a3%203%200%200%200-1.7-.6q-2.6%200-2.8%201.7c-.2%202.1%203.2%202%203%203.4q-.2%201-1.4.8-1.3%200-1.4-1.2h-.3l-.4%201.1a4%204%200%200%200%201.8.6q2.7.2%203.2-1.7c.2-2-3.3-2.1-3.1-3.4q0-.8%201.3-.7%201%200%201.2.9z'/%3e%3cpath%20fill='%23ad1519'%20d='M277.9%20211.6s-.7.8-1.3.9c-.5%200-1.1-.5-1.1-.5s-.5.5-1%20.6-1.4-.6-1.4-.6l-1%201-1.1-.3c-.1-.1-.3.4-.7.6h-.4l-.6-.4-.7-.7-.5-.3-.4-1v-.5q0-1%202.2-1.7a4%204%200%200%201%202%200q.9-.8%203-.8c2.1%200%202.4.3%203%20.7a6%206%200%200%201%202.9-.7q2.1%200%203%20.8.8-.3%202%200%202.2.6%202.2%201.7v.5l-.4%201-.6.3-.6.7-.6.3s-.3.2-.4%200q-.6-.3-.7-.5c-.1-.2-.6.4-1%20.2s-1-1-1-1-.9.8-1.4.7c-.6-.1-1-.6-1-.6s-.7.6-1.2.5-1.2-.9-1.2-.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20211.6s-.7.8-1.3.9c-.5%200-1.1-.5-1.1-.5s-.5.5-1%20.6-1.4-.6-1.4-.6l-1%201-1.1-.3c-.1-.1-.3.4-.7.6h-.4l-.6-.4-.7-.7-.5-.3-.4-1v-.5q0-1%202.2-1.7a4%204%200%200%201%202%200q.9-.8%203-.8c2.1%200%202.4.3%203%20.7a6%206%200%200%201%202.9-.7q2.1%200%203%20.8.8-.3%202%200%202.2.6%202.2%201.7v.5l-.4%201-.6.3-.6.7-.6.3s-.3.2-.4%200q-.6-.3-.7-.5c-.1-.2-.6.4-1%20.2s-1-1-1-1-.9.8-1.4.7c-.6-.1-1-.6-1-.6s-.7.6-1.2.5-1.2-.9-1.2-.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M276.5%20207.6c0-1%20.6-2%201.3-2s1.3%201%201.3%202-.5%201.8-1.3%201.8q-1.2-.1-1.3-1.9'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M276.5%20207.6c0-1%20.6-2%201.3-2s1.3%201%201.3%202-.5%201.8-1.3%201.8q-1.2-.1-1.3-1.9z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.3%20207.6q0-1.7.5-1.8.6.2.7%201.8c.1%201.6-.3%201.7-.6%201.7q-.6-.2-.6-1.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.3%20207.6q0-1.7.5-1.8.6.2.7%201.8c.1%201.6-.3%201.7-.6%201.7q-.6-.2-.6-1.8z'/%3e%3cpath%20fill='%23c8b100'%20d='m271%20215.3-.5-1a27%2027%200%200%201%2014.8%200l-.6.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.6.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m271%20215.3-.5-1a27%2027%200%200%201%2014.8%200l-.6.8-.3.8a23%2023%200%200%200-6.6-.8c-2.6%200-5.2.3-6.6.8l-.2-.6'/%3e%3cpath%20fill='%23c8b100'%20d='M277.8%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4a24%2024%200%200%200-6.5-.8c-2.5%200-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.8%20217.7c2.4%200%205-.4%205.9-.6q1-.3%201-.8%200-.3-.4-.4a24%2024%200%200%200-6.5-.8c-2.5%200-5%20.3-6.4.8q-.3%200-.4.3%200%20.6%201%20.9c1%20.2%203.5.6%205.8.6z'/%3e%3cpath%20fill='%23fff'%20d='M283.5%20208.4q0-.3.4-.4.5%200%20.5.4t-.5.4a.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M283.5%20208.4q0-.3.4-.4.5%200%20.5.4t-.5.4a.4.4%200%200%201-.4-.4zm-.2-1.4a.4.4%200%200%201%20.4-.4q.4%200%20.4.4t-.4.4a.4.4%200%200%201-.4-.4zm-1.1-1q0-.3.4-.3t.4.4-.4.4a.4.4%200%200%201-.4-.5zm-1.4-.4q0-.3.4-.4.5%200%20.5.4t-.4.4q-.5-.1-.5-.4zm-1.4%200q0-.3.5-.3t.4.4q0%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-width='.3'%20d='m287.8%20211.2.2-1a2.7%202.7%200%200%200-2.7-2.8q-.8%200-1.3.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m283%20209.2.2-.8q-.2-1.8-2.5-2-1%200-1.6.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M288.2%20210q0-.5.4-.5t.4.4-.4.4q-.5%200-.4-.4zm-.2-1.6q0-.3.4-.4a.4.4%200%200%201%20.5.4q0%20.3-.4.4-.5%200-.5-.4zm-1-1.1a.4.4%200%200%201%20.5-.4q.3%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.5-.4zm-1.3-.7q0-.4.5-.4t.4.4q0%20.5-.4.5a.4.4%200%200%201-.5-.5zm-1.4.1q0-.3.5-.4.6%200%20.4.4t-.4.4q-.4-.1-.5-.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m285.3%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.3.6-1.1.7-1.4-.6-1.4-.6-.4.7-1%201c-.5%200-1.2-.4-1.2-.4l-.1.5-.3.1.1.5a27%2027%200%200%201%207.3-.9q4.3%200%207.3%201l.2-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.3%20213.2-.5-.5s-.6.3-1.3.2c-.6%200-.9-1-.9-1s-.7.7-1.3.7-1-.6-1-.6-.7.5-1.3.4-1.2-.8-1.2-.8-.6.8-1.2.8c-.6.1-1-.5-1-.5s-.3.6-1.1.7-1.4-.6-1.4-.6-.4.7-1%201c-.5%200-1.2-.4-1.2-.4l-.1.5-.3.1.1.5a27%2027%200%200%201%207.3-.9q4.3%200%207.3%201l.2-.6z'/%3e%3cpath%20fill='%23fff'%20d='M271.3%20208.4q0-.3.4-.4.5%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M271.3%20208.4q0-.3.4-.4.5%200%20.4.4a.4.4%200%200%201-.4.4.4.4%200%200%201-.4-.4zm.2-1.4q0-.4.4-.4t.5.4q0%20.5-.5.4a.4.4%200%200%201-.4-.4zm1-1q.1-.3.5-.3t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.5zm1.4-.4q0-.3.5-.4.6%200%20.4.4t-.4.4q-.4-.1-.5-.4zm1.4%200q0-.3.5-.3.3%200%20.4.4%200%20.3-.4.4a.4.4%200%200%201-.5-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linecap='round'%20stroke-width='.3'%20d='m267.8%20211.2-.2-1a2.7%202.7%200%200%201%202.7-2.8q.8%200%201.4.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m272.7%20209.2-.3-.8c0-1%201.2-2%202.6-2a3%203%200%200%201%201.5.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M266.6%20210q0-.5.4-.5t.4.4a.4.4%200%200%201-.4.4q-.3%200-.4-.4zm.1-1.6q.1-.3.5-.4.5%200%20.4.4t-.4.4q-.4-.1-.4-.4zm1-1.1q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4.4.4%200%200%201-.5-.4zm1.3-.7q0-.4.5-.4.3%200%20.4.4%200%20.5-.4.5a.4.4%200%200%201-.5-.5zm1.4.1q0-.3.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.9%20210.7h.2v.4q.1%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4c1-.5.7-.7.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6l-.7.2q-1%200-1.4-.8l-1.1.5q-.8%200-1.2-.6l-1%20.4q-.9%200-1.4-.6-.4.6-1.2.6-.6%200-1-.4a2%202%200%200%201-1.3.6q-.6%200-1.1-.5-.4.8-1.4.8-.4%200-.7-.2-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.4.6%201%20.7%201%200%201.1-1v-.3h.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20210.7h.2v.4q.1%201%201%201a1%201%200%200%200%201-.7l.2-.3v.4q.3.8%201.1.8%201%200%201-1v-.1l.4-.4.2.5-.1.4a1%201%200%200%200%201%201q.6%200%20.9-.5l.2-.2v.3q0%20.5.4.7l1-.4c1-.5.7-.7.7-.7v.4s-.5.8-1%201q-.3.4-.8.3-.5%200-.7-.6l-.7.2q-1%200-1.4-.8l-1.1.5q-.8%200-1.2-.6l-1%20.4q-.9%200-1.4-.6-.4.6-1.2.6-.6%200-1-.4a2%202%200%200%201-1.3.6q-.6%200-1.1-.5-.4.8-1.4.8-.4%200-.7-.2-.2.5-.7.6t-.9-.2l-1-1%20.1-.5.8.7q.8.5.9.4.4-.1.4-.7v-.3l.2.2q.3.5.9.5a1%201%200%200%200%201-1v-.9l.4.4v.1q.1%201%201%201t1.1-.9v-.3l.2.3q.4.6%201%20.7%201%200%201.1-1v-.3h.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M277.8%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3q3-1%207.5-1t7.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.8%20213.3q-4.5%200-7.3%201l-.3-.2.1-.3q3-1%207.5-1t7.6%201l.1.3-.3.2a27%2027%200%200%200-7.4-1z'/%3e%3cpath%20fill='%23fff'%20d='M275%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M275%20214.4q0-.4.5-.4a.4.4%200%200%201%20.4.4.4.4%200%200%201-.4.4q-.5%200-.5-.4z'/%3e%3cpath%20fill='%23ad1519'%20d='M277.9%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.9%20214.5h-1q-.2%200-.3-.3l.3-.3h2l.2.3-.3.3h-1'/%3e%3cpath%20fill='%23058e6e'%20d='M273.2%20214.9h-.6a.3.3%200%200%201-.4-.2l.3-.3.6-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M273.2%20214.9h-.6a.3.3%200%200%201-.4-.2l.3-.3.6-.1.7-.1q.3%200%20.4.2a.3.3%200%200%201-.3.4h-.7'/%3e%3cpath%20fill='%23ad1519'%20d='m270.5%20215.3.3-.4h.7l-.4.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m270.5%20215.3.3-.4h.7l-.4.6-.6-.2'/%3e%3cpath%20fill='%23fff'%20d='M279.8%20214.4q0-.4.4-.4t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M279.8%20214.4q0-.4.4-.4t.5.4q0%20.3-.5.4a.4.4%200%200%201-.4-.4z'/%3e%3cpath%20fill='%23058e6e'%20d='M282.5%20214.9h.7l.3-.2-.2-.3-.7-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M282.5%20214.9h.7l.3-.2-.2-.3-.7-.1-.7-.1q-.3%200-.4.2%200%20.3.3.4h.7'/%3e%3cpath%20fill='%23ad1519'%20d='m285.1%20215.4-.2-.5h-.7l.3.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.1%20215.4-.2-.5h-.7l.3.6.6-.1'/%3e%3cpath%20fill='%23ad1519'%20d='M277.8%20217.1a25%2025%200%200%201-6-.6%2025%2025%200%200%201%206-.7q3.6%200%206.1.7-2.5.6-6%20.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M277.8%20217.1a25%2025%200%200%201-6-.6%2025%2025%200%200%201%206-.7q3.6%200%206.1.7-2.5.6-6%20.6z'/%3e%3cpath%20fill='%23c8b100'%20d='m285.2%20212-.1-.3q-.3%200-.4.2l.1.4q.3%200%20.4-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m285.2%20212-.1-.3q-.3%200-.4.2l.1.4q.3%200%20.4-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M280.6%20211.2q0-.3-.3-.4l-.2.3q0%20.3.2.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M280.6%20211.2q0-.3-.3-.4l-.2.3q0%20.3.2.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M275.2%20211.2q0-.3.2-.4l.3.3-.2.4q-.3%200-.3-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M275.2%20211.2q0-.3.2-.4l.3.3-.2.4q-.3%200-.3-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m270.5%20212%20.1-.3q.3%200%20.4.2l-.1.4q-.3%200-.4-.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m270.5%20212%20.1-.3q.3%200%20.4.2l-.1.4q-.3%200-.4-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m277.8%20208.5-.8.5.6%201.3.2.1.3-.1.6-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m277.8%20208.5-.8.5.6%201.3.2.1.3-.1.6-1.3-.9-.5'/%3e%3cpath%20fill='%23c8b100'%20d='m276%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m276%20210.5.4.5%201.3-.4.1-.2-.1-.2-1.3-.3-.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m279.6%20210.5-.3.5-1.3-.4-.1-.2v-.2l1.4-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m279.6%20210.5-.3.5-1.3-.4-.1-.2v-.2l1.4-.3.4.6'/%3e%3cpath%20fill='%23c8b100'%20d='m272.5%20209-.7.7.9%201%20.2.1.2-.1.2-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m272.5%20209-.7.7.9%201%20.2.1.2-.1.2-1.3-.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m271.1%20211.2.5.5%201.2-.6v-.2l-.1-.2-1.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m271.1%20211.2.5.5%201.2-.6v-.2l-.1-.2-1.3-.1-.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m274.7%20210.5-.3.6h-1.3l-.2-.2.1-.3%201.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m274.7%20210.5-.3.6h-1.3l-.2-.2.1-.3%201.2-.6.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M269.8%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M269.8%20211.4v.6l-1.4.2-.2-.1v-.2l1-.9.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M272.4%20210.9q0-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M272.4%20210.9q0-.5.5-.5l.5.5-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m283.2%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m283.2%20209%20.7.7-.9%201-.2.1-.1-.1-.3-1.3.8-.3'/%3e%3cpath%20fill='%23c8b100'%20d='m284.6%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m284.6%20211.2-.5.5-1.2-.6v-.2l.1-.2%201.3-.1.3.6'/%3e%3cpath%20fill='%23c8b100'%20d='m281%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m281%20210.5.3.6h1.3l.2-.2-.1-.3-1.2-.6-.5.5'/%3e%3cpath%20fill='%23c8b100'%20d='M285.7%20211.4v.6l1.4.2.2-.1v-.2l-1-.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M285.7%20211.4v.6l1.4.2.2-.1v-.2l-1-.9-.6.4'/%3e%3cpath%20fill='%23c8b100'%20d='M277.4%20210.4q0-.3.5-.4.4%200%20.4.4t-.4.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M277.4%20210.4q0-.3.5-.4.4%200%20.4.4t-.4.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M282.3%20210.9q.1-.5.5-.5t.5.5q0%20.6-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M282.3%20210.9q.1-.5.5-.5t.5.5q0%20.6-.5.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M277%20205.4q.1-.8.8-.8%201%200%201%20.8c0%20.8-.5.8-1%20.8a1%201%200%200%201-.8-.8'/%3e%3cpath%20fill='%23c8b100'%20d='M278.5%20205.1v.6H277v-.6h.4v-1.3h-.5v-.5h.5v-.6h.6v.6h.6v.6h-.6v1.2h.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M278.5%20205.1v.6H277v-.6h.4v-1.3h-.5v-.5h.5v-.6h.6v.6h.6v.6h-.6v1.2h.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M279%20205.1v.6h-2.4v-.6h1v-1.3h-.7v-.5h.6v-.6h.6v.6h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M278.1%20204.6q.6.1.6.8t-.9.8a1%201%200%200%201-.8-.8q0-.6.6-.8'/%3e%3cpath%20fill='%23c8b100'%20d='m268%20212.2-.6-.7-.7-.3q0-.2.6-.3.3%200%20.4.2v-.2s.3%200%20.4.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m268%20212.2-.6-.7-.7-.3q0-.2.6-.3.3%200%20.4.2v-.2s.3%200%20.4.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M268%20212q.3-.3.5%200%20.4.2.1.5l-.5-.1q-.2-.2%200-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M268%20212q.3-.3.5%200%20.4.2.1.5l-.5-.1q-.2-.2%200-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='m287.5%20212.2.6-.7c.2-.2.7-.3.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m287.5%20212.2.6-.7c.2-.2.7-.3.7-.3q0-.2-.6-.3l-.4.2v-.2s-.3%200-.4.3v.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M287.5%20212q-.2-.3-.5%200t-.1.5l.5-.1q.3-.2.1-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M287.5%20212q-.2-.3-.5%200t-.1.5l.5-.1q.3-.2.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M267.2%20223h21.4v-5.5h-21.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M267.2%20223h21.4v-5.5h-21.4z'/%3e%3cpath%20fill='%23c8b100'%20d='M286.3%20226.8h-16.9q1-.4%201-1.2%200-1-1-1.3h17-.1q-1%20.3-1%201.3%200%20.8%201%201.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M286.3%20226.8h-16.9q1-.4%201-1.2%200-1-1-1.3h17-.1q-1%20.3-1%201.3%200%20.8%201%201.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20226.8h16q1%200%201%20.7t-1%20.8h-16q-1-.1-1-.8.1-1%201-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20226.8h16q1%200%201%20.7t-1%20.8h-16q-1-.1-1-.8.1-1%201-.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20223h16q1%20.1%201%20.7t-1%20.6h-16q-1%200-1-.6t1-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20223h16q1%20.1%201%20.7t-1%20.6h-16q-1%200-1-.6t1-.6z'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20317.4q2.1%200%203.7-.8a8%208%200%200%201%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.8a8%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.8v2.4a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.8q-2.2%200-3.6.8-1.5.8-3.8.9a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v-2.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20317.4q2.1%200%203.7-.8a8%208%200%200%201%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.8a8%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.8v2.4a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.8q-2.2%200-3.6.8-1.5.8-3.8.9a8%208%200%200%201-3.7-.9%208%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.9v-2.4z'/%3e%3cpath%20fill='%23ccc'%20d='M263%20319.8q2.1%200%203.7-.9c1.6-.9%202.3-.8%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8q2.3%200%203.7.8%201.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9a7%207%200%200%201-3.7-.9q-1.5-.6-3.8-.7a8%208%200%200%200-3.7.7%208%208%200%200%201-3.8.9v-2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20319.8q2.1%200%203.7-.9c1.6-.9%202.3-.8%203.7-.8q2.2%200%203.8.8c1.6.8%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8q2.3%200%203.7.8%201.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9a7%207%200%200%201-3.7-.9q-1.5-.6-3.8-.7a8%208%200%200%200-3.7.7%208%208%200%200%201-3.8.9v-2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20322q2.1%200%203.7-.8%201.6-.6%203.7-.7%202.2%200%203.8.7c1.6.7%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.9-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8V322'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20322q2.1%200%203.7-.8%201.6-.6%203.7-.7%202.2%200%203.8.7c1.6.7%202.3.9%203.7.9a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.8%208%208%200%200%201%203.7.8q1.6.8%203.8.9v2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.9-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8V322'/%3e%3cpath%20fill='%23ccc'%20d='M263%20326.7a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.9a8%208%200%200%201%203.6-.7q2.3%200%203.7.8a8%208%200%200%200%203.8.8v-2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8v2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20326.7a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8q2.3%200%203.8-.9a8%208%200%200%201%203.6-.7q2.3%200%203.7.8a8%208%200%200%200%203.8.8v-2.3a8%208%200%200%201-3.8-.9%208%208%200%200%200-3.7-.7q-2.2%200-3.6.7-1.5.8-3.8.9t-3.7-.8a8%208%200%200%200-3.8-.8%208%208%200%200%200-3.7.8q-1.5.8-3.8.8v2.3'/%3e%3cpath%20fill='%23005bbf'%20d='M263%20329a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.7q2.3%200%203.7.8%201.6.8%203.8.8v-2.3a8%208%200%200%201-3.8-.8%208%208%200%200%200-3.7-.8%208%208%200%200%200-3.6.7%208%208%200%200%201-3.8.9q-2.2%200-3.7-.8t-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.8-3.8.8v2.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M263%20329a8%208%200%200%200%203.7-.8q1.6-.8%203.7-.8%202.2%200%203.8.8c1.6.8%202.3.8%203.7.8a8%208%200%200%200%203.8-.9%208%208%200%200%201%203.6-.7q2.3%200%203.7.8%201.6.8%203.8.8v-2.3a8%208%200%200%201-3.8-.8%208%208%200%200%200-3.7-.8%208%208%200%200%200-3.6.7%208%208%200%200%201-3.8.9q-2.2%200-3.7-.8t-3.8-.8q-2.1%200-3.7.8c-1.6.8-2.3.8-3.8.8v2.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m286.3%20308-.1.5c0%201.5%201.2%202.6%202.7%202.6h-22c1.5%200%202.7-1.2%202.7-2.6l-.1-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='m286.3%20308-.1.5c0%201.5%201.2%202.6%202.7%202.6h-22c1.5%200%202.7-1.2%202.7-2.6l-.1-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M269.9%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-1%200-1-.8.1-.6%201-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M269.9%20306.5h16q1%200%201%20.8%200%20.6-1%20.7h-16q-1%200-1-.8.1-.6%201-.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M266.9%20316.7h22V311h-22z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M266.9%20316.7h22V311h-22z'/%3e%3cpath%20fill='%23ad1519'%20d='M290.6%20286.7c2.1%201.2%203.6%202.5%203.4%203.2q-.2.8-1.8%201.6c-1.6%201.1-2.5%203-1.8%204a5.5%205.5%200%200%201%20.2-8.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M290.6%20286.7c2.1%201.2%203.6%202.5%203.4%203.2q-.2.8-1.8%201.6c-1.6%201.1-2.5%203-1.8%204a5.5%205.5%200%200%201%20.2-8.8z'/%3e%3cpath%20fill='%23ccc'%20d='M270.1%20305.6h15.6V229h-15.6v76.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M281.4%20229.1v76.3m1.8-76.3v76.3m-13%20.2h15.5V229h-15.6v76.5z'/%3e%3cpath%20fill='%23ad1519'%20d='M254.2%20257.7a50%2050%200%200%201%2023.3-2c9.3%201.6%2016.4%205.3%2015.9%208.4v.2l3.5-8.2c.6-3.3-7.3-7.5-17.6-9.2a54%2054%200%200%200-9.2-.7c-6.7%200-12.4.8-15.9%202.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M254.2%20257.7a50%2050%200%200%201%2023.3-2c9.3%201.6%2016.4%205.3%2015.9%208.4v.2l3.5-8.2c.6-3.3-7.3-7.5-17.6-9.2a54%2054%200%200%200-9.2-.7c-6.7%200-12.4.8-15.9%202.1v9.4'/%3e%3cpath%20fill='%23ad1519'%20d='M285.7%20267.3c4.4-.3%207.3-1.4%207.7-3.2q.2-2.2-3.8-4.5l-3.9.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M285.7%20267.3c4.4-.3%207.3-1.4%207.7-3.2q.2-2.2-3.8-4.5l-3.9.3v7.4'/%3e%3cpath%20fill='%23ad1519'%20d='M270%20261.5a13%2013%200%200%200-5.7%201.9v.2c-.5%201%201.8%203%205.8%205.4v-7.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M270%20261.5a13%2013%200%200%200-5.7%201.9v.2c-.5%201%201.8%203%205.8%205.4v-7.5'/%3e%3cpath%20fill='%23ad1519'%20d='M295.4%20282c.4-1.2-3.8-3.6-9.7-5.8-2.8-1-5-2-7.8-3.2-8.3-3.7-14.4-7.9-13.6-9.4v-.2c-.4.4-1%208-1%208-.8%201.3%204.8%205.5%2012.4%209.1%202.4%201.2%207.6%203%2010%204%204.3%201.4%208.7%204.3%208.3%205.3l1.4-7.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M295.4%20282c.4-1.2-3.8-3.6-9.7-5.8-2.8-1-5-2-7.8-3.2-8.3-3.7-14.4-7.9-13.6-9.4v-.2c-.4.4-1%208-1%208-.8%201.3%204.8%205.5%2012.4%209.1%202.4%201.2%207.6%203%2010%204%204.3%201.4%208.7%204.3%208.3%205.3l1.4-7.7z'/%3e%3cpath%20fill='%23c8b100'%20d='m263.9%20254.4%202.1-6.6h-.5l-.5.1-1.4%204.8q-1.6-2-2.7-4.1l-1%20.2h-1l4%205.7h.5zm6-6.6h-1.8v6.2h4.2v-.7h-2.6zm6.8%201%202%20.3v-.7l-5.8-.5v.8h2l-.4%205.6h1.6l.5-5.4m2.4%206%20.8.2.8.2.7-2.9.6%201.2.8%202.1%201%20.2q.6%200%201%20.3l-.3-.7-1.3-2.9q1.6%200%202.1-1.2.3-.8-.7-1.5-.8-.4-1.7-.5l-2.4-.5zm3-5.2c.7.2%201.5.3%201.5%201v.5q-.5%201.3-2%20.9zm8%207-.2%202%20.8.5.9.5.5-7-.7-.3-6.1%203.8.5.3.4.2%201.7-1.2%202.3%201.3zm-1.7-1.5%202-1.4-.2%202.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M182.2%20192.4c0-1%201-2%202-2s2.2%201%202.2%202c0%201.1-1%202-2.1%202a2%202%200%200%201-2.1-2z'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.3'%20d='M205.7%20175.4c6.3%200%2012%201%2015.7%202.4a32%2032%200%200%200%2014.6%202.3c2.7%200%206.5.8%2010.3%202.4a27%2027%200%200%201%207.4%204.7l-1.5%201.4-.4%203.8-4.1%204.7-2%201.8-5%203.9-2.5.2-.7%202.1-31.6-3.7-31.7%203.7-.8-2.1-2.5-.2-4.9-4-2-1.7-4.1-4.7-.5-3.8-1.5-1.4a28%2028%200%200%201%207.5-4.7%2026%2026%200%200%201%2010.2-2.4q3%20.3%206.6-.2a30%2030%200%200%200%208-2q5.6-2.4%2015.5-2.5z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.2%20217.1c-11.8%200-22.4-1.4-29.9-3.6a1%201%200%200%201-.8-1.2q0-.8.8-1.2a109%20109%200%200%201%2029.9-3.6c11.7%200%2022.3%201.4%2029.8%203.6a1.3%201.3%200%200%201%200%202.4c-7.5%202.2-18%203.6-29.8%203.6'/%3e%3cpath%20fill='%23ad1519'%20d='M206.1%20215.6c-10.6%200-20.2-1.2-27.5-3.1%207.3-2%2016.9-3%2027.5-3.1a115%20115%200%200%201%2027.6%203c-7.3%202-17%203.2-27.6%203.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M206.9%20215.7v-6.3m-1.7%206.3v-6.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M203.6%20215.7v-6.3m-1.6%206.3v-6.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M200.6%20215.7v-6.3m-2.8%205.9v-5.7m1.3%205.8v-6m-3.8%205.6v-5.2m1.3%205.4v-5.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M192%20214.8V210m1%204.7V210m1.2%205v-5m-3.4%204.7v-4.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M189.7%20214.5v-4.2m-1.2%204.1v-4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M186%20214v-3m1.3%203.2v-3.5m-2.5%203.1V211'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.7'%20d='M183.7%20213.6v-2.3m-1.3%202v-1.8m-1.2%201.6v-1.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.9'%20d='M179.8%20212.8v-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M213.7%20215.3v-5.8m-2.9%206v-6.1m-2.1%206.2v-6.3'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20207.4a108%20108%200%200%200-30%203.9c.6-.3.5-1-.3-3-1-2.5-2.4-2.4-2.4-2.4%208.3-2.5%2020-4%2032.8-4a123%20123%200%200%201%2033%204s-1.5-.1-2.5%202.3q-1.2%202.8-.2%203c-7.5-2.2-18.4-3.7-30.3-3.7'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20201.9c-12.9%200-24.5%201.5-32.8%204a1%201%200%200%201-1.3-.6%201%201%200%200%201%20.7-1.3%20121%20121%200%200%201%2033.4-4.2c13.2%200%2025.2%201.7%2033.5%204.2q1%20.4.7%201.3t-1.3.6c-8.4-2.5-20-4-32.9-4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.4'%20d='M206.1%20215.6c-10.6%200-20.2-1.2-27.5-3.1%207.3-2%2016.9-3%2027.5-3.1a115%20115%200%200%201%2027.6%203c-7.3%202-17%203.2-27.6%203.2z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M197%20204.8q0-.9%201-1%20.9.1%201%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20205.6H203a1%201%200%200%201%200-2h6.4q.9.1%201%201%200%201.2-1%201h-3.2'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.4'%20d='m190.3%20206.5-2.3.2q-.9%200-1.2-.8a1%201%200%200%201%201-1.1l2.2-.3%202.4-.3q.9%200%201.1.9%200%20.9-.9%201l-2.3.4'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M181%20206.7q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='m174%20208.5%201.2-1.6%203.3.4-2.6%202-1.8-.8'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.4'%20d='m222%20206.5%202.3.2q.9%200%201.1-.8a1%201%200%200%200-.9-1.1l-2.2-.3-2.4-.3a1%201%200%200%200-1.1.9q0%20.9.9%201l2.3.4'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M213.3%20204.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1m15.8%201.9q.1-1%201-1t1.1%201q0%20.9-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='m238.2%20208.5-1.1-1.6-3.3.4%202.6%202%201.8-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M177.3%20212.8c7.4-2.1%2017.6-3.4%2028.8-3.4%2011.3%200%2021.4%201.3%2028.9%203.4'/%3e%3cpath%20fill='%23c8b100'%20d='m182.3%20183.8%201.4%201%202-3.2a7%207%200%200%201-3.6-7.2c.2-4.1%205.2-7.6%2011.7-7.6q5%20.1%208.5%202.4l.2-1.8a17%2017%200%200%200-8.7-2.1c-7.4%200-13.2%204.1-13.5%209.1a9%209%200%200%200%203%207.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='m182.3%20183.8%201.4%201%202-3.2a7%207%200%200%201-3.6-7.2c.2-4.1%205.2-7.6%2011.7-7.6q5%20.1%208.5%202.4l.2-1.8a17%2017%200%200%200-8.7-2.1c-7.4%200-13.2%204.1-13.5%209.1a9%209%200%200%200%203%207.6l-1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M182.4%20183.8a9%209%200%200%201-4-7.3q.2-5%205.3-8a9%209%200%200%200-3.4%206.8%209%209%200%200%200%203%206.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M182.4%20183.8a9%209%200%200%201-4-7.3q.2-5%205.3-8a9%209%200%200%200-3.4%206.8%209%209%200%200%200%203%206.7l-.9%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M160.1%20187.1a9%209%200%200%201-2.3-5.9q0-2%201-3.8c2-4.2%208.4-7.2%2016-7.2q3%200%205.9.6l-1%201.4a26%2026%200%200%200-4.9-.4c-7%200-12.8%202.7-14.5%206.3a7%207%200%200%200-.7%203.1%207%207%200%200%200%202.7%205.6l-2.6%204.1-1.3-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M160.1%20187.1a9%209%200%200%201-2.3-5.9q0-2%201-3.8c2-4.2%208.4-7.2%2016-7.2q3%200%205.9.6l-1%201.4a26%2026%200%200%200-4.9-.4c-7%200-12.8%202.7-14.5%206.3a7%207%200%200%200-.7%203.1%207%207%200%200%200%202.7%205.6l-2.6%204.1-1.3-1z'/%3e%3cpath%20fill='%23c8b100'%20d='M162.7%20173.3a11%2011%200%200%200-4%204.1%209%209%200%200%200-.9%203.8q.1%203.5%202.3%205.9l-1.5%202.5a10%2010%200%200%201-2.3-6.5c0-4%202.5-7.5%206.4-9.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M162.7%20173.3a11%2011%200%200%200-4%204.1%209%209%200%200%200-.9%203.8q.1%203.5%202.3%205.9l-1.5%202.5a10%2010%200%200%201-2.3-6.5c0-4%202.5-7.5%206.4-9.8z'/%3e%3cpath%20fill='%23c8b100'%20d='M206%20164.4c1.7%200%203.2%201.1%203.5%202.6q.4%202.1.4%204.5v1.1c.1%203.3.6%206.3%201.3%208.1l-5.2%205-5.2-5c.7-1.8%201.2-4.8%201.3-8.1v-1.1q0-2.4.4-4.5c.3-1.5%201.8-2.6%203.5-2.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20164.4c1.7%200%203.2%201.1%203.5%202.6q.4%202.1.4%204.5v1.1c.1%203.3.6%206.3%201.3%208.1l-5.2%205-5.2-5c.7-1.8%201.2-4.8%201.3-8.1v-1.1q0-2.4.4-4.5c.3-1.5%201.8-2.6%203.5-2.6z'/%3e%3cpath%20fill='%23c8b100'%20d='M206%20166q1.6.1%201.8%201.4.3%201.8.4%204.2v1q.2%205%201.2%207.7l-3.4%203.2-3.4-3.2q1-2.7%201.2-7.7v-1l.4-4.2a2%202%200%200%201%201.8-1.4'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M206%20166q1.6.1%201.8%201.4.3%201.8.4%204.2v1q.2%205%201.2%207.7l-3.4%203.2-3.4-3.2q1-2.7%201.2-7.7v-1l.4-4.2a2%202%200%200%201%201.8-1.4z'/%3e%3cpath%20fill='%23c8b100'%20d='m229.7%20183.8-1.3%201-2-3.2a7%207%200%200%200%203.6-6.3v-.9c-.2-4.1-5.3-7.6-11.7-7.6a15%2015%200%200%200-8.5%202.4l-.2-1.8a17%2017%200%200%201%208.7-2.1c7.4%200%2013.2%204.1%2013.4%209.1a9%209%200%200%201-3%207.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='m229.7%20183.8-1.3%201-2-3.2a7%207%200%200%200%203.6-6.3v-.9c-.2-4.1-5.3-7.6-11.7-7.6a15%2015%200%200%200-8.5%202.4l-.2-1.8a17%2017%200%200%201%208.7-2.1c7.4%200%2013.2%204.1%2013.4%209.1a9%209%200%200%201-3%207.6l1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M229.6%20183.8a9%209%200%200%200%204.1-7.3c0-3.2-2.1-6.1-5.3-8a9%209%200%200%201%203.4%206.8%209%209%200%200%201-3.2%206.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M229.6%20183.8a9%209%200%200%200%204.1-7.3c0-3.2-2.1-6.1-5.3-8a9%209%200%200%201%203.4%206.8%209%209%200%200%201-3.2%206.7l1%201.8'/%3e%3cpath%20fill='%23c8b100'%20d='M252%20187.1a9%209%200%200%200%202.2-5.9%209%209%200%200%200-.9-3.8c-2-4.2-8.4-7.2-16-7.2a29%2029%200%200%200-6%20.6l1%201.4a25%2025%200%200%201%205-.4c7%200%2012.8%202.7%2014.4%206.3q.7%201.5.7%203.1a7%207%200%200%201-2.6%205.6l2.5%204.1%201.3-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M252%20187.1a9%209%200%200%200%202.2-5.9%209%209%200%200%200-.9-3.8c-2-4.2-8.4-7.2-16-7.2a29%2029%200%200%200-6%20.6l1%201.4a25%2025%200%200%201%205-.4c7%200%2012.8%202.7%2014.4%206.3q.7%201.5.7%203.1a7%207%200%200%201-2.6%205.6l2.5%204.1%201.3-1z'/%3e%3cpath%20fill='%23c8b100'%20d='M249.3%20173.3a11%2011%200%200%201%204%204.1%209%209%200%200%201%20.9%203.8%209%209%200%200%201-2.3%205.9l1.6%202.5a10%2010%200%200%200%202.3-6.5c0-4-2.6-7.5-6.5-9.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M249.3%20173.3a11%2011%200%200%201%204%204.1%209%209%200%200%201%20.9%203.8%209%209%200%200%201-2.3%205.9l1.6%202.5a10%2010%200%200%200%202.3-6.5c0-4-2.6-7.5-6.5-9.8z'/%3e%3cpath%20fill='%23fff'%20d='M204.2%20181.4q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M204.2%20181.4q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M204.2%20178q.1-1.7%201.8-1.8c1.7-.1%201.9.8%201.9%201.8s-.9%201.7-1.9%201.7a2%202%200%200%201-1.8-1.7m.4-3.7q.1-1.2%201.4-1.3%201.4.1%201.5%201.3-.1%201.3-1.5%201.4c-1.4.1-1.4-.6-1.4-1.4m.4-3.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1m.2-2.8q.1-.8.8-.8t.9.8q0%20.7-.9.8a1%201%200%200%201-.8-.8'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m206.2%20191.8%201.2.2a4.6%204.6%200%200%200%204.5%206%205%205%200%200%200%204.4-3c.1%200%20.5-1.7.7-1.7s.1%201.8.2%201.7c.3%202.3%202.4%203.8%204.7%203.8a4.6%204.6%200%200%200%204.7-5l1.5-1.5.7%202a4%204%200%200%200-.4%201.9%204.4%204.4%200%200%200%204.5%204.2q2.5%200%203.8-1.9l.9-1.2v1.5c0%201.5.6%202.8%202%203%200%200%201.7.1%204-1.6%202.1-1.7%203.3-3.1%203.3-3.1l.2%201.7s-1.8%202.8-3.8%204c-1%20.6-2.7%201.3-4%201q-2.1-.5-3-2.6a7%207%200%200%201-3.3%201%207%207%200%200%201-6.1-3.7%207%207%200%200%201-10.4-.3%207%207%200%200%201-4.6%201.8%207%207%200%200%201-5.7-3%207%207%200%200%201-5.7%203%207%207%200%200%201-4.7-1.8%207%207%200%200%201-10.4.3%207%207%200%200%201-6%203.7%207%207%200%200%201-3.4-1q-.8%202.1-3%202.7c-1.2.2-2.9-.5-4-1.1-2-1.2-3.8-4-3.8-4l.2-1.7s1.2%201.4%203.4%203.1%203.9%201.6%203.9%201.6c1.4-.2%202-1.5%202-3v-1.5l1%201.2a5%205%200%200%200%203.7%202c2.5%200%204.5-2%204.5-4.3a4%204%200%200%200-.4-2l.8-1.9%201.5%201.5v.6c0%202.4%202%204.4%204.6%204.4%202.4%200%204.4-1.5%204.7-3.8%200%200%200-1.6.2-1.7s.6%201.7.7%201.6a5%205%200%200%200%204.5%203.1%204.6%204.6%200%200%200%204.5-6l1.2-.2'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M238.6%20197.7q.4-1.4-.6-1.8-.9-.2-1.5%201.1-.4%201.4.6%201.8.9.2%201.5-1.1m-20.5-4c0-.8-.3-1.6-1-1.6q-.8%200-1.2%201.4%200%201.3.9%201.6%201-.1%201.3-1.4m-23.9%200c0-.8.4-1.6%201-1.6q1%200%201.2%201.4%200%201.3-.9%201.6-1-.1-1.2-1.4m-20.6%204q-.3-1.4.6-1.8%201-.2%201.5%201.1t-.5%201.8q-1%20.2-1.6-1.1'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M182.7%20184a5%205%200%200%201%202.2%202.9s0-.3.6-.6%201-.3%201-.3l-.1%201.3-.3%202.2-.7%201.6a2%202%200%200%200-1.5-.4%202%202%200%200%200-1.2.9s-.7-.6-1.2-1.3l-1.1-2-.7-1.1s.5-.2%201.1%200q.9.1.8.2a5%205%200%200%201%201-3.4m.4%209.8-.6-1q0-.7.3-1.2s-.9-.5-1.8-.7c-.7-.2-2-.2-2.3-.2h-1l.2.5.5.7a5%205%200%200%200-3%202%205%205%200%200%200%203.5%201l-.2.8v.6l1-.4c.3-.1%201.5-.5%202-1%20.8-.4%201.5-1.1%201.5-1.1m2.7-.5.2-1.1-.6-1%201.4-1.3%202-.9%201.1-.4v.6l-.2.8a5%205%200%200%201%203.4%201%205%205%200%200%201-2.9%202l.7%201.2h-1c-.4%200-1.6%200-2.3-.2l-1.8-.7'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M182.2%20192.4c0-1%201-2%202-2s2.2%201%202.2%202c0%201.1-1%202-2.1%202a2%202%200%200%201-2.1-2'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M206.1%20180.8a6%206%200%200%201%201.9%203.7s.2-.3.9-.5q1.1-.3%201.2-.2l-.5%201.4-.8%202.4-1%201.7a2%202%200%200%200-1.7-.7q-1%200-1.6.7-.2-.1-1-1.7l-.8-2.4-.5-1.4%201.2.2q1%20.4.9.5.2-2.2%201.8-3.7'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M204.6%20191.8a2%202%200%200%201-.5-1.2q0-.8.4-1.3s-.8-.7-1.8-1c-.7-.4-2-.7-2.5-.7l-1.2-.2.2.6.4.9a6%206%200%200%200-3.7%201.7q1.6%201.5%203.7%201.6l-.4%201-.2.6%201.2-.2c.4-.1%201.8-.4%202.5-.7%201-.4%201.9-1%201.9-1m3%200a2%202%200%200%200%20.1-2.6s.9-.7%201.8-1a8%208%200%200%201%202.5-.7l1.2-.3-.1.7-.4.9q2.2.2%203.6%201.7a6%206%200%200%201-3.6%201.6l.5%201.6-1.2-.2-2.5-.7c-1-.4-1.8-1-1.8-1m22-8a5%205%200%200%200-2.2%203l-.7-.6-1-.3.2%201.3c0%20.3%200%201.3.3%202.2q.4%201.6.6%201.6a2%202%200%200%201%201.5-.4q.9.2%201.3.9l1.1-1.3q1-1.4%201.1-2l.7-1.1s-.4-.2-1%200l-1%20.2a5%205%200%200%200-1-3.4m-.3%209.8q.5-.4.6-1l-.2-1.2s.8-.5%201.7-.7c.7-.2%202-.2%202.3-.2h1.1l-.3.5-.4.7a5%205%200%200%201%202.9%202%205%205%200%200%201-3.5%201l.2.8v.6l-1-.4c-.3-.1-1.4-.5-2-1-.8-.4-1.4-1.1-1.4-1.1m-2.8-.5-.2-1.1q0-.7.6-1s-.6-.8-1.4-1.3c-.6-.4-1.7-.8-2-.9l-1-.4v.6l.2.8a5%205%200%200%200-3.5%201q1%201.4%203%202l-.5.7-.3.5h1c.4%200%201.7%200%202.3-.2l1.8-.7'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M226%20192.4c0-1%201-2%202-2s2.1%201%202.1%202a2%202%200%200%201-2%202%202%202%200%200%201-2.1-2m23.2%204.4c-.4-.5-1.4-.4-2.2.2q-1.2%201.2-.5%202.2%201%20.8%202.3-.3c.7-.6%201-1.6.5-2'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m246.3%20198%20.7-1c.7-.6%201.8-.7%202.3-.2l.1.2s1-2%202.3-2.6%203.4-.5%203.4-.5a3%203%200%200%200-2.9-2.8%203%203%200%200%200-2.4%201l-.2-1s-1.3.3-1.9%201.8%200%203.6%200%203.6-.3-.9-.7-1.5a8%208%200%200%200-2.4-1.6l-1.3-.7-.1.5v.8a8%208%200%200%200-3.7.5%205%205%200%200%200%202.5%202.2l-.8.7-.4.5%201.3.2%202.5.2%201.7-.2m-80.3%200q0-.6-.7-1c-.7-.7-1.7-.8-2.2-.3l-.2.3s-1-2-2.3-2.7-3.3-.5-3.3-.5a3%203%200%200%201%202.8-2.8q1.6%200%202.4%201l.2-1s1.3.3%202%201.8c.5%201.5-.1%203.6-.1%203.6s.3-.9.8-1.5a8%208%200%200%201%202.4-1.6l1.3-.7v1.3a8%208%200%200%201%203.7.5%205%205%200%200%201-2.5%202.2l.8.7.4.5-1.2.2-2.6.2-1.7-.2'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.4'%20d='M163%20196.8q1-.7%202.4.3%201.2%201%20.4%202c-.5.6-1.5.5-2.2-.2s-1-1.6-.5-2m41-6.3q.2-1.8%202-2c1.8-.2%202.1.9%202.1%202%200%201-1%202-2%202a2%202%200%200%201-2.1-2'/%3e%3cpath%20fill='%23005bbf'%20stroke='%23000'%20stroke-width='.3'%20d='M201.8%20160.6c0-2.2%201.9-4%204.3-4s4.2%201.8%204.2%204-1.9%204-4.3%204a4%204%200%200%201-4.2-4'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.3'%20d='M205%20149.3v2.2h-2.4v2.2h2.3v6.3H202l-.2.6q0%20.9.3%201.6h7.9q.3-.7.3-1.6l-.2-.6h-2.8v-6.3h2.3v-2.2h-2.3v-2.2z'/%3e%3cpath%20fill='%23ccc'%20d='M206.5%20330.6a82%2082%200%200%201-35.5-8.2%2023%2023%200%200%201-12.8-20.4v-32h96.4v32a23%2023%200%200%201-12.8%2020.4%2081%2081%200%200%201-35.3%208.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.5%20330.6a82%2082%200%200%201-35.5-8.2%2023%2023%200%200%201-12.8-20.4v-32h96.4v32a23%2023%200%200%201-12.8%2020.4%2081%2081%200%200%201-35.3%208.2z'/%3e%3cpath%20fill='%23ccc'%20d='M206.3%20270h48.3v-53.5h-48.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20270h48.3v-53.5h-48.3z'/%3e%3cpath%20fill='%23ad1519'%20d='M206.3%20302c0%2012.6-10.7%2022.9-24%2022.9s-24.2-10.3-24.2-23v-32h48.2v32'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M168.6%20320.9c1.5.8%203.6%202%205.8%202.6l-.1-54.7h-5.7z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.5'%20d='M158%20301.6a24%2024%200%200%200%205.5%2015v-47.5h-5.4z'/%3e%3cpath%20fill='%23c7b500'%20stroke='%23000'%20stroke-width='.5'%20d='M179.4%20324.7a27%2027%200%200%200%205.6%200v-55.9h-5.6v56z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M190%20323.5a19%2019%200%200%200%205.8-2.5v-52.2H190z'/%3e%3cpath%20fill='%23ad1519'%20d='M158.1%20270h48.2v-53.5H158z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M158.1%20270h48.2v-53.5H158z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.5'%20d='M201%20316c2.4-2%204.6-6.8%205.4-12.2l.1-35H201l.1%2047.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20302c0%2012.6-10.7%2022.9-24%2022.9s-24.2-10.3-24.2-23v-32h48.2v32'/%3e%3cpath%20fill='%23ad1519'%20d='M254.6%20270v32c0%2012.6-10.8%2022.9-24.1%2022.9s-24.2-10.3-24.2-23v-32h48.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.5'%20d='M254.6%20270v32c0%2012.6-10.8%2022.9-24.1%2022.9s-24.2-10.3-24.2-23v-32h48.3'/%3e%3cpath%20fill='%23c8b100'%20d='m215.1%20294.1.1.5q-.1%201-1.1%201a1%201%200%200%201-1.1-1v-.5h-1.5a2.5%202.5%200%200%200%201.8%202.9v3.9h1.6V297a3%203%200%200%200%201.7-1.6h4.4v-1.2zm21.8%200v1.2h-4l-.3.6%204.6%205.2-1.2%201-4.6-5.3-.2.1v8.7h-1.6V297h-.2l-4.8%205.2-1.2-1%204.7-5.3-.2-.4h-4V294h13zm2.6%200v1.2h4.4q.5%201.2%201.7%201.6v3.9h1.6V297a3%203%200%200%200%201.8-2.4v-.5h-1.6l.1.5q-.1%201-1%201-1.1%200-1.2-1l.1-.5zm-6.7%2022.1a16%2016%200%200%200%203.7-1l.8%201.4a18%2018%200%200%201-4.3%201.2%203%203%200%200%201-2.6%202%203%203%200%200%201-2.5-2%2018%2018%200%200%201-4.6-1.2l.8-1.4q2%20.8%204%201a3%203%200%200%201%201.5-1.3v-6.7h1.6v6.7q1.1.3%201.6%201.4zm-11-2.2-.8%201.4a17%2017%200%200%201-3.6-3.1q-1.4.3-2.5-.5a2.4%202.4%200%200%201-.3-3.5l.1-.1a15%2015%200%200%201-1.3-4.8h1.7a13%2013%200%200%200%201%204q.8%200%201.4.2l4.1-4.5%201.3%201-4.1%204.5q.8%201.5-.1%202.8a15%2015%200%200%200%203.1%202.6m-6-4.8q.6-.7%201.5%200c.9.7.5%201%20.1%201.4a1%201%200%200%201-1.6.1%201%201%200%200%201%200-1.5m-2.2-4.5-1.6-.3-.3-4.3%201.7-.6v2.5q0%201.4.2%202.7m1.4-5.3%201.7.4v2.2c0-.8.3%202.1.3%202.1l-1.7.6-.3-2.7zm5.6%2013.7a16%2016%200%200%200%204.8%202.6l.4-1.6a14%2014%200%200%201-4-2zm-.8%201.4a17%2017%200%200%200%204.8%202.6l-1.2%201.1a19%2019%200%200%201-4-2zm2.2-9.4%201.6.7%203-3.3-1-1.4zm-1.3-1-1-1.4%203-3.3%201.6.7zm18.1%209.9.8%201.4a17%2017%200%200%200%203.6-3.1q1.4.3%202.5-.5a2.4%202.4%200%200%200%20.3-3.5l-.1-.1a15%2015%200%200%200%201.3-4.8h-1.7a13%2013%200%200%201-1%204l-1.4.2-4.1-4.5-1.3%201%204.1%204.5a2.4%202.4%200%200%200%20.1%202.8%2015%2015%200%200%201-3.1%202.6m6-4.8a1%201%200%200%200-1.5%200%201%201%200%200%200-.1%201.4%201%201%200%200%200%201.6.1%201%201%200%200%200%200-1.5m2.2-4.5%201.6-.3.3-4.3-1.7-.6v2.5q0%201.5-.2%202.8zm-1.4-5.3-1.7.4v2.2c0-.8-.3%202.1-.3%202.1l1.7.6.3-2.7zm-5.6%2013.7a16%2016%200%200%201-4.8%202.6l-.4-1.6a14%2014%200%200%200%204-2zm.8%201.4a17%2017%200%200%201-4.8%202.6l1.2%201.1a19%2019%200%200%200%204-2zm-2.2-9.4-1.6.7-2.9-3.3%201-1.4zm1.3-1%201-1.4-3-3.3-1.6.7zm-20.1-8.7.5%201.6h4.5l.5-1.6zm21.1%200-.5%201.6h-4.5l-.5-1.6zm-11.6%2021.9q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1m1.9-7.8%201.7-.4v-4.3l-1.7-.5zm-1.6%200-1.7-.4v-4.3l1.7-.5z'/%3e%3cpath%20fill='%23c8b100'%20d='M211.5%20294.2q.4-1.5%201.8-2V287h1.6v5.3q1.3.5%201.7%201.6h4.4v.3h-6a1%201%200%200%200-1-.6q-.6%200-1%20.6zm12.2%200v-.3h4.1l.2-.3-5-5.7%201.2-1%205%205.6.2-.1V285h1.6v7.3h.3l4.9-5.5%201.2%201-4.9%205.5.3.6h4v.3zm21.6%200a1%201%200%200%201%201-.6q.7%200%201%20.6h1.6q-.4-1.5-1.8-2V287h-1.6v5.3q-1.2.4-1.7%201.6h-4.4v.3zm-30.2-15%206%206.8%201.3-1-6.1-6.7.3-.6h4.4V276h-4.4a3%203%200%200%200-2.5-1.7%202.6%202.6%200%200%200-2.7%202.5%203%203%200%200%200%201.8%202.4v5.2h1.6v-5.2zm32%200v5.3h-1.7v-5.2l-.4-.2-6%206.8-1.3-1%206.2-6.9-.1-.3h-4.5V276h4.5a3%203%200%200%201%202.4-1.7%202.6%202.6%200%200%201%202.7%202.5%202.5%202.5%200%200%201-1.9%202.4zm-16.1%200v3.3h-1.7v-3.2a3%203%200%200%201-1.7-1.6h-4V276h4a3%203%200%200%201%202.5-1.7q2%20.1%202.5%201.7h4v1.6h-4a3%203%200%200%201-1.6%201.6m-17.8%204-1.7.4v4.3l1.7.5zm1.6%200%201.7.4v4.3l-1.7.5zm30.6%200-1.7.4v4.3l1.7.5zm1.6%200%201.7.4v4.3l-1.7.5zm-25.5.8%201.6-.7%202.9%203.3-1%201.4zm-1.3%201-1%201.4%203%203.3%201.6-.7zm18.5-1.1-1.6-.7-3%203.3%201%201.4zm1.2%201%201%201.4-3%203.3-1.5-.7zm-20.3%209%20.5-1.6h4.5l.5%201.6zm-6.7-17q0-1%201.2-1a1%201%200%200%201%201%201q0%201-1%201a1%201%200%200%201-1.2-1m12.1.8-.5%201.6H220l-.5-1.6zm0-1.6-.5-1.6H220l-.5%201.6zm15.7%2017.8-.5-1.6h-4.5l-.5%201.6zm4.4-17q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1m-16.1%200q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1.1%201a1%201%200%200%201-1.1-1m6.2.8.5%201.6h4.6l.5-1.6zm0-1.6.5-1.6h4.6l.5%201.6zm-5.9%205-1.7.5v4.3l1.7.5V281m1.7%200%201.6.5v4.3l-1.6.5z'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='M232.7%20316.3a16%2016%200%200%200%203.7-1.1l.8%201.4a18%2018%200%200%201-4.3%201.2%203%203%200%200%201-2.6%202%203%203%200%200%201-2.5-2%2018%2018%200%200%201-4.6-1.2l.8-1.4q2%20.8%204%201a3%203%200%200%201%201.5-1.3v-6.7h1.6v6.7q1.1.3%201.6%201.4zm-4.7-20.4-.2-.5h-4V294h4l.2-.4-5-5.6%201.2-1%205%205.5h.2V285h1.7v7.3h.2l4.9-5.5%201.2%201-4.9%205.5.3.6h4v1.5h-4q0%20.3-.3.5l4.7%205.3-1.3%201-4.6-5.3-.2.1v8.7h-1.6V297l-.2-.1-4.8%205.3-1.2-1%204.7-5.3m-12.8-16.7%206%206.8%201.3-1-6.1-6.7.3-.6h4.4V276h-4.4a3%203%200%200%200-2.5-1.7%202.6%202.6%200%200%200-2.6%202.5%203%203%200%200%200%201.7%202.4v5.2h1.6v-5.2zm6.5%2034.8-.8%201.4a17%2017%200%200%201-3.6-3.1q-1.4.3-2.5-.5a2.4%202.4%200%200%201-.3-3.5l.1-.1a15%2015%200%200%201-1.2-4.8h1.6a13%2013%200%200%200%201%204q.8%200%201.4.2l4.1-4.5%201.3%201-4.1%204.5q.8%201.5-.1%202.8a15%2015%200%200%200%203.1%202.6zm-8.4-13.1V297a3%203%200%200%201-1.8-2.4q.2-1.6%201.8-2.4V287h1.6v5.3q1.3.4%201.7%201.6h4.4v1.5h-4.4a3%203%200%200%201-1.6%201.6v3.9h-1.7m2.3%208.3q.7-.7%201.6%200c.9.7.5%201%20.1%201.4a1%201%200%200%201-1.6.1%201%201%200%200%201%200-1.5zm-2-4.5-1.7-.3-.3-4.3%201.7-.6v2.5q0%201.4.3%202.7zm1.4-5.3%201.6.4v2.2c0-.8.3%202.1.3%202.1l-1.7.6-.3-2.7v-2.6zm5.5%2013.7a16%2016%200%200%200%204.8%202.6l.4-1.6a14%2014%200%200%201-4-2l-1.2%201m-.8%201.4a17%2017%200%200%200%204.8%202.6l-1.2%201.1a19%2019%200%200%201-4-2l.4-1.7'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='m221.9%20305.1%201.6.7%203-3.3-1-1.4-3.6%204m-1.3-1-1-1.4%203-3.3%201.6.7-3.6%204m-7.6-9.5q.1-1%201-1%201.1.1%201.2%201-.1%201-1.1%201.1a1%201%200%200%201-1.1-1zm25.7%2019.4.8%201.4a17%2017%200%200%200%203.6-3.1q1.4.3%202.6-.5a2.4%202.4%200%200%200%20.2-3.5l-.1-.1a15%2015%200%200%200%201.3-4.8h-1.7a13%2013%200%200%201-1%204l-1.4.2-4.1-4.5-1.3%201%204.1%204.5a2.4%202.4%200%200%200%20.1%202.8%2015%2015%200%200%201-3%202.6zm8.4-13.1V297a3%203%200%200%200%201.8-2.4q0-1.6-1.8-2.4V287h-1.6v5.3q-1.2.4-1.7%201.6h-4.4v1.5h4.4q.5%201.2%201.7%201.6v3.9zm-2.3%208.3a1%201%200%200%200-1.6%200%201%201%200%200%200-.1%201.4%201%201%200%200%200%201.6.1%201%201%200%200%200%200-1.5zm2-4.5%201.7-.3.3-4.3-1.7-.6v2.5q0%201.4-.2%202.7zm-1.3-5.3-1.7.4v2.2c0-.8-.3%202.1-.3%202.1l1.7.6.3-2.7v-2.6m1.6-20.1v5.2h-1.6v-5.2l-.4-.2-6%206.8-1.2-1%206-7v-.2h-4.5V276h4.4a3%203%200%200%201%202.5-1.7%202.6%202.6%200%200%201%202.6%202.5%203%203%200%200%201-1.8%202.4zm-16%200v3.2h-1.7v-3.2a3%203%200%200%201-1.7-1.6h-4V276h4q.7-1.6%202.5-1.7c1.8-.1%202.2.7%202.5%201.7h4v1.6h-4a3%203%200%200%201-1.6%201.6zm8.8%2033.8a16%2016%200%200%201-4.8%202.6l-.4-1.6a14%2014%200%200%200%204-2l1.2%201m.8%201.4a17%2017%200%200%201-4.8%202.6l1.2%201.1a19%2019%200%200%200%204-2l-.4-1.7m-27.4-31.4-1.7.5v4.3l1.7.5v-5.2m1.7%200%201.6.4v4.3l-1.6.5V283m30.5%200-1.7.5v4.3l1.7.5V283'/%3e%3cpath%20fill='none'%20stroke='%23c8b100'%20stroke-width='.3'%20d='m247.1%20283.1%201.7.5v4.3l-1.7.5V283m-8.6%2022-1.6.7-2.9-3.3%201-1.4%203.5%204m1.3-1%201-1.4-3-3.3-1.6.7%203.6%204m-18.2-20%201.6-.7%203%203.3-1%201.4-3.6-4m-1.3%201-1%201.4%203%203.3%201.6-.7-3.6-4m18.5-1.1-1.6-.7-3%203.3%201%201.4%203.6-4m1.2%201%201%201.4-3%203.2-1.5-.6%203.5-4m-20.3%209%20.5-1.6h4.5l.5%201.6h-5.5m0%201.5.5%201.6h4.5l.5-1.6h-5.5M213%20277q0-1%201.2-1%201%200%201%201c0%201-.4%201-1%201a1%201%200%200%201-1.2-1zm12.1.8-.5%201.6h-4.5l-.5-1.6h5.5m0-1.6-.5-1.6h-4.5l-.5%201.6h5.5m20.1%2018.5q.1-.9%201.1-1%201%20.1%201.1%201-.1%201-1%201.1a1%201%200%200%201-1.2-1zm-4.4-.7-.5-1.6h-4.5l-.5%201.6h5.5m0%201.5-.5%201.6h-4.5l-.5-1.6h5.5m-11.6%2021.9q.1-1%201.1-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.2-1zm1.9-7.8%201.7-.4v-4.3l-1.7-.5v5.2m-1.6%200-1.7-.4v-4.3l1.7-.5v5.2m15.7-32.6q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1zm-16.1%200q.1-1%201.1-1a1%201%200%200%201%201.1%201q-.1%201-1%201a1%201%200%200%201-1.2-1zm6.2.8.5%201.6h4.6l.5-1.6h-5.5m0-1.6.4-1.6h4.6l.5%201.6h-5.5m-6%205-1.6.5v4.3l1.6.5V281m1.7%200%201.6.5v4.3l-1.6.5V281'/%3e%3cpath%20fill='%23058e6e'%20d='M227.7%20294.7a2.6%202.6%200%200%201%202.6-2.5%202.6%202.6%200%200%201%202.6%202.5%202.6%202.6%200%200%201-2.6%202.4c-1.4%200-2.6-1-2.6-2.4'/%3e%3cpath%20fill='%23db4446'%20d='M230.9%20229.7v-.6l.1-.3-2.3-.1a6%206%200%200%201-2.3-1.2q-1-1-1.6-1.2c-1.3-.2-2.3.4-2.3.4s1%20.4%201.7%201.3%201.5%201.3%201.8%201.4c.6.2%202.6%200%203.1.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M230.9%20229.7v-.6l.1-.3-2.3-.1a6%206%200%200%201-2.3-1.2q-1-1-1.6-1.2c-1.3-.2-2.3.4-2.3.4s1%20.4%201.7%201.3%201.5%201.3%201.8%201.4c.6.2%202.6%200%203.1.1z'/%3e%3cpath%20fill='%23ed72aa'%20stroke='%23000'%20stroke-width='.4'%20d='M238.1%20227.5v1.4c.2.6-.1%201.2%200%201.5q0%20.5.3.9l.2.9-.7-.5-.6-.4v1l.6%201.1%201%201.3c.2.5.1%201.4.1%201.4s-.4-.7-.8-.8l-1.2-.7s.7.8.7%201.5l-.3%201.6c-.1.2-.3-.7-.8-1.1l-1-.9s.4%201.2.4%202v2.3l-.9-1-1-.7c0-.2.5.6.6%201.1s.3%202.3%201.8%204.5c1%201.3%202.3%203.6%205.3%202.9s1.9-4.8%201.3-6.7a17%2017%200%200%201-1-4.6c0-.8.6-2.9.5-3.3a8%208%200%200%201%20.2-3.1l.9-2.3.4-1.3.1-1.3.7%201.3.1%201.5s.1-1%201-1.6%201.8-1.1%202-1.4l.3-.5c-.1%200%200%201.8-.6%202.6l-1.7%202s.7-.3%201.2-.3h.9s-.6.4-1.4%201.6c-.8%201-.5%201.2-1%202.1s-1%201-1.7%201.5c-1%20.8-.5%204.2-.4%204.7.2.5%202%204.5%202%205.5s.2%203.2-1.5%204.6c-1.1%201-3%201-3.4%201.2-.4.3-1.2%201.1-1.2%202.8s.6%202%201%202.4c.6.5%201.2.2%201.3.6l.5.7q.3.3.2.8c0%20.3-.8%201.1-1.1%201.7l-.8%202.4c0%20.2-.1%201%20.1%201.3%200%200%20.9%201%20.3%201.2-.4.2-.8-.2-1-.2l-.9.5q-.3-.1-.4-.8l-.1-.7q-.3%200-.4.5c0%20.2%200%20.8-.3.8l-.8-.5c-.2%200-.8-.2-.8-.4q.1-.6.7-1%20.8-.1.5-.5t-.7%200c-.3.4-.8%200-.7-.2v-.8c0-.2-.4-.5.1-.8s.8.2%201.4.1q.8%200%201-.6.3-.6-.2-1.4l-.9-.8-.3-.9v2.2l-.7-.8c-.3-.3-.6-1.3-.6-1.3v1.3l.2.8c-.1.1-.8-.7-1-.8l-1-1-.4-1.4v-1.5l.4-1h-1.4c-.7%200-1.2-.3-1.5.2q-.4.8.2%202.8.5%201.8.4%202.1l-.7.8h-.9l-1.2-.3h-1.3l-1.1-.3c-.3.1-.8.3-.6.7q.1.8-.5.7l-.9-.2q-.8%200-.8-.4t.4-.7q.3-.5%200-.5h-.6q-.3.4-.8.4-.3-.1-.4-1c-.1-.9-.7-1.2%200-1.1.5%200%201.3.4%201.4%200q.2-.4-.2-.7c-.4-.3-.8-.4-.3-.7l.7-.5c.1-.2.4-.8.7-.6.6.2%200%20.7.6%201.3s1%201%202%20.8q1.4%200%201.3-.5l-.1-1v-1s-.4.3-.5.6l-.4.8v-2l-.2-.8-.3.9-.1%201s-.7-.5-.5-1.5l.1-2c.2-.3.7-1.5%202-1.6h2.6l2-.3s-2.8-1.4-3.5-1.9a10%2010%200%200%201-2-2l-.6-1.6s-.5%200-1%20.3l-1.2%201-.7%201%20.1-1.2v-.8s-.4%201.2-1%201.7l-1.4%201v-.8l.2-1s-.4.8-1.1%201c-.7%200-1.8%200-1.9.4q.2.8%200%201.4c0%20.3-.4.5-.4.5l-.8-.4-.7.2c-.1.1-.3-.4-.2-.7s.7-.6.5-.8l-.8.2c-.3.1-.8.3-.8-.2q.2-.6%200-1%200-.4.2-.6l1.2-.1q0-.4-.8-.6-1-.2-.5-.8.3-.2.5-.6c.1-.2.2-.7.7-.5.5.3.4.8%201%201a4%204%200%200%200%202-.2l1.5-1%201.5-1-1-.8q-.5-.7-1-1l-1.8-.6-1.7-.5.8-.3q.4-.5.8-.6h.3-1.4c-.3-.1-1-.6-1.3-.6l-.8.1s.8-.4%201.4-.5l1-.1s-.9-.3-1.1-.6l-.6-1q-.2-.3-.6-.5l-1%20.3q-.6%200-.6-.6l-.1-.5c-.2-.3-.6-.8-.2-1h1.4q-.2-.4-.8-.8c-.4-.2-1-.5-.7-.8l.8-.5c.2-.3.3-1%20.7-.7.4.2.8%201.2%201.1%201.1s.3-.8.3-1c0-.4%200-1%20.2-.9l1%20.5q.8-.1%201%20.2%200%20.5-.6%201-.4.6-.3%201.4.4%201%201.2%201.4t1.7.9c.5.3%201.7%201.2%202.1%201.3l.8.4s.5-.2%201.1-.2%202.1%200%202.6-.2%201.3-.6%201-1c-.1-.6-1.3-1-1.2-1.4q0-.5%201.2-.4c.8%200%201.8.1%202-1q.5-1.4-.8-1.8c-1-.2-1.8-.2-2-1q-.4-1-.2-1.1.3-.3%201.4-.4%201.3%200%201.9-.2l.6-.9c.3-.2%201.4-.4%201.4-.4s1.4.7%202.7%201.7l2.2%202.1'/%3e%3cpath%20d='m228.1%20226.8-.2-.6v-.3s.8%200%20.7.3q0%20.2-.3.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.1%20226.8-.2-.6v-.3s.8%200%20.7.3q0%20.2-.3.3z'/%3e%3cpath%20d='M232%20225.4v-.4s.7%200%201%20.3c.5.4.9%201%20.9%201l-.8-.4h-.5l-.3-.1v-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M232%20225.4v-.4s.7%200%201%20.3c.5.4.9%201%20.9%201l-.8-.4h-.5l-.3-.1v-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m237.3%20231.3-.4-.7-.3-.4'/%3e%3cpath%20fill='%23db4446'%20d='M217.4%20226.6s.5.4.8.4h.8s.2-.5.1-.8c-.2-1.2-1.2-1.4-1.2-1.4s.3.7.1%201z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M217.4%20226.6s.5.4.8.4h.8s.2-.5.1-.8c-.2-1.2-1.2-1.4-1.2-1.4s.3.7.1%201z'/%3e%3cpath%20fill='%23db4446'%20d='M215.2%20227.6s-.4-.7-1.3-.6-1.4.8-1.4.8h1.2c.3.3.4%201%20.4%201l.7-.6z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215.2%20227.6s-.4-.7-1.3-.6-1.4.8-1.4.8h1.2c.3.3.4%201%20.4%201l.7-.6z'/%3e%3cpath%20fill='%23db4446'%20d='M214.2%20230.6s-.8.1-1.2.6-.3%201.3-.3%201.3.4-.5.9-.5l1%20.2-.1-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M214.2%20230.6s-.8.1-1.2.6-.3%201.3-.3%201.3.4-.5.9-.5l1%20.2-.1-.8z'/%3e%3cpath%20d='m228.2%20230.5.3-.5.3.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.2%20230.5.3-.5.3.5h-.7'/%3e%3cpath%20d='m229%20230.5.3-.5.4.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m229%20230.5.3-.5.4.5h-.8'/%3e%3cpath%20d='m228.6%20227.3.8.3-.7.4-.1-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m228.6%20227.3.8.3-.7.4-.1-.6'/%3e%3cpath%20d='m229.5%20227.6.7.2-.5.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m229.5%20227.6.7.2-.5.4-.2-.6'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.2%20233.7s-.7.2-1%20.6q-.4.9-.3%201c.1.1.6-.5%201.5-.3l1.2.3%201.3-.3s-.7.8-.7%201.3l.2%201.1c0%20.7-.6%201.6-.6%201.6l1-.3%201.7-.8.9-1s-.2%201%200%201.4l.2%201.6.8-.6q.5-.2.9-.7l.3-1s0%20.8.4%201.3l.6%201.6s.3-.8.6-1.1l.7-1-.1-.9.4.8m-11%20.6s.5-.8%201-1l1.1-.8.9-.4m1%205%201.3-.8%201-1'/%3e%3cpath%20fill='%23db4446'%20d='M216.6%20240.4s-.4-.5-1.1-.3c-.7%200-1.2.9-1.2.9s.6-.2%201-.1.6.4.6.4l.4-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M216.6%20240.4s-.4-.5-1.1-.3c-.7%200-1.2.9-1.2.9s.6-.2%201-.1.6.4.6.4l.4-.4z'/%3e%3cpath%20fill='%23db4446'%20d='M215.8%20243.2s-.6%200-1.1.3c-.5.4-.5%201.2-.5%201.2s.4-.4.8-.3l.9.2v-.6c.2-.4-.1-.8-.1-.8'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215.8%20243.2s-.6%200-1.1.3c-.5.4-.5%201.2-.5%201.2s.4-.4.8-.3l.9.2v-.6c.2-.4-.1-.8-.1-.8z'/%3e%3cpath%20fill='%23db4446'%20d='M217.2%20245.8s0%20.8.3%201.3c.4.5%201.1.5%201.1.5l-.3-.7.3-.8q.1-.1-.7-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M217.2%20245.8s0%20.8.3%201.3c.4.5%201.1.5%201.1.5l-.3-.7.3-.8q.1-.1-.7-.3zm16%201.3s2%201.2%201.9%202.2c0%201-1%202.3-1%202.3'/%3e%3cpath%20fill='%23db4446'%20d='M224.2%20252.6s-.4-.6-1.1-.6-1.4.7-1.4.7.8-.1%201%20.2l.5.6.5-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.2%20252.6s-.4-.6-1.1-.6-1.4.7-1.4.7.8-.1%201%20.2l.5.6.5-.3z'/%3e%3cpath%20fill='%23db4446'%20d='M222.2%20255.3s-1-.1-1.4.3-.4%201.3-.4%201.3.6-.6%201-.5q.9.1%201%20.3v-.7l-.3-.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M222.2%20255.3s-1-.1-1.4.3-.4%201.3-.4%201.3.6-.6%201-.5q.9.1%201%20.3v-.7l-.3-.7z'/%3e%3cpath%20fill='%23db4446'%20d='M224%20258.1s-.3.7%200%201.1%201%20.8%201%20.8-.3-.4-.2-.8c.1-.3.7-.8.7-.8l-1.4-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224%20258.1s-.3.7%200%201.1%201%20.8%201%20.8-.3-.4-.2-.8c.1-.3.7-.8.7-.8l-1.4-.2z'/%3e%3cpath%20fill='%23db4446'%20d='M236%20259.3s-.8-.2-1.2%200c-.5.3-.8%201.4-.8%201.4s.7-.6%201.2-.5q.9.1%201%20.3v-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236%20259.3s-.8-.2-1.2%200c-.5.3-.8%201.4-.8%201.4s.7-.6%201.2-.5q.9.1%201%20.3v-.8z'/%3e%3cpath%20fill='%23db4446'%20d='M236.4%20262.2s-.6.6-.4%201.1l.6%201s0-.7.2-1l1-.3-.7-.5z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236.4%20262.2s-.6.6-.4%201.1l.6%201s0-.7.2-1l1-.3-.7-.5z'/%3e%3cpath%20fill='%23db4446'%20d='M239.4%20263s-.3.8.2%201.3l1%20.5q-.2-.3-.2-1.1.3-.7.5-.7l-.8-.2-.7.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M239.4%20263s-.3.8.2%201.3l1%20.5q-.2-.3-.2-1.1.3-.7.5-.7l-.8-.2-.7.3z'/%3e%3cpath%20fill='%23ffd691'%20stroke='%23000'%20stroke-width='.5'%20d='M208.8%20316.4q3%201%203%203.8c0%202.3-2.2%204-5%204-3%200-5.3-1.7-5.3-4%200-1.7%201-3.6%203-3.8l-.2-.4-.7-.7h1.2l.8.5.5-.7.6-.5.6.6.3.5.7-.4.8-.3s0%20.4-.2.7l-.1.7'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.5'%20d='M206.3%20326.7s-3.8-2.6-5.5-3c-2-.4-4.5%200-5.5%200%200%200%201.2.8%201.8%201.4.5.5%202.3%201.5%203.3%201.8%203%20.8%206-.2%206-.2m1%20.2s2.4-2.5%205-2.9c3-.4%205%20.3%206.2.6l-1.5.8c-.5.3-2%201.5-4%201.6-2%200-4.4-.3-4.8-.2l-.9.1'/%3e%3cpath%20fill='%23ad1519'%20stroke='%23000'%20stroke-width='.5'%20d='M206.7%20323.8a5%205%200%200%201%200-7.1%205%205%200%200%201%201.5%203.5%205%205%200%200%201-1.5%203.6'/%3e%3cpath%20fill='%23058e6e'%20stroke='%23000'%20stroke-width='.5'%20d='M205.7%20329s.6-1.5.6-2.7l-.1-2.1h.8s.3%201.1.3%202l-.1%202.4-.7.1-.8.3'/%3e%3cpath%20fill='%23fff'%20d='M254%20190.7q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M254%20190.7q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M255.4%20188.2q.1-1%201.1-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M255.4%20188.2q.1-1%201.1-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M256.4%20185.2q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M256.4%20185.2q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M256.5%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M256.5%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M255.7%20179q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M255.7%20179q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M254.1%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M254.1%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M252%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M252%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M249.4%20171.8q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M249.4%20171.8q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M246.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M246.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M243.3%20169.1q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M243.3%20169.1q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M239.9%20168.5q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M239.9%20168.5q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M236.6%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M236.6%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M233.3%20168.5q.1-1%201-1t1.1%201c.1%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M233.3%20168.5q.1-1%201-1t1.1%201c.1%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M230.1%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M230.1%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M231.7%20171.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m.6%203.1q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1m0%203q.2-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1m-1%202.8q.1-.9%201-1%201%20.1%201.1%201%200%201-1%201a1%201%200%200%201-1-1m-1.9%202.6q.1-.9%201-1%201.1.1%201.2%201%200%201.2-1.1%201-1%200-1-1'/%3e%3cpath%20fill='%23fff'%20d='M227.6%20166.5q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M227.6%20166.5q.1-.9%201.1-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M224.8%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M224.8%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M221.6%20164q.1-1%201-1t1.1%201q-.1.9-1%201-1-.1-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M221.6%20164q.1-1%201-1t1.1%201q-.1.9-1%201-1-.1-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M218.3%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M218.3%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M215%20163.5q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M215%20163.5q.1-1%201.1-1t1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M211.7%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M211.7%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M208.6%20165.1q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M208.6%20165.1q.1-.9%201-1%201%20.1%201.1%201c.1.9-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M156%20190.7q0-.9%201-1c1-.1%201%20.5%201%201q0%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M156%20190.7q0-.9%201-1c1-.1%201%20.5%201%201q0%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M154.5%20188.2q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M154.5%20188.2q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M153.5%20185.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M153.5%20185.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M153.4%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M153.4%20182q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M154.2%20179q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M154.2%20179q.1-1%201-1t1%201c0%201-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M155.8%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M155.8%20176.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M158%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M158%20173.8q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M160.5%20171.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M160.5%20171.8q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M163.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M163.5%20170.3q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M166.6%20169.1q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M166.6%20169.1q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M170%20168.5q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M170%20168.5q.1-.9%201.1-1a1%201%200%200%201%200%202q-1%200-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M173.4%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M173.4%20168.3q0-.9%201-1c1-.1%201%20.5%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M176.6%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M176.6%20168.5q.1-1%201-1t1.1%201c.1%201-.5%201-1%201a1%201%200%200%201-1.1-1z'/%3e%3cpath%20fill='%23fff'%20d='M179.8%20168.5q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M179.8%20168.5q.1-1%201-1%201.1%200%201.2%201c.1%201-.5%201-1.1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20stroke='%23000'%20stroke-width='.4'%20d='M178.2%20171.2q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m-.7%203.1q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1m-.2%203q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1m.9%202.8q.1-.9%201-1%201%20.1%201.1%201-.1%201-1%201a1%201%200%200%201-1.1-1m1.8%202.6q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='%23fff'%20d='M182.3%20166.5q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M182.3%20166.5q.1-.9%201-1a1%201%200%200%201%200%202%201%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M185.2%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M185.2%20165q0-1%201-1c1%200%201%20.4%201%201s-.4%201-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M188.3%20164q.1-1%201-1t1.1%201q0%20.9-1%201c-1%20.1-1-.5-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M188.3%20164q.1-1%201-1t1.1%201q0%20.9-1%201c-1%20.1-1-.5-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M191.6%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M191.6%20163.4q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M194.9%20163.5q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M194.9%20163.5q0-1%201-1c1%200%201%20.4%201%201q0%20.9-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M198.2%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M198.2%20164q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23fff'%20d='M201.3%20165.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.4'%20d='M201.3%20165.1q.1-.9%201-1%201%20.1%201.1%201%200%201.2-1%201a1%201%200%200%201-1-1z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M174.7%20228.9h-1v-1h-1.5v3.6h1.6v2.5h-3.4v7h1.8v14.3h-3.5v7.3h27.2v-7.3h-3.5V241h1.8v-7h-3.4v-2.5h1.6V228h-1.6v.9h-.8v-1h-1.6v1h-1.1v-1h-1.6v3.6h1.6v2.5H184v-7.8h1.7v-3.5H184v.9h-1v-1h-1.5v1h-.9v-1H179v3.6h1.7v7.8h-3.3v-2.5h1.6V228h-1.6v.9h-.9v-1h-1.8zm-6%2033.7H196m-27.3-1.8H196m-27.3-1.8H196m-27.3-1.7H196m-27.3-2H196m-23.8-1.6h20.2m-20.2-1.8h20.2m-20.2-2h20.2m-20.2-1.7h20.2m-20.2-1.8h20.2m-20.2-1.8h20.2m-20.2-1.7h20.2m-22-1.8h23.8m-23.8-1.8h23.8m-23.8-1.8h23.8m-23.8-1.8h23.8m-20.4-1.7h17m-10.2-1.8h3.4m-3.4-1.8h3.4m-3.4-1.8h3.4m-3.4-1.7h3.4m-5.1-2.2h6.8m-12%207.5h3.6m-5-2.2h6.6m-6.7%2032.6v-1.8m0-1.8v-1.7m-1.8%201.7v1.8m3.4%200V259m1.7%203.6v-1.8m0-1.8v-1.7m0-2v-1.6m0-1.8v-2m-1.7%207.4v-2m-3.4%202v-2m7%200v2m1.5-2v-1.6m-5.1-1.8v1.8m3.5-1.8v1.8m3.3-1.8v1.8M179%20252v-2m1.7-1.7v1.7m0-5.3v1.8m-1.7-3.6v1.8m1.7-3.5v1.7m-3.3-1.7v1.7m-3.5-1.7v1.7m-1.6-3.5v1.8m3.3-1.8v1.8m3.4-1.8v1.8m1.7-3.6v1.8m-3.3-1.8v1.8m-3.5-1.8v1.8m-1.6-3.6v1.8m6.7-1.8v1.8m-3.4-5.3v1.8m15.3-1.8h-3.5m5-2.2h-6.6m6.7%2032.6v-1.8m0-1.8v-1.7m1.8%201.7v1.8m-3.4%200V259m-1.7%203.6v-1.8m0-1.8v-1.7m0-2v-1.6m0-1.8v-2m1.7%207.4v-2m3.4%202v-2m-7%200v2m-1.5-2v-1.6m5.1-1.8v1.8m-3.5-1.8v1.8m-3.3-1.8v1.8m1.7-1.8v-2m-1.7-1.7v1.7m0-5.3v1.8m1.7-3.6v1.8m-1.7-3.5v1.7m3.3-1.7v1.7m3.5-1.7v1.7m1.6-3.5v1.8m-3.3-1.8v1.8m-3.4-1.8v1.8m-1.7-3.6v1.8m3.3-1.8v1.8m3.5-1.8v1.8m1.6-3.6v1.8m-6.7-1.8v1.8m3.4-5.3v1.8m-7%2018v-2m0-5.4v-1.8m0%205.4v-1.8m0-5.3v-1.8m0-1.8v-1.7m0-3.6v-1.8m0-1.7v-1.8m-8.3%204.6h3.5m3.3-5.3h3.4m3.3%205.3h3.5'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='M186.8%20262.6v-4.7c0-.8-.4-3.5-4.6-3.5-4%200-4.4%202.7-4.4%203.5v4.7z'/%3e%3cpath%20fill='%23c8b100'%20stroke='%23000'%20stroke-width='.4'%20d='m179.3%20258.2-2.2-.3c0-.9.2-2.2.9-2.6l2%201.5c-.3.2-.7%201-.7%201.4zm6%200%202.2-.3c0-.9-.2-2.2-.9-2.6l-2%201.5c.3.2.7%201%20.7%201.4zm-2.2-2.3%201-2-2-.4-1.7.4%201.1%202zm-4.2-5.5v-4.9c0-1.3-1-2.4-2.5-2.4s-2.4%201-2.4%202.4v4.9zm6.8%200v-4.9c0-1.3%201-2.4%202.5-2.4s2.4%201%202.4%202.4v4.9zm-1.7-12%20.4-4.4h-4.2l.2%204.4zm3.3%200-.4-4.4h4.4l-.5%204.4zm-10%200%20.2-4.4h-4.2l.5%204.4z'/%3e%3cpath%20fill='%230039f0'%20d='M185.3%20262.6v-4c0-.7-.5-2.7-3.1-2.7-2.4%200-2.9%202-2.9%202.7v4zm-6.9-12.7v-4.2c0-1-.6-2.2-2-2.2s-2%201.1-2%202.2v4.3h4zm7.8%200v-4.2c0-1%20.7-2.2%202-2.2s2%201.1%202%202.2v4.3h-4z'/%3e%3cpath%20fill='%23ad1519'%20d='M190.8%20269.8c0-9.7%207-17.6%2015.6-17.6s15.6%207.9%2015.6%2017.6-7%2017.5-15.6%2017.5-15.6-7.8-15.6-17.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M190.8%20269.8c0-9.7%207-17.6%2015.6-17.6s15.6%207.9%2015.6%2017.6-7%2017.5-15.6%2017.5-15.6-7.8-15.6-17.5z'/%3e%3cpath%20fill='%23005bbf'%20d='M195.4%20269.7c0-7%205-12.8%2011-12.8s11%205.7%2011%2012.8-5%2013-11%2013-11-5.8-11-13'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.6'%20d='M195.4%20269.7c0-7%205-12.8%2011-12.8s11%205.7%2011%2012.8-5%2013-11%2013-11-5.8-11-13z'/%3e%3cpath%20fill='%23c8b100'%20d='M201.2%20260.9s-1.3%201.4-1.3%202.7a6%206%200%200%200%20.6%202.4q-.4-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.2-.5%201-.5%201.1%200%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M201.2%20260.9s-1.3%201.4-1.3%202.7a6%206%200%200%200%20.6%202.4q-.4-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.2-.5%201-.5%201.1%200%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M199.2%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M199.2%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M211.4%20260.9s-1.3%201.4-1.3%202.7.6%202.4.6%202.4q-.3-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.3-.5%201-.5a1%201%200%200%201%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.7%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M211.4%20260.9s-1.3%201.4-1.3%202.7.6%202.4.6%202.4q-.3-.8-1.4-.8-1.3.1-1.4%201.3l.2.8.5.9q.3-.5%201-.5a1%201%200%200%201%201%201v.2h-1.2v1h1l-.8%201.5%201-.4.8.9.8-.9%201%20.4-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.7%200%201%20.6l.4-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.3q-1%200-1.4.9s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M209.4%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M209.4%20269.9h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M206.3%20269.6s-1.3%201.5-1.3%202.8.6%202.4.6%202.4q-.3-.8-1.4-.9-1.3.1-1.4%201.4l.2.7.5%201q.2-.6%201-.6a1%201%200%200%201%201%201v.3h-1.2v1h1l-.8%201.5%201-.4.8.9.8-1%201%20.5-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%20.9.6l.5-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.4q-1%200-1.4%201s.6-1.2.6-2.5-1.4-2.7-1.4-2.7'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-linejoin='round'%20stroke-width='.3'%20d='M206.3%20269.6s-1.3%201.5-1.3%202.8.6%202.4.6%202.4q-.3-.8-1.4-.9-1.3.1-1.4%201.4l.2.7.5%201q.2-.6%201-.6a1%201%200%200%201%201%201v.3h-1.2v1h1l-.8%201.5%201-.4.8.9.8-1%201%20.5-.7-1.5h1v-1h-1.1v-.3a1%201%200%200%201%201-1q.6%200%20.9.6l.5-1%20.2-.7a1.4%201.4%200%200%200-1.4-1.4q-1%200-1.4%201s.6-1.2.6-2.5-1.4-2.7-1.4-2.7z'/%3e%3cpath%20fill='%23c8b100'%20d='M204.3%20278.6h4.1v-1h-4.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M204.3%20278.6h4.1v-1h-4.1z'/%3e%3cpath%20fill='%23c8b100'%20d='M237.6%20223.4h-.3l-.3.4q-.4.3-.8%200l-.1-.4h-.5q-.4-.3-.1-.7v-.5h-.3l-.1.2q-.3.4-.7.2v-.2h-.3c-.5.2-.7-1-.7-1.2l-.2.2s.2.7.1%201.2l-.3%201.2a9%209%200%200%201%202.9%201.6%209%209%200%200%201%202.2%202.3l1.2-.5c.6-.2%201.3-.2%201.3-.2l.2-.2c-.3%200-1.5.1-1.5-.4v-.2h-.2q-.3-.3%200-.7l.2-.1v-.3h-.3l-.2.1q-.4.5-.8%200l-.1-.4h-.5q-.4-.3%200-.8l.2-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M237.6%20223.4h-.3l-.3.4q-.4.3-.8%200l-.1-.4h-.5q-.4-.3-.1-.7v-.5h-.3l-.1.2q-.3.4-.7.2v-.2h-.3c-.5.2-.7-1-.7-1.2l-.2.2s.2.7.1%201.2l-.3%201.2a9%209%200%200%201%202.9%201.6%209%209%200%200%201%202.2%202.3l1.2-.5c.6-.2%201.3-.2%201.3-.2l.2-.2c-.3%200-1.5.1-1.5-.4v-.2h-.2q-.3-.3%200-.7l.2-.1v-.3h-.3l-.2.1q-.4.5-.8%200l-.1-.4h-.5q-.4-.3%200-.8l.2-.3z'/%3e%3cpath%20d='M235.4%20224h.2v.3h-.1q-.1-.1%200-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M235.4%20224h.2v.3h-.1q-.1-.1%200-.2z'/%3e%3cpath%20d='m236.3%20224.8-.3-.2v-.2h.1l.4.3.3.2v.2h-.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m236.3%20224.8-.3-.2v-.2h.1l.4.3.3.2v.2h-.2l-.3-.3'/%3e%3cpath%20d='m234.6%20223.7-.2-.2s-.1%200%200-.1l.3.1.3.1v.2h-.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m234.6%20223.7-.2-.2s-.1%200%200-.1l.3.1.3.1v.2h-.1l-.3-.1'/%3e%3cpath%20d='M233.7%20223h.2v.2h-.2s-.1-.1%200-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M233.7%20223h.2v.2h-.2s-.1-.1%200-.2z'/%3e%3cpath%20d='M237.3%20225.5v-.2h-.3l.1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M237.3%20225.5v-.2h-.3l.1.2z'/%3e%3cpath%20d='m237.9%20226.2.2.2h.1v-.2l-.2-.2-.2-.2h-.1v.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='m237.9%20226.2.2.2h.1v-.2l-.2-.2-.2-.2h-.1v.2l.2.2'/%3e%3cpath%20d='M238.8%20227v-.3h-.3v.2h.3'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M238.8%20227v-.3h-.3v.2h.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M236.2%20221.1h-.6l-.1.9v.1h.2l.7-.5-.3-.5'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M236.2%20221.1h-.6l-.1.9v.1h.2l.7-.5-.3-.5'/%3e%3cpath%20fill='%23c8b100'%20d='M234.6%20221.6v.5l.9.1h.1v-.2l-.5-.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M234.6%20221.6v.5l.9.1h.1v-.2l-.5-.7-.5.3'/%3e%3cpath%20fill='%23c8b100'%20d='m236.4%20222.6-.4.3-.6-.7v-.1h1.1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m236.4%20222.6-.4.3-.6-.7v-.1h1.1v.5'/%3e%3cpath%20fill='%23c8b100'%20d='M235.3%20222h.4v.3h-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M235.3%20222h.4v.3h-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m233.2%20221.1-.2-.7-.4-.4s.4-.2.8.1%200%20.9%200%20.9z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m233.2%20221.1-.2-.7-.4-.4s.4-.2.8.1%200%20.9%200%20.9z'/%3e%3cpath%20fill='%23c8b100'%20d='m234.2%20221.4-.4.4-.6-.6v-.2h1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m234.2%20221.4-.4.4-.6-.6v-.2h1v.4'/%3e%3cpath%20fill='%23c8b100'%20d='m233.1%20221%20.3-.1v.3q0%20.3-.2.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m233.1%20221%20.3-.1v.3q0%20.3-.2.2z'/%3e%3cpath%20fill='%23c8b100'%20d='M238.3%20222.5h-.5l-.3.7v.2h.2l.8-.4z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M238.3%20222.5h-.5l-.3.7v.2h.2l.8-.4-.2-.5'/%3e%3cpath%20fill='%23c8b100'%20d='M236.7%20222.8v.5l.8.2h.1v-.2l-.4-.7z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M236.7%20222.8v.5l.8.2h.1v-.2l-.4-.7-.5.2'/%3e%3cpath%20fill='%23c8b100'%20d='m238.4%20224-.5.2-.4-.7v-.2h.1l.9.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m238.4%20224-.5.2-.4-.7v-.2h.1l.9.2-.1.5'/%3e%3cpath%20fill='%23c8b100'%20d='M237.3%20223.2h.4v.4h-.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M237.3%20223.2h.4v.4h-.3z'/%3e%3cpath%20fill='%23c8b100'%20d='m240.2%20224.3.1.5-.8.3h-.2v-.2l.4-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240.2%20224.3.1.5-.8.3h-.2v-.2l.4-.8.5.2'/%3e%3cpath%20fill='%23c8b100'%20d='m240%20225.8-.5.1-.3-.8v-.1h.2l.8.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240%20225.8-.5.1-.3-.8v-.1h.2l.8.3-.1.5'/%3e%3cpath%20fill='%23c8b100'%20d='m238.6%20224.3-.2.5.9.3h.1v-.1l-.3-.8z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m238.6%20224.3-.2.5.9.3h.1v-.1l-.3-.8-.5.1'/%3e%3cpath%20fill='%23c8b100'%20d='M239.5%20225.2v-.3h-.4v.3z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M239.5%20225.2v-.3h-.4v.3z'/%3e%3cpath%20fill='%23c8b100'%20d='M240.8%20227h.8l.5.3s.1-.4-.3-.7c-.3-.3-.8.2-.8.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M240.8%20227h.8l.5.3s.1-.4-.3-.7c-.3-.3-.8.2-.8.2z'/%3e%3cpath%20fill='%23c8b100'%20d='m240.3%20226.1-.3.5.8.5v-.1h.2l-.1-1z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='m240.3%20226.1-.3.5.8.5v-.1h.2l-.1-1-.6.1'/%3e%3cpath%20fill='%23c8b100'%20d='M241%20227s.1-.1%200-.2h-.3q-.3%200-.1.2z'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.3'%20d='M241%20227s.1-.1%200-.2h-.3q-.3%200-.1.2zm38-21.9v.6h-2.4v-.6h1v-1.3h-.7v-.5h.6v-.6h.6v.6h.6v.6h-.6v1.2h1'/%3e%3cpath%20fill='none'%20d='M134.4%20217.1v-1.2m-.4%201.2v-1.2m-.2%201.2v-1.2m-.3%201.2v-1.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M133.2%20217.1v-1.2m-.5%201.1v-1m.2%201v-1m-.7%201v-1m.2%201v-1m-.9%201v-1m.2%201v-1m.3%201v-1m-.7%201v-1m-.3.9v-.8m-.1.8v-.8m-.5.7v-.6m.2.6v-.6m-.4.5v-.5m-.2.5v-.4m-.3.3v-.3m-.3.3v-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M129.2%20216.6v-.2'/%3e%3cpath%20fill='none'%20d='M135.7%20217v-1m-.5%201v-1m-.4%201.2V216m143%201.1V216m-.4%201.1V216m-.3%201.1V216m-.3%201.2V216'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.1'%20d='M276.6%20217.1V216m-.6%201v-1m.3%201v-1m-.8%201v-1m.3%201v-1m-.9%201v-1m.2%201v-1m.2%201v-1m-.6%201v-1m-.3.9v-.8m-.2.8v-.8m-.4.7v-.6m.2.6v-.6m-.5.6v-.6m-.2.5v-.4m-.3.4v-.4m-.2.3v-.2'/%3e%3cpath%20fill='none'%20stroke='%23000'%20stroke-width='.2'%20d='M272.6%20216.6v-.2'/%3e%3cpath%20fill='none'%20d='M279.1%20217v-1m-.6%201v-1m-.4%201.1V216'/%3e%3c/svg%3e"; const flagPH = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-ph'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%230038a8'%20d='M0%200h640v240H0z'/%3e%3cpath%20fill='%23ce1126'%20d='M0%20240h640v240H0z'/%3e%3cpath%20fill='%23fff'%20d='M415.7%20240%200%20480V0'/%3e%3cpath%20fill='%23fcd116'%20d='M26.7%2042.4%2041%2055l16.6-9.2-7.4%2017.5%2014%2013-19-1.6-8.1%2017.2-4.3-18.5L14%2071l16.3-10zm323.8%20172.3.4%2019%2018%206.3-18%206.2-.4%2019-11.5-15.1-18.2%205.5%2010.8-15.6-10.8-15.6%2018.2%205.5zM37.2%20388.1l8%2017.2%2019-1.6-13.9%2013%207.4%2017.5-16.6-9.1-14.4%2012.4%203.6-18.7L14%20409l18.9-2.4zm114.2-249-6.2%206.2%203.1%2047-3%20.3-5.7-42.9-5.1%205%207.6%2038.4a48%2048%200%200%200-17.2%207.1l-21.7-32.4H96l26.4%2034.3-2.4%202-31.1-35.5h-8.8v8.8l35.4%2031-2%202.5-34.3-26.3v7.1l32.5%2021.7q-5.2%207.8-7.1%2017.2L66.3%20223l-5.1%205%2042.9%205.7q-.3%201.6-.3%203.1l-47-3-6.2%206.2%206.2%206.2%2047-3.1.3%203.1-42.9%205.7%205%205%2038.4-7.6a48%2048%200%200%200%207.1%2017.2l-32.5%2021.7v7.2l34.3-26.3%202%202.4-35.4%2031v8.8H89l31-35.4%202.5%202L96%20312.2h7.2l21.7-32.5q7.8%205.2%2017.2%207.1l-7.6%2038.4%205%205%205.7-42.9q1.5.3%203.1.3l-3%2047%206.1%206.2%206.3-6.2-3.1-47%203-.3%205.7%2043%205.1-5.1-7.6-38.4a48%2048%200%200%200%2017.2-7.1l21.7%2032.5h7.2l-26.4-34.3%202.4-2%2031.1%2035.4h8.8v-8.8l-35.4-31%202-2.4%2034.3%2026.3v-7.2l-32.5-21.7q5.2-7.8%207.1-17.2l38.3%207.6%205.1-5-42.9-5.7q.3-1.5.3-3.1l47%203%206.2-6.1-6.2-6.2-47%203-.3-3%2042.9-5.7-5-5-38.4%207.5a48%2048%200%200%200-7.1-17.2l32.5-21.7v-7.1l-34.3%2026.3-2-2.4%2035.4-31v-8.9H214l-31%2035.5-2.5-2%2026.4-34.3h-7.2L178%20200.2q-7.8-5.2-17.2-7.1l7.6-38.3-5-5-5.7%2042.8-3.1-.3%203-47z'/%3e%3c/svg%3e"; const flagID = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-id'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23e70011'%20d='M0%200h640v240H0Z'/%3e%3cpath%20fill='%23fff'%20d='M0%20240h640v240H0Z'/%3e%3c/svg%3e"; const flagIT = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-it'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%20stroke-width='1pt'%3e%3cpath%20fill='%23fff'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23009246'%20d='M0%200h213.3v480H0z'/%3e%3cpath%20fill='%23ce2b37'%20d='M426.7%200H640v480H426.7z'/%3e%3c/g%3e%3c/svg%3e"; const flagNL = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-nl'%20viewBox='0%200%20640%20480'%3e%3cpath%20fill='%23ae1c28'%20d='M0%200h640v160H0z'/%3e%3cpath%20fill='%23fff'%20d='M0%20160h640v160H0z'/%3e%3cpath%20fill='%2321468b'%20d='M0%20320h640v160H0z'/%3e%3c/svg%3e"; const flagTH = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-th'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23f4f5f8'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%232d2a4a'%20d='M0%20162.5h640v160H0z'/%3e%3cpath%20fill='%23a51931'%20d='M0%200h640v82.5H0zm0%20400h640v80H0z'/%3e%3c/g%3e%3c/svg%3e"; const flagTR = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-tr'%20viewBox='0%200%20640%20480'%3e%3cg%20fill-rule='evenodd'%3e%3cpath%20fill='%23e30a17'%20d='M0%200h640v480H0z'/%3e%3cpath%20fill='%23fff'%20d='M407%20247.5c0%2066.2-54.6%20119.9-122%20119.9s-122-53.7-122-120%2054.6-119.8%20122-119.8%20122%2053.7%20122%20119.9'/%3e%3cpath%20fill='%23e30a17'%20d='M413%20247.5c0%2053-43.6%2095.9-97.5%2095.9s-97.6-43-97.6-96%2043.7-95.8%2097.6-95.8%2097.6%2042.9%2097.6%2095.9z'/%3e%3cpath%20fill='%23fff'%20d='m430.7%20191.5-1%2044.3-41.3%2011.2%2040.8%2014.5-1%2040.7%2026.5-31.8%2040.2%2014-23.2-34.1%2028.3-33.9-43.5%2012-25.8-37z'/%3e%3c/g%3e%3c/svg%3e"; const flagVN = "data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='flag-icons-vn'%20viewBox='0%200%20640%20480'%3e%3cdefs%3e%3cclipPath%20id='vn-a'%3e%3cpath%20fill-opacity='.7'%20d='M-85.3%200h682.6v512H-85.3z'/%3e%3c/clipPath%3e%3c/defs%3e%3cg%20fill-rule='evenodd'%20clip-path='url(%23vn-a)'%20transform='translate(80)scale(.9375)'%3e%3cpath%20fill='%23da251d'%20d='M-128%200h768v512h-768z'/%3e%3cpath%20fill='%23ff0'%20d='M349.6%20381%20260%20314.3l-89%2067.3L204%20272l-89-67.7%20110.1-1%2034.2-109.4L294%20203l110.1.1-88.5%2068.4%2033.9%20109.6z'/%3e%3c/g%3e%3c/svg%3e"; const FLAG_MAP = { en: flagUS, "zh-Hans": flagCN, ar: flagSA, ja: flagJP, ko: flagKR, fr: flagFR, de: flagDE, hi: flagIN, pt: flagPT, ru: flagRU, es: flagES, fil: flagPH, id: flagID, it: flagIT, nl: flagNL, th: flagTH, tr: flagTR, vi: flagVN }; function LanguageSelector({ dropdownClasses = "", btnClasses = "btn-ghost", contentClasses = "mt-16" }) { const { t, i18n } = useTranslation(); const currentLang = signals.useSignal(appOptionsManager.get("language") || i18n.language || "en"); hooks.useEffect(() => { const onLng = (lng) => { currentLang.value = lng || appOptionsManager.get("language") || "en"; }; i18n.on("languageChanged", onLng); const unsub = appOptionsManager.signal.subscribe(() => { const optLng = appOptionsManager.get("language"); if (optLng && optLng !== currentLang.value) currentLang.value = optLng; }); return () => { try { i18n.off("languageChanged", onLng); } catch { } try { unsub?.(); } catch { } }; }, []); const setLanguage = (code) => { playClickSound(); currentLang.value = code; appOptionsManager.set("language", code); i18n.changeLanguage(code); }; const currentLabel = LANGUAGES_CONFIG[currentLang.value]?.nameEn || currentLang.value; const currentFlag = FLAG_MAP[currentLang.value] || flagUS; return u("div", { class: cx("dropdown dropdown-end block", dropdownClasses), children: [ u( "div", { tabIndex: 0, role: "button", class: cx("btn group btn-sm gap-1.5 px-1.5 justify-start", btnClasses), "aria-label": t("Change Language"), children: [ u("div", { class: "w-5 flex items-center justify-center", children: u("img", { src: currentFlag, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" }) }), u("div", { class: "w-24 truncate text-xs text-left", children: currentLabel }), u( "svg", { width: "12px", height: "12px", class: "mt-px hidden size-2 fill-current opacity-60 sm:inline-block ml-auto", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 2048 2048", children: u("path", { d: "M1799 349l242 241-1017 1017L7 590l242-241 775 775 775-775z" }) } ) ] } ), u( "div", { tabIndex: 0, class: cx( "dropdown-content bg-base-200 text-base-content rounded-box mt-2 max-h-60 overflow-y-auto border-(length:--border) border-white/5 shadow-2xl outline-(length:--border) outline-black/5", contentClasses ), children: u("ul", { class: "menu w-64", children: [ u("li", { class: "menu-title text-xs", children: t("Change Language") }), Object.entries(LANGUAGES_CONFIG).map(([langTag, langConf]) => u("li", { children: u( "button", { class: cx("gap-3 px-2", currentLang.value === langTag && "[&_svg]:visible"), onClick: () => setLanguage(langTag), children: [ u("img", { src: FLAG_MAP[langTag] || flagUS, alt: "", class: "h-3 w-4 rounded-sm object-cover border border-base-content/10 bg-base-100" }), u("div", { class: "flex-1 min-w-0 truncate", children: langConf.nameEn }), u( "svg", { xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16", viewBox: "0 0 24 24", fill: "currentColor", class: "invisible h-3 w-3 shrink-0", children: u("path", { d: "M20.285 2l-11.285 11.567-5.286-5.011-3.714 3.716 9 8.728 15-15.285z" }) } ) ] } ) }, langTag)) ] }) } ) ] }); } function getDefaultExportFromCjs(x) { return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } var localizedFormat$2 = { exports: {} }; var localizedFormat$1 = localizedFormat$2.exports; var hasRequiredLocalizedFormat; function requireLocalizedFormat() { if (hasRequiredLocalizedFormat) return localizedFormat$2.exports; hasRequiredLocalizedFormat = 1; (function(module, exports$1) { !(function(e, t) { module.exports = t(); })(localizedFormat$1, (function() { var e = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }; return function(t, o, n) { var r = o.prototype, i = r.format; n.en.formats = e, r.format = function(t2) { void 0 === t2 && (t2 = "YYYY-MM-DDTHH:mm:ssZ"); var o2 = this.$locale().formats, n2 = (function(t3, o3) { return t3.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, (function(t4, n3, r2) { var i2 = r2 && r2.toUpperCase(); return n3 || o3[r2] || e[r2] || o3[i2].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, (function(e2, t5, o4) { return t5 || o4.slice(1); })); })); })(t2, void 0 === o2 ? {} : o2); return i.call(this, n2); }; }; })); })(localizedFormat$2); return localizedFormat$2.exports; } var localizedFormatExports = requireLocalizedFormat(); const localizedFormat = getDefaultExportFromCjs(localizedFormatExports); dayjs.extend(localizedFormat); function GlobalSettingsModal({ isOpen, onClose }) { const { t, i18n } = useTranslation(); const isArabic = (i18n.language || "").startsWith("ar"); const showResetConfirm = signals.useSignal(false); const now = dayjs(); const dateExamples = [ { token: "YYYY-MM-DD", value: now.format("YYYY-MM-DD"), localized: false }, { token: "DD/MM/YYYY", value: now.format("DD/MM/YYYY"), localized: false }, { token: "MMM DD, YYYY", value: now.format("MMM DD, YYYY"), localized: false }, { token: "L", value: now.format("L"), localized: true }, { token: "LL", value: now.format("LL"), localized: true } ]; const timeExamples = [ { token: "HH:mm:ss", value: now.format("HH:mm:ss"), localized: false }, { token: "hh:mm A", value: now.format("hh:mm A"), localized: false }, { token: "LT", value: now.format("LT"), localized: true }, { token: "LTS", value: now.format("LTS"), localized: true } ]; const combinedExamples = [ { token: "YYYY-MM-DD HH:mm:ss Z", value: now.format("YYYY-MM-DD HH:mm:ss Z"), localized: false }, { token: "MMM DD, YYYY [at] hh:mm A", value: now.format("MMM DD, YYYY [at] hh:mm A"), localized: false }, { token: "LLL", value: now.format("LLL"), localized: true } ]; return u( Modal, { show: isOpen, onClose, title: t("Global Settings"), actions: u( "button", { class: "btn btn-sm btn-circle btn-ghost", onClick: () => showResetConfirm.value = true, children: u(IconRestore, { size: 16 }) } ), children: [ u("div", { class: "space-y-4", children: [ u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Theme") }), u( ThemeSelector, { dropdownClasses: "", btnClasses: "btn-sm", contentClasses: "mt-2" } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Language") }), u( LanguageSelector, { dropdownClasses: "", btnClasses: "btn-sm", contentClasses: "mt-2" } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Font Family") }), u( "select", { class: "select select-bordered select-sm w-40", value: String(appOptionsManager.get("fontFamily") ?? "system"), onChange: (e) => { playClickSound(); const font = e.target.value; appOptionsManager.set("fontFamily", font); const shadowRoot = document.getElementById("tmd-root")?.shadowRoot; if (shadowRoot?.host) { if (font === "system") { shadowRoot.host.removeAttribute("data-font"); } else { shadowRoot.host.setAttribute("data-font", font); } } }, children: [ u("option", { value: "system", children: t("System Default") }), u("option", { value: "Lato", children: "Lato" }), u("option", { value: "Montserrat", children: "Montserrat" }), u("option", { value: "Noto Sans", children: "Noto Sans" }), u("option", { value: "Open Sans", children: "Open Sans" }), u("option", { value: "Raleway", children: "Raleway" }) ] } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("div", { class: "flex items-center", children: u("span", { class: "text-sm", children: t("Date Time Format") }) }), u( "input", { type: "text", class: "input input-bordered input-sm w-52", value: appOptionsManager.get("dateTimeFormat"), onChange: (e) => { appOptionsManager.set("dateTimeFormat", e.target?.value); } } ) ] }), u("div", { class: "flex justify-between items-center", children: [ u("span", { class: "text-sm", children: t("Sound Effects") }), u( "input", { type: "checkbox", class: "toggle toggle-primary", checked: appOptionsManager.get("soundEffects", true), onChange: (e) => { const checked = e.target?.checked; appOptionsManager.set("soundEffects", checked); if (checked) { playToggleOnSound(); } } } ) ] }), u("div", { class: `mt-1 rounded-box bg-base-200 p-2 text-xs relative ${isArabic ? "text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: [ u("div", { class: "font-semibold mb-2", children: t("Common Formats:") }), u( "a", { href: "https://day.js.org/docs/en/display/format", target: "_blank", rel: "noopener noreferrer", class: `absolute ${isArabic ? "left-2" : "right-2"} top-2 cursor-pointer opacity-70 hover:opacity-100`, children: u(IconBook, { size: 14 }) } ), u("div", { class: "grid gap-3 sm:grid-cols-2", children: [ u("div", { children: [ u("div", { class: "font-medium mb-1", children: t("Date Formats:") }), u("ul", { class: "space-y-1.5", children: dateExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [ u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }), u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }), u("span", { dir: "ltr", children: ex.value }), ex.localized ? u("span", { class: "opacity-60", children: [ " (", t("Localized"), ")" ] }) : null ] }, ex.token)) }) ] }), u("div", { children: [ u("div", { class: "font-medium mb-1", children: t("Time Formats:") }), u("ul", { class: "space-y-1.5", children: timeExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [ u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }), u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }), u("span", { dir: "ltr", children: ex.value }), ex.localized ? u("span", { class: "opacity-60", children: [ " (", t("Localized"), ")" ] }) : null ] }, ex.token)) }) ] }) ] }), u("div", { class: "divider my-2" }), u("div", { children: [ u("div", { class: "font-medium mb-1", children: t("Combined Examples:") }), u("ul", { class: "space-y-1.5", children: combinedExamples.map((ex) => u("li", { class: "flex items-center gap-2.5", children: [ u("span", { class: "font-mono px-2 py-0.5 rounded border border-base-300 bg-base-200/70 text-base-content/90", dir: "ltr", children: ex.token }), u("span", { class: "opacity-60", children: isArabic ? "←" : "→" }), u("span", { class: "break-all", dir: "ltr", children: ex.value }), ex.localized ? u("span", { class: "opacity-60", children: [ " (", t("Localized"), ")" ] }) : null ] }, ex.token)) }) ] }) ] }) ] }), u("div", { class: `rounded-box bg-base-200 p-2 text-xs mt-3 flex items-center justify-between ${isArabic ? "flex-row-reverse" : ""}`, children: [ u("div", { children: [ u("span", { class: "font-semibold", children: [ t("Version"), ":" ] }), " ", u("span", { class: "opacity-80", children: pkg.version }) ] }), u("div", { class: `flex items-center gap-4 ${isArabic ? "flex-row-reverse" : ""}`, children: [ typeof GM_info !== "undefined" && GM_info?.scriptHandler ? u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "https://chromewebstore.google.com/detail/aboccmnimgpjehlplnanplbhlccohhhn", target: "_blank", rel: "noopener noreferrer", children: [ u(IconBrandChrome, { size: 14 }), " ", t("Chrome") ] } ) : u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "http://greasyfork.icu/en/scripts/551198", target: "_blank", rel: "noopener noreferrer", children: [ u(IconFileTypeJs, { size: 14 }), " ", t("Userscript") ] } ), u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "https://exyezed.cc", target: "_blank", rel: "noopener noreferrer", children: [ u(IconHome, { size: 14 }), " ", t("Home") ] } ), u( "a", { class: "flex items-center gap-1 opacity-80 hover:opacity-100", href: "https://patreon.com/exyezed", target: "_blank", rel: "noopener noreferrer", children: [ u(IconBrandPatreon, { size: 14 }), " ", t("Patreon") ] } ) ] }) ] }), u(Modal, { show: showResetConfirm.value, onClose: () => showResetConfirm.value = false, title: t("Reset Settings"), class: "max-w-sm", children: u("div", { class: "space-y-2", children: [ u("p", { class: `text-sm${isArabic ? " text-right" : ""}`, dir: isArabic ? "rtl" : void 0, children: t("Are you sure you want to reset settings to defaults?") }), u("div", { class: "modal-action", children: [ u("button", { class: "btn btn-sm btn-ghost", onClick: () => showResetConfirm.value = false, children: t("Cancel") }), u( "button", { class: "btn btn-sm btn-warning", onClick: () => { appOptionsManager.set("theme", "light"); appOptionsManager.set("language", "en"); appOptionsManager.set("soundEffects", true); appOptionsManager.set("dateTimeFormat", "YYYY-MM-DD HH:mm:ss Z"); appOptionsManager.set("fontFamily", "system"); appOptionsManager.set("apiServer", "washington"); appOptionsManager.set("apiTimeout", 60); appOptionsManager.set("mediaType", "all"); appOptionsManager.set("includeRetweets", false); appOptionsManager.set("convertAnimatedGifs", false); appOptionsManager.set("convertGifsExternal", false); appOptionsManager.set("downloadConcurrency", 1); const shadowRoot = document.getElementById("tmd-root")?.shadowRoot; if (shadowRoot?.host) { shadowRoot.host.removeAttribute("data-font"); } i18n.changeLanguage("en"); showResetConfirm.value = false; }, children: u("span", { class: "flex items-center gap-2", children: [ u(IconRestore, { size: 16 }), t("Reset") ] }) } ) ] }) ] }) }) ] } ); } function MediaDownloaderModal({ isOpen, onClose }) { const { t } = useTranslation(); const activeTab = signals.useSignal("dashboard"); const showGlobalSettings = signals.useSignal(false); const loadFromDatabaseAccount = signals.useSignal(null); hooks.useEffect(() => { (async () => { try { const n = await mediaDownloaderDB.getAccountsCount(); dbState.totalAccounts.value = n; } catch { } })(); }, []); if (!isOpen) return null; const tabs = [ { id: "dashboard", label: t("Dashboard") }, { id: "auth", label: t("Auth") }, { id: "settings", label: t("Settings") }, { id: "database", label: t("Database") } ]; return u("div", { class: "modal modal-open", children: [ u("div", { class: "modal-box transition-all duration-300 ease-in-out", children: [ u("div", { class: "flex items-center justify-between mb-4", children: [ u(Title, {}), u("div", { class: "flex items-center gap-2", children: [ u( "button", { class: "btn btn-sm btn-circle btn-ghost", onClick: () => showGlobalSettings.value = true, children: u(IconSettings, { size: 18 }) } ), u( "button", { class: "btn btn-sm btn-circle btn-ghost", onClick: onClose, children: u(IconX, { size: 18 }) } ) ] }) ] }), u("div", { role: "tablist", class: "tabs tabs-lift mb-4", children: tabs.map((tab) => { const isActive = activeTab.value === tab.id; const isDatabase = tab.id === "database"; const cls = `tab ${isActive ? "tab-active" : ""} ${isDatabase ? "relative" : ""}`; return u( "a", { role: "tab", class: cls, onClick: () => { if (activeTab.value !== tab.id) { playTabClickSound(); activeTab.value = tab.id; } }, children: [ tab.label, isDatabase && dbState.totalAccounts.value > 0 && u("span", { class: "badge badge-accent badge-sm absolute -top-2 -right-2", children: dbState.totalAccounts.value }) ] }, tab.id ); }) }), u("div", { class: "flex-1 transition-[height,max-height] duration-300 ease-in-out", children: [ u("div", { class: activeTab.value === "dashboard" ? "block" : "hidden", children: u( Dashboard, { loadFromDatabaseAccount } ) }), u("div", { class: activeTab.value === "database" ? "block" : "hidden", children: u( Database, { isVisible: activeTab.value === "database", onLoadToDashboard: (accountInfo) => { loadFromDatabaseAccount.value = accountInfo; playTabClickSound(); activeTab.value = "dashboard"; } } ) }), u("div", { class: activeTab.value === "auth" ? "block" : "hidden", children: u(Auth, {}) }), u("div", { class: activeTab.value === "settings" ? "block" : "hidden", children: u(Settings, {}) }) ] }) ] }), u("div", { class: "modal-backdrop", onClick: onClose }), u( GlobalSettingsModal, { isOpen: showGlobalSettings.value, onClose: () => showGlobalSettings.value = false } ) ] }); } function MediaDownloaderApp() { useTranslation(); const currentTheme = signals.useSignal(appOptionsManager.get("theme")); const showMediaDownloader = signals.useSignal(false); const toggleMediaDownloader = () => { showMediaDownloader.value = !showMediaDownloader.value; }; hooks.useEffect(() => { const font = String(appOptionsManager.get("fontFamily") ?? "system"); const shadowRoot = document.getElementById("tmd-root")?.shadowRoot; if (shadowRoot?.host) { if (font !== "system") { shadowRoot.host.setAttribute("data-font", font); } else { shadowRoot.host.removeAttribute("data-font"); } } }, []); appOptionsManager.signal.subscribe(() => { currentTheme.value = appOptionsManager.get("theme"); }); const databaseDownloadProgress = signals.computed(() => { const accountId = databaseDownloadState.downloadingId.value; if (accountId === null) return 0; return databaseDownloadState.downloadProgress.value[accountId] ?? 0; }); const showDatabaseProgress = signals.computed(() => { return databaseDownloadState.downloadingId.value !== null && databaseDownloadProgress.value > 0; }); return u(preact.Fragment, { children: [ u("style", { children: ` @keyframes sparkle { 0%, 100% { filter: drop-shadow(0 0 8px rgba(29, 155, 240, 0.8)) drop-shadow(0 0 16px rgba(29, 155, 240, 0.6)); } 50% { filter: drop-shadow(0 0 12px rgba(29, 155, 240, 1)) drop-shadow(0 0 20px rgba(29, 155, 240, 0.8)) drop-shadow(0 0 28px rgba(29, 155, 240, 0.6)); } } .sparkle-icon { animation: sparkle 2s ease-in-out infinite; } ` }), u( "div", { onClick: toggleMediaDownloader, class: `sparkle-icon fixed top-[50%] left-[-15px] cursor-pointer transition-all duration-300 z-50 ${showMediaDownloader.value ? "translate-x-[15px] rotate-15" : ""} hover:translate-x-[15px] hover:rotate-15`, children: [ u(IconBrandTwitter, { size: 48, "stroke-width": 1.25, class: "text-white" }), dashboardState.isDownloading.value && !showMediaDownloader.value && u("div", { class: "absolute -bottom-1 -right-1 flex items-center justify-center", children: u( "div", { class: "radial-progress text-info bg-base-100", style: `--value:${dashboardState.downloadProgress.value}; --size:2rem; --thickness:4px;`, role: "progressbar", "aria-valuenow": Math.round(dashboardState.downloadProgress.value), children: u("span", { class: "text-[10px] font-bold", children: Math.round(dashboardState.downloadProgress.value) }) } ) }), showDatabaseProgress.value && !showMediaDownloader.value && u("div", { class: "absolute -bottom-1 -right-1 flex items-center justify-center", children: u( "div", { class: "radial-progress text-info bg-base-100", style: `--value:${databaseDownloadProgress.value}; --size:2rem; --thickness:4px;`, role: "progressbar", "aria-valuenow": Math.round(databaseDownloadProgress.value), children: u("span", { class: "text-[10px] font-bold", children: Math.round(databaseDownloadProgress.value) }) } ) }) ] } ), u("div", { "data-theme": currentTheme.value, children: [ u(ErrorBoundary, { children: u( MediaDownloaderModal, { isOpen: showMediaDownloader.value, onClose: () => showMediaDownloader.value = false } ) }), u("div", { id: "tmd-portal-root" }) ] }) ] }); } const styles = `@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--leading-normal:1.5;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-in-out:cubic-bezier(.4,0,.2,1);--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=cupcake]:checked),[data-theme=cupcake]{color-scheme:light;--color-base-100:oklch(97.788% .004 56.375);--color-base-200:oklch(93.982% .007 61.449);--color-base-300:oklch(91.586% .006 53.44);--color-base-content:oklch(23.574% .066 313.189);--color-primary:oklch(85% .138 181.071);--color-primary-content:oklch(43% .078 188.216);--color-secondary:oklch(89% .061 343.231);--color-secondary-content:oklch(45% .187 3.815);--color-accent:oklch(90% .076 70.697);--color-accent-content:oklch(47% .157 37.304);--color-neutral:oklch(27% .006 286.033);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(68% .169 237.323);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(69% .17 162.48);--color-success-content:oklch(26% .051 172.552);--color-warning:oklch(79% .184 86.047);--color-warning-content:oklch(28% .066 53.813);--color-error:oklch(64% .246 16.439);--color-error-content:oklch(27% .105 12.094);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:0}:root:has(input.theme-controller[value=bumblebee]:checked),[data-theme=bumblebee]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(92% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(85% .199 91.936);--color-primary-content:oklch(42% .095 57.708);--color-secondary:oklch(75% .183 55.934);--color-secondary-content:oklch(40% .123 38.172);--color-accent:oklch(0% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(37% .01 67.558);--color-neutral-content:oklch(92% .003 48.717);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(39% .09 240.876);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(39% .141 25.723);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=emerald]:checked),[data-theme=emerald]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(35.519% .032 262.988);--color-primary:oklch(76.662% .135 153.45);--color-primary-content:oklch(33.387% .04 162.24);--color-secondary:oklch(61.302% .202 261.294);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(72.772% .149 33.2);--color-accent-content:oklch(0% 0 0);--color-neutral:oklch(35.519% .032 262.988);--color-neutral-content:oklch(98.462% .001 247.838);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=corporate]:checked),[data-theme=corporate]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(22.389% .031 278.072);--color-primary:oklch(58% .158 241.966);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(55% .046 257.417);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(60% .118 184.704);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(0% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(60% .126 221.723);--color-info-content:oklch(100% 0 0);--color-success:oklch(62% .194 149.214);--color-success-content:oklch(100% 0 0);--color-warning:oklch(85% .199 91.936);--color-warning-content:oklch(0% 0 0);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(0% 0 0);--radius-selector:.25rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=synthwave]:checked),[data-theme=synthwave]{color-scheme:dark;--color-base-100:oklch(15% .09 281.288);--color-base-200:oklch(20% .09 281.288);--color-base-300:oklch(25% .09 281.288);--color-base-content:oklch(78% .115 274.713);--color-primary:oklch(71% .202 349.761);--color-primary-content:oklch(28% .109 3.907);--color-secondary:oklch(82% .111 230.318);--color-secondary-content:oklch(29% .066 243.157);--color-accent:oklch(75% .183 55.934);--color-accent-content:oklch(26% .079 36.259);--color-neutral:oklch(45% .24 277.023);--color-neutral-content:oklch(87% .065 274.039);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(77% .152 181.912);--color-success-content:oklch(27% .046 192.524);--color-warning:oklch(90% .182 98.111);--color-warning-content:oklch(42% .095 57.708);--color-error:oklch(73.7% .121 32.639);--color-error-content:oklch(23.501% .096 290.329);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=retro]:checked),[data-theme=retro]{color-scheme:light;--color-base-100:oklch(91.637% .034 90.515);--color-base-200:oklch(88.272% .049 91.774);--color-base-300:oklch(84.133% .065 90.856);--color-base-content:oklch(41% .112 45.904);--color-primary:oklch(80% .114 19.571);--color-primary-content:oklch(39% .141 25.723);--color-secondary:oklch(92% .084 155.995);--color-secondary-content:oklch(44% .119 151.328);--color-accent:oklch(68% .162 75.834);--color-accent-content:oklch(41% .112 45.904);--color-neutral:oklch(44% .011 73.639);--color-neutral-content:oklch(86% .005 56.366);--color-info:oklch(58% .158 241.966);--color-info-content:oklch(96% .059 95.617);--color-success:oklch(51% .096 186.391);--color-success-content:oklch(96% .059 95.617);--color-warning:oklch(64% .222 41.116);--color-warning-content:oklch(96% .059 95.617);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(40% .123 38.172);--radius-selector:.25rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=cyberpunk]:checked),[data-theme=cyberpunk]{color-scheme:light;--color-base-100:oklch(94.51% .179 104.32);--color-base-200:oklch(91.51% .179 104.32);--color-base-300:oklch(85.51% .179 104.32);--color-base-content:oklch(0% 0 0);--color-primary:oklch(74.22% .209 6.35);--color-primary-content:oklch(14.844% .041 6.35);--color-secondary:oklch(83.33% .184 204.72);--color-secondary-content:oklch(16.666% .036 204.72);--color-accent:oklch(71.86% .217 310.43);--color-accent-content:oklch(14.372% .043 310.43);--color-neutral:oklch(23.04% .065 269.31);--color-neutral-content:oklch(94.51% .179 104.32);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=valentine]:checked),[data-theme=valentine]{color-scheme:light;--color-base-100:oklch(97% .014 343.198);--color-base-200:oklch(94% .028 342.258);--color-base-300:oklch(89% .061 343.231);--color-base-content:oklch(52% .223 3.958);--color-primary:oklch(65% .241 354.308);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(62% .265 303.9);--color-secondary-content:oklch(97% .014 308.299);--color-accent:oklch(82% .111 230.318);--color-accent-content:oklch(39% .09 240.876);--color-neutral:oklch(40% .153 2.432);--color-neutral-content:oklch(89% .061 343.231);--color-info:oklch(86% .127 207.078);--color-info-content:oklch(44% .11 240.79);--color-success:oklch(84% .143 164.978);--color-success-content:oklch(43% .095 166.913);--color-warning:oklch(75% .183 55.934);--color-warning-content:oklch(26% .079 36.259);--color-error:oklch(63% .237 25.331);--color-error-content:oklch(97% .013 17.38);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=halloween]:checked),[data-theme=halloween]{color-scheme:dark;--color-base-100:oklch(21% .006 56.043);--color-base-200:oklch(14% .004 49.25);--color-base-300:oklch(0% 0 0);--color-base-content:oklch(84.955% 0 0);--color-primary:oklch(77.48% .204 60.62);--color-primary-content:oklch(19.693% .004 196.779);--color-secondary:oklch(45.98% .248 305.03);--color-secondary-content:oklch(89.196% .049 305.03);--color-accent:oklch(64.8% .223 136.073);--color-accent-content:oklch(0% 0 0);--color-neutral:oklch(24.371% .046 65.681);--color-neutral-content:oklch(84.874% .009 65.681);--color-info:oklch(54.615% .215 262.88);--color-info-content:oklch(90.923% .043 262.88);--color-success:oklch(62.705% .169 149.213);--color-success-content:oklch(12.541% .033 149.213);--color-warning:oklch(66.584% .157 58.318);--color-warning-content:oklch(13.316% .031 58.318);--color-error:oklch(65.72% .199 27.33);--color-error-content:oklch(13.144% .039 27.33);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=garden]:checked),[data-theme=garden]{color-scheme:light;--color-base-100:oklch(92.951% .002 17.197);--color-base-200:oklch(86.445% .002 17.197);--color-base-300:oklch(79.938% .001 17.197);--color-base-content:oklch(16.961% .001 17.32);--color-primary:oklch(62.45% .278 3.836);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(48.495% .11 355.095);--color-secondary-content:oklch(89.699% .022 355.095);--color-accent:oklch(56.273% .054 154.39);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(24.155% .049 89.07);--color-neutral-content:oklch(92.951% .002 17.197);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=forest]:checked),[data-theme=forest]{color-scheme:dark;--color-base-100:oklch(20.84% .008 17.911);--color-base-200:oklch(18.522% .007 17.911);--color-base-300:oklch(16.203% .007 17.911);--color-base-content:oklch(83.768% .001 17.911);--color-primary:oklch(68.628% .185 148.958);--color-primary-content:oklch(0% 0 0);--color-secondary:oklch(69.776% .135 168.327);--color-secondary-content:oklch(13.955% .027 168.327);--color-accent:oklch(70.628% .119 185.713);--color-accent-content:oklch(14.125% .023 185.713);--color-neutral:oklch(30.698% .039 171.364);--color-neutral-content:oklch(86.139% .007 171.364);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=aqua]:checked),[data-theme=aqua]{color-scheme:dark;--color-base-100:oklch(37% .146 265.522);--color-base-200:oklch(28% .091 267.935);--color-base-300:oklch(22% .091 267.935);--color-base-content:oklch(90% .058 230.902);--color-primary:oklch(85.661% .144 198.645);--color-primary-content:oklch(40.124% .068 197.603);--color-secondary:oklch(60.682% .108 309.782);--color-secondary-content:oklch(96% .016 293.756);--color-accent:oklch(93.426% .102 94.555);--color-accent-content:oklch(18.685% .02 94.555);--color-neutral:oklch(27% .146 265.522);--color-neutral-content:oklch(80% .146 265.522);--color-info:oklch(54.615% .215 262.88);--color-info-content:oklch(90.923% .043 262.88);--color-success:oklch(62.705% .169 149.213);--color-success-content:oklch(12.541% .033 149.213);--color-warning:oklch(66.584% .157 58.318);--color-warning-content:oklch(27% .077 45.635);--color-error:oklch(73.95% .19 27.33);--color-error-content:oklch(14.79% .038 27.33);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=lofi]:checked),[data-theme=lofi]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(94% 0 0);--color-base-content:oklch(0% 0 0);--color-primary:oklch(15.906% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(21.455% .001 17.278);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(26.861% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(0% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(79.54% .103 205.9);--color-info-content:oklch(15.908% .02 205.9);--color-success:oklch(90.13% .153 164.14);--color-success-content:oklch(18.026% .03 164.14);--color-warning:oklch(88.37% .135 79.94);--color-warning-content:oklch(17.674% .027 79.94);--color-error:oklch(78.66% .15 28.47);--color-error-content:oklch(15.732% .03 28.47);--radius-selector:2rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=pastel]:checked),[data-theme=pastel]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98.462% .001 247.838);--color-base-300:oklch(92.462% .001 247.838);--color-base-content:oklch(20% 0 0);--color-primary:oklch(90% .063 306.703);--color-primary-content:oklch(49% .265 301.924);--color-secondary:oklch(89% .058 10.001);--color-secondary-content:oklch(51% .222 16.935);--color-accent:oklch(90% .093 164.15);--color-accent-content:oklch(50% .118 165.612);--color-neutral:oklch(55% .046 257.417);--color-neutral-content:oklch(92% .013 255.508);--color-info:oklch(86% .127 207.078);--color-info-content:oklch(52% .105 223.128);--color-success:oklch(87% .15 154.449);--color-success-content:oklch(52% .154 150.069);--color-warning:oklch(83% .128 66.29);--color-warning-content:oklch(55% .195 38.402);--color-error:oklch(80% .114 19.571);--color-error-content:oklch(50% .213 27.518);--radius-selector:1rem;--radius-field:2rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:0;--noise:0}:root:has(input.theme-controller[value=fantasy]:checked),[data-theme=fantasy]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(93% 0 0);--color-base-300:oklch(86% 0 0);--color-base-content:oklch(27.807% .029 256.847);--color-primary:oklch(37.45% .189 325.02);--color-primary-content:oklch(87.49% .037 325.02);--color-secondary:oklch(53.92% .162 241.36);--color-secondary-content:oklch(90.784% .032 241.36);--color-accent:oklch(75.98% .204 56.72);--color-accent-content:oklch(15.196% .04 56.72);--color-neutral:oklch(27.807% .029 256.847);--color-neutral-content:oklch(85.561% .005 256.847);--color-info:oklch(72.06% .191 231.6);--color-info-content:oklch(0% 0 0);--color-success:oklch(64.8% .15 160);--color-success-content:oklch(0% 0 0);--color-warning:oklch(84.71% .199 83.87);--color-warning-content:oklch(0% 0 0);--color-error:oklch(71.76% .221 22.18);--color-error-content:oklch(0% 0 0);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=wireframe]:checked),[data-theme=wireframe]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97% 0 0);--color-base-300:oklch(94% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(87% 0 0);--color-primary-content:oklch(26% 0 0);--color-secondary:oklch(87% 0 0);--color-secondary-content:oklch(26% 0 0);--color-accent:oklch(87% 0 0);--color-accent-content:oklch(26% 0 0);--color-neutral:oklch(87% 0 0);--color-neutral-content:oklch(26% 0 0);--color-info:oklch(44% .11 240.79);--color-info-content:oklch(90% .058 230.902);--color-success:oklch(43% .095 166.913);--color-success-content:oklch(90% .093 164.15);--color-warning:oklch(47% .137 46.201);--color-warning-content:oklch(92% .12 95.746);--color-error:oklch(44% .177 26.899);--color-error-content:oklch(88% .062 18.334);--radius-selector:0rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=black]:checked),[data-theme=black]{color-scheme:dark;--color-base-100:oklch(0% 0 0);--color-base-200:oklch(19% 0 0);--color-base-300:oklch(22% 0 0);--color-base-content:oklch(87.609% 0 0);--color-primary:oklch(35% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(35% 0 0);--color-secondary-content:oklch(100% 0 0);--color-accent:oklch(35% 0 0);--color-accent-content:oklch(100% 0 0);--color-neutral:oklch(35% 0 0);--color-neutral-content:oklch(100% 0 0);--color-info:oklch(45.201% .313 264.052);--color-info-content:oklch(89.04% .062 264.052);--color-success:oklch(51.975% .176 142.495);--color-success-content:oklch(90.395% .035 142.495);--color-warning:oklch(96.798% .211 109.769);--color-warning-content:oklch(19.359% .042 109.769);--color-error:oklch(62.795% .257 29.233);--color-error-content:oklch(12.559% .051 29.233);--radius-selector:0rem;--radius-field:0rem;--radius-box:0rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=luxury]:checked),[data-theme=luxury]{color-scheme:dark;--color-base-100:oklch(14.076% .004 285.822);--color-base-200:oklch(20.219% .004 308.229);--color-base-300:oklch(23.219% .004 308.229);--color-base-content:oklch(75.687% .123 76.89);--color-primary:oklch(100% 0 0);--color-primary-content:oklch(20% 0 0);--color-secondary:oklch(27.581% .064 261.069);--color-secondary-content:oklch(85.516% .012 261.069);--color-accent:oklch(36.674% .051 338.825);--color-accent-content:oklch(87.334% .01 338.825);--color-neutral:oklch(24.27% .057 59.825);--color-neutral-content:oklch(93.203% .089 90.861);--color-info:oklch(79.061% .121 237.133);--color-info-content:oklch(15.812% .024 237.133);--color-success:oklch(78.119% .192 132.154);--color-success-content:oklch(15.623% .038 132.154);--color-warning:oklch(86.127% .136 102.891);--color-warning-content:oklch(17.225% .027 102.891);--color-error:oklch(71.753% .176 22.568);--color-error-content:oklch(14.35% .035 22.568);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dracula]:checked),[data-theme=dracula]{color-scheme:dark;--color-base-100:oklch(28.822% .022 277.508);--color-base-200:oklch(26.805% .02 277.508);--color-base-300:oklch(24.787% .019 277.508);--color-base-content:oklch(97.747% .007 106.545);--color-primary:oklch(75.461% .183 346.812);--color-primary-content:oklch(15.092% .036 346.812);--color-secondary:oklch(74.202% .148 301.883);--color-secondary-content:oklch(14.84% .029 301.883);--color-accent:oklch(83.392% .124 66.558);--color-accent-content:oklch(16.678% .024 66.558);--color-neutral:oklch(39.445% .032 275.524);--color-neutral-content:oklch(87.889% .006 275.524);--color-info:oklch(88.263% .093 212.846);--color-info-content:oklch(17.652% .018 212.846);--color-success:oklch(87.099% .219 148.024);--color-success-content:oklch(17.419% .043 148.024);--color-warning:oklch(95.533% .134 112.757);--color-warning-content:oklch(19.106% .026 112.757);--color-error:oklch(68.22% .206 24.43);--color-error-content:oklch(13.644% .041 24.43);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=cmyk]:checked),[data-theme=cmyk]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(95% 0 0);--color-base-300:oklch(90% 0 0);--color-base-content:oklch(20% 0 0);--color-primary:oklch(71.772% .133 239.443);--color-primary-content:oklch(14.354% .026 239.443);--color-secondary:oklch(64.476% .202 359.339);--color-secondary-content:oklch(12.895% .04 359.339);--color-accent:oklch(94.228% .189 105.306);--color-accent-content:oklch(18.845% .037 105.306);--color-neutral:oklch(21.778% 0 0);--color-neutral-content:oklch(84.355% 0 0);--color-info:oklch(68.475% .094 217.284);--color-info-content:oklch(13.695% .018 217.284);--color-success:oklch(46.949% .162 321.406);--color-success-content:oklch(89.389% .032 321.406);--color-warning:oklch(71.236% .159 52.023);--color-warning-content:oklch(14.247% .031 52.023);--color-error:oklch(62.013% .208 28.717);--color-error-content:oklch(12.402% .041 28.717);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=autumn]:checked),[data-theme=autumn]{color-scheme:light;--color-base-100:oklch(95.814% 0 0);--color-base-200:oklch(89.107% 0 0);--color-base-300:oklch(82.4% 0 0);--color-base-content:oklch(19.162% 0 0);--color-primary:oklch(40.723% .161 17.53);--color-primary-content:oklch(88.144% .032 17.53);--color-secondary:oklch(61.676% .169 23.865);--color-secondary-content:oklch(12.335% .033 23.865);--color-accent:oklch(73.425% .094 60.729);--color-accent-content:oklch(14.685% .018 60.729);--color-neutral:oklch(54.367% .037 51.902);--color-neutral-content:oklch(90.873% .007 51.902);--color-info:oklch(69.224% .097 207.284);--color-info-content:oklch(13.844% .019 207.284);--color-success:oklch(60.995% .08 174.616);--color-success-content:oklch(12.199% .016 174.616);--color-warning:oklch(70.081% .164 56.844);--color-warning-content:oklch(14.016% .032 56.844);--color-error:oklch(53.07% .241 24.16);--color-error-content:oklch(90.614% .048 24.16);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=business]:checked),[data-theme=business]{color-scheme:dark;--color-base-100:oklch(24.353% 0 0);--color-base-200:oklch(22.648% 0 0);--color-base-300:oklch(20.944% 0 0);--color-base-content:oklch(84.87% 0 0);--color-primary:oklch(41.703% .099 251.473);--color-primary-content:oklch(88.34% .019 251.473);--color-secondary:oklch(64.092% .027 229.389);--color-secondary-content:oklch(12.818% .005 229.389);--color-accent:oklch(67.271% .167 35.791);--color-accent-content:oklch(13.454% .033 35.791);--color-neutral:oklch(27.441% .013 253.041);--color-neutral-content:oklch(85.488% .002 253.041);--color-info:oklch(62.616% .143 240.033);--color-info-content:oklch(12.523% .028 240.033);--color-success:oklch(70.226% .094 156.596);--color-success-content:oklch(14.045% .018 156.596);--color-warning:oklch(77.482% .115 81.519);--color-warning-content:oklch(15.496% .023 81.519);--color-error:oklch(51.61% .146 29.674);--color-error-content:oklch(90.322% .029 29.674);--radius-selector:0rem;--radius-field:.25rem;--radius-box:.25rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=acid]:checked),[data-theme=acid]{color-scheme:light;--color-base-100:oklch(98% 0 0);--color-base-200:oklch(95% 0 0);--color-base-300:oklch(91% 0 0);--color-base-content:oklch(0% 0 0);--color-primary:oklch(71.9% .357 330.759);--color-primary-content:oklch(14.38% .071 330.759);--color-secondary:oklch(73.37% .224 48.25);--color-secondary-content:oklch(14.674% .044 48.25);--color-accent:oklch(92.78% .264 122.962);--color-accent-content:oklch(18.556% .052 122.962);--color-neutral:oklch(21.31% .128 278.68);--color-neutral-content:oklch(84.262% .025 278.68);--color-info:oklch(60.72% .227 252.05);--color-info-content:oklch(12.144% .045 252.05);--color-success:oklch(85.72% .266 158.53);--color-success-content:oklch(17.144% .053 158.53);--color-warning:oklch(91.01% .212 100.5);--color-warning-content:oklch(18.202% .042 100.5);--color-error:oklch(64.84% .293 29.349);--color-error-content:oklch(12.968% .058 29.349);--radius-selector:1rem;--radius-field:1rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=lemonade]:checked),[data-theme=lemonade]{color-scheme:light;--color-base-100:oklch(98.71% .02 123.72);--color-base-200:oklch(91.8% .018 123.72);--color-base-300:oklch(84.89% .017 123.72);--color-base-content:oklch(19.742% .004 123.72);--color-primary:oklch(58.92% .199 134.6);--color-primary-content:oklch(11.784% .039 134.6);--color-secondary:oklch(77.75% .196 111.09);--color-secondary-content:oklch(15.55% .039 111.09);--color-accent:oklch(85.39% .201 100.73);--color-accent-content:oklch(17.078% .04 100.73);--color-neutral:oklch(30.98% .075 108.6);--color-neutral-content:oklch(86.196% .015 108.6);--color-info:oklch(86.19% .047 224.14);--color-info-content:oklch(17.238% .009 224.14);--color-success:oklch(86.19% .047 157.85);--color-success-content:oklch(17.238% .009 157.85);--color-warning:oklch(86.19% .047 102.15);--color-warning-content:oklch(17.238% .009 102.15);--color-error:oklch(86.19% .047 25.85);--color-error-content:oklch(17.238% .009 25.85);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=night]:checked),[data-theme=night]{color-scheme:dark;--color-base-100:oklch(20.768% .039 265.754);--color-base-200:oklch(19.314% .037 265.754);--color-base-300:oklch(17.86% .034 265.754);--color-base-content:oklch(84.153% .007 265.754);--color-primary:oklch(75.351% .138 232.661);--color-primary-content:oklch(15.07% .027 232.661);--color-secondary:oklch(68.011% .158 276.934);--color-secondary-content:oklch(13.602% .031 276.934);--color-accent:oklch(72.36% .176 350.048);--color-accent-content:oklch(14.472% .035 350.048);--color-neutral:oklch(27.949% .036 260.03);--color-neutral-content:oklch(85.589% .007 260.03);--color-info:oklch(68.455% .148 237.251);--color-info-content:oklch(0% 0 0);--color-success:oklch(78.452% .132 181.911);--color-success-content:oklch(15.69% .026 181.911);--color-warning:oklch(83.242% .139 82.95);--color-warning-content:oklch(16.648% .027 82.95);--color-error:oklch(71.785% .17 13.118);--color-error-content:oklch(14.357% .034 13.118);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=coffee]:checked),[data-theme=coffee]{color-scheme:dark;--color-base-100:oklch(24% .023 329.708);--color-base-200:oklch(21% .021 329.708);--color-base-300:oklch(16% .019 329.708);--color-base-content:oklch(72.354% .092 79.129);--color-primary:oklch(71.996% .123 62.756);--color-primary-content:oklch(14.399% .024 62.756);--color-secondary:oklch(34.465% .029 199.194);--color-secondary-content:oklch(86.893% .005 199.194);--color-accent:oklch(42.621% .074 224.389);--color-accent-content:oklch(88.524% .014 224.389);--color-neutral:oklch(16.51% .015 326.261);--color-neutral-content:oklch(83.302% .003 326.261);--color-info:oklch(79.49% .063 184.558);--color-info-content:oklch(15.898% .012 184.558);--color-success:oklch(74.722% .072 131.116);--color-success-content:oklch(14.944% .014 131.116);--color-warning:oklch(88.15% .14 87.722);--color-warning-content:oklch(17.63% .028 87.722);--color-error:oklch(77.318% .128 31.871);--color-error-content:oklch(15.463% .025 31.871);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=winter]:checked),[data-theme=winter]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(97.466% .011 259.822);--color-base-300:oklch(93.268% .016 262.751);--color-base-content:oklch(41.886% .053 255.824);--color-primary:oklch(56.86% .255 257.57);--color-primary-content:oklch(91.372% .051 257.57);--color-secondary:oklch(42.551% .161 282.339);--color-secondary-content:oklch(88.51% .032 282.339);--color-accent:oklch(59.939% .191 335.171);--color-accent-content:oklch(11.988% .038 335.171);--color-neutral:oklch(19.616% .063 257.651);--color-neutral-content:oklch(83.923% .012 257.651);--color-info:oklch(88.127% .085 214.515);--color-info-content:oklch(17.625% .017 214.515);--color-success:oklch(80.494% .077 197.823);--color-success-content:oklch(16.098% .015 197.823);--color-warning:oklch(89.172% .045 71.47);--color-warning-content:oklch(17.834% .009 71.47);--color-error:oklch(73.092% .11 20.076);--color-error-content:oklch(14.618% .022 20.076);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=dim]:checked),[data-theme=dim]{color-scheme:dark;--color-base-100:oklch(30.857% .023 264.149);--color-base-200:oklch(28.036% .019 264.182);--color-base-300:oklch(26.346% .018 262.177);--color-base-content:oklch(82.901% .031 222.959);--color-primary:oklch(86.133% .141 139.549);--color-primary-content:oklch(17.226% .028 139.549);--color-secondary:oklch(73.375% .165 35.353);--color-secondary-content:oklch(14.675% .033 35.353);--color-accent:oklch(74.229% .133 311.379);--color-accent-content:oklch(14.845% .026 311.379);--color-neutral:oklch(24.731% .02 264.094);--color-neutral-content:oklch(82.901% .031 222.959);--color-info:oklch(86.078% .142 206.182);--color-info-content:oklch(17.215% .028 206.182);--color-success:oklch(86.171% .142 166.534);--color-success-content:oklch(17.234% .028 166.534);--color-warning:oklch(86.163% .142 94.818);--color-warning-content:oklch(17.232% .028 94.818);--color-error:oklch(82.418% .099 33.756);--color-error-content:oklch(16.483% .019 33.756);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=nord]:checked),[data-theme=nord]{color-scheme:light;--color-base-100:oklch(95.127% .007 260.731);--color-base-200:oklch(93.299% .01 261.788);--color-base-300:oklch(89.925% .016 262.749);--color-base-content:oklch(32.437% .022 264.182);--color-primary:oklch(59.435% .077 254.027);--color-primary-content:oklch(11.887% .015 254.027);--color-secondary:oklch(69.651% .059 248.687);--color-secondary-content:oklch(13.93% .011 248.687);--color-accent:oklch(77.464% .062 217.469);--color-accent-content:oklch(15.492% .012 217.469);--color-neutral:oklch(45.229% .035 264.131);--color-neutral-content:oklch(89.925% .016 262.749);--color-info:oklch(69.207% .062 332.664);--color-info-content:oklch(13.841% .012 332.664);--color-success:oklch(76.827% .074 131.063);--color-success-content:oklch(15.365% .014 131.063);--color-warning:oklch(85.486% .089 84.093);--color-warning-content:oklch(17.097% .017 84.093);--color-error:oklch(60.61% .12 15.341);--color-error-content:oklch(12.122% .024 15.341);--radius-selector:1rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=sunset]:checked),[data-theme=sunset]{color-scheme:dark;--color-base-100:oklch(22% .019 237.69);--color-base-200:oklch(20% .019 237.69);--color-base-300:oklch(18% .019 237.69);--color-base-content:oklch(77.383% .043 245.096);--color-primary:oklch(74.703% .158 39.947);--color-primary-content:oklch(14.94% .031 39.947);--color-secondary:oklch(72.537% .177 2.72);--color-secondary-content:oklch(14.507% .035 2.72);--color-accent:oklch(71.294% .166 299.844);--color-accent-content:oklch(14.258% .033 299.844);--color-neutral:oklch(26% .019 237.69);--color-neutral-content:oklch(70% .019 237.69);--color-info:oklch(85.559% .085 206.015);--color-info-content:oklch(17.111% .017 206.015);--color-success:oklch(85.56% .085 144.778);--color-success-content:oklch(17.112% .017 144.778);--color-warning:oklch(85.569% .084 74.427);--color-warning-content:oklch(17.113% .016 74.427);--color-error:oklch(85.511% .078 16.886);--color-error-content:oklch(17.102% .015 16.886);--radius-selector:1rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:0;--noise:0}:root:has(input.theme-controller[value=caramellatte]:checked),[data-theme=caramellatte]{color-scheme:light;--color-base-100:oklch(98% .016 73.684);--color-base-200:oklch(95% .038 75.164);--color-base-300:oklch(90% .076 70.697);--color-base-content:oklch(40% .123 38.172);--color-primary:oklch(0% 0 0);--color-primary-content:oklch(100% 0 0);--color-secondary:oklch(22.45% .075 37.85);--color-secondary-content:oklch(90% .076 70.697);--color-accent:oklch(46.44% .111 37.85);--color-accent-content:oklch(90% .076 70.697);--color-neutral:oklch(55% .195 38.402);--color-neutral-content:oklch(98% .016 73.684);--color-info:oklch(42% .199 265.638);--color-info-content:oklch(90% .076 70.697);--color-success:oklch(43% .095 166.913);--color-success-content:oklch(90% .076 70.697);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(70% .191 22.216);--color-error-content:oklch(39% .141 25.723);--radius-selector:2rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:1}:root:has(input.theme-controller[value=abyss]:checked),[data-theme=abyss]{color-scheme:dark;--color-base-100:oklch(20% .08 209);--color-base-200:oklch(15% .08 209);--color-base-300:oklch(10% .08 209);--color-base-content:oklch(90% .076 70.697);--color-primary:oklch(92% .2653 125);--color-primary-content:oklch(50% .2653 125);--color-secondary:oklch(83.27% .0764 298.3);--color-secondary-content:oklch(43.27% .0764 298.3);--color-accent:oklch(43% 0 0);--color-accent-content:oklch(98% 0 0);--color-neutral:oklch(30% .08 209);--color-neutral-content:oklch(90% .076 70.697);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(79% .209 151.711);--color-success-content:oklch(26% .065 152.934);--color-warning:oklch(84.8% .1962 84.62);--color-warning-content:oklch(44.8% .1962 84.62);--color-error:oklch(65% .1985 24.22);--color-error-content:oklch(27% .1985 24.22);--radius-selector:2rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=silk]:checked),[data-theme=silk]{color-scheme:light;--color-base-100:oklch(97% .0035 67.78);--color-base-200:oklch(95% .0081 61.42);--color-base-300:oklch(90% .0081 61.42);--color-base-content:oklch(40% .0081 61.42);--color-primary:oklch(23.27% .0249 284.3);--color-primary-content:oklch(94.22% .2505 117.44);--color-secondary:oklch(23.27% .0249 284.3);--color-secondary-content:oklch(73.92% .2135 50.94);--color-accent:oklch(23.27% .0249 284.3);--color-accent-content:oklch(88.92% .2061 189.9);--color-neutral:oklch(20% 0 0);--color-neutral-content:oklch(80% .0081 61.42);--color-info:oklch(80.39% .1148 241.68);--color-info-content:oklch(30.39% .1148 241.68);--color-success:oklch(83.92% .0901 136.87);--color-success-content:oklch(23.92% .0901 136.87);--color-warning:oklch(83.92% .1085 80);--color-warning-content:oklch(43.92% .1085 80);--color-error:oklch(75.1% .1814 22.37);--color-error-content:oklch(35.1% .1814 22.37);--radius-selector:2rem;--radius-field:.5rem;--radius-box:1rem;--size-selector:.25rem;--size-field:.25rem;--border:2px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab,red,red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}@property --radialprogress{syntax: "<percentage>"; inherits: true; initial-value: 0%;}:root:not(span){overflow:var(--page-overflow)}:root{--page-scroll-bg-on:linear-gradient(var(--root-bg),var(--root-bg))var(--root-bg)}@supports (color:color-mix(in lab,red,red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg),var(--root-bg))color-mix(in srgb,var(--root-bg),oklch(0% 0 0) calc(var(--page-has-backdrop,0)*40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset); else: unset)}:root:root{background:var(--page-scroll-bg,var(--root-bg,var(--color-base-100)))}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background-color:var(--root-bg,var(--color-base-100));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}}@layer components;@layer utilities{@layer daisyui.l1.l2.l3{.diff{webkit-user-select:none;-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:95cqi;max-width:95cqi}.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-1:focus-visible) .diff-resizer{min-width:5cqi;max-width:5cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:5cqi;max-width:5cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:95cqi;max-width:95cqi}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}.tooltip{--tt-bg:var(--color-neutral);--tt-off: calc(100% + .5rem) ;--tt-tail: calc(100% + 1px + .25rem) ;display:inline-block;position:relative}.tooltip>.tooltip-content,.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);display:block;position:absolute}@media(prefers-reduced-motion:no-preference){.tooltip>.tooltip-content,.tooltip[data-tip]:before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem}@media(prefers-reduced-motion:no-preference){:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media(hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field),var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)),var(--tab-border-color)calc(69% - var(--border) + .25px),var(--tab-border-color)69%,var(--tab-bg) calc(69% + .25px) ;order:var(--tab-order);height:var(--tab-height);padding-inline:var(--tab-p);border-color:#0000;font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media(prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px #00000003,inset 0 -1px #ffffff03}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}.dropdown{position-area:var(--anchor-v,bottom)var(--anchor-h,span-right);display:inline-block;position:relative}.dropdown>:not(:has(~[class*=dropdown-content])):focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.dropdown>:not(:has(~[class*=dropdown-content])):focus{outline-offset:2px;outline:2px solid #0000}}.dropdown .dropdown-content{position:absolute}.dropdown.dropdown-close .dropdown-content,.dropdown:not(details,.dropdown-open,.dropdown-hover:hover,:focus-within) .dropdown-content,.dropdown.dropdown-hover:not(:hover) [tabindex]:first-child:focus:not(:focus-visible)~.dropdown-content{transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover],.dropdown .dropdown-content{z-index:999}@media(prefers-reduced-motion:no-preference){.dropdown[popover],.dropdown .dropdown-content{transition-behavior:allow-discrete;transition-property:opacity,scale,display;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1);animation:.2s dropdown}}@starting-style{.dropdown[popover],.dropdown .dropdown-content{opacity:0;scale:95%}}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within)>[tabindex]:first-child{pointer-events:none}:is(.dropdown:not(.dropdown-close).dropdown-open,.dropdown:not(.dropdown-close):not(.dropdown-hover):focus,.dropdown:not(.dropdown-close):focus-within) .dropdown-content,.dropdown:not(.dropdown-close).dropdown-hover:hover .dropdown-content{opacity:1;scale:100%}.dropdown:is(details) summary::-webkit-details-marker{display:none}.dropdown:where([popover]){background:0 0}.dropdown[popover]{color:inherit;position:fixed}@supports not (position-area:bottom){.dropdown[popover]{margin:auto}.dropdown[popover].dropdown-close{transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover].dropdown-open:not(:popover-open){transform-origin:top;opacity:0;display:none;scale:95%}.dropdown[popover]::backdrop{background-color:oklab(0% none none/.3)}}:is(.dropdown[popover].dropdown-close,.dropdown[popover]:not(.dropdown-open,:popover-open)){transform-origin:top;opacity:0;display:none;scale:95%}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%)) inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab,red,red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab,red,red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.btn{--btn-noise:var(--fx-noise)}@media(hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.collapse{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:hidden}@media(prefers-reduced-motion:no-preference){.collapse{transition:grid-template-rows .2s}}.collapse>input:is([type=checkbox],[type=radio]){appearance:none;opacity:0;z-index:1;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),.collapse:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){content-visibility:visible;min-height:fit-content}@supports not (content-visibility:visible){.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){visibility:visible}}.collapse:focus-visible,.collapse:has(>input:is([type=checkbox],[type=radio]):focus-visible),.collapse:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}.collapse:not(.collapse-close)>input[type=checkbox],.collapse:not(.collapse-close)>input[type=radio]:not(:checked),.collapse:not(.collapse-close)>.collapse-title{cursor:pointer}:is(.collapse[tabindex]:focus:not(.collapse-close,.collapse[open]),.collapse[tabindex]:focus-within:not(.collapse-close,.collapse[open]))>.collapse-title{cursor:unset}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}.collapse:is(details){width:100%}@media(prefers-reduced-motion:no-preference){.collapse:is(details)::details-content{transition:content-visibility .2s allow-discrete,visibility .2s allow-discrete,padding .2s ease-out,background-color .2s ease-out,height .2s;interpolate-size:allow-keywords;height:0}.collapse:is(details):where([open])::details-content{height:auto}}.collapse:is(details) summary{display:block;position:relative}.collapse:is(details) summary::-webkit-details-marker{display:none}.collapse:is(details)>.collapse-content{content-visibility:visible}.collapse:is(details) summary{outline:none}.collapse-content{content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media(prefers-reduced-motion:no-preference){.collapse-content{transition:content-visibility .2s allow-discrete,visibility .2s allow-discrete,padding .2s ease-out,background-color .2s ease-out}}.radial-progress{height:var(--size);width:var(--size);vertical-align:middle;box-sizing:content-box;--value:0;--size:5rem;--thickness:calc(var(--size)/10);--radialprogress:calc(var(--value)*1%);background-color:#0000;border-radius:3.40282e38px;place-content:center;transition:--radialprogress .3s linear;display:inline-grid;position:relative}.radial-progress:before{content:"";background:radial-gradient(farthest-side,currentColor 98%,#0000)top/var(--thickness)var(--thickness)no-repeat,conic-gradient(currentColor var(--radialprogress),#0000 0);webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));-webkit-mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));mask:radial-gradient(farthest-side,#0000 calc(100% - var(--thickness)),#000 calc(100% + .5px - var(--thickness)));border-radius:3.40282e38px;position:absolute;inset:0}.radial-progress:after{content:"";inset:calc(50% - var(--thickness)/2);transform:rotate(calc(var(--value)*3.6deg - 90deg))translate(calc(var(--size)/2 - 50%));background-color:currentColor;border-radius:3.40282e38px;transition:transform .3s linear;position:absolute}.list{flex-direction:column;font-size:.875rem;display:flex}.list .list-row{--list-grid-cols:minmax(0,auto)1fr;border-radius:var(--radius-box);word-break:break-word;grid-auto-flow:column;grid-template-columns:var(--list-grid-cols);gap:1rem;padding:1rem;display:grid;position:relative}:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{content:"";border-bottom:var(--border)solid;inset-inline:var(--radius-box);border-color:var(--color-base-content);position:absolute;bottom:0}@supports (color:color-mix(in lab,red,red)){:is(.list>:not(:last-child).list-row,.list>:not(:last-child) .list-row):after{border-color:color-mix(in oklab,var(--color-base-content)5%,transparent)}}.toggle{border:var(--border)solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p),var(--radius-selector-max)) + min(var(--border),var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab,red,red)){.toggle{box-shadow:0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab,red,red)){.toggle{--input-color:color-mix(in oklab,var(--color-base-content)50%,#0000)}}.toggle{--toggle-p:calc(var(--size)*.125);--size:calc(var(--size-selector,.25rem)*6);width:calc((var(--size)*2) - (var(--border) + var(--toggle-p))*2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:none}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:none}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);height:100%;box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab,red,red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000)}}.toggle:before{background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}@media(forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:-1px;outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border)solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem),.875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.input{--size:calc(var(--size-field,.25rem)*10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate;z-index:1}@media(pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.table{border-collapse:separate;--tw-border-spacing-x: 0rem ;--tw-border-spacing-y: 0rem ;width:100%;border-spacing:var(--tw-border-spacing-x)var(--tw-border-spacing-y);border-radius:var(--radius-box);text-align:left;font-size:.875rem;position:relative}.table:where(:dir(rtl),[dir=rtl],[dir=rtl] *){text-align:right}@media(hover:hover){:is(.table tr.row-hover,.table tr.row-hover:nth-child(2n)):hover{background-color:var(--color-base-200)}}.table :where(th,td){vertical-align:middle;padding-block:.75rem;padding-inline:1rem}.table :where(thead,tfoot){white-space:nowrap;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(thead,tfoot){color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.table :where(thead,tfoot){font-size:.875rem;font-weight:600}.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border)solid var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(tfoot tr:first-child :is(td,th)){border-top:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}}.table :where(.table-pin-rows thead tr){z-index:1;background-color:var(--color-base-100);position:sticky;top:0}.table :where(.table-pin-rows tfoot tr){z-index:1;background-color:var(--color-base-100);position:sticky;bottom:0}.table :where(.table-pin-cols tr th){background-color:var(--color-base-100);position:sticky;left:0;right:0}.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border)solid var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.table :where(thead tr :is(td,th),tbody tr:not(:last-child) :is(td,th)){border-bottom:var(--border)solid color-mix(in oklch,var(--color-base-content)5%,#0000)}}.range{appearance:none;webkit-appearance:none;--range-thumb:var(--color-base-100);--range-thumb-size:calc(var(--size-selector,.25rem)*6);--range-progress:currentColor;--range-fill:1;--range-p:.25rem;--range-bg:currentColor}@supports (color:color-mix(in lab,red,red)){.range{--range-bg:color-mix(in oklab,currentColor 10%,#0000)}}.range{cursor:pointer;vertical-align:middle;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));width:clamp(3rem,20rem,100%);height:var(--range-thumb-size);background-color:#0000;border:none;overflow:hidden}[dir=rtl] .range{--range-dir:-1}.range:focus{outline:none}.range:focus-visible{outline-offset:2px;outline:2px solid}.range::-webkit-slider-runnable-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}@media(forced-colors:active){.range::-webkit-slider-runnable-track{border:1px solid}.range::-moz-range-track{border:1px solid}}.range::-webkit-slider-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));background-color:var(--range-thumb);height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;appearance:none;webkit-appearance:none;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor,0 0 0 2rem var(--range-thumb) inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2)) 0 0 calc(100rem*var(--range-fill));position:relative;top:50%;transform:translateY(-50%)}@supports (color:color-mix(in lab,red,red)){.range::-webkit-slider-thumb{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb) inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2)) 0 0 calc(100rem*var(--range-fill))}}.range::-moz-range-track{background-color:var(--range-bg);border-radius:var(--radius-selector);width:100%;height:calc(var(--range-thumb-size)*.5)}.range::-moz-range-thumb{box-sizing:border-box;border-radius:calc(var(--radius-selector) + min(var(--range-p),var(--radius-selector-max)));height:var(--range-thumb-size);width:var(--range-thumb-size);border:var(--range-p)solid;color:var(--range-progress);box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor,0 0 0 2rem var(--range-thumb) inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2)) 0 0 calc(100rem*var(--range-fill));background-color:currentColor;position:relative;top:50%}@supports (color:color-mix(in lab,red,red)){.range::-moz-range-thumb{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000),0 0 0 2rem var(--range-thumb) inset,calc((var(--range-dir,1)*-100rem) - (var(--range-dir,1)*var(--range-thumb-size)/2)) 0 0 calc(100rem*var(--range-fill))}}.range:disabled{cursor:not-allowed;opacity:.3}.select{border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.select{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.select{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.select{--size:calc(var(--size-field,.25rem)*10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}[dir=rtl] .select::picker(select){translate:.5rem}[dir=rtl] .select select::picker(select){translate:.5rem}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border)*2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate;z-index:1}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){.select,.select select{appearance:base-select}:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border)solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth)*3px) -2px #0003;box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth)*.1)),0 8px 10px -6px rgb(0 0 0/calc(var(--depth)*.1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) optgroup{padding-top:.5em}:is(.select,.select select) optgroup option:first-child{margin-top:.5em}:is(.select,.select select) option{border-radius:var(--radius-field);white-space:normal;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{outline-offset:2px;outline:2px solid #0000}}:is(.select,.select select) option:not(:disabled):active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth)*3px) -2px var(--color-neutral)}.timeline{display:flex;position:relative}.timeline>li{grid-template-rows:var(--timeline-row-start,minmax(0,1fr))auto var(--timeline-row-end,minmax(0,1fr));grid-template-columns:var(--timeline-col-start,minmax(0,1fr))auto var(--timeline-col-end,minmax(0,1fr));flex-shrink:0;align-items:center;display:grid;position:relative}.timeline>li>hr{border:none;width:100%}.timeline>li>hr:first-child{grid-row-start:2;grid-column-start:1}.timeline>li>hr:last-child{grid-area:2/3/auto/none}@media print{.timeline>li>hr{border:.1px solid var(--color-base-300)}}.timeline :where(hr){background-color:var(--color-base-300);height:.25rem}.timeline:has(.timeline-middle hr):first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.timeline:has(.timeline-middle hr):last-child,.timeline:not(:has(.timeline-middle)) :first-child hr:last-child{border-start-start-radius:var(--radius-selector);border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:var(--radius-selector)}.timeline:not(:has(.timeline-middle)) :last-child hr:first-child{border-start-start-radius:0;border-start-end-radius:var(--radius-selector);border-end-end-radius:var(--radius-selector);border-end-start-radius:0}.collapse-title{grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.avatar{vertical-align:middle;display:inline-flex;position:relative}.avatar>div{aspect-ratio:1;display:block;overflow:hidden}.avatar img{object-fit:cover;width:100%;height:100%}.checkbox{border:var(--border)solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0 3px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media(forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.card{border-radius:var(--radius-box);outline-offset:2px;outline:0 solid #0000;flex-direction:column;transition:outline .2s ease-in-out;display:flex;position:relative}.card:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.card:focus{outline-offset:2px;outline:2px solid #0000}}.card:focus-visible{outline-color:currentColor}.card :where(figure:first-child){border-start-start-radius:inherit;border-start-end-radius:inherit;border-end-end-radius:unset;border-end-start-radius:unset;overflow:hidden}.card :where(figure:last-child){border-start-start-radius:unset;border-start-end-radius:unset;border-end-end-radius:inherit;border-end-start-radius:inherit;overflow:hidden}.card figure{justify-content:center;align-items:center;display:flex}.card:has(>input:is(input[type=checkbox],input[type=radio])){cursor:pointer;-webkit-user-select:none;user-select:none}.card:has(>:checked){outline:2px solid}.progress{appearance:none;border-radius:var(--radius-box);background-color:currentColor;width:100%;height:.5rem;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.progress{background-color:color-mix(in oklab,currentcolor 20%,transparent)}}.progress{color:var(--color-base-content)}.progress:indeterminate{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%}@media(prefers-reduced-motion:no-preference){.progress:indeterminate{animation:5s ease-in-out infinite progress}}@supports ((-moz-appearance:none)){.progress:indeterminate::-moz-progress-bar{background-color:#0000}@media(prefers-reduced-motion:no-preference){.progress:indeterminate::-moz-progress-bar{background-image:repeating-linear-gradient(90deg,currentColor -1% 10%,#0000 10% 90%);background-position-x:15%;background-size:200%;animation:5s ease-in-out infinite progress}}.progress::-moz-progress-bar{border-radius:var(--radius-box);background-color:currentColor}}@supports ((-webkit-appearance:none)){.progress::-webkit-progress-bar{border-radius:var(--radius-box);background-color:#0000}.progress::-webkit-progress-value{border-radius:var(--radius-box);background-color:currentColor}}.textarea{border:var(--border)solid #0000;appearance:none;border-radius:var(--radius-field);background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);min-height:5rem;font-size:max(var(--font-size,.875rem),.875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;flex-shrink:1;padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab,red,red)){.textarea{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.textarea{--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.textarea{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.textarea textarea{appearance:none;background-color:#0000;border:none}.textarea textarea:focus,.textarea textarea:focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.textarea textarea:focus,.textarea textarea:focus-within{outline-offset:2px;outline:2px solid #0000}}.textarea:focus,.textarea:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.textarea:focus,.textarea:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.textarea:focus,.textarea:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media(pointer:coarse){@supports (-webkit-touch-callout:none){.textarea:focus,.textarea:focus-within{--font-size:1rem}}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]))::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.textarea:has(>textarea[disabled]),.textarea:is(:disabled,[disabled]){box-shadow:none}.textarea:has(>textarea[disabled])>textarea[disabled]{cursor:not-allowed}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px #00000040}.divider{white-space:nowrap;height:1rem;margin:var(--divider-m,1rem 0);--divider-color:var(--color-base-content);flex-direction:row;align-self:stretch;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.divider{--divider-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.divider:before,.divider:after{content:"";background-color:var(--divider-color);flex-grow:1;width:100%;height:.125rem}@media print{.divider:before,.divider:after{border:.5px solid}}.divider:not(:empty){gap:1rem}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.label{color:color-mix(in oklab,currentcolor 60%,transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.modal-action{justify-content:flex-end;gap:.5rem;margin-top:1.5rem;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.status{background-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab,red,red)){.status{color:color-mix(in oklab,var(--color-black)30%,transparent)}}.status{background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab,red,red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border)solid var(--badge-color,var(--color-base-200));background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem)*6);width:fit-content;height:var(--size);padding-inline:calc(var(--size)/2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem)*10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.footer{grid-auto-flow:row;place-items:start;gap:2.5rem 1rem;width:100%;font-size:.875rem;line-height:1.25rem;display:grid}.footer>*{place-items:start;gap:.5rem;display:grid}.footer.footer-center{text-align:center;grid-auto-flow:column dense;place-items:center}.footer.footer-center>*{place-items:center}.card-body{padding:var(--card-p,1.5rem);font-size:var(--card-fs,.875rem);flex-direction:column;flex:auto;gap:.5rem;display:flex}.card-body :where(p){flex-grow:1}.alert{--alert-border-color:var(--color-base-200);border-radius:var(--radius-box);color:var(--color-base-content);background-color:var(--alert-color,var(--color-base-200));text-align:start;background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08)) inset,0 1px #000,0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08));border-style:solid;grid-template-columns:auto;grid-auto-flow:column;justify-content:start;place-items:center start;gap:1rem;padding-block:.75rem;padding-inline:1rem;font-size:.875rem;line-height:1.25rem;display:grid}@supports (color:color-mix(in lab,red,red)){.alert{box-shadow:0 3px 0 -2px oklch(100% 0 0/calc(var(--depth)*.08)) inset,0 1px color-mix(in oklab,color-mix(in oklab,#000 20%,var(--alert-color,var(--color-base-200)))calc(var(--depth)*20%),#0000),0 4px 3px -2px oklch(0% 0 0/calc(var(--depth)*.08))}}.alert:has(:nth-child(2)){grid-template-columns:auto minmax(auto,1fr)}.skeleton{border-radius:var(--radius-box);background-color:var(--color-base-300)}@media(prefers-reduced-motion:reduce){.skeleton{transition-duration:15s}}.skeleton{will-change:background-position;background-image:linear-gradient(105deg,#0000 0% 40%,var(--color-base-100)50%,#0000 60% 100%);background-position-x:-50%;background-size:200%}@media(prefers-reduced-motion:no-preference){.skeleton{animation:1.8s ease-in-out infinite skeleton}}.link{cursor:pointer;text-decoration-line:underline}.link:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.link:focus{outline-offset:2px;outline:2px solid #0000}}.link:focus-visible{outline-offset:2px;outline:2px solid}.menu-title{color:var(--color-base-content);padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab,red,red)){.menu-title{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.menu-title{font-size:.875rem;font-weight:600}.btn-accent{--btn-color:var(--color-accent);--btn-fg:var(--color-accent-content)}.btn-error{--btn-color:var(--color-error);--btn-fg:var(--color-error-content)}.btn-info{--btn-color:var(--color-info);--btn-fg:var(--color-info-content)}.btn-neutral{--btn-color:var(--color-neutral);--btn-fg:var(--color-neutral-content)}.btn-primary{--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content)}.btn-secondary{--btn-color:var(--color-secondary);--btn-fg:var(--color-secondary-content)}.btn-success{--btn-color:var(--color-success);--btn-fg:var(--color-success-content)}.btn-warning{--btn-color:var(--color-warning);--btn-fg:var(--color-warning-content)}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;background-color:#0006}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translate(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off)50%}.tooltip:after{transform:translate(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail)50%}.collapse-arrow>.collapse-title:after{width:.5rem;height:.5rem;display:block;position:absolute;transform:translateY(-100%)rotate(45deg)}@media(prefers-reduced-motion:no-preference){.collapse-arrow>.collapse-title:after{transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}}.collapse-arrow>.collapse-title:after{content:"";transform-origin:75% 75%;pointer-events:none;top:50%;inset-inline-end:1.4rem;box-shadow:2px 2px}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media(prefers-reduced-motion:no-preference){.collapse[open].collapse-arrow>.collapse-title:after,.collapse.collapse-open.collapse-arrow>.collapse-title:after{transform:translateY(-50%)rotate(225deg)}}.collapse.collapse-open.collapse-plus>.collapse-title:after{--tw-content:"−";content:var(--tw-content)}:is(.collapse[tabindex].collapse-arrow:focus:not(.collapse-close),.collapse.collapse-arrow[tabindex]:focus-within:not(.collapse-close))>.collapse-title:after,.collapse.collapse-arrow:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{transform:translateY(-50%)rotate(225deg)}.collapse[open].collapse-plus>.collapse-title:after,.collapse[tabindex].collapse-plus:focus:not(.collapse-close)>.collapse-title:after,.collapse.collapse-plus:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{--tw-content:"−";content:var(--tw-content)}.tabs-lift{--tabs-height:auto;--tabs-direction:row}.tabs-lift>.tab{--tab-border:0 0 var(--border)0;--tab-radius-ss:var(--tab-radius-limit);--tab-radius-se:var(--tab-radius-limit);--tab-radius-es:0;--tab-radius-ee:0;--tab-paddings:var(--border)var(--tab-p)0 var(--tab-p);--tab-border-colors:#0000 #0000 var(--tab-border-color)#0000;--tab-corner-width:calc(100% + var(--tab-radius-limit)*2);--tab-corner-height:var(--tab-radius-limit);--tab-corner-position:top left,top right;border-width:var(--tab-border);padding:var(--tab-paddings);border-color:var(--tab-border-colors);border-start-start-radius:var(--tab-radius-ss);border-start-end-radius:var(--tab-radius-se);border-end-end-radius:var(--tab-radius-ee);border-end-start-radius:var(--tab-radius-es)}.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked)){--tab-border:var(--border)var(--border)0 var(--border);--tab-border-colors:var(--tab-border-color)var(--tab-border-color)#0000 var(--tab-border-color);--tab-paddings:0 calc(var(--tab-p) - var(--border))var(--border)calc(var(--tab-p) - var(--border));--tab-inset:auto auto 0 auto;--radius-start:radial-gradient(circle at top left,var(--tab-radius-grad));--radius-end:radial-gradient(circle at top right,var(--tab-radius-grad));background-color:var(--tab-bg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):before{z-index:1;content:"";width:var(--tab-corner-width);height:var(--tab-corner-height);background-position:var(--tab-corner-position);background-image:var(--radius-start),var(--radius-end);background-size:var(--tab-radius-limit)var(--tab-radius-limit);inset:var(--tab-inset);background-repeat:no-repeat;display:block;position:absolute}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{--radius-start:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):first-child:before{transform:rotateY(180deg)}:is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{--radius-end:none}[dir=rtl] :is(.tabs-lift>.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]):not(.tab-disabled,[disabled]),.tabs-lift>.tab:is(input:checked,label:has(:checked))):last-child:before{transform:rotateY(180deg)}.tabs-lift:has(>.tab-content)>.tab:first-child:not(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){--tab-border-colors:var(--tab-border-color)var(--tab-border-color)#0000 var(--tab-border-color)}.tabs-lift>.tab-content{--tabcontent-margin:calc(-1*var(--border))0 0 0;--tabcontent-radius-ss:0;--tabcontent-radius-se:var(--radius-box);--tabcontent-radius-es:var(--radius-box);--tabcontent-radius-ee:var(--radius-box)}:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:first-child,:is(.tabs-lift :checked,.tabs-lift label:has(:checked),.tabs-lift :is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content:nth-child(n+3){--tabcontent-radius-ss:var(--radius-box)}.list .list-row:has(.list-col-grow:first-child){--list-grid-cols:1fr}.list .list-row:has(.list-col-grow:nth-child(2)){--list-grid-cols:minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(3)){--list-grid-cols:minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(4)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(5)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row:has(.list-col-grow:nth-child(6)){--list-grid-cols:minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)minmax(0,auto)1fr}.list .list-row>:not(.list-col-wrap){grid-row-start:1}.checkbox:disabled{cursor:not-allowed;opacity:.2}.tooltip-left>.tooltip-content,.tooltip-left[data-tip]:before{transform:translate(calc(var(--tt-pos,.25rem) - .25rem))translateY(-50%);inset:50% var(--tt-off)auto auto}.tooltip-left:after{transform:translate(var(--tt-pos,.25rem))translateY(-50%)rotate(-90deg);inset:50% calc(var(--tt-tail) + 1px)auto auto}.tooltip-right>.tooltip-content,.tooltip-right[data-tip]:before{transform:translate(calc(var(--tt-pos,-.25rem) + .25rem))translateY(-50%);inset:50% auto auto var(--tt-off)}.tooltip-right:after{transform:translate(var(--tt-pos,-.25rem))translateY(-50%)rotate(90deg);inset:50% auto auto calc(var(--tt-tail) + 1px)}.dropdown-end{--anchor-h:span-left}.dropdown-end :where(.dropdown-content){inset-inline-end:0;translate:0}[dir=rtl] :is(.dropdown-end :where(.dropdown-content)){translate:0}.dropdown-end.dropdown-left{--anchor-h:left;--anchor-v:span-top}.dropdown-end.dropdown-left .dropdown-content{top:auto;bottom:0}.dropdown-end.dropdown-right{--anchor-h:right;--anchor-v:span-top}.dropdown-end.dropdown-right .dropdown-content{top:auto;bottom:0}.dropdown-bottom{--anchor-v:bottom}.dropdown-bottom .dropdown-content{transform-origin:top;top:100%;bottom:auto}.btn-active{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn-active{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn-active{--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);isolation:isolate}.input-sm{--size:calc(var(--size-field,.25rem)*8);font-size:max(var(--font-size,.75rem),.75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.btn-circle{width:var(--size);height:var(--size);border-radius:3.40282e38px;padding-inline:0}.btn-square{width:var(--size);height:var(--size);padding-inline:0}.loading-sm{width:calc(var(--size-selector,.25rem)*5)}.loading-xs{width:calc(var(--size-selector,.25rem)*4)}.badge-soft{color:var(--badge-color,var(--color-base-content));background-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.badge-soft{background-color:color-mix(in oklab,var(--badge-color,var(--color-base-content))8%,var(--color-base-100))}}.badge-soft{border-color:var(--badge-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.badge-soft{border-color:color-mix(in oklab,var(--badge-color,var(--color-base-content))10%,var(--color-base-100))}}.badge-soft{background-image:none}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.checkbox-sm{--size:calc(var(--size-selector,.25rem)*5);padding:.1875rem}.select-sm{--size:calc(var(--size-field,.25rem)*8);font-size:.75rem}.select-sm option{padding-block:.25rem;padding-inline:.625rem}.badge-sm{--size:calc(var(--size-selector,.25rem)*5);font-size:.75rem}.alert-error{color:var(--color-error-content);--alert-border-color:var(--color-error);--alert-color:var(--color-error)}.alert-info{color:var(--color-info-content);--alert-border-color:var(--color-info);--alert-color:var(--color-info)}.alert-success{color:var(--color-success-content);--alert-border-color:var(--color-success);--alert-color:var(--color-success)}.alert-warning{color:var(--color-warning-content);--alert-border-color:var(--color-warning);--alert-color:var(--color-warning)}.link-primary{color:var(--color-primary)}@media(hover:hover){.link-primary:hover{color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.link-primary:hover{color:color-mix(in oklab,var(--color-primary)80%,#000)}}}.progress-primary{color:var(--color-primary)}.link-hover{text-decoration-line:none}@media(hover:hover){.link-hover:hover{text-decoration-line:underline}}.btn-lg{--fontsize:1.125rem;--btn-p:1.25rem;--size:calc(var(--size-field,.25rem)*12)}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem)*6)}.badge-accent{--badge-color:var(--color-accent);--badge-fg:var(--color-accent-content)}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-primary{--badge-color:var(--color-primary);--badge-fg:var(--color-primary-content)}.badge-secondary{--badge-color:var(--color-secondary);--badge-fg:var(--color-secondary-content)}.card-border{border:var(--border)solid var(--color-base-200)}.toggle-primary:checked,.toggle-primary[aria-checked=true]{--input-color:var(--color-primary)}}.collapse:not(td,tr,colgroup){visibility:revert-layer}.collapse{visibility:collapse}.invisible{visibility:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing)*0)}.-top-2{top:calc(var(--spacing)*-2)}.top-2{top:calc(var(--spacing)*2)}.top-4{top:calc(var(--spacing)*4)}.top-\\[50\\%\\]{top:50%}.-right-1{right:calc(var(--spacing)*-1)}.-right-2{right:calc(var(--spacing)*-2)}.right-2{right:calc(var(--spacing)*2)}.right-4{right:calc(var(--spacing)*4)}.-bottom-1{bottom:calc(var(--spacing)*-1)}.bottom-4{bottom:calc(var(--spacing)*4)}.-left-2{left:calc(var(--spacing)*-2)}.left-1\\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-4{left:calc(var(--spacing)*4)}.left-\\[-15px\\]{left:-15px}.z-1{z-index:1}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.z-1000{z-index:1000}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing)*2)}.join-item:where(:not(:first-child,:disabled,[disabled],.btn-disabled)){margin-block-start:0;margin-inline-start:calc(var(--border,1px)*-1)}.join-item:where(:is(:disabled,[disabled],.btn-disabled)){border-width:var(--border,1px)0 var(--border,1px)var(--border,1px)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-16{margin-top:calc(var(--spacing)*16)}.mt-px{margin-top:1px}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-auto{margin-left:auto}.alert{border-width:var(--border);border-color:var(--alert-border-color,var(--color-base-200))}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}:root .prose{--tw-prose-body:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-body:color-mix(in oklab,var(--color-base-content)80%,#0000)}}:root .prose{--tw-prose-headings:var(--color-base-content);--tw-prose-lead:var(--color-base-content);--tw-prose-links:var(--color-base-content);--tw-prose-bold:var(--color-base-content);--tw-prose-counters:var(--color-base-content);--tw-prose-bullets:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-bullets:color-mix(in oklab,var(--color-base-content)50%,#0000)}}:root .prose{--tw-prose-hr:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-hr:color-mix(in oklab,var(--color-base-content)20%,#0000)}}:root .prose{--tw-prose-quotes:var(--color-base-content);--tw-prose-quote-borders:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-quote-borders:color-mix(in oklab,var(--color-base-content)20%,#0000)}}:root .prose{--tw-prose-captions:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-captions:color-mix(in oklab,var(--color-base-content)50%,#0000)}}:root .prose{--tw-prose-code:var(--color-base-content);--tw-prose-pre-code:var(--color-neutral-content);--tw-prose-pre-bg:var(--color-neutral);--tw-prose-th-borders:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-th-borders:color-mix(in oklab,var(--color-base-content)50%,#0000)}}:root .prose{--tw-prose-td-borders:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-td-borders:color-mix(in oklab,var(--color-base-content)20%,#0000)}}:root .prose{--tw-prose-kbd:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-kbd:color-mix(in oklab,var(--color-base-content)80%,#0000)}}:root .prose :where(code):not(pre>code){background-color:var(--color-base-200);border-radius:var(--radius-selector);border:var(--border)solid var(--color-base-300);font-weight:inherit;padding-block:.2em;padding-inline:.5em}:root .prose :where(code):not(pre>code):before,:root .prose :where(code):not(pre>code):after{display:none}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.table{display:table}.size-1{width:calc(var(--spacing)*1);height:calc(var(--spacing)*1)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-8{height:calc(var(--spacing)*8)}.h-12{height:calc(var(--spacing)*12)}.h-16{height:calc(var(--spacing)*16)}.h-full{height:100%}.max-h-52{max-height:calc(var(--spacing)*52)}.max-h-60{max-height:calc(var(--spacing)*60)}.max-h-\\[80vh\\]{max-height:80vh}.max-h-full{max-height:100%}.w-3{width:calc(var(--spacing)*3)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-8{width:calc(var(--spacing)*8)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-32{width:calc(var(--spacing)*32)}.w-40{width:calc(var(--spacing)*40)}.w-48{width:calc(var(--spacing)*48)}.w-52{width:calc(var(--spacing)*52)}.w-56{width:calc(var(--spacing)*56)}.w-64{width:calc(var(--spacing)*64)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\\[200px\\]{max-width:200px}.max-w-full{max-width:100%}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\\[15px\\]{--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-15{rotate:15deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-row-reverse{flex-direction:row-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0\\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-box{border-radius:var(--radius-box)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-\\(length\\:--border\\){border-style:var(--tw-border-style);border-width:var(--border)}.border-base-300{border-color:var(--color-base-300)}.border-base-content\\/10{border-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.border-base-content\\/10{border-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.border-white\\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\\/5{border-color:color-mix(in oklab,var(--color-white)5%,transparent)}}.bg-accent,.bg-accent\\/20{background-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.bg-accent\\/20{background-color:color-mix(in oklab,var(--color-accent)20%,transparent)}}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200,.bg-base-200\\/70{background-color:var(--color-base-200)}@supports (color:color-mix(in lab,red,red)){.bg-base-200\\/70{background-color:color-mix(in oklab,var(--color-base-200)70%,transparent)}}.bg-base-300{background-color:var(--color-base-300)}.bg-base-content{background-color:var(--color-base-content)}.bg-black\\/30{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.bg-black\\/30{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.bg-black\\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\\/70{background-color:color-mix(in oklab,var(--color-black)70%,transparent)}}.bg-black\\/90{background-color:#000000e6}@supports (color:color-mix(in lab,red,red)){.bg-black\\/90{background-color:color-mix(in oklab,var(--color-black)90%,transparent)}}.bg-primary,.bg-primary\\/20{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\\/20{background-color:color-mix(in oklab,var(--color-primary)20%,transparent)}}.bg-secondary,.bg-secondary\\/20{background-color:var(--color-secondary)}@supports (color:color-mix(in lab,red,red)){.bg-secondary\\/20{background-color:color-mix(in oklab,var(--color-secondary)20%,transparent)}}.bg-warning\\/20{background-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\\/20{background-color:color-mix(in oklab,var(--color-warning)20%,transparent)}}@layer daisyui.l1{.alert-soft{color:var(--alert-color,var(--color-base-content));background:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.alert-soft{background:color-mix(in oklab,var(--alert-color,var(--color-base-content))8%,var(--color-base-100))}}.alert-soft{--alert-border-color:var(--alert-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.alert-soft{--alert-border-color:color-mix(in oklab,var(--alert-color,var(--color-base-content))10%,var(--color-base-100))}}.alert-soft{box-shadow:none;background-image:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media(hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-content))8%,var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-content))10%,var(--color-base-100))}}.btn-soft:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-noise:none}@media(hover:none){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-fg:var(--btn-color,var(--color-base-content));--btn-bg:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-content))8%,var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:var(--btn-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-content))10%,var(--color-base-100))}}.btn-soft:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-noise:none}}}.fill-current{fill:currentColor}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-2{padding-block:calc(var(--spacing)*2)}.py-8{padding-block:calc(var(--spacing)*8)}.pt-2{padding-top:calc(var(--spacing)*2)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[10px\\]{font-size:10px}.leading-normal{--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.wrap-break-word{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--color-accent)}.text-base-content,.text-base-content\\/90{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\\/90{color:color-mix(in oklab,var(--color-base-content)90%,transparent)}}.text-error{color:var(--color-error)}.text-info{color:var(--color-info)}.text-primary{color:var(--color-primary)}.text-secondary{color:var(--color-secondary)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.prose :where(.btn-link):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:none}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline-\\(length\\:--border\\){outline-style:var(--tw-outline-style);outline-width:var(--border)}.outline-black\\/5{outline-color:#0000000d}@supports (color:color-mix(in lab,red,red)){.outline-black\\/5{outline-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-\\[height\\,max-height\\]{transition-property:height,max-height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}@media(hover:hover){.group-hover\\:border-base-content\\/20:is(:where(.group):hover *){border-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.group-hover\\:border-base-content\\/20:is(:where(.group):hover *){border-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.hover\\:translate-x-\\[15px\\]:hover{--tw-translate-x:15px;translate:var(--tw-translate-x)var(--tw-translate-y)}.hover\\:rotate-15:hover{rotate:15deg}.hover\\:opacity-80:hover{opacity:.8}.hover\\:opacity-100:hover{opacity:1}}@media(min-width:40rem){.sm\\:inline-block{display:inline-block}.sm\\:max-w-none{max-width:none}.sm\\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:48rem){.md\\:flex{display:flex}.md\\:p-6{padding:calc(var(--spacing)*6)}}.\\[\\&_svg\\]\\:visible svg{visibility:visible}}:host{font-family:var(--font-family,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif)}:host([data-font=Lato]){--font-family:"Lato",system-ui,-apple-system,sans-serif}:host([data-font=Montserrat]){--font-family:"Montserrat",system-ui,-apple-system,sans-serif}:host([data-font=Noto\\ Sans]){--font-family:"Noto Sans",system-ui,-apple-system,sans-serif}:host([data-font=Open\\ Sans]){--font-family:"Open Sans",system-ui,-apple-system,sans-serif}:host([data-font=Raleway]){--font-family:"Raleway",system-ui,-apple-system,sans-serif}@media(max-width:640px){[data-tip]:before,[data-tip]:after{white-space:normal!important;word-wrap:break-word!important;overflow-wrap:break-word!important;max-width:200px!important}}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items)*100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes menu{0%{opacity:0}}@keyframes progress{50%{background-position-x:-115%}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}`; dayjs.extend(localizedFormat); function loadGoogleFonts(shadowRoot) { if (shadowRoot.getElementById("tmd-google-fonts")) { return; } const fontCSS = `@import url('https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Noto+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Raleway:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap');`; if (typeof window.GM_addStyle !== "undefined") { window.GM_addStyle(fontCSS); } else { const chromeRuntime = window.chrome?.runtime; if (chromeRuntime && chromeRuntime.sendMessage) { chromeRuntime.sendMessage( { action: "fetchFontCSS" }, (response) => { if (response && response.success && response.css) { const style = document.createElement("style"); style.id = "tmd-google-fonts"; style.textContent = response.css; shadowRoot.appendChild(style); } else { try { const link = document.createElement("link"); link.id = "tmd-google-fonts"; link.rel = "stylesheet"; link.crossOrigin = "anonymous"; link.href = "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Noto+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Raleway:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"; shadowRoot.appendChild(link); } catch (e) { } } } ); } else { try { const link = document.createElement("link"); link.id = "tmd-google-fonts"; link.rel = "stylesheet"; link.crossOrigin = "anonymous"; link.href = "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Noto+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Raleway:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"; shadowRoot.appendChild(link); } catch (e) { } } } } function mountApp() { const root = document.createElement("div"); root.id = "tmd-root"; document.body.append(root); const shadowRoot = root.attachShadow({ mode: "open" }); loadGoogleFonts(shadowRoot); shadowRoot.adoptedStyleSheets = [prepareStyles()]; preact.render( u(MediaDownloaderApp, {}), shadowRoot); } function prepareStyles() { const shadowSheet = new CSSStyleSheet(); shadowSheet.replaceSync(styles.replace(/:root/gu, ":host")); const globalSheet = new CSSStyleSheet(); for (const rule of shadowSheet.cssRules) { if (rule instanceof CSSPropertyRule) { globalSheet.insertRule(rule.cssText); } } document.adoptedStyleSheets.push(globalSheet); return shadowSheet; } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", mountApp); } else { mountApp(); } })(preact, preactSignals, preactHooks, i18next, dayjs, Dexie, FileSaver, gifshot, fflate);