{"componentChunkName":"component---gatsby-theme-spaceout-src-templates-article-template-tsx","path":"/sse-vs-websockets","result":{"pageContext":{"article":{"id":"a1dadfa4-c917-5b75-bbe9-bff89947e8bf","slug":"/sse-vs-websockets","secret":false,"title":"SSE vs WebSockets","author":"Luke Celitan","date":"September 7th, 2025","dateForSEO":"2025-09-07T00:00:00.000Z","timeToRead":3,"excerpt":"A comprehensive deep-dive into Server-Sent Events and WebSockets, covering protocol details, architecture, performance, security, best practices, troubleshooting, advanced concepts, and real-world use cases with practical code examples.","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"SSE vs WebSockets\",\n  \"excerpt\": \"A comprehensive deep-dive into Server-Sent Events and WebSockets, covering protocol details, architecture, performance, security, best practices, troubleshooting, advanced concepts, and real-world use cases with practical code examples.\",\n  \"date\": \"2025-09-07T00:00:00.000Z\",\n  \"hero\": \"sse.png\",\n  \"author\": \"Luke Celitan\",\n  \"category\": \"Post\",\n  \"tech\": [\"TS\", \"Nodejs\", \"ReactIcon\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"sse-vs-websockets-the-definitive-guide-with-examples-and-best-practices\"\n  }, \"SSE vs WebSockets: The Definitive Guide with Examples and Best Practices\"), mdx(\"h2\", {\n    \"id\": \"introduction\"\n  }, \"Introduction\"), mdx(\"p\", null, \"Real-time communication is a cornerstone of modern web applications, powering everything from live notifications and chat apps to collaborative editing and dashboards. Two of the most popular technologies for enabling real-time data exchange are Server-Sent Events (SSE) and WebSockets. While both are battle-tested and widely supported, they differ significantly in architecture, protocol, performance, and use cases. In this guide, I\\u2019ll provide an exhaustive technical deep-dive into SSE and WebSockets, including practical examples, performance considerations, best practices, common pitfalls, troubleshooting guides, and advanced concepts.\"), mdx(\"h2\", {\n    \"id\": \"what-are-websockets\"\n  }, \"What are WebSockets?\"), mdx(\"p\", null, \"WebSockets are a protocol that enables full-duplex, bi-directional communication between client and server over a single, long-lived TCP connection. Standardized in RFC 6455, WebSockets start as an HTTP connection and then upgrade to the WebSocket protocol via the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"Upgrade\"), \" header. This allows for real-time data exchange without the overhead of repeated HTTP requests.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Prefixes:\"), mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ws://\"), \" for non-secure connections\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"wss://\"), \" for secure (TLS) connections\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Ports:\"), \" Uses HTTP ports 80 (ws) and 443 (wss)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Message Types:\"), \" Supports both text and binary data\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Browser Support:\"), \" Universal\")), mdx(\"h3\", {\n    \"id\": \"minimal-websocket-example-nodejs--react\"\n  }, \"Minimal WebSocket Example (Node.js + React)\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Node.js Server:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const WebSocket = require('ws');\\nconst wss = new WebSocket.Server({ port: 8080 });\\nwss.on('connection', ws => {\\n  ws.on('message', message => {\\n    console.log('received:', message);\\n    ws.send(`Echo: ${message}`);\\n  });\\n  ws.send('Welcome to WebSocket!');\\n});\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"React Client:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-tsx\"\n  }, \"const ws = new WebSocket('ws://localhost:8080');\\nws.onopen = () => ws.send('Hello Server!');\\nws.onmessage = event => console.log(event.data);\\n\")), mdx(\"h2\", {\n    \"id\": \"what-are-server-sent-events-sse\"\n  }, \"What are Server-Sent Events (SSE)?\"), mdx(\"p\", null, \"SSE is a browser-native technology for sending real-time updates from server to client over a single HTTP connection. Defined in the HTML5 spec, SSE uses the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"EventSource\"), \" API on the client and a simple text/event-stream protocol on the server. SSE is one-way: only the server can push events to the client.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Protocol:\"), \" HTTP (supports HTTP/1.1 and HTTP/2)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Message Type:\"), \" UTF-8 encoded text\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Automatic Reconnection:\"), \" Built-in\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Stream Resume:\"), \" Built-in via Last-Event-ID\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Browser Support:\"), \" Most modern browsers\")), mdx(\"h3\", {\n    \"id\": \"minimal-sse-example-nodejs--react\"\n  }, \"Minimal SSE Example (Node.js + React)\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Node.js Server:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"const express = require('express');\\nconst app = express();\\napp.get('/events', (req, res) => {\\n  res.set({\\n    'Content-Type': 'text/event-stream',\\n    'Cache-Control': 'no-cache',\\n    'Connection': 'keep-alive',\\n  });\\n  res.flushHeaders();\\n  res.write('data: Welcome to SSE!\\\\n\\\\n');\\n  setInterval(() => {\\n    res.write(`data: ${new Date().toISOString()}\\\\n\\\\n`);\\n  }, 1000);\\n});\\napp.listen(3000);\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"React Client:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-tsx\"\n  }, \"const eventSource = new EventSource('http://localhost:3000/events');\\neventSource.onmessage = event => console.log(event.data);\\n\")), mdx(\"h2\", {\n    \"id\": \"detailed-comparison-sse-vs-websockets\"\n  }, \"Detailed Comparison: SSE vs WebSockets\"), mdx(\"h3\", {\n    \"id\": \"communication-direction\"\n  }, \"Communication Direction\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE:\"), \" One-way (server \\u2192 client)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"WebSockets:\"), \" Two-way (client \\u2194 server)\")), mdx(\"h3\", {\n    \"id\": \"underlying-protocol\"\n  }, \"Underlying Protocol\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE:\"), \" HTTP (works with HTTP/1.1 and HTTP/2)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"WebSockets:\"), \" Custom protocol, upgrades from HTTP\")), mdx(\"h3\", {\n    \"id\": \"security\"\n  }, \"Security\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE:\"), \" Inherits HTTP security (same-origin, CORS, TLS)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"WebSockets:\"), \" No same-origin policy, vulnerable to CSRF-like attacks, must use origin checks and TLS\")), mdx(\"h3\", {\n    \"id\": \"simplicity\"\n  }, \"Simplicity\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE:\"), \" Simple to set up, automatic reconnection and stream resume\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"WebSockets:\"), \" More complex, manual reconnection, state management\")), mdx(\"h3\", {\n    \"id\": \"performance\"\n  }, \"Performance\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE:\"), \" Fire-and-forget, efficient for many clients, limited by text-only messages\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"WebSockets:\"), \" Handles high-frequency, bi-directional data, supports binary, but requires more server resources\")), mdx(\"h3\", {\n    \"id\": \"message-structure\"\n  }, \"Message Structure\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE:\"), \" UTF-8 text only\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"WebSockets:\"), \" Text and binary (images, files, etc.)\")), mdx(\"h3\", {\n    \"id\": \"ease-of-adoption\"\n  }, \"Ease of Adoption\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE:\"), \" Native browser support via EventSource, easy server setup\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"WebSockets:\"), \" Universal browser support, many libraries (Socket.io, ws, etc.)\")), mdx(\"h3\", {\n    \"id\": \"tooling\"\n  }, \"Tooling\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Testing:\"), \" Postman, JMeter, Gatling, k6, sse-perf\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Documentation:\"), \" AsyncAPI (not OpenAPI)\")), mdx(\"h2\", {\n    \"id\": \"best-practices\"\n  }, \"Best Practices\"), mdx(\"h3\", {\n    \"id\": \"when-to-use-sse-vs-websockets\"\n  }, \"When to Use SSE vs WebSockets\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Use Case\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"SSE\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"WebSockets\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Live notifications\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Chat apps\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Collaborative editing\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Real-time dashboards\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Streaming binary data\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"One-way updates\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Bi-directional comms\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\")))), mdx(\"h3\", {\n    \"id\": \"handling-reconnections\"\n  }, \"Handling Reconnections\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"SSE:\"), \" Automatic, with Last-Event-ID for resume\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"WebSockets:\"), \" Manual, use exponential backoff and state recovery\")), mdx(\"h3\", {\n    \"id\": \"scaling-and-resource-management\"\n  }, \"Scaling and Resource Management\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use load balancers that support sticky sessions for WebSockets\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"For SSE, leverage HTTP/2 multiplexing to avoid connection limits\")), mdx(\"h3\", {\n    \"id\": \"security-recommendations\"\n  }, \"Security Recommendations\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Always use TLS (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"wss://\"), \" or HTTPS)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"For WebSockets, validate origin and implement CSRF protection\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"For SSE, use CORS headers and secure cookies\")), mdx(\"h3\", {\n    \"id\": \"performance-tuning\"\n  }, \"Performance Tuning\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Benchmark with k6, Gatling, or JMeter\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Monitor connection counts and memory usage\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"For WebSockets, optimize message size and frequency\")), mdx(\"h2\", {\n    \"id\": \"real-world-use-cases\"\n  }, \"Real-World Use Cases\"), mdx(\"h3\", {\n    \"id\": \"live-notifications-sse\"\n  }, \"Live Notifications (SSE)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Stock tickers, news feeds, system alerts\")), mdx(\"h3\", {\n    \"id\": \"chat-apps-websockets\"\n  }, \"Chat Apps (WebSockets)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Real-time messaging, collaborative editing\")), mdx(\"h3\", {\n    \"id\": \"dashboards-both\"\n  }, \"Dashboards (Both)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Live data updates, analytics\")), mdx(\"h3\", {\n    \"id\": \"collaborative-editing-websockets\"\n  }, \"Collaborative Editing (WebSockets)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Google Docs-style apps\")), mdx(\"h2\", {\n    \"id\": \"troubleshooting--common-pitfalls\"\n  }, \"Troubleshooting & Common Pitfalls\"), mdx(\"h3\", {\n    \"id\": \"connection-limits\"\n  }, \"Connection Limits\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"SSE: HTTP/1.1 limits parallel connections; use HTTP/2\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"WebSockets: Server resource exhaustion; use connection pooling\")), mdx(\"h3\", {\n    \"id\": \"head-of-line-blocking\"\n  }, \"Head-of-Line Blocking\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"SSE: Mitigated by HTTP/2 multiplexing\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"WebSockets: Not an issue, but TCP-level blocking can occur\")), mdx(\"h3\", {\n    \"id\": \"network-issues\"\n  }, \"Network Issues\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Handle disconnects and retries gracefully\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Log and monitor connection health\")), mdx(\"h3\", {\n    \"id\": \"debugging-message-delivery\"\n  }, \"Debugging Message Delivery\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use browser dev tools, network inspectors\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"For WebSockets, log handshake and message events\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"For SSE, check event-stream formatting and headers\")), mdx(\"h2\", {\n    \"id\": \"advanced-concepts\"\n  }, \"Advanced Concepts\"), mdx(\"h3\", {\n    \"id\": \"http2-multiplexing-for-sse\"\n  }, \"HTTP/2 Multiplexing for SSE\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Allows many SSE connections without browser-imposed limits\")), mdx(\"h3\", {\n    \"id\": \"binary-data-streaming-with-websockets\"\n  }, \"Binary Data Streaming with WebSockets\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Send images, files, audio efficiently\")), mdx(\"h3\", {\n    \"id\": \"integrating-with-cloudserverless-platforms\"\n  }, \"Integrating with Cloud/Serverless Platforms\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use managed services (AWS API Gateway, Azure Web PubSub)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Consider scaling strategies for long-lived connections\")), mdx(\"h2\", {\n    \"id\": \"summary-table-key-differences\"\n  }, \"Summary Table: Key Differences\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Category\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"SSE\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"WebSockets\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Direction\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"One-way (server \\u2192 client)\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Two-way (client \\u2194 server)\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Protocol\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"HTTP\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Custom (upgrade from HTTP)\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Security\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"HTTP security\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Manual origin checks\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Simplicity\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Easy, auto-reconnect\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Complex, manual reconnect\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Performance\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text only, efficient\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text & binary, high freq.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Message Structure\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"UTF-8 text\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Text & binary\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Adoption\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Native EventSource\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Many libraries\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Tooling\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Postman, JMeter, Gatling\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Socket.io, ws, k6\")))), mdx(\"h2\", {\n    \"id\": \"conclusion--further-resources\"\n  }, \"Conclusion & Further Resources\"), mdx(\"p\", null, \"Both SSE and WebSockets are powerful tools for real-time communication, each with their own strengths and trade-offs. Choose SSE for simple, one-way updates and WebSockets for complex, bi-directional interactions. Always consider your app\\u2019s requirements, scalability, and security needs before deciding. For further reading and advanced guides, check out:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"MDN: Server-Sent Events\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"MDN: WebSockets\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://tools.ietf.org/html/rfc6455\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"RFC 6455: WebSocket Protocol\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.asyncapi.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"AsyncAPI\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://socket.io/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Socket.io\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://k6.io/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"k6\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://gatling.io/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Gatling\"))));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["TS","Nodejs","ReactIcon"],"category":"Post","appDescription":null,"hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEcklEQVQ4y5WTeUyUVxTFv2hqW2sTo3SlTdAEgwUjCS6IGqfUOjjIYrEWtKLWJdGKIJUKEgFxQVOkTSBRGhUrS4I0qQQ0/YNGMBrAESwKyDYg22zMDIwgogR/fd8jaFeTvuTOu/Ny33nn3nM+5RliPZO/jKf/zCf2J0+e4HA4GB4epqKiAqvVytDQ0F/qlT9fmsgfP37MyMjI8/OxsTGZl5aW0tbWRlVVFedzcqi9c4fCwkvob99+OeCFCxe4ceOGzCfA1HXmTDYpKSmcPXuOpqYmDIZ2qm/d4tq1a7S2tska5d/ajIuL41JRkfw/Ojoqd7W1nPM5xMcnkJmZRUlJqQBppbq6mtzcvBeAE2A2m03OqM1gYMuWLaSnp/P06ejzh5KSkklLS+PUqVNER8dwIu2EYHqWxMREEhIOCsbNLxgODg6SI2bS1d1NQ0ODvPTTxYs0t7Rgt9sZGBigqOhnIiM3s39/HNnZP5KVlcVFUVNfX8+hQ0no9eNzVFQBMjIyRHxPd3cPlZVV1NbWikeGqKurw2y2SBHWrftcqlpTU8PJk98RG/sNWq0WDw8PXF1dKSsrGxelo6MDT09PZs+eJVuqrKyUtnj06JEURmVYUlLC6tU6weQQycnJHDt2nMDAQIKCgti1azebBXO9Xo/FYkXp7e3F3d1dhq+vL83NzVJZQ3s75eXlpKamcvTIUcG+mx07drD2szAOpx6Rs1MZ7tsXK1VWWzcajeMtBwcH4+LigmaFhq6uLtny1StXhccKKS4uprOzE6fTKc0cERGBj48P3t7egsASyd5kMgsLGeRdKUq28JdWG8C2bdt5IEZgNJok0HbBKL+gQM5QFUCd3+nTp3Fzc5OA4eHhNDY2YrZY6BGdWvv6xgHbRXubvtzExg0bhc/ihZqRMmbMmElUVJQEVFsymUzk5eUTFhbGBlEbGhrK5V8uy89RdYLahXJTDD4vN5e7QtHgNUEE6nQECgE+1miI2buXgvx8WoV9+oTCSUIU7/nziRbnV8RnqIKpd9XH+gWoCqzof7/LvgMJHE/PIObbeGLiDrBx6zb8NP6kpp2k5l4DI8L79w0dnBDWWhUYhPtHXhxMOczOPVEkHj5CXWMTLR2dGG12FGfKZowxwdwMmcf1EC/KAubwq78bvwW407ZzJcbYEB58HUBXlA5HYgSd0UEUr/iQbI8pFC5+i6r1C7HGr6d9jw7bwXBhm4WTsOvexxniRr//dAZWufAwdBbONR9gC3gXqzjrWzlThAvmJa9gXagwuGIqw/5vMqSZhsNvCuYFCtZFk+SumDTTsUUuoG+TD/YvPHGEe+HYvhTnbn/sXy3BttUXx9bF2ERu1bli8nsV49LXRbwmd9OyqZiXv/E8FJP2PSyfzMQiWLQumsJ9n8m0LpjMvXkKXcumiXMXsYtitebTt7Fo38Gy6r9DGe2381TE2MN+Kq6WErDcD5+5c4gMW8u5zB+ouV5Ob0uTrBkdENH/8lD427L1D9AjnF9/v4l7Ijp7evk/6w+cHbEsnYxFcwAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/481191268200c41bde3c6f108ae5ed24/a1946/sse.png","srcSet":"/static/481191268200c41bde3c6f108ae5ed24/5b37e/sse.png 236w,\n/static/481191268200c41bde3c6f108ae5ed24/49058/sse.png 472w,\n/static/481191268200c41bde3c6f108ae5ed24/a1946/sse.png 944w,\n/static/481191268200c41bde3c6f108ae5ed24/6050d/sse.png 1200w","srcWebp":"/static/481191268200c41bde3c6f108ae5ed24/99fbb/sse.webp","srcSetWebp":"/static/481191268200c41bde3c6f108ae5ed24/77392/sse.webp 236w,\n/static/481191268200c41bde3c6f108ae5ed24/1f177/sse.webp 472w,\n/static/481191268200c41bde3c6f108ae5ed24/99fbb/sse.webp 944w,\n/static/481191268200c41bde3c6f108ae5ed24/9000d/sse.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M269%2011l-24%206c-13%202-15%204-10%205h4l-4%201c-3%200-4%201-4%207%200%204-1%206-2%206l-3%202-2%204c-2%202-2%204-2%2019l-1%2017h-3l-2%201-5%202-2%201%202%201%202%202v3c0%202%200%202-1%200-1-4-4-5-5-3l-3%202v2c1%204%201%205-1%207l-2%203c1%201%200%203-1%204l-1%203%201-3c0-3%200-3-1-2s-2%205-2%2015l-2%2017c-1%205-1%2014%202%2020v6c-2%204-5%202-6-2%200-5-5-8-5-4l-4%201c-5%200-5%200-5%203%200%202%201%203%203%204%202%200%203%201%203%202h-6l1%204c-2-2-10-1-10%202h-1l-1-1v2l-3%201h-2l-2%201h-1c2%201-7%203-10%202-2%200-2%200%200%201h-1l-6%201h-2l2%201c2%201%202%201-1%201-4-1-13%202-11%203h-2c-3%200-6%202-6%205v2l-1%204-2%202v-7l-1-4c0-2-2-4-5-4l1%208v4l1%202v1l-1%201%201%201v2c1-1%202%200%204%202l2%201%202-4%202-2c-1-5%200-7%202-7%201%201%201%201%200%200l1-1h4l24-8v3l-1%203-3%203-2%202-1%203-2%204c-2%200-2%201-2%203l-1%201c-2-1-1%201%201%202%201%202%205%202%207%201h1l2-1h1a1638%201638%200%20017-3l1-2%201-3v-1l3-5c1-4%203-5%205-6s2%200%202%208v10l-3%201a8989%208989%200%2001-81%2025c0-1%201-2%202-1%203%200%205-2%205-5-1-3-4-4-6-1-1%201-1%200-1-4v-61c0%203%203%204%205%202v-7c-1-1%201-1%207-3l6-3-10%202c-8%203-10%203-10%201l-2-4-2-3%205-2%2015-5%209-3v-13l4-1h9c6%200%208-1%206-3-1-2%200-3%202-2h3c1-3%209-3%2015-1s8%204%204%204c-2%200-2%203-1%205l-2%202c-5%202%201%201%207-1%2011-4%2011-5-3-10-5-1-8-3-8-4%200-2-5-5-8-5l-3-2-2-4c-2%200-4-4-3-5l-1-2c-2-2-2-2%200-4%203-3%202-9-1-10-2-1-2-2-2-10%200-6%200-8%202-8l1-5c0-4-1-5-4-6-2%200-3-1-3-2h-7c-6%200-6%200-6-2s1-3%202-3h8c1%201-7%202-8%201l-1%201%206%201c4%200%205-1%205-2-1-3-4-4-10-3-3%201-3%201-3%205%200%203%200%204-4%205s-4%202-4%205l2%205c2%202%201%2015-2%2017-2%201-3%2010-1%2012v3c-1%201-2%202-1%203%200%202-2%205-4%205l1%201%202%202c0%202-3%201-5-1H83l-2%201-7%203-5%202%204-1c3-1%207%200%207%202l6%202c5%200%206-1%204-2v-1l3%201%203%201%203%201-3%201c-2%200-2%200-1%201h5l2-1h3l7%201%203%201c0%201-8%205-9%204l-1%202-1%203v4c0%204-3%205-6%201-3-2-7-3-10-1v4c2%202%202%202%200%202s-2%200-1%201l1%201h-2l-2-1-2%201-2%201c-2%200-2%200-2%203l1%202-6-3-8-3h-1c1-1-15-8-16-7l-1-1-7-5c-8-4-8-4-2-5%203-1%203-1%203%201%200%203%2012%206%2015%204v-1c-12%200-16-2-13-4%201-1%206%200%206%201h9l2-4c0-2%200-2%206%200h1c0-1-1-2-3-2l-3-1%204-2%202-1-4%201c-3%201-4%200-3-4l-1-2-1%201c0%201-7%202-9%201s-2-1%203-2c4-2%204-2%201-1-8%201-9%201-9%207v5l-4%201c-13%203-15%205-15%2016%200%207-1%207-4%208l-3%202v19c0%2022%200%2021%204%2023%205%203%204%2010-1%2011-3%201-5%205-3%209%201%202%205%203%208%201%202-2%2014%206%2013%208h-5l-2-1-6%201%201%202c2%204%202%206%201%206l-2-2a535%20535%200%2001-1%202c1%205%203%206%208%204%207-3%2015%207%209%2010-2%201-2%201%200%201%204-1%205%201%201%201h-3c-1-1-1-1-2%201%200%201-1%202-3%202l-2%202c0%202-4%204-13%208-2%201-2%201%201%201s4%200%203-1h7c1%201%201%201%200%200-2-2-3-2%203-4l3%201h1v-2l1%202v3l1-3c0-3%200-3%201-1l1%203v-3l1-3v2l1%202v-2l1-1%201%204%201%204%201-3v-3l1%201%201%202h2l1%201c2%200%204%204%205%2010l1%204-1%203-4%201-3%201-3%202v-5l-4-10c-1-3-2-6-1-7h-1c-2%201-2%202%201%207%203%206%204%2016%202%2015h-2c0%203-2%200-2-3%200-4-3-12-4-11l1%204c2%204%202%2011%201%2013-1%201-2%200-2-4l-3-10%201%207v7c-1%202-3%200-3-2%200-5-8-18-11-18l-2-2c-2-1-2-1-5%202-2%202-2%203-2%209%201%206%204%2015%206%2015h2l-1%201c-2-1-1%201%201%202h2v1c-1%201%200%201%201%203%203%202%208%201%2015-2s8-3%208-1l1%206%202%203H0v75h30a764%20764%200%200140%203c1-1%201%200%201%201l1%201h2l1%201h1l1%201v1h1l1%201c1%200%204%201%203%202l1%201%203%201h1v2c2-1%205%201%204%202l3%201%201%201%202%201%202%201c1%201%204%200%2013-3l12-5%204%203c3%202%205%203%206%202v-2c-2-1-1-2%205-1l5%201h-5l-4%202-7%205c-7%203-7%204-7%206%200%203%202%204%205%207%206%203%2010%204%205%201s-9-7-9-8c0-2%205-4%2018-9l26-14-8%203c-5%203-6%204-6%202s-1-3-3%200c-2%201-4%201-3-2l2-1v-2c-1-1%203-3%2010-5l20-1-6%203-4%203%207-3%2014-4-9%205-9%205%2011-4c5-3%2011-5%2013-5s-2%202-13%208l-18%207c-3%200-1-2%203-4l3-2-15%207-8%204c-4%201-6%203-5%203l7-2%206-3%204%203%205%202-3-3c-4-2-5-5-3-5l1%201%208%204v-1c-1-2%207-6%2022-13l12-5%20100-1h100v-75h-15c-14%200-15%200-14-1v-2l-2%202-4%201c-3%200-3%200%203-4%204-1%207-3%207-4l2-1v2c-3%203-1%203%202%200%202-2%202-5%203-13a1701%201701%200%2000-1-130c-1-3-2-3-1%200%200%202-1%201-4-2l-8-5c-4%200-5-1-3-2l4%201%205%201-7-4-2-1-2-2c-3%200-4-5-2-5l4-2c2-3%202-3%202-15l1-15%201-4%203-4%202-1h-2c-4%202-5-1-5-16-1-13-2-20-4-17l-8%203c-7%201-8%202-6%202s-4%203-25%209c-25%207-31%2010-31%2012l3-1a479%20479%200%200163-17l-1%201-3%204-5%206v5l3%201c4-1%2010-4%209-5l3-3v23l1%2015c0%2012%200%2013-2%2014-3%202-4%200-2-3l3-6c0-3-2-7-3-6l-1-1h-5c-5%200-5%200-5%202s0%202-1%201-1-1-1%202v1c0-2-1-2-3%200-3%201-3%201-1%201s3%200%203%204l2%206-1%202h-2c-1%202-10%205-12%205l-1-3c0-5-1-6-3-4s-3%206-1%208l-9%204-10%203%202-4c1-3%201-3%203-1%202%201%205-1%205-4s-4-3-5%200l-1-3c-1-4-5-7-10-7h-2l3%201h-2c-3%200-4%200-6%203-2%202-3%204-2%205v7c0%203%200%205%201%204v-5l2%202c3%202%204%204%201%204l1%201c2%201%202%201-3%202l-6%201a1112%201112%200%20011-70c-3%200-4%207-4%2038a473%20473%200%2001-4-34l-4-3%201-1v-2l-2%201-3%203h-3l2-2%202-2-2-1h-4l-1-1v-3c-3%200-4%202-4%2012l-1%204c-2-1-2-13%200-16%202-2%203-3%209-3l1-7c0-7%200-8%202-8v-1c-2%200-2-1-1-1h7l-1-1h-3c-4-2-2-4%203-4s7%201%205%204c-1%202%200%204%204%204%203%200%207-2%206-4h-5l-1%201-2-1%201-1c3%200-1-3-5-4-5-2-5-2%202-4h7v1l2%201%202%201c2%200%202%200%201-1-3%200-2-2%201-2%202%200%202%200%201%202l1%202h2l-5%201h8c4-2%204-4%200-4-3-1-2-2%204-4%204-1%2015%200%2014%202v3c0%202-1%203-2%203-3%201-3%204%200%204l4%202%202-1c0-1%200-2%202-2v3h1l2-1v2c-2%201-2%201-1%202%202%202%202%202-5%204l-8%203c-4%202%202%201%2010-2s9-4%208-2l2%201%205-2c2%200%202%200%200-1-3-1-3-4%200-4%203-1%206%200%203%201-1%201-1%201%201%201%202-1%208%200%2012%202v-1l-6-3c-2%200-5-1-6-3l-6-3c-4%200-4%200-4-4s-1-4-7-4l-6-2h-5l-6-1c-1%201-4%200-7-1h-7c-3%201-4%201-4-5%200-7%200-7-9-7-7-1-10%200-21%203m-5%202c-29%207-29%207-26%208s5%201%2030-5c24-6%2023-6%2021-7s-4-1-25%204m1%205l-26%207-1%203v12h4l4-1-4%201c-4%201-5%203-2%203l6%202h3l1-1h2l4-1h5l-6%202-5%202%207%202c6%202%207%202%208%201%200-1%201-2%203-2l2-4c0-3%200-3-3-2h-3l3-1c5-2%205-7%200-7-3%200-3%200-2-1%202-2%200-1-9%201l-9%202%209-3%2016-5%2015-5-12%205c-4%201-2%203%203%203l2-2%204-3%206-2c2%200%203-13%201-13l-26%207m-33%2045c-2%202-3%209-1%208l1-3c0-1%200-2%201-1l3%201v1l2%201%202-1-1-1-2-1v-1l15%205%204%202v10c0%2010%200%2013%201%209%202-3%201-20%200-21l-16-6c-8-3-7-3-9-2m-119%201l1%201c2%200%202%201%202%206%200%2017%200%2016%203%2016s3%200%202-3l-1-4%204-1c3-1%205-1%204-2h-1l-1-2v-2c-2%200-5-3-5-5s-7-5-8-4m188%206v2l-1%201v1c-1%201-1%200-1-1l-1-1c-2%201-2%2010-1%2013%201%202%201%202-1%204-2%201-2%202-1%2012l1%2011s5-4%204-5%200-2%201-1l6-1%204-2-5%201h-4v-8c0-8%201-10%206-13v-1l-3%201h-1l-2-1c-3%200-3-2-2-4%202-1%204-1%202%201-1%201%200%202%202%200s1-3-1-4h-2l2-2%202-2-2-1h-2m50%201l-4%201h-3c-2%200-3%200-2%201s-7%204-9%203h-1l-2%201c-3%201-3%2021%200%2022%201%201%208%200%208-1l3-1%203-1h2l1-1h2l1-1h1l1-1v-2l1-3v-2c2-1%202-5%201-12%200-5-1-6-3-3m-114%208c1%201%200%202-2%200-1-1-12%200-12%201h1l4%202c2%203%203%205%200%203-1-1-1-1-1%201l3%206%201%206v-9l-1-3c1-1%203%204%203%208%201%204%201%205%203%203h1c1%201%201%201%202-1%200-2%201-3%202-3%202%200%201-4-1-8-2-5-2-6%201-3l2%208%201%204V84h1c0-2-2-3-2-2-1%201-1%201-2-1v-1l1-1-2-2v1h-1c-2-2-4-1-2%201m76%208c1%201-7%203-8%202l-1%206c0%206%200%207%202%207l10-4v-2l1%201c1%201%201-1%201-4l-1-6-3-1-1%201m-108%2014c-3%201-4%202-5%2010s0%209%205%208l5-1v-9c0-10%200-10-5-8m65%204c0%204-1%206-2%205l-1%201%201%202c2%200%202%200%200%202v2h1v2l-1%204-1%2019%201%2014%202-7a272%20272%200%20000-44m-39%2010l-2%202c2%200%203%202%202%203-1%202-6%201-7-1-2-2-9-3-10-1l-3%201-3%201-3%201c-3%201-4%201-4%203s0%202%203%202l5-2c3%200%203%200%201-2v-1c2%200%208%207%2011%2013%203%204%204%2010%205%2017v3h4l-1-1-1-2%202-1v-13l2%209c0%205%200%205%202%204l2-2%202-2%204-4%201-1%201%202c1%200%202%201%201%202%200%201%205%200%206-2s0-11-2-16l-2-5c1-1%205%209%206%2015%200%204%201%205%201%203%202-5-5-25-9-24-3%201-7%201-8-1h-6m-60%204c3%204%203%207-1%207-2%200-3%200-3%202%200%203%202%206%205%204%201-1%201%200%201%2013%200%205%200%207%201%206%202-1%201-29-1-32l-3-3%201%203m-144%200c-1%202%200%203%201%201%201-1%203%200%207%202l4%203c-1%201-2%200-3-1s-2-1-2%203v4l-1-5v-4l-2%205-1%206%203%201%203%201c0%203%202%201%202-2l1-3v3l1%205%201-5c-1-6-1-6%2010%200l13%205c4%200%2015%205%2018%208%204%205%204%207%204%2047l1%2038c1%200%201%202%201-42%200-40-1-44-4-47l-55-25-2%202m340%2014l-1%203-3%203-1%204%203%201-2%201c-4-1%200%203%206%206%207%203%207%205%207%2021l-1%2026-2%2011v-10c0-12-1-11-1%202v9c1-2%201-2%201%200l-1%204c-2%201-2%200-1-12l-1-13c-1%200-2%200-1-1l-1-1c-1%201-1-2-1-9%200-19-2-26-5-22l-5%201h-3v9l-2%2013-2%2012c-1%2011-2%2013-4%2013l-2-1%202-3c1-4%202-12%200-10-2%203-10%205-18%206h-8v3l-1%203c-3%200-1%206%202%207%204%201%2022%200%2020-1l1-2c1-2%202-2%202-1h3c0%203-9%207-16%208-3%201-2%201%204%203%208%203%2021%203%2028%202h1v1c3%201-5%203-11%203-10%200-17-1-28-6l-10-3v3c-1%203-1%203%206%206%206%202%208%204%207%204h1l2%201%204%203c9%205%2010%206%2010%2014l1%207c3%200-2%205-6%206-2%201-2%201%200%202l2%202%203%203%202%202-4%201c-5%202-5%202%201%205l4%202-7%203c-9%203-10%205-6%207%207%204%2015%203%2026-3l11-5-9%205c-6%204-8%205-6%205l11-4c7-4%208-5%2010-9l3-6%201-59a687%20687%200%2000-3-63c0-6-1-8-4-11-3-4-8-4-8-1m-220%205c-3%201-7%206-5%206l2%205c0%205%200%205%201%202l1-3v6l5-2c6-2%206-2%205-9s-2-8-9-5m-82%206v5l7%204c9%204%207%200%208%2030%201%2022%201%2023%202%208l1-12v14c0%207%200%2013-1%2012-1-2-3-1-4%203-2%203-2%204%201%205%202%201%203%203%201%203l-1-1c-1-1-1-1-1%201l-1-1c-1-2-1%200-1%205%200%206%200%207%202%208h2l1%201%202%202a585%20585%200%2000-1-73v-2l-1-2v-3l-1-2c0-2-2-3-9-7l-6-3v5m212-1c-1%202%200%207%201%207l1%201%201%201c2%201%202%2010-1%2010-1%200-1%201%201%203l2%202-3%203c-4%204-3%205%202%207%203%201%205%201%2015-3l10-4-9%203-8%202c-1-1-1-1%201-1v-1l-1-9a2524%202524%200%2000-2-14c-2%201-2%201-2%2012l-1%207v-23c1-1%200-2-2-3-4-2-5-2-5%200m38%2012v7c1%200%205-1%204-2h1l1-1v-1h6l5-1-5%203a61%2061%200%2000-8%203c-3%200-7%203-6%203v1a338%20338%200%200033-11v-5c0-2%200-2-2%200l-2%203-3%202-2%201h-2l-3-1%201-1v-2c0-2%200-2-1-1h-1l-1-1c-1%201-2%200-3-1v-2h-3l-2%201-2%201c-1-1-1-1%200%200l-1%201h-1c0%202-3%201-3-1v5m45-6l-1%201h2l1%201%201%202h1l1%201c1-2%203%201%203%205%200%203%200%204%202%204v1c-4%200-2%207%203%208%201%201%201%201-1%201-3%200-3%200-2%201s1%201-1%201v1c2%200%203%207%201%207-1%200-1%201%201%201v1l-2%201%205%202v-8c2%200%201-22-1-24s-9-7-10-6l-1-1h-2m-163%202l1%202c0%202%204%205%206%205l2%201c1%201%201%201-1%201-3%200-3%200-2%202%201%201%201%201-1%201l-2-1v48l5-1%2011-3c5-1%208-2%205-2-2%200-2-2-2-17l1-18h-5l-5-1c-1-1-1-1%202-1%204%201%2010-2%209-4s-4-2-4-1c0%202-3%201-4%200-1-2-2-2-2-1h-1l-2-2%201-1%202-2-3-2c-2-2-3-3-6-2l-3-1-1-2-1%202m147%209l-1%203c0%205-1%207-6%208-4%202-5%203-5%205l-1%203-2%204c0%204-2%206-6%207l-2%202c0%202%2010%202%2017%200%208-3%209-5%209-14l-1-13c0-6-1-7-2-5m-120%208l-2%2018c0%2020-1%2019%209%2016%207-2%209-3%207-1h4c1-1%201-1-1-1-3%200-2%200%205-3l-5%201c-8%202-8%201%200-2l8-3-8-4c-10-4-10-5-10-9s0-5-3-6c-2-1-3-3-3-5l-1-1m-29%207c0%205-1%205-2%206-2%202-7%200-7-1v-1l-3-1c-7-3-7-2-8%2012-1%2013-1%2016-5%2016-3%201-4%206-1%206l3%205c0%203%200%203%203%202%202%200%202%200%201%201-2%202%200%201%208-1%204-2%206-3%204-3s-2%200%202-2l5-2c2-1%202-3%201-20a222%20222%200%2000-1-17M47%20206l2%204%208%204%2017%2011c1%201%201%200%201-5v-6l-1%205-1%203c0-5-1-6-8-8l-9-5h-2l-2-1c-1-1-2-2-3-1v-1l-1-1c-1-1-1%200-1%201m197-1l-12%203-10%203v5c-2%2011-9%2023-15%2028-4%203-7%204-3%201l1-2%201-3%203-1h1v-1l1-1c-1-2%200-4%201-2%201%201%201%201%201-1v-1c1%201%201%201%201-1v-1c1%201%201%201%201-1l2-9c2-9%202-9-9-5l-8%203-2%205c-2%2011-8%2018-17%2021-3%201-5%203-5%204%200%203-12-1-15-5h-1v-1l-1-2c-3%200-6%209-3%209l2%201%202%202%201-2%201-1c2%200%203%203%201%203-1%200-1%201%201%204l2%202%2012-4c7-3%2013-5%2014-4v-1h1c2%200%202%200%201-1h2c2%201-5%205-20%2011l-8%203%206%2011%201%204%201%201h1v1c1-1%203%202%202%203l1%201h2v1c-1%201-1%201%201%201l6-2c2%200%202%200%201%201h28c1-1%201-1%200%200s2%201%2012%201h13l3-3%203-4-3-1c-2-1-2-1-1-2v-1l-5%202c-2%200-2%200%201-1l3-3-3-1h-2c3-2-1-2-6%200l-5%202-1%201h6l-15%206%204-2c5-2%205-2%204-4l-1-2-1-1-1%201-1%201-1-1h-2v-2l2-3-2%202c-3%202-5%203-3%201v-2l1-1%201-2h-1l-1-1c0-1%204-3%205-2l1-2-1-2v-1h1l1-2%201-14%205-3c2-1%203-1%202-2s-1-1%201-2v-3l3-1%201%201v5h3v-1l5-3c4-2%205-4%202-5-2-1-2-1%200-1l3%201h3c2%200%202-1%202-7%201-9%201-9-3-11-3-1-4-2-4-4-1-2-1-2-3-1m-57%2018l-11%203c-3%201-3%202-3%205%200%202%200%203-2%204l-3%201c0%202-4%205-4%204l-1%201%202%203c2%201%202%201%205-1%202-2%203-2%205-1%205%204%2018-8%2020-19%201-4%202-4-8%200m106%200c-2%200-2%201-2%204%200%204%200%204-1%201%200-3%200-4-3-3l-1%201-1%201v11l1-1h2l2-2%201-1h3c2-1%202-1%201-2v-2l1-4c0-3-1-3-3-3m37%2010v1h-2l-5%201h-7c-1%201%200%201%201%201v1c-2%200-2%201-1%201%202%200%201%202-1%202h-6l1-2h-1l-4%201-3%201-6%202c-5%200-10%202-12%204-2%201-1%203%201%201h1l4%201%205-1-4%201c-4%202-15%202-16%200l-2-1-1-1%202-1h1l-1-2c-7%202-8%205-2%207l5%201%203%203c3%203%201%203-4%200s-10-5-8-3l5%203c7%204%207%204%206%2013-1%204%200%209%202%2010l12-4%2010-3v-8c-1-7-1-8%201-8h1c0-1%204-2%205-1h2c0-2%200-2%201-1h3l1-2h2c0-2%200-2%201-1l2%201%201-1c-1-3%201-3%202-1%201%201%201%201%201-1l1-2c1%200%201%202-1%205v8l-1-3c0-3-1-4-4-2-2%201-3%202-3%205v4l-1-4-1-3-1%205-1%202c-1-1-2%200-2%201l1%201%201%201%203%202%203%201%201-1v1l2%201c1-1%202-1%201%202l1%203%202-2%201-2h1l2%201%201%201h2c-1%202%200%202%201%202%204%200%202-4-1-5h-4l-1-1h-2c-2%200-2%200%201-1%203-2%207-3%204-1v1c2%201%203%200%201-3l-1-1h-4c-2-1%201-4%204-5l7-2c4-1%204-1%204-6a149%20149%200%20010-12l-20%207-9%201%206-2c18-7%2021-8%2020-9l-3-1c-2%200-2%200-1%201%202%200-1%202-8%204-13%205-14%205-11%202l3-2v-1h4l2-1h2l4-2c2-1%203-2%201-2h-3m-98%209c-2%201-3%202-2%203h-1c-1-2-2%201-2%206v6h2l1%201v-3h4v-2c-2-1-2-2-1-2h1c-1-1-1-1%201-1h1v-1c1%200%203%202%203%205%201%201%201%200%201-2%200-3%200-4-2-3v-1c4-2%202-4-3-4v-3l-3%201m-70%2023c-4%201-4%203-3%2012%202%208%203%209%2012%209l7-1-5-8-6-8c0-3-3-5-5-4m-99%204a100%20100%200%20015%2016l2-1%201-2h1l1%201%201-1v-1l1-1v-2l1-1v-3c3-1-2-5-8-5h-5m89%200l-1%205c0%205-2%207-7%207-3%200-4%201-6%203l-2%202h2l8-2c3-2%204-2%205-1v2l5%201c3%200%203%200%202-3l-3-9c0-6-2-8-3-5m-53%2047l2%208c2%208%203%209%205%203%202-9%203-9%204-2%202%208%204%207%206-2l1-8-3%206c-1%207-1%207-3%201-2-8-4-9-5-2-2%208-2%208-4%201-1-5-3-8-3-5m34%207v8h4c4%200%205-1%205-3%202-5%200-9-4-8-2%200-3-1-3-3l-1-2-1%208m28-2l-2%204c0%206%207%208%2010%203%203-6-4-12-8-7'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEcklEQVQ4y5WTeUyUVxTFv2hqW2sTo3SlTdAEgwUjCS6IGqfUOjjIYrEWtKLWJdGKIJUKEgFxQVOkTSBRGhUrS4I0qQQ0/YNGMBrAESwKyDYg22zMDIwgogR/fd8jaFeTvuTOu/Ny33nn3nM+5RliPZO/jKf/zCf2J0+e4HA4GB4epqKiAqvVytDQ0F/qlT9fmsgfP37MyMjI8/OxsTGZl5aW0tbWRlVVFedzcqi9c4fCwkvob99+OeCFCxe4ceOGzCfA1HXmTDYpKSmcPXuOpqYmDIZ2qm/d4tq1a7S2tska5d/ajIuL41JRkfw/Ojoqd7W1nPM5xMcnkJmZRUlJqQBppbq6mtzcvBeAE2A2m03OqM1gYMuWLaSnp/P06ejzh5KSkklLS+PUqVNER8dwIu2EYHqWxMREEhIOCsbNLxgODg6SI2bS1d1NQ0ODvPTTxYs0t7Rgt9sZGBigqOhnIiM3s39/HNnZP5KVlcVFUVNfX8+hQ0no9eNzVFQBMjIyRHxPd3cPlZVV1NbWikeGqKurw2y2SBHWrftcqlpTU8PJk98RG/sNWq0WDw8PXF1dKSsrGxelo6MDT09PZs+eJVuqrKyUtnj06JEURmVYUlLC6tU6weQQycnJHDt2nMDAQIKCgti1azebBXO9Xo/FYkXp7e3F3d1dhq+vL83NzVJZQ3s75eXlpKamcvTIUcG+mx07drD2szAOpx6Rs1MZ7tsXK1VWWzcajeMtBwcH4+LigmaFhq6uLtny1StXhccKKS4uprOzE6fTKc0cERGBj48P3t7egsASyd5kMgsLGeRdKUq28JdWG8C2bdt5IEZgNJok0HbBKL+gQM5QFUCd3+nTp3Fzc5OA4eHhNDY2YrZY6BGdWvv6xgHbRXubvtzExg0bhc/ihZqRMmbMmElUVJQEVFsymUzk5eUTFhbGBlEbGhrK5V8uy89RdYLahXJTDD4vN5e7QtHgNUEE6nQECgE+1miI2buXgvx8WoV9+oTCSUIU7/nziRbnV8RnqIKpd9XH+gWoCqzof7/LvgMJHE/PIObbeGLiDrBx6zb8NP6kpp2k5l4DI8L79w0dnBDWWhUYhPtHXhxMOczOPVEkHj5CXWMTLR2dGG12FGfKZowxwdwMmcf1EC/KAubwq78bvwW407ZzJcbYEB58HUBXlA5HYgSd0UEUr/iQbI8pFC5+i6r1C7HGr6d9jw7bwXBhm4WTsOvexxniRr//dAZWufAwdBbONR9gC3gXqzjrWzlThAvmJa9gXagwuGIqw/5vMqSZhsNvCuYFCtZFk+SumDTTsUUuoG+TD/YvPHGEe+HYvhTnbn/sXy3BttUXx9bF2ERu1bli8nsV49LXRbwmd9OyqZiXv/E8FJP2PSyfzMQiWLQumsJ9n8m0LpjMvXkKXcumiXMXsYtitebTt7Fo38Gy6r9DGe2381TE2MN+Kq6WErDcD5+5c4gMW8u5zB+ouV5Ob0uTrBkdENH/8lD427L1D9AjnF9/v4l7Ijp7evk/6w+cHbEsnYxFcwAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/481191268200c41bde3c6f108ae5ed24/3ddd4/sse.png","srcSet":"/static/481191268200c41bde3c6f108ae5ed24/078a8/sse.png 163w,\n/static/481191268200c41bde3c6f108ae5ed24/e56da/sse.png 327w,\n/static/481191268200c41bde3c6f108ae5ed24/3ddd4/sse.png 653w,\n/static/481191268200c41bde3c6f108ae5ed24/c5cc7/sse.png 980w,\n/static/481191268200c41bde3c6f108ae5ed24/6050d/sse.png 1200w","srcWebp":"/static/481191268200c41bde3c6f108ae5ed24/0acdf/sse.webp","srcSetWebp":"/static/481191268200c41bde3c6f108ae5ed24/ac59e/sse.webp 163w,\n/static/481191268200c41bde3c6f108ae5ed24/7660b/sse.webp 327w,\n/static/481191268200c41bde3c6f108ae5ed24/0acdf/sse.webp 653w,\n/static/481191268200c41bde3c6f108ae5ed24/75470/sse.webp 980w,\n/static/481191268200c41bde3c6f108ae5ed24/9000d/sse.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M269%2011l-24%206c-13%202-15%204-10%205h4l-4%201c-3%200-4%201-4%207%200%204-1%206-2%206l-3%202-2%204c-2%202-2%204-2%2019l-1%2017h-3l-2%201-5%202-2%201%202%201%202%202v3c0%202%200%202-1%200-1-4-4-5-5-3l-3%202v2c1%204%201%205-1%207l-2%203c1%201%200%203-1%204l-1%203%201-3c0-3%200-3-1-2s-2%205-2%2015l-2%2017c-1%205-1%2014%202%2020v6c-2%204-5%202-6-2%200-5-5-8-5-4l-4%201c-5%200-5%200-5%203%200%202%201%203%203%204%202%200%203%201%203%202h-6l1%204c-2-2-10-1-10%202h-1l-1-1v2l-3%201h-2l-2%201h-1c2%201-7%203-10%202-2%200-2%200%200%201h-1l-6%201h-2l2%201c2%201%202%201-1%201-4-1-13%202-11%203h-2c-3%200-6%202-6%205v2l-1%204-2%202v-7l-1-4c0-2-2-4-5-4l1%208v4l1%202v1l-1%201%201%201v2c1-1%202%200%204%202l2%201%202-4%202-2c-1-5%200-7%202-7%201%201%201%201%200%200l1-1h4l24-8v3l-1%203-3%203-2%202-1%203-2%204c-2%200-2%201-2%203l-1%201c-2-1-1%201%201%202%201%202%205%202%207%201h1l2-1h1a1638%201638%200%20017-3l1-2%201-3v-1l3-5c1-4%203-5%205-6s2%200%202%208v10l-3%201a8989%208989%200%2001-81%2025c0-1%201-2%202-1%203%200%205-2%205-5-1-3-4-4-6-1-1%201-1%200-1-4v-61c0%203%203%204%205%202v-7c-1-1%201-1%207-3l6-3-10%202c-8%203-10%203-10%201l-2-4-2-3%205-2%2015-5%209-3v-13l4-1h9c6%200%208-1%206-3-1-2%200-3%202-2h3c1-3%209-3%2015-1s8%204%204%204c-2%200-2%203-1%205l-2%202c-5%202%201%201%207-1%2011-4%2011-5-3-10-5-1-8-3-8-4%200-2-5-5-8-5l-3-2-2-4c-2%200-4-4-3-5l-1-2c-2-2-2-2%200-4%203-3%202-9-1-10-2-1-2-2-2-10%200-6%200-8%202-8l1-5c0-4-1-5-4-6-2%200-3-1-3-2h-7c-6%200-6%200-6-2s1-3%202-3h8c1%201-7%202-8%201l-1%201%206%201c4%200%205-1%205-2-1-3-4-4-10-3-3%201-3%201-3%205%200%203%200%204-4%205s-4%202-4%205l2%205c2%202%201%2015-2%2017-2%201-3%2010-1%2012v3c-1%201-2%202-1%203%200%202-2%205-4%205l1%201%202%202c0%202-3%201-5-1H83l-2%201-7%203-5%202%204-1c3-1%207%200%207%202l6%202c5%200%206-1%204-2v-1l3%201%203%201%203%201-3%201c-2%200-2%200-1%201h5l2-1h3l7%201%203%201c0%201-8%205-9%204l-1%202-1%203v4c0%204-3%205-6%201-3-2-7-3-10-1v4c2%202%202%202%200%202s-2%200-1%201l1%201h-2l-2-1-2%201-2%201c-2%200-2%200-2%203l1%202-6-3-8-3h-1c1-1-15-8-16-7l-1-1-7-5c-8-4-8-4-2-5%203-1%203-1%203%201%200%203%2012%206%2015%204v-1c-12%200-16-2-13-4%201-1%206%200%206%201h9l2-4c0-2%200-2%206%200h1c0-1-1-2-3-2l-3-1%204-2%202-1-4%201c-3%201-4%200-3-4l-1-2-1%201c0%201-7%202-9%201s-2-1%203-2c4-2%204-2%201-1-8%201-9%201-9%207v5l-4%201c-13%203-15%205-15%2016%200%207-1%207-4%208l-3%202v19c0%2022%200%2021%204%2023%205%203%204%2010-1%2011-3%201-5%205-3%209%201%202%205%203%208%201%202-2%2014%206%2013%208h-5l-2-1-6%201%201%202c2%204%202%206%201%206l-2-2a535%20535%200%2001-1%202c1%205%203%206%208%204%207-3%2015%207%209%2010-2%201-2%201%200%201%204-1%205%201%201%201h-3c-1-1-1-1-2%201%200%201-1%202-3%202l-2%202c0%202-4%204-13%208-2%201-2%201%201%201s4%200%203-1h7c1%201%201%201%200%200-2-2-3-2%203-4l3%201h1v-2l1%202v3l1-3c0-3%200-3%201-1l1%203v-3l1-3v2l1%202v-2l1-1%201%204%201%204%201-3v-3l1%201%201%202h2l1%201c2%200%204%204%205%2010l1%204-1%203-4%201-3%201-3%202v-5l-4-10c-1-3-2-6-1-7h-1c-2%201-2%202%201%207%203%206%204%2016%202%2015h-2c0%203-2%200-2-3%200-4-3-12-4-11l1%204c2%204%202%2011%201%2013-1%201-2%200-2-4l-3-10%201%207v7c-1%202-3%200-3-2%200-5-8-18-11-18l-2-2c-2-1-2-1-5%202-2%202-2%203-2%209%201%206%204%2015%206%2015h2l-1%201c-2-1-1%201%201%202h2v1c-1%201%200%201%201%203%203%202%208%201%2015-2s8-3%208-1l1%206%202%203H0v75h30a764%20764%200%200140%203c1-1%201%200%201%201l1%201h2l1%201h1l1%201v1h1l1%201c1%200%204%201%203%202l1%201%203%201h1v2c2-1%205%201%204%202l3%201%201%201%202%201%202%201c1%201%204%200%2013-3l12-5%204%203c3%202%205%203%206%202v-2c-2-1-1-2%205-1l5%201h-5l-4%202-7%205c-7%203-7%204-7%206%200%203%202%204%205%207%206%203%2010%204%205%201s-9-7-9-8c0-2%205-4%2018-9l26-14-8%203c-5%203-6%204-6%202s-1-3-3%200c-2%201-4%201-3-2l2-1v-2c-1-1%203-3%2010-5l20-1-6%203-4%203%207-3%2014-4-9%205-9%205%2011-4c5-3%2011-5%2013-5s-2%202-13%208l-18%207c-3%200-1-2%203-4l3-2-15%207-8%204c-4%201-6%203-5%203l7-2%206-3%204%203%205%202-3-3c-4-2-5-5-3-5l1%201%208%204v-1c-1-2%207-6%2022-13l12-5%20100-1h100v-75h-15c-14%200-15%200-14-1v-2l-2%202-4%201c-3%200-3%200%203-4%204-1%207-3%207-4l2-1v2c-3%203-1%203%202%200%202-2%202-5%203-13a1701%201701%200%2000-1-130c-1-3-2-3-1%200%200%202-1%201-4-2l-8-5c-4%200-5-1-3-2l4%201%205%201-7-4-2-1-2-2c-3%200-4-5-2-5l4-2c2-3%202-3%202-15l1-15%201-4%203-4%202-1h-2c-4%202-5-1-5-16-1-13-2-20-4-17l-8%203c-7%201-8%202-6%202s-4%203-25%209c-25%207-31%2010-31%2012l3-1a479%20479%200%200163-17l-1%201-3%204-5%206v5l3%201c4-1%2010-4%209-5l3-3v23l1%2015c0%2012%200%2013-2%2014-3%202-4%200-2-3l3-6c0-3-2-7-3-6l-1-1h-5c-5%200-5%200-5%202s0%202-1%201-1-1-1%202v1c0-2-1-2-3%200-3%201-3%201-1%201s3%200%203%204l2%206-1%202h-2c-1%202-10%205-12%205l-1-3c0-5-1-6-3-4s-3%206-1%208l-9%204-10%203%202-4c1-3%201-3%203-1%202%201%205-1%205-4s-4-3-5%200l-1-3c-1-4-5-7-10-7h-2l3%201h-2c-3%200-4%200-6%203-2%202-3%204-2%205v7c0%203%200%205%201%204v-5l2%202c3%202%204%204%201%204l1%201c2%201%202%201-3%202l-6%201a1112%201112%200%20011-70c-3%200-4%207-4%2038a473%20473%200%2001-4-34l-4-3%201-1v-2l-2%201-3%203h-3l2-2%202-2-2-1h-4l-1-1v-3c-3%200-4%202-4%2012l-1%204c-2-1-2-13%200-16%202-2%203-3%209-3l1-7c0-7%200-8%202-8v-1c-2%200-2-1-1-1h7l-1-1h-3c-4-2-2-4%203-4s7%201%205%204c-1%202%200%204%204%204%203%200%207-2%206-4h-5l-1%201-2-1%201-1c3%200-1-3-5-4-5-2-5-2%202-4h7v1l2%201%202%201c2%200%202%200%201-1-3%200-2-2%201-2%202%200%202%200%201%202l1%202h2l-5%201h8c4-2%204-4%200-4-3-1-2-2%204-4%204-1%2015%200%2014%202v3c0%202-1%203-2%203-3%201-3%204%200%204l4%202%202-1c0-1%200-2%202-2v3h1l2-1v2c-2%201-2%201-1%202%202%202%202%202-5%204l-8%203c-4%202%202%201%2010-2s9-4%208-2l2%201%205-2c2%200%202%200%200-1-3-1-3-4%200-4%203-1%206%200%203%201-1%201-1%201%201%201%202-1%208%200%2012%202v-1l-6-3c-2%200-5-1-6-3l-6-3c-4%200-4%200-4-4s-1-4-7-4l-6-2h-5l-6-1c-1%201-4%200-7-1h-7c-3%201-4%201-4-5%200-7%200-7-9-7-7-1-10%200-21%203m-5%202c-29%207-29%207-26%208s5%201%2030-5c24-6%2023-6%2021-7s-4-1-25%204m1%205l-26%207-1%203v12h4l4-1-4%201c-4%201-5%203-2%203l6%202h3l1-1h2l4-1h5l-6%202-5%202%207%202c6%202%207%202%208%201%200-1%201-2%203-2l2-4c0-3%200-3-3-2h-3l3-1c5-2%205-7%200-7-3%200-3%200-2-1%202-2%200-1-9%201l-9%202%209-3%2016-5%2015-5-12%205c-4%201-2%203%203%203l2-2%204-3%206-2c2%200%203-13%201-13l-26%207m-33%2045c-2%202-3%209-1%208l1-3c0-1%200-2%201-1l3%201v1l2%201%202-1-1-1-2-1v-1l15%205%204%202v10c0%2010%200%2013%201%209%202-3%201-20%200-21l-16-6c-8-3-7-3-9-2m-119%201l1%201c2%200%202%201%202%206%200%2017%200%2016%203%2016s3%200%202-3l-1-4%204-1c3-1%205-1%204-2h-1l-1-2v-2c-2%200-5-3-5-5s-7-5-8-4m188%206v2l-1%201v1c-1%201-1%200-1-1l-1-1c-2%201-2%2010-1%2013%201%202%201%202-1%204-2%201-2%202-1%2012l1%2011s5-4%204-5%200-2%201-1l6-1%204-2-5%201h-4v-8c0-8%201-10%206-13v-1l-3%201h-1l-2-1c-3%200-3-2-2-4%202-1%204-1%202%201-1%201%200%202%202%200s1-3-1-4h-2l2-2%202-2-2-1h-2m50%201l-4%201h-3c-2%200-3%200-2%201s-7%204-9%203h-1l-2%201c-3%201-3%2021%200%2022%201%201%208%200%208-1l3-1%203-1h2l1-1h2l1-1h1l1-1v-2l1-3v-2c2-1%202-5%201-12%200-5-1-6-3-3m-114%208c1%201%200%202-2%200-1-1-12%200-12%201h1l4%202c2%203%203%205%200%203-1-1-1-1-1%201l3%206%201%206v-9l-1-3c1-1%203%204%203%208%201%204%201%205%203%203h1c1%201%201%201%202-1%200-2%201-3%202-3%202%200%201-4-1-8-2-5-2-6%201-3l2%208%201%204V84h1c0-2-2-3-2-2-1%201-1%201-2-1v-1l1-1-2-2v1h-1c-2-2-4-1-2%201m76%208c1%201-7%203-8%202l-1%206c0%206%200%207%202%207l10-4v-2l1%201c1%201%201-1%201-4l-1-6-3-1-1%201m-108%2014c-3%201-4%202-5%2010s0%209%205%208l5-1v-9c0-10%200-10-5-8m65%204c0%204-1%206-2%205l-1%201%201%202c2%200%202%200%200%202v2h1v2l-1%204-1%2019%201%2014%202-7a272%20272%200%20000-44m-39%2010l-2%202c2%200%203%202%202%203-1%202-6%201-7-1-2-2-9-3-10-1l-3%201-3%201-3%201c-3%201-4%201-4%203s0%202%203%202l5-2c3%200%203%200%201-2v-1c2%200%208%207%2011%2013%203%204%204%2010%205%2017v3h4l-1-1-1-2%202-1v-13l2%209c0%205%200%205%202%204l2-2%202-2%204-4%201-1%201%202c1%200%202%201%201%202%200%201%205%200%206-2s0-11-2-16l-2-5c1-1%205%209%206%2015%200%204%201%205%201%203%202-5-5-25-9-24-3%201-7%201-8-1h-6m-60%204c3%204%203%207-1%207-2%200-3%200-3%202%200%203%202%206%205%204%201-1%201%200%201%2013%200%205%200%207%201%206%202-1%201-29-1-32l-3-3%201%203m-144%200c-1%202%200%203%201%201%201-1%203%200%207%202l4%203c-1%201-2%200-3-1s-2-1-2%203v4l-1-5v-4l-2%205-1%206%203%201%203%201c0%203%202%201%202-2l1-3v3l1%205%201-5c-1-6-1-6%2010%200l13%205c4%200%2015%205%2018%208%204%205%204%207%204%2047l1%2038c1%200%201%202%201-42%200-40-1-44-4-47l-55-25-2%202m340%2014l-1%203-3%203-1%204%203%201-2%201c-4-1%200%203%206%206%207%203%207%205%207%2021l-1%2026-2%2011v-10c0-12-1-11-1%202v9c1-2%201-2%201%200l-1%204c-2%201-2%200-1-12l-1-13c-1%200-2%200-1-1l-1-1c-1%201-1-2-1-9%200-19-2-26-5-22l-5%201h-3v9l-2%2013-2%2012c-1%2011-2%2013-4%2013l-2-1%202-3c1-4%202-12%200-10-2%203-10%205-18%206h-8v3l-1%203c-3%200-1%206%202%207%204%201%2022%200%2020-1l1-2c1-2%202-2%202-1h3c0%203-9%207-16%208-3%201-2%201%204%203%208%203%2021%203%2028%202h1v1c3%201-5%203-11%203-10%200-17-1-28-6l-10-3v3c-1%203-1%203%206%206%206%202%208%204%207%204h1l2%201%204%203c9%205%2010%206%2010%2014l1%207c3%200-2%205-6%206-2%201-2%201%200%202l2%202%203%203%202%202-4%201c-5%202-5%202%201%205l4%202-7%203c-9%203-10%205-6%207%207%204%2015%203%2026-3l11-5-9%205c-6%204-8%205-6%205l11-4c7-4%208-5%2010-9l3-6%201-59a687%20687%200%2000-3-63c0-6-1-8-4-11-3-4-8-4-8-1m-220%205c-3%201-7%206-5%206l2%205c0%205%200%205%201%202l1-3v6l5-2c6-2%206-2%205-9s-2-8-9-5m-82%206v5l7%204c9%204%207%200%208%2030%201%2022%201%2023%202%208l1-12v14c0%207%200%2013-1%2012-1-2-3-1-4%203-2%203-2%204%201%205%202%201%203%203%201%203l-1-1c-1-1-1-1-1%201l-1-1c-1-2-1%200-1%205%200%206%200%207%202%208h2l1%201%202%202a585%20585%200%2000-1-73v-2l-1-2v-3l-1-2c0-2-2-3-9-7l-6-3v5m212-1c-1%202%200%207%201%207l1%201%201%201c2%201%202%2010-1%2010-1%200-1%201%201%203l2%202-3%203c-4%204-3%205%202%207%203%201%205%201%2015-3l10-4-9%203-8%202c-1-1-1-1%201-1v-1l-1-9a2524%202524%200%2000-2-14c-2%201-2%201-2%2012l-1%207v-23c1-1%200-2-2-3-4-2-5-2-5%200m38%2012v7c1%200%205-1%204-2h1l1-1v-1h6l5-1-5%203a61%2061%200%2000-8%203c-3%200-7%203-6%203v1a338%20338%200%200033-11v-5c0-2%200-2-2%200l-2%203-3%202-2%201h-2l-3-1%201-1v-2c0-2%200-2-1-1h-1l-1-1c-1%201-2%200-3-1v-2h-3l-2%201-2%201c-1-1-1-1%200%200l-1%201h-1c0%202-3%201-3-1v5m45-6l-1%201h2l1%201%201%202h1l1%201c1-2%203%201%203%205%200%203%200%204%202%204v1c-4%200-2%207%203%208%201%201%201%201-1%201-3%200-3%200-2%201s1%201-1%201v1c2%200%203%207%201%207-1%200-1%201%201%201v1l-2%201%205%202v-8c2%200%201-22-1-24s-9-7-10-6l-1-1h-2m-163%202l1%202c0%202%204%205%206%205l2%201c1%201%201%201-1%201-3%200-3%200-2%202%201%201%201%201-1%201l-2-1v48l5-1%2011-3c5-1%208-2%205-2-2%200-2-2-2-17l1-18h-5l-5-1c-1-1-1-1%202-1%204%201%2010-2%209-4s-4-2-4-1c0%202-3%201-4%200-1-2-2-2-2-1h-1l-2-2%201-1%202-2-3-2c-2-2-3-3-6-2l-3-1-1-2-1%202m147%209l-1%203c0%205-1%207-6%208-4%202-5%203-5%205l-1%203-2%204c0%204-2%206-6%207l-2%202c0%202%2010%202%2017%200%208-3%209-5%209-14l-1-13c0-6-1-7-2-5m-120%208l-2%2018c0%2020-1%2019%209%2016%207-2%209-3%207-1h4c1-1%201-1-1-1-3%200-2%200%205-3l-5%201c-8%202-8%201%200-2l8-3-8-4c-10-4-10-5-10-9s0-5-3-6c-2-1-3-3-3-5l-1-1m-29%207c0%205-1%205-2%206-2%202-7%200-7-1v-1l-3-1c-7-3-7-2-8%2012-1%2013-1%2016-5%2016-3%201-4%206-1%206l3%205c0%203%200%203%203%202%202%200%202%200%201%201-2%202%200%201%208-1%204-2%206-3%204-3s-2%200%202-2l5-2c2-1%202-3%201-20a222%20222%200%2000-1-17M47%20206l2%204%208%204%2017%2011c1%201%201%200%201-5v-6l-1%205-1%203c0-5-1-6-8-8l-9-5h-2l-2-1c-1-1-2-2-3-1v-1l-1-1c-1-1-1%200-1%201m197-1l-12%203-10%203v5c-2%2011-9%2023-15%2028-4%203-7%204-3%201l1-2%201-3%203-1h1v-1l1-1c-1-2%200-4%201-2%201%201%201%201%201-1v-1c1%201%201%201%201-1v-1c1%201%201%201%201-1l2-9c2-9%202-9-9-5l-8%203-2%205c-2%2011-8%2018-17%2021-3%201-5%203-5%204%200%203-12-1-15-5h-1v-1l-1-2c-3%200-6%209-3%209l2%201%202%202%201-2%201-1c2%200%203%203%201%203-1%200-1%201%201%204l2%202%2012-4c7-3%2013-5%2014-4v-1h1c2%200%202%200%201-1h2c2%201-5%205-20%2011l-8%203%206%2011%201%204%201%201h1v1c1-1%203%202%202%203l1%201h2v1c-1%201-1%201%201%201l6-2c2%200%202%200%201%201h28c1-1%201-1%200%200s2%201%2012%201h13l3-3%203-4-3-1c-2-1-2-1-1-2v-1l-5%202c-2%200-2%200%201-1l3-3-3-1h-2c3-2-1-2-6%200l-5%202-1%201h6l-15%206%204-2c5-2%205-2%204-4l-1-2-1-1-1%201-1%201-1-1h-2v-2l2-3-2%202c-3%202-5%203-3%201v-2l1-1%201-2h-1l-1-1c0-1%204-3%205-2l1-2-1-2v-1h1l1-2%201-14%205-3c2-1%203-1%202-2s-1-1%201-2v-3l3-1%201%201v5h3v-1l5-3c4-2%205-4%202-5-2-1-2-1%200-1l3%201h3c2%200%202-1%202-7%201-9%201-9-3-11-3-1-4-2-4-4-1-2-1-2-3-1m-57%2018l-11%203c-3%201-3%202-3%205%200%202%200%203-2%204l-3%201c0%202-4%205-4%204l-1%201%202%203c2%201%202%201%205-1%202-2%203-2%205-1%205%204%2018-8%2020-19%201-4%202-4-8%200m106%200c-2%200-2%201-2%204%200%204%200%204-1%201%200-3%200-4-3-3l-1%201-1%201v11l1-1h2l2-2%201-1h3c2-1%202-1%201-2v-2l1-4c0-3-1-3-3-3m37%2010v1h-2l-5%201h-7c-1%201%200%201%201%201v1c-2%200-2%201-1%201%202%200%201%202-1%202h-6l1-2h-1l-4%201-3%201-6%202c-5%200-10%202-12%204-2%201-1%203%201%201h1l4%201%205-1-4%201c-4%202-15%202-16%200l-2-1-1-1%202-1h1l-1-2c-7%202-8%205-2%207l5%201%203%203c3%203%201%203-4%200s-10-5-8-3l5%203c7%204%207%204%206%2013-1%204%200%209%202%2010l12-4%2010-3v-8c-1-7-1-8%201-8h1c0-1%204-2%205-1h2c0-2%200-2%201-1h3l1-2h2c0-2%200-2%201-1l2%201%201-1c-1-3%201-3%202-1%201%201%201%201%201-1l1-2c1%200%201%202-1%205v8l-1-3c0-3-1-4-4-2-2%201-3%202-3%205v4l-1-4-1-3-1%205-1%202c-1-1-2%200-2%201l1%201%201%201%203%202%203%201%201-1v1l2%201c1-1%202-1%201%202l1%203%202-2%201-2h1l2%201%201%201h2c-1%202%200%202%201%202%204%200%202-4-1-5h-4l-1-1h-2c-2%200-2%200%201-1%203-2%207-3%204-1v1c2%201%203%200%201-3l-1-1h-4c-2-1%201-4%204-5l7-2c4-1%204-1%204-6a149%20149%200%20010-12l-20%207-9%201%206-2c18-7%2021-8%2020-9l-3-1c-2%200-2%200-1%201%202%200-1%202-8%204-13%205-14%205-11%202l3-2v-1h4l2-1h2l4-2c2-1%203-2%201-2h-3m-98%209c-2%201-3%202-2%203h-1c-1-2-2%201-2%206v6h2l1%201v-3h4v-2c-2-1-2-2-1-2h1c-1-1-1-1%201-1h1v-1c1%200%203%202%203%205%201%201%201%200%201-2%200-3%200-4-2-3v-1c4-2%202-4-3-4v-3l-3%201m-70%2023c-4%201-4%203-3%2012%202%208%203%209%2012%209l7-1-5-8-6-8c0-3-3-5-5-4m-99%204a100%20100%200%20015%2016l2-1%201-2h1l1%201%201-1v-1l1-1v-2l1-1v-3c3-1-2-5-8-5h-5m89%200l-1%205c0%205-2%207-7%207-3%200-4%201-6%203l-2%202h2l8-2c3-2%204-2%205-1v2l5%201c3%200%203%200%202-3l-3-9c0-6-2-8-3-5m-53%2047l2%208c2%208%203%209%205%203%202-9%203-9%204-2%202%208%204%207%206-2l1-8-3%206c-1%207-1%207-3%201-2-8-4-9-5-2-2%208-2%208-4%201-1-5-3-8-3-5m34%207v8h4c4%200%205-1%205-3%202-5%200-9-4-8-2%200-3-1-3-3l-1-2-1%208m28-2l-2%204c0%206%207%208%2010%203%203-6-4-12-8-7'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEcklEQVQ4y5WTeUyUVxTFv2hqW2sTo3SlTdAEgwUjCS6IGqfUOjjIYrEWtKLWJdGKIJUKEgFxQVOkTSBRGhUrS4I0qQQ0/YNGMBrAESwKyDYg22zMDIwgogR/fd8jaFeTvuTOu/Ny33nn3nM+5RliPZO/jKf/zCf2J0+e4HA4GB4epqKiAqvVytDQ0F/qlT9fmsgfP37MyMjI8/OxsTGZl5aW0tbWRlVVFedzcqi9c4fCwkvob99+OeCFCxe4ceOGzCfA1HXmTDYpKSmcPXuOpqYmDIZ2qm/d4tq1a7S2tska5d/ajIuL41JRkfw/Ojoqd7W1nPM5xMcnkJmZRUlJqQBppbq6mtzcvBeAE2A2m03OqM1gYMuWLaSnp/P06ejzh5KSkklLS+PUqVNER8dwIu2EYHqWxMREEhIOCsbNLxgODg6SI2bS1d1NQ0ODvPTTxYs0t7Rgt9sZGBigqOhnIiM3s39/HNnZP5KVlcVFUVNfX8+hQ0no9eNzVFQBMjIyRHxPd3cPlZVV1NbWikeGqKurw2y2SBHWrftcqlpTU8PJk98RG/sNWq0WDw8PXF1dKSsrGxelo6MDT09PZs+eJVuqrKyUtnj06JEURmVYUlLC6tU6weQQycnJHDt2nMDAQIKCgti1azebBXO9Xo/FYkXp7e3F3d1dhq+vL83NzVJZQ3s75eXlpKamcvTIUcG+mx07drD2szAOpx6Rs1MZ7tsXK1VWWzcajeMtBwcH4+LigmaFhq6uLtny1StXhccKKS4uprOzE6fTKc0cERGBj48P3t7egsASyd5kMgsLGeRdKUq28JdWG8C2bdt5IEZgNJok0HbBKL+gQM5QFUCd3+nTp3Fzc5OA4eHhNDY2YrZY6BGdWvv6xgHbRXubvtzExg0bhc/ihZqRMmbMmElUVJQEVFsymUzk5eUTFhbGBlEbGhrK5V8uy89RdYLahXJTDD4vN5e7QtHgNUEE6nQECgE+1miI2buXgvx8WoV9+oTCSUIU7/nziRbnV8RnqIKpd9XH+gWoCqzof7/LvgMJHE/PIObbeGLiDrBx6zb8NP6kpp2k5l4DI8L79w0dnBDWWhUYhPtHXhxMOczOPVEkHj5CXWMTLR2dGG12FGfKZowxwdwMmcf1EC/KAubwq78bvwW407ZzJcbYEB58HUBXlA5HYgSd0UEUr/iQbI8pFC5+i6r1C7HGr6d9jw7bwXBhm4WTsOvexxniRr//dAZWufAwdBbONR9gC3gXqzjrWzlThAvmJa9gXagwuGIqw/5vMqSZhsNvCuYFCtZFk+SumDTTsUUuoG+TD/YvPHGEe+HYvhTnbn/sXy3BttUXx9bF2ERu1bli8nsV49LXRbwmd9OyqZiXv/E8FJP2PSyfzMQiWLQumsJ9n8m0LpjMvXkKXcumiXMXsYtitebTt7Fo38Gy6r9DGe2381TE2MN+Kq6WErDcD5+5c4gMW8u5zB+ouV5Ob0uTrBkdENH/8lD427L1D9AjnF9/v4l7Ijp7evk/6w+cHbEsnYxFcwAAAABJRU5ErkJggg==","aspectRatio":1,"src":"/static/481191268200c41bde3c6f108ae5ed24/502b1/sse.png","srcSet":"/static/481191268200c41bde3c6f108ae5ed24/f2e6d/sse.png 114w,\n/static/481191268200c41bde3c6f108ae5ed24/4ddba/sse.png 229w,\n/static/481191268200c41bde3c6f108ae5ed24/502b1/sse.png 457w,\n/static/481191268200c41bde3c6f108ae5ed24/7ddc2/sse.png 686w,\n/static/481191268200c41bde3c6f108ae5ed24/435bf/sse.png 914w,\n/static/481191268200c41bde3c6f108ae5ed24/6050d/sse.png 1200w","srcWebp":"/static/481191268200c41bde3c6f108ae5ed24/15384/sse.webp","srcSetWebp":"/static/481191268200c41bde3c6f108ae5ed24/31fce/sse.webp 114w,\n/static/481191268200c41bde3c6f108ae5ed24/e3e25/sse.webp 229w,\n/static/481191268200c41bde3c6f108ae5ed24/15384/sse.webp 457w,\n/static/481191268200c41bde3c6f108ae5ed24/0258d/sse.webp 686w,\n/static/481191268200c41bde3c6f108ae5ed24/64ea2/sse.webp 914w,\n/static/481191268200c41bde3c6f108ae5ed24/9000d/sse.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M269%2011l-24%206c-13%202-15%204-10%205h4l-4%201c-3%200-4%201-4%207%200%204-1%206-2%206l-3%202-2%204c-2%202-2%204-2%2019l-1%2017h-3l-2%201-5%202-2%201%202%201%202%202v3c0%202%200%202-1%200-1-4-4-5-5-3l-3%202v2c1%204%201%205-1%207l-2%203c1%201%200%203-1%204l-1%203%201-3c0-3%200-3-1-2s-2%205-2%2015l-2%2017c-1%205-1%2014%202%2020v6c-2%204-5%202-6-2%200-5-5-8-5-4l-4%201c-5%200-5%200-5%203%200%202%201%203%203%204%202%200%203%201%203%202h-6l1%204c-2-2-10-1-10%202h-1l-1-1v2l-3%201h-2l-2%201h-1c2%201-7%203-10%202-2%200-2%200%200%201h-1l-6%201h-2l2%201c2%201%202%201-1%201-4-1-13%202-11%203h-2c-3%200-6%202-6%205v2l-1%204-2%202v-7l-1-4c0-2-2-4-5-4l1%208v4l1%202v1l-1%201%201%201v2c1-1%202%200%204%202l2%201%202-4%202-2c-1-5%200-7%202-7%201%201%201%201%200%200l1-1h4l24-8v3l-1%203-3%203-2%202-1%203-2%204c-2%200-2%201-2%203l-1%201c-2-1-1%201%201%202%201%202%205%202%207%201h1l2-1h1a1638%201638%200%20017-3l1-2%201-3v-1l3-5c1-4%203-5%205-6s2%200%202%208v10l-3%201a8989%208989%200%2001-81%2025c0-1%201-2%202-1%203%200%205-2%205-5-1-3-4-4-6-1-1%201-1%200-1-4v-61c0%203%203%204%205%202v-7c-1-1%201-1%207-3l6-3-10%202c-8%203-10%203-10%201l-2-4-2-3%205-2%2015-5%209-3v-13l4-1h9c6%200%208-1%206-3-1-2%200-3%202-2h3c1-3%209-3%2015-1s8%204%204%204c-2%200-2%203-1%205l-2%202c-5%202%201%201%207-1%2011-4%2011-5-3-10-5-1-8-3-8-4%200-2-5-5-8-5l-3-2-2-4c-2%200-4-4-3-5l-1-2c-2-2-2-2%200-4%203-3%202-9-1-10-2-1-2-2-2-10%200-6%200-8%202-8l1-5c0-4-1-5-4-6-2%200-3-1-3-2h-7c-6%200-6%200-6-2s1-3%202-3h8c1%201-7%202-8%201l-1%201%206%201c4%200%205-1%205-2-1-3-4-4-10-3-3%201-3%201-3%205%200%203%200%204-4%205s-4%202-4%205l2%205c2%202%201%2015-2%2017-2%201-3%2010-1%2012v3c-1%201-2%202-1%203%200%202-2%205-4%205l1%201%202%202c0%202-3%201-5-1H83l-2%201-7%203-5%202%204-1c3-1%207%200%207%202l6%202c5%200%206-1%204-2v-1l3%201%203%201%203%201-3%201c-2%200-2%200-1%201h5l2-1h3l7%201%203%201c0%201-8%205-9%204l-1%202-1%203v4c0%204-3%205-6%201-3-2-7-3-10-1v4c2%202%202%202%200%202s-2%200-1%201l1%201h-2l-2-1-2%201-2%201c-2%200-2%200-2%203l1%202-6-3-8-3h-1c1-1-15-8-16-7l-1-1-7-5c-8-4-8-4-2-5%203-1%203-1%203%201%200%203%2012%206%2015%204v-1c-12%200-16-2-13-4%201-1%206%200%206%201h9l2-4c0-2%200-2%206%200h1c0-1-1-2-3-2l-3-1%204-2%202-1-4%201c-3%201-4%200-3-4l-1-2-1%201c0%201-7%202-9%201s-2-1%203-2c4-2%204-2%201-1-8%201-9%201-9%207v5l-4%201c-13%203-15%205-15%2016%200%207-1%207-4%208l-3%202v19c0%2022%200%2021%204%2023%205%203%204%2010-1%2011-3%201-5%205-3%209%201%202%205%203%208%201%202-2%2014%206%2013%208h-5l-2-1-6%201%201%202c2%204%202%206%201%206l-2-2a535%20535%200%2001-1%202c1%205%203%206%208%204%207-3%2015%207%209%2010-2%201-2%201%200%201%204-1%205%201%201%201h-3c-1-1-1-1-2%201%200%201-1%202-3%202l-2%202c0%202-4%204-13%208-2%201-2%201%201%201s4%200%203-1h7c1%201%201%201%200%200-2-2-3-2%203-4l3%201h1v-2l1%202v3l1-3c0-3%200-3%201-1l1%203v-3l1-3v2l1%202v-2l1-1%201%204%201%204%201-3v-3l1%201%201%202h2l1%201c2%200%204%204%205%2010l1%204-1%203-4%201-3%201-3%202v-5l-4-10c-1-3-2-6-1-7h-1c-2%201-2%202%201%207%203%206%204%2016%202%2015h-2c0%203-2%200-2-3%200-4-3-12-4-11l1%204c2%204%202%2011%201%2013-1%201-2%200-2-4l-3-10%201%207v7c-1%202-3%200-3-2%200-5-8-18-11-18l-2-2c-2-1-2-1-5%202-2%202-2%203-2%209%201%206%204%2015%206%2015h2l-1%201c-2-1-1%201%201%202h2v1c-1%201%200%201%201%203%203%202%208%201%2015-2s8-3%208-1l1%206%202%203H0v75h30a764%20764%200%200140%203c1-1%201%200%201%201l1%201h2l1%201h1l1%201v1h1l1%201c1%200%204%201%203%202l1%201%203%201h1v2c2-1%205%201%204%202l3%201%201%201%202%201%202%201c1%201%204%200%2013-3l12-5%204%203c3%202%205%203%206%202v-2c-2-1-1-2%205-1l5%201h-5l-4%202-7%205c-7%203-7%204-7%206%200%203%202%204%205%207%206%203%2010%204%205%201s-9-7-9-8c0-2%205-4%2018-9l26-14-8%203c-5%203-6%204-6%202s-1-3-3%200c-2%201-4%201-3-2l2-1v-2c-1-1%203-3%2010-5l20-1-6%203-4%203%207-3%2014-4-9%205-9%205%2011-4c5-3%2011-5%2013-5s-2%202-13%208l-18%207c-3%200-1-2%203-4l3-2-15%207-8%204c-4%201-6%203-5%203l7-2%206-3%204%203%205%202-3-3c-4-2-5-5-3-5l1%201%208%204v-1c-1-2%207-6%2022-13l12-5%20100-1h100v-75h-15c-14%200-15%200-14-1v-2l-2%202-4%201c-3%200-3%200%203-4%204-1%207-3%207-4l2-1v2c-3%203-1%203%202%200%202-2%202-5%203-13a1701%201701%200%2000-1-130c-1-3-2-3-1%200%200%202-1%201-4-2l-8-5c-4%200-5-1-3-2l4%201%205%201-7-4-2-1-2-2c-3%200-4-5-2-5l4-2c2-3%202-3%202-15l1-15%201-4%203-4%202-1h-2c-4%202-5-1-5-16-1-13-2-20-4-17l-8%203c-7%201-8%202-6%202s-4%203-25%209c-25%207-31%2010-31%2012l3-1a479%20479%200%200163-17l-1%201-3%204-5%206v5l3%201c4-1%2010-4%209-5l3-3v23l1%2015c0%2012%200%2013-2%2014-3%202-4%200-2-3l3-6c0-3-2-7-3-6l-1-1h-5c-5%200-5%200-5%202s0%202-1%201-1-1-1%202v1c0-2-1-2-3%200-3%201-3%201-1%201s3%200%203%204l2%206-1%202h-2c-1%202-10%205-12%205l-1-3c0-5-1-6-3-4s-3%206-1%208l-9%204-10%203%202-4c1-3%201-3%203-1%202%201%205-1%205-4s-4-3-5%200l-1-3c-1-4-5-7-10-7h-2l3%201h-2c-3%200-4%200-6%203-2%202-3%204-2%205v7c0%203%200%205%201%204v-5l2%202c3%202%204%204%201%204l1%201c2%201%202%201-3%202l-6%201a1112%201112%200%20011-70c-3%200-4%207-4%2038a473%20473%200%2001-4-34l-4-3%201-1v-2l-2%201-3%203h-3l2-2%202-2-2-1h-4l-1-1v-3c-3%200-4%202-4%2012l-1%204c-2-1-2-13%200-16%202-2%203-3%209-3l1-7c0-7%200-8%202-8v-1c-2%200-2-1-1-1h7l-1-1h-3c-4-2-2-4%203-4s7%201%205%204c-1%202%200%204%204%204%203%200%207-2%206-4h-5l-1%201-2-1%201-1c3%200-1-3-5-4-5-2-5-2%202-4h7v1l2%201%202%201c2%200%202%200%201-1-3%200-2-2%201-2%202%200%202%200%201%202l1%202h2l-5%201h8c4-2%204-4%200-4-3-1-2-2%204-4%204-1%2015%200%2014%202v3c0%202-1%203-2%203-3%201-3%204%200%204l4%202%202-1c0-1%200-2%202-2v3h1l2-1v2c-2%201-2%201-1%202%202%202%202%202-5%204l-8%203c-4%202%202%201%2010-2s9-4%208-2l2%201%205-2c2%200%202%200%200-1-3-1-3-4%200-4%203-1%206%200%203%201-1%201-1%201%201%201%202-1%208%200%2012%202v-1l-6-3c-2%200-5-1-6-3l-6-3c-4%200-4%200-4-4s-1-4-7-4l-6-2h-5l-6-1c-1%201-4%200-7-1h-7c-3%201-4%201-4-5%200-7%200-7-9-7-7-1-10%200-21%203m-5%202c-29%207-29%207-26%208s5%201%2030-5c24-6%2023-6%2021-7s-4-1-25%204m1%205l-26%207-1%203v12h4l4-1-4%201c-4%201-5%203-2%203l6%202h3l1-1h2l4-1h5l-6%202-5%202%207%202c6%202%207%202%208%201%200-1%201-2%203-2l2-4c0-3%200-3-3-2h-3l3-1c5-2%205-7%200-7-3%200-3%200-2-1%202-2%200-1-9%201l-9%202%209-3%2016-5%2015-5-12%205c-4%201-2%203%203%203l2-2%204-3%206-2c2%200%203-13%201-13l-26%207m-33%2045c-2%202-3%209-1%208l1-3c0-1%200-2%201-1l3%201v1l2%201%202-1-1-1-2-1v-1l15%205%204%202v10c0%2010%200%2013%201%209%202-3%201-20%200-21l-16-6c-8-3-7-3-9-2m-119%201l1%201c2%200%202%201%202%206%200%2017%200%2016%203%2016s3%200%202-3l-1-4%204-1c3-1%205-1%204-2h-1l-1-2v-2c-2%200-5-3-5-5s-7-5-8-4m188%206v2l-1%201v1c-1%201-1%200-1-1l-1-1c-2%201-2%2010-1%2013%201%202%201%202-1%204-2%201-2%202-1%2012l1%2011s5-4%204-5%200-2%201-1l6-1%204-2-5%201h-4v-8c0-8%201-10%206-13v-1l-3%201h-1l-2-1c-3%200-3-2-2-4%202-1%204-1%202%201-1%201%200%202%202%200s1-3-1-4h-2l2-2%202-2-2-1h-2m50%201l-4%201h-3c-2%200-3%200-2%201s-7%204-9%203h-1l-2%201c-3%201-3%2021%200%2022%201%201%208%200%208-1l3-1%203-1h2l1-1h2l1-1h1l1-1v-2l1-3v-2c2-1%202-5%201-12%200-5-1-6-3-3m-114%208c1%201%200%202-2%200-1-1-12%200-12%201h1l4%202c2%203%203%205%200%203-1-1-1-1-1%201l3%206%201%206v-9l-1-3c1-1%203%204%203%208%201%204%201%205%203%203h1c1%201%201%201%202-1%200-2%201-3%202-3%202%200%201-4-1-8-2-5-2-6%201-3l2%208%201%204V84h1c0-2-2-3-2-2-1%201-1%201-2-1v-1l1-1-2-2v1h-1c-2-2-4-1-2%201m76%208c1%201-7%203-8%202l-1%206c0%206%200%207%202%207l10-4v-2l1%201c1%201%201-1%201-4l-1-6-3-1-1%201m-108%2014c-3%201-4%202-5%2010s0%209%205%208l5-1v-9c0-10%200-10-5-8m65%204c0%204-1%206-2%205l-1%201%201%202c2%200%202%200%200%202v2h1v2l-1%204-1%2019%201%2014%202-7a272%20272%200%20000-44m-39%2010l-2%202c2%200%203%202%202%203-1%202-6%201-7-1-2-2-9-3-10-1l-3%201-3%201-3%201c-3%201-4%201-4%203s0%202%203%202l5-2c3%200%203%200%201-2v-1c2%200%208%207%2011%2013%203%204%204%2010%205%2017v3h4l-1-1-1-2%202-1v-13l2%209c0%205%200%205%202%204l2-2%202-2%204-4%201-1%201%202c1%200%202%201%201%202%200%201%205%200%206-2s0-11-2-16l-2-5c1-1%205%209%206%2015%200%204%201%205%201%203%202-5-5-25-9-24-3%201-7%201-8-1h-6m-60%204c3%204%203%207-1%207-2%200-3%200-3%202%200%203%202%206%205%204%201-1%201%200%201%2013%200%205%200%207%201%206%202-1%201-29-1-32l-3-3%201%203m-144%200c-1%202%200%203%201%201%201-1%203%200%207%202l4%203c-1%201-2%200-3-1s-2-1-2%203v4l-1-5v-4l-2%205-1%206%203%201%203%201c0%203%202%201%202-2l1-3v3l1%205%201-5c-1-6-1-6%2010%200l13%205c4%200%2015%205%2018%208%204%205%204%207%204%2047l1%2038c1%200%201%202%201-42%200-40-1-44-4-47l-55-25-2%202m340%2014l-1%203-3%203-1%204%203%201-2%201c-4-1%200%203%206%206%207%203%207%205%207%2021l-1%2026-2%2011v-10c0-12-1-11-1%202v9c1-2%201-2%201%200l-1%204c-2%201-2%200-1-12l-1-13c-1%200-2%200-1-1l-1-1c-1%201-1-2-1-9%200-19-2-26-5-22l-5%201h-3v9l-2%2013-2%2012c-1%2011-2%2013-4%2013l-2-1%202-3c1-4%202-12%200-10-2%203-10%205-18%206h-8v3l-1%203c-3%200-1%206%202%207%204%201%2022%200%2020-1l1-2c1-2%202-2%202-1h3c0%203-9%207-16%208-3%201-2%201%204%203%208%203%2021%203%2028%202h1v1c3%201-5%203-11%203-10%200-17-1-28-6l-10-3v3c-1%203-1%203%206%206%206%202%208%204%207%204h1l2%201%204%203c9%205%2010%206%2010%2014l1%207c3%200-2%205-6%206-2%201-2%201%200%202l2%202%203%203%202%202-4%201c-5%202-5%202%201%205l4%202-7%203c-9%203-10%205-6%207%207%204%2015%203%2026-3l11-5-9%205c-6%204-8%205-6%205l11-4c7-4%208-5%2010-9l3-6%201-59a687%20687%200%2000-3-63c0-6-1-8-4-11-3-4-8-4-8-1m-220%205c-3%201-7%206-5%206l2%205c0%205%200%205%201%202l1-3v6l5-2c6-2%206-2%205-9s-2-8-9-5m-82%206v5l7%204c9%204%207%200%208%2030%201%2022%201%2023%202%208l1-12v14c0%207%200%2013-1%2012-1-2-3-1-4%203-2%203-2%204%201%205%202%201%203%203%201%203l-1-1c-1-1-1-1-1%201l-1-1c-1-2-1%200-1%205%200%206%200%207%202%208h2l1%201%202%202a585%20585%200%2000-1-73v-2l-1-2v-3l-1-2c0-2-2-3-9-7l-6-3v5m212-1c-1%202%200%207%201%207l1%201%201%201c2%201%202%2010-1%2010-1%200-1%201%201%203l2%202-3%203c-4%204-3%205%202%207%203%201%205%201%2015-3l10-4-9%203-8%202c-1-1-1-1%201-1v-1l-1-9a2524%202524%200%2000-2-14c-2%201-2%201-2%2012l-1%207v-23c1-1%200-2-2-3-4-2-5-2-5%200m38%2012v7c1%200%205-1%204-2h1l1-1v-1h6l5-1-5%203a61%2061%200%2000-8%203c-3%200-7%203-6%203v1a338%20338%200%200033-11v-5c0-2%200-2-2%200l-2%203-3%202-2%201h-2l-3-1%201-1v-2c0-2%200-2-1-1h-1l-1-1c-1%201-2%200-3-1v-2h-3l-2%201-2%201c-1-1-1-1%200%200l-1%201h-1c0%202-3%201-3-1v5m45-6l-1%201h2l1%201%201%202h1l1%201c1-2%203%201%203%205%200%203%200%204%202%204v1c-4%200-2%207%203%208%201%201%201%201-1%201-3%200-3%200-2%201s1%201-1%201v1c2%200%203%207%201%207-1%200-1%201%201%201v1l-2%201%205%202v-8c2%200%201-22-1-24s-9-7-10-6l-1-1h-2m-163%202l1%202c0%202%204%205%206%205l2%201c1%201%201%201-1%201-3%200-3%200-2%202%201%201%201%201-1%201l-2-1v48l5-1%2011-3c5-1%208-2%205-2-2%200-2-2-2-17l1-18h-5l-5-1c-1-1-1-1%202-1%204%201%2010-2%209-4s-4-2-4-1c0%202-3%201-4%200-1-2-2-2-2-1h-1l-2-2%201-1%202-2-3-2c-2-2-3-3-6-2l-3-1-1-2-1%202m147%209l-1%203c0%205-1%207-6%208-4%202-5%203-5%205l-1%203-2%204c0%204-2%206-6%207l-2%202c0%202%2010%202%2017%200%208-3%209-5%209-14l-1-13c0-6-1-7-2-5m-120%208l-2%2018c0%2020-1%2019%209%2016%207-2%209-3%207-1h4c1-1%201-1-1-1-3%200-2%200%205-3l-5%201c-8%202-8%201%200-2l8-3-8-4c-10-4-10-5-10-9s0-5-3-6c-2-1-3-3-3-5l-1-1m-29%207c0%205-1%205-2%206-2%202-7%200-7-1v-1l-3-1c-7-3-7-2-8%2012-1%2013-1%2016-5%2016-3%201-4%206-1%206l3%205c0%203%200%203%203%202%202%200%202%200%201%201-2%202%200%201%208-1%204-2%206-3%204-3s-2%200%202-2l5-2c2-1%202-3%201-20a222%20222%200%2000-1-17M47%20206l2%204%208%204%2017%2011c1%201%201%200%201-5v-6l-1%205-1%203c0-5-1-6-8-8l-9-5h-2l-2-1c-1-1-2-2-3-1v-1l-1-1c-1-1-1%200-1%201m197-1l-12%203-10%203v5c-2%2011-9%2023-15%2028-4%203-7%204-3%201l1-2%201-3%203-1h1v-1l1-1c-1-2%200-4%201-2%201%201%201%201%201-1v-1c1%201%201%201%201-1v-1c1%201%201%201%201-1l2-9c2-9%202-9-9-5l-8%203-2%205c-2%2011-8%2018-17%2021-3%201-5%203-5%204%200%203-12-1-15-5h-1v-1l-1-2c-3%200-6%209-3%209l2%201%202%202%201-2%201-1c2%200%203%203%201%203-1%200-1%201%201%204l2%202%2012-4c7-3%2013-5%2014-4v-1h1c2%200%202%200%201-1h2c2%201-5%205-20%2011l-8%203%206%2011%201%204%201%201h1v1c1-1%203%202%202%203l1%201h2v1c-1%201-1%201%201%201l6-2c2%200%202%200%201%201h28c1-1%201-1%200%200s2%201%2012%201h13l3-3%203-4-3-1c-2-1-2-1-1-2v-1l-5%202c-2%200-2%200%201-1l3-3-3-1h-2c3-2-1-2-6%200l-5%202-1%201h6l-15%206%204-2c5-2%205-2%204-4l-1-2-1-1-1%201-1%201-1-1h-2v-2l2-3-2%202c-3%202-5%203-3%201v-2l1-1%201-2h-1l-1-1c0-1%204-3%205-2l1-2-1-2v-1h1l1-2%201-14%205-3c2-1%203-1%202-2s-1-1%201-2v-3l3-1%201%201v5h3v-1l5-3c4-2%205-4%202-5-2-1-2-1%200-1l3%201h3c2%200%202-1%202-7%201-9%201-9-3-11-3-1-4-2-4-4-1-2-1-2-3-1m-57%2018l-11%203c-3%201-3%202-3%205%200%202%200%203-2%204l-3%201c0%202-4%205-4%204l-1%201%202%203c2%201%202%201%205-1%202-2%203-2%205-1%205%204%2018-8%2020-19%201-4%202-4-8%200m106%200c-2%200-2%201-2%204%200%204%200%204-1%201%200-3%200-4-3-3l-1%201-1%201v11l1-1h2l2-2%201-1h3c2-1%202-1%201-2v-2l1-4c0-3-1-3-3-3m37%2010v1h-2l-5%201h-7c-1%201%200%201%201%201v1c-2%200-2%201-1%201%202%200%201%202-1%202h-6l1-2h-1l-4%201-3%201-6%202c-5%200-10%202-12%204-2%201-1%203%201%201h1l4%201%205-1-4%201c-4%202-15%202-16%200l-2-1-1-1%202-1h1l-1-2c-7%202-8%205-2%207l5%201%203%203c3%203%201%203-4%200s-10-5-8-3l5%203c7%204%207%204%206%2013-1%204%200%209%202%2010l12-4%2010-3v-8c-1-7-1-8%201-8h1c0-1%204-2%205-1h2c0-2%200-2%201-1h3l1-2h2c0-2%200-2%201-1l2%201%201-1c-1-3%201-3%202-1%201%201%201%201%201-1l1-2c1%200%201%202-1%205v8l-1-3c0-3-1-4-4-2-2%201-3%202-3%205v4l-1-4-1-3-1%205-1%202c-1-1-2%200-2%201l1%201%201%201%203%202%203%201%201-1v1l2%201c1-1%202-1%201%202l1%203%202-2%201-2h1l2%201%201%201h2c-1%202%200%202%201%202%204%200%202-4-1-5h-4l-1-1h-2c-2%200-2%200%201-1%203-2%207-3%204-1v1c2%201%203%200%201-3l-1-1h-4c-2-1%201-4%204-5l7-2c4-1%204-1%204-6a149%20149%200%20010-12l-20%207-9%201%206-2c18-7%2021-8%2020-9l-3-1c-2%200-2%200-1%201%202%200-1%202-8%204-13%205-14%205-11%202l3-2v-1h4l2-1h2l4-2c2-1%203-2%201-2h-3m-98%209c-2%201-3%202-2%203h-1c-1-2-2%201-2%206v6h2l1%201v-3h4v-2c-2-1-2-2-1-2h1c-1-1-1-1%201-1h1v-1c1%200%203%202%203%205%201%201%201%200%201-2%200-3%200-4-2-3v-1c4-2%202-4-3-4v-3l-3%201m-70%2023c-4%201-4%203-3%2012%202%208%203%209%2012%209l7-1-5-8-6-8c0-3-3-5-5-4m-99%204a100%20100%200%20015%2016l2-1%201-2h1l1%201%201-1v-1l1-1v-2l1-1v-3c3-1-2-5-8-5h-5m89%200l-1%205c0%205-2%207-7%207-3%200-4%201-6%203l-2%202h2l8-2c3-2%204-2%205-1v2l5%201c3%200%203%200%202-3l-3-9c0-6-2-8-3-5m-53%2047l2%208c2%208%203%209%205%203%202-9%203-9%204-2%202%208%204%207%206-2l1-8-3%206c-1%207-1%207-3%201-2-8-4-9-5-2-2%208-2%208-4%201-1-5-3-8-3-5m34%207v8h4c4%200%205-1%205-3%202-5%200-9-4-8-2%200-3-1-3-3l-1-2-1%208m28-2l-2%204c0%206%207%208%2010%203%203-6-4-12-8-7'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/481191268200c41bde3c6f108ae5ed24/6050d/sse.png"}}},"authors":[{"authorsPage":true,"bio":"Hello everybody 👋 !  My name is Luke and I am the creator and owner of the spaceout.pl. Personally, I am a big geek with huge love for Star Wars, Marvel and DC comic books, Funk and 80s music. I take most of my design inspiration from offline experiences like going to art museums, galleries and working with other creative people on various projects. I also work with various Activist and NGO groups as a pro-bono designer and developer.\n","id":"f69d27c7-7f9a-5fbd-b05d-1a324fd10c0a","name":"Luke Celitan","featured":true,"social":[{"url":"https://www.facebook.com/spaceout/"},{"url":"https://twitter.com/spaceout.pl"},{"url":"https://www.instagram.com/spaceout.pl/"},{"url":"https://huggingface.co/MassivDash"},{"url":"https://bsky.app/profile/lukecelitan.bsky.social"}],"slug":"/authors/luke-celitan","avatar":{"small":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/afb2b/spaceghost.jpg 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/03612/spaceghost.jpg 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/58718/spaceghost.webp 13w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/ed320/spaceghost.webp 75w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 50px) 100vw, 50px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"medium":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/7c20e/spaceghost.jpg 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fa1ea/spaceghost.jpg 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/61cdf/spaceghost.jpg 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/59538/spaceghost.jpg 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/fd013/spaceghost.jpg 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/74aad/spaceghost.webp 25w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/e7b2c/spaceghost.webp 50w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/66016/spaceghost.webp 100w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/d9b14/spaceghost.webp 150w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/6b183/spaceghost.webp 200w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 100px) 100vw, 100px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"large":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGQABAAIDAAAAAAAAAAAAAAAAAAIFAQME/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEAMQAAABvOTVgtERIAH/xAAaEAEBAQEAAwAAAAAAAAAAAAACAQMEABAS/9oACAEBAAEFAmoDjs0/Oq1a9kUzN+j7/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAwEBPwEf/8QAFBEBAAAAAAAAAAAAAAAAAAAAIP/aAAgBAgEBPwEf/8QAHhAAAgEDBQAAAAAAAAAAAAAAAQIAAxESECAxMlH/2gAIAQEABj8CLHgTGqmBPXSlTANsrmKyXLK0B92f/8QAHhABAAECBwAAAAAAAAAAAAAAAREAIRAgMUFhcdH/2gAIAQEAAT8hUmKFDbjke4JaIOG01Fthsd0YugnJ/9oADAMBAAIAAwAAABDzzzz/xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/EB//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/EB//xAAfEAEBAAEDBQEAAAAAAAAAAAABETEAQWEQICFxgZH/2gAIAQEAAT8QhmFXf0c6oSU1s8jwz0W5QpAeFf1+Gp7aimCmBvvoV0CRyUvZ/9k=","aspectRatio":1,"src":"/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg","srcSet":"/static/4f53b0980dc97328dd1294bbc374fd0e/a2637/spaceghost.jpg 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/15203/spaceghost.jpg 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/442ab/spaceghost.jpg 305w","srcWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp","srcSetWebp":"/static/4f53b0980dc97328dd1294bbc374fd0e/2d087/spaceghost.webp 82w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/29d87/spaceghost.webp 164w,\n/static/4f53b0980dc97328dd1294bbc374fd0e/85828/spaceghost.webp 305w","sizes":"(max-width: 305px) 100vw, 305px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M189%2065A519%20519%200%200065%20299c-5%2020-5%2018%203%2015%208-4%2039-10%2057-12%2011-1%2010%200%2010-11%200-29%206-103%2010-121%204-21%2016-36%2033-43%206-2%208-2%2020-2%2018%200%2024%202%2036%2013%2020%2021%2025%2046%2029%20138l2%2026h10a267%20267%200%200168%2014l-6-26A607%20607%200%2000218%2071c-10-10-15-15-18-15-2%200-6%203-11%209m47%20129c-14%208-26%2015-26%2017%200%203%2018%205%2024%202%205-3%209-10%209-18%200-5%200-5-7-1m-82%201l1%205c1%2011%209%2018%2020%2017%207-1%2013-3%2013-5s-32-19-34-17'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"}}}],"basePath":"/","tech":["TS","Nodejs","ReactIcon"],"category":"Post","slug":"/sse-vs-websockets","id":"a1dadfa4-c917-5b75-bbe9-bff89947e8bf","title":"SSE vs WebSockets","appDescription":null,"mailchimp":false,"next":[{"id":"ef1f89b3-4985-550f-9f1b-b00f91e8fcec","slug":"/the-definitive-guide-to-video-optimization-and-delivery-in-web-applications","secret":false,"title":"The Definitive Guide to Video Optimization and Delivery in Web Applications","author":"Luke Celitan","date":"July 3rd, 2025","dateForSEO":"2025-07-03T00:00:00.000Z","timeToRead":5,"excerpt":"A comprehensive deep-dive into optimizing, storing, and delivering video for web applications, including FFmpeg best practices, advanced streaming, storage strategies, CDN integration, troubleshooting, and real-world use cases.","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"The Definitive Guide to Video Optimization and Delivery in Web Applications\",\n  \"excerpt\": \"A comprehensive deep-dive into optimizing, storing, and delivering video for web applications, including FFmpeg best practices, advanced streaming, storage strategies, CDN integration, troubleshooting, and real-world use cases.\",\n  \"date\": \"2025-07-03T00:00:00.000Z\",\n  \"hero\": \"videoCover.png\",\n  \"author\": \"Luke Celitan\",\n  \"category\": \"Post\",\n  \"tech\": [\"TS\", \"JS\", \"Nodejs\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"the-definitive-guide-to-video-optimization-and-delivery-in-web-applications\"\n  }, \"The Definitive Guide to Video Optimization and Delivery in Web Applications\"), mdx(\"h2\", {\n    \"id\": \"introduction\"\n  }, \"Introduction\"), mdx(\"p\", null, \"Video is now a cornerstone of modern web applications, powering everything from marketing landing pages to SaaS platforms, e-learning, and social media. But delivering a seamless video experience is a complex technical challenge: you must balance quality, performance, compatibility, storage, and cost. In this guide, I\\u2019ll walk you through the full lifecycle of video in web apps\\u2014from encoding and optimization (with FFmpeg) to storage, delivery, playback, monitoring, and troubleshooting. Whether you\\u2019re building a video-heavy product or just want to improve your site\\u2019s performance, this is your definitive technical reference.\"), mdx(\"h2\", {\n    \"id\": \"why-video-optimization-matters\"\n  }, \"Why Video Optimization Matters\"), mdx(\"h3\", {\n    \"id\": \"the-rise-of-video-in-web-apps\"\n  }, \"The Rise of Video in Web Apps\"), mdx(\"p\", null, \"Video content is everywhere\\u2014product demos, tutorials, webinars, user-generated content, and more. But unoptimized video can cripple your user experience:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Slow load times\"), \" frustrate users and increase bounce rates.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"High bandwidth usage\"), \" drives up hosting costs and can throttle mobile users.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Playback issues\"), \" (buffering, stuttering) hurt engagement and retention.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Poor SEO\"), \": Slow pages and broken video playback can tank your search rankings.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Device compatibility\"), \": Not all browsers and devices support every format or codec.\")), mdx(\"h3\", {\n    \"id\": \"key-challenges\"\n  }, \"Key Challenges\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Performance\"), \": Fast startup, smooth playback, minimal buffering.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Compatibility\"), \": Support for all major browsers and devices.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Storage\"), \": Efficient, scalable, and cost-effective storage solutions.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Delivery\"), \": Global reach, caching, and adaptive streaming.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Monitoring\"), \": Analytics to track and improve video performance.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"video-codecs-formats-and-choosing-the-right-settings\"\n  }, \"Video Codecs, Formats, and Choosing the Right Settings\"), mdx(\"h3\", {\n    \"id\": \"common-codecs-and-formats\"\n  }, \"Common Codecs and Formats\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"H.264 (AVC)\"), \": The web\\u2019s workhorse\\u2014widely supported, efficient, and compatible with most browsers and devices.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"VP9\"), \": Open-source, better compression than H.264, supported in Chrome/Firefox/Edge.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"AV1\"), \": The future\\u2014superior compression, but limited hardware/browser support (as of 2024).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"HEVC (H.265)\"), \": Great for high-res, but licensing and browser support are issues.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Audio\"), \": AAC (most common), Opus (for WebRTC), MP3 (legacy).\")), mdx(\"h3\", {\n    \"id\": \"choosing-resolution-bitrate-and-codec\"\n  }, \"Choosing Resolution, Bitrate, and Codec\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Resolution\"), \": 720p (1280x720) is a good baseline for web; 1080p for premium content; 480p for mobile/low-bandwidth.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Bitrate\"), \": Lower bitrates reduce file size but can hurt quality. Aim for 1-2 Mbps for 720p, 2-4 Mbps for 1080p.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Codec\"), \": H.264 for maximum compatibility; VP9/AV1 for advanced use cases.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Audio\"), \": 128 kbps AAC is a solid default.\")), mdx(\"h3\", {\n    \"id\": \"example-codec-compatibility-table\"\n  }, \"Example: Codec Compatibility Table\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Codec\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Chrome\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Firefox\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Safari\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Edge\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Mobile\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"H.264\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"VP9\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Partial\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"AV1\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Partial\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"HEVC\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u2705\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"\\u274C\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Partial\")))), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"ffmpeg-optimization-examples\"\n  }, \"FFmpeg Optimization Examples\"), mdx(\"p\", null, \"Optimizing video for web playback is essential. FFmpeg is the industry-standard tool for video encoding, transcoding, and optimization. Here are the most effective FFmpeg workflows for web video:\"), mdx(\"h3\", {\n    \"id\": \"1-basic-video-optimization\"\n  }, \"1. Basic Video Optimization\"), mdx(\"p\", null, \"Reduce resolution and bitrate for faster loading and lower bandwidth:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"ffmpeg -i input_video.mp4 \\\\\\n  -vf \\\"scale=1280:-2\\\" \\\\\\n  -c:v libx264 -crf 23 \\\\\\n  -preset medium \\\\\\n  -c:a aac -b:a 128k \\\\\\n  output.mp4\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Breakdown:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-vf \\\"scale=1280:-2\\\"\"), \": Scales width to 1280px, keeps aspect ratio.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-c:v libx264\"), \": H.264 codec for video.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-crf 23\"), \": Quality/file size trade-off (lower is higher quality).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-preset medium\"), \": Encoding speed vs. compression.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-c:a aac -b:a 128k\"), \": AAC audio at 128 kbps.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"When to use:\"), \" For most web videos, this produces a good balance of quality and size.\"), mdx(\"h3\", {\n    \"id\": \"2-fast-start-optimization-moov-atom\"\n  }, \"2. Fast Start Optimization (MOOV Atom)\"), mdx(\"p\", null, \"Move the MOOV atom to the beginning for instant playback:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"ffmpeg -i input_video.mp4 \\\\\\n  -movflags faststart \\\\\\n  -c copy \\\\\\n  output.mp4\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Breakdown:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-movflags faststart\"), \": Moves MOOV atom for fast streaming.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-c copy\"), \": No re-encoding; just optimizes file structure.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"When to use:\"), \" Always for web playback\\u2014enables instant start in browsers.\"), mdx(\"h3\", {\n    \"id\": \"3-two-pass-encoding-for-quality-and-file-size\"\n  }, \"3. Two-Pass Encoding for Quality and File Size\"), mdx(\"p\", null, \"Get better quality at smaller sizes:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"ffmpeg -i input_video.mp4 \\\\\\n  -c:v libx264 -b:v 1M -pass 1 -an -f null /dev/null && \\\\\\nffmpeg -i input_video.mp4 \\\\\\n  -c:v libx264 -b:v 1M -pass 2 \\\\\\n  -c:a aac -b:a 128k \\\\\\n  output.mp4\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Breakdown:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"First pass analyzes video; second pass encodes optimally.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-b:v 1M\"), \": Target video bitrate (1 Mbps).\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"When to use:\"), \" For premium content, or when you need the best quality-to-size ratio.\"), mdx(\"h3\", {\n    \"id\": \"4-keyframe-optimization-for-web-seeking\"\n  }, \"4. Keyframe Optimization for Web Seeking\"), mdx(\"p\", null, \"Improve seeking accuracy in web players:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"ffmpeg -i input_video.mp4 \\\\\\n  -c:v libx264 -crf 23 \\\\\\n  -g 30 -keyint_min 30 \\\\\\n  -c:a aac -b:a 128k \\\\\\n  output.mp4\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Breakdown:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-g 30 -keyint_min 30\"), \": Keyframe every 30 frames (about 1 per second at 30fps).\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"When to use:\"), \" For videos where users will seek frequently (tutorials, demos).\"), mdx(\"h3\", {\n    \"id\": \"5-adaptive-bitrate-streaming-hlsdash\"\n  }, \"5. Adaptive Bitrate Streaming (HLS/DASH)\"), mdx(\"p\", null, \"Create multiple renditions for responsive playback:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Example: HLS renditions\\nffmpeg -i input_video.mp4 \\\\\\n  -map 0:v -map 0:a \\\\\\n  -b:v:0 300k -s:v:0 426x240 \\\\\\n  -b:v:1 800k -s:v:1 640x360 \\\\\\n  -b:v:2 1400k -s:v:2 1280x720 \\\\\\n  -c:v libx264 -c:a aac \\\\\\n  -f hls \\\\\\n  -hls_time 4 -hls_playlist_type vod \\\\\\n  -hls_segment_filename \\\"output_%v_%03d.ts\\\" \\\\\\n  output.m3u8\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Breakdown:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Multiple bitrates/resolutions for adaptive streaming.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"output.m3u8\"), \": HLS manifest file for web players.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"When to use:\"), \" For scalable, responsive video delivery (Netflix, YouTube style).\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"storage-and-delivery-best-practices\"\n  }, \"Storage and Delivery Best Practices\"), mdx(\"h3\", {\n    \"id\": \"where-to-store-videos\"\n  }, \"Where to Store Videos\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Cloud Storage\"), \": AWS S3, Google Cloud Storage, Azure Blob Storage.\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Pros\"), \": Scalable, reliable, integrates with CDNs.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Cons\"), \": Cost, egress fees, latency (if not paired with CDN).\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"CDN Integration\"), \": Cloudflare, Akamai, Fastly, AWS CloudFront.\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Pros\"), \": Global caching, fast delivery, DDoS protection.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Self-Hosting\"), \": On-premises or VPS.\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Pros\"), \": Full control, no egress fees.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Cons\"), \": Maintenance, scaling, security.\")))), mdx(\"h3\", {\n    \"id\": \"folder-structure-and-naming-conventions\"\n  }, \"Folder Structure and Naming Conventions\"), mdx(\"p\", null, \"Organize for scalability and automation:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"/videos/\\n  /2024/\\n    /06/\\n      /projectA/\\n        video1_720p.mp4\\n        video1_1080p.mp4\\n        video1_hls.m3u8\\n      /projectB/\\n        ...\\n\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use date/project-based folders for easy lifecycle management.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Name files with resolution/bitrate for clarity.\")), mdx(\"h3\", {\n    \"id\": \"object-storage-vs-block-storage\"\n  }, \"Object Storage vs. Block Storage\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Object Storage (S3, GCS, Azure Blob)\"), \": Best for large, unstructured files; supports versioning, lifecycle policies.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Block Storage\"), \": Not recommended for video\\u2014better for databases, VMs.\")), mdx(\"h3\", {\n    \"id\": \"versioning-and-lifecycle-management\"\n  }, \"Versioning and Lifecycle Management\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Enable versioning to prevent accidental overwrites.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use lifecycle policies to auto-delete old/unused videos.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tag assets for easy search and management.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"serving-videos-efficiently\"\n  }, \"Serving Videos Efficiently\"), mdx(\"h3\", {\n    \"id\": \"using-cdns-for-global-delivery\"\n  }, \"Using CDNs for Global Delivery\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Why CDNs?\"), \": Reduce latency, cache content near users, handle traffic spikes.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"How to Integrate\"), \": Point your storage bucket as the CDN origin; set up cache rules for video files.\")), mdx(\"h3\", {\n    \"id\": \"http-streaming-protocols\"\n  }, \"HTTP Streaming Protocols\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"HLS (HTTP Live Streaming)\"), \": Apple\\u2019s protocol, works everywhere except some older Android browsers.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"DASH (Dynamic Adaptive Streaming over HTTP)\"), \": Open standard, supported in most modern browsers.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Progressive Download\"), \": Simple, but no adaptive bitrate.\")), mdx(\"h3\", {\n    \"id\": \"setting-correct-http-headers\"\n  }, \"Setting Correct HTTP Headers\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"CORS\"), \": Allow cross-origin requests for video playback.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Cache-Control\"), \": Set long cache times for static video files.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Range Requests\"), \": Enable partial downloads for seeking.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Example: S3 Bucket CORS Policy\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"[\\n  {\\n    \\\"AllowedHeaders\\\": [\\\"*\\\"],\\n    \\\"AllowedMethods\\\": [\\\"GET\\\"],\\n    \\\"AllowedOrigins\\\": [\\\"*\\\"]\\n  }\\n]\\n\")), mdx(\"h3\", {\n    \"id\": \"integrating-with-web-video-players\"\n  }, \"Integrating with Web Video Players\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Video.js\"), \": Popular, extensible, supports HLS/DASH.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"hls.js\"), \": JavaScript library for HLS playback in browsers.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Shaka Player\"), \": Advanced DASH/HLS support.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Example: Video.js Setup\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-html\"\n  }, \"<video id=\\\"my-video\\\" class=\\\"video-js\\\" controls preload=\\\"auto\\\" width=\\\"640\\\" height=\\\"360\\\">\\n  <source src=\\\"https://cdn.example.com/output.m3u8\\\" type=\\\"application/x-mpegURL\\\">\\n</video>\\n<script src=\\\"https://vjs.zencdn.net/7.20.3/video.js\\\"></script>\\n\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"advanced-optimization-techniques\"\n  }, \"Advanced Optimization Techniques\"), mdx(\"h3\", {\n    \"id\": \"adaptive-bitrate-streaming-generating-multiple-renditions\"\n  }, \"Adaptive Bitrate Streaming: Generating Multiple Renditions\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use FFmpeg to create multiple resolutions/bitrates.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Generate manifest files (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".m3u8\"), \" for HLS, \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".mpd\"), \" for DASH).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Integrate with players that auto-select the best stream.\")), mdx(\"h3\", {\n    \"id\": \"two-pass-encoding-and-its-benefits\"\n  }, \"Two-Pass Encoding and Its Benefits\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"First pass analyzes, second pass encodes for optimal quality.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use for premium content or when bandwidth is expensive.\")), mdx(\"h3\", {\n    \"id\": \"keyframe-interval-tuning-for-web-seeking\"\n  }, \"Keyframe Interval Tuning for Web Seeking\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Shorter intervals = better seeking, but larger files.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tune based on content type (tutorials vs. movies).\")), mdx(\"h3\", {\n    \"id\": \"audio-optimization\"\n  }, \"Audio Optimization\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use AAC for compatibility.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"128 kbps stereo for most content; 64 kbps mono for voice-only.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Normalize audio levels for consistent playback.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"performance-monitoring-and-analytics\"\n  }, \"Performance Monitoring and Analytics\"), mdx(\"h3\", {\n    \"id\": \"measuring-video-performance\"\n  }, \"Measuring Video Performance\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Startup Time\"), \": How fast does playback begin?\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Buffering Events\"), \": Frequency and duration.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Playback Errors\"), \": Failed loads, codec issues.\")), mdx(\"h3\", {\n    \"id\": \"analytics-tools\"\n  }, \"Analytics Tools\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Mux Data\"), \": Deep video analytics (startup time, rebuffering, engagement).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Google Analytics\"), \": Track video events (play, pause, seek).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Custom Logging\"), \": Use player events to log performance.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Example: Video.js Event Logging\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"var player = videojs('my-video');\\nplayer.on('error', function() {\\n  // Log error to analytics\\n});\\nplayer.on('waiting', function() {\\n  // Log buffering event\\n});\\n\")), mdx(\"h3\", {\n    \"id\": \"lighthouse-and-core-web-vitals-impact\"\n  }, \"Lighthouse and Core Web Vitals Impact\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Fast video startup improves Largest Contentful Paint (LCP).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Optimized video reduces Total Blocking Time (TBT).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use Lighthouse to audit video performance.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"best-practices-and-common-pitfalls\"\n  }, \"Best Practices and Common Pitfalls\"), mdx(\"h3\", {\n    \"id\": \"balancing-quality-and-file-size\"\n  }, \"Balancing Quality and File Size\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Test different CRF/bitrate settings to find the sweet spot.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use adaptive streaming for diverse audiences.\")), mdx(\"h3\", {\n    \"id\": \"testing-across-devices-and-browsers\"\n  }, \"Testing Across Devices and Browsers\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Always test on Chrome, Firefox, Safari, Edge, iOS, Android.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use BrowserStack or Sauce Labs for automated cross-browser testing.\")), mdx(\"h3\", {\n    \"id\": \"handling-different-content-types\"\n  }, \"Handling Different Content Types\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Animation\"), \": Lower bitrate, fewer artifacts.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Live-Action\"), \": Higher bitrate, more keyframes.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Screen Recordings\"), \": Tune for sharp text.\")), mdx(\"h3\", {\n    \"id\": \"accessibility-considerations\"\n  }, \"Accessibility Considerations\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Add captions/subtitles (WebVTT, SRT).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Provide transcripts for search and accessibility.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use ARIA roles for custom video controls.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"real-world-use-cases-and-case-studies\"\n  }, \"Real-World Use Cases and Case Studies\"), mdx(\"h3\", {\n    \"id\": \"case-study-1-optimizing-a-video-heavy-landing-page\"\n  }, \"Case Study 1: Optimizing a Video-Heavy Landing Page\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Used FFmpeg to create 720p/1080p HLS renditions.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Stored videos in S3, delivered via CloudFront CDN.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Integrated Video.js for adaptive playback.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Result: 40% faster load times, 30% lower bandwidth costs, improved SEO.\")), mdx(\"h3\", {\n    \"id\": \"case-study-2-scalable-video-delivery-pipeline-for-saas\"\n  }, \"Case Study 2: Scalable Video Delivery Pipeline for SaaS\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Automated FFmpeg encoding via CI/CD pipeline.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Used S3 versioning and lifecycle policies.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Monitored performance with Mux Data.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Result: Seamless video uploads, instant playback, robust analytics.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"troubleshooting-and-faq\"\n  }, \"Troubleshooting and FAQ\"), mdx(\"h3\", {\n    \"id\": \"common-encoding-errors\"\n  }, \"Common Encoding Errors\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Codec not supported\"), \": Check browser compatibility; re-encode with H.264/AAC.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"File too large\"), \": Lower bitrate/CRF, use two-pass encoding.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Playback stutters\"), \": Check CDN cache, optimize keyframes.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"No audio\"), \": Ensure AAC codec, check audio bitrate.\")), mdx(\"h3\", {\n    \"id\": \"debugging-playback-issues\"\n  }, \"Debugging Playback Issues\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use browser dev tools to inspect network requests.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Check CORS and range request headers.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Test with multiple players (Video.js, hls.js).\")), mdx(\"h3\", {\n    \"id\": \"storage-and-delivery-bottlenecks\"\n  }, \"Storage and Delivery Bottlenecks\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Monitor CDN cache hit rates.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use lifecycle policies to clean up old assets.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Scale storage buckets for high traffic.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"conclusion-and-further-resources\"\n  }, \"Conclusion and Further Resources\"), mdx(\"p\", null, \"Optimizing, storing, and delivering video for web applications is a multi-faceted technical challenge\\u2014but with the right tools and best practices, you can deliver a world-class experience. Use FFmpeg for encoding, cloud storage and CDNs for delivery, and modern web players for playback. Monitor performance, test across devices, and always keep accessibility in mind.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Further Reading:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://ffmpeg.org/documentation.html\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"FFmpeg Documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.aws.amazon.com/AmazonS3/latest/userguide/HostingVideos.html\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"AWS S3 Video Hosting Guide\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.mux.com/docs/video\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Mux Video API\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.videojs.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Video.js Documentation\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://web.dev/video/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Google Web Fundamentals: Video\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://web.dev/lighthouse-performance/\",\n    \"target\": \"_blank\",\n    \"rel\": \"noreferrer\"\n  }, \"Lighthouse Performance Audits\"))), mdx(\"hr\", null), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Author:\"), \" Luke Celitan\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Category:\"), \" Post\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tech:\"), \" Video, FFmpeg, Web, CDN, AWS, S3, HLS, DASH, JavaScript\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["TS","JS","Nodejs"],"category":"Post","appDescription":null,"hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y2VU60/TVxj+JTgcOD4QHC6FySIMF/jALRVNpikKctGwMbMEDUMHswO2Ti4CTsgcDOYEN3CSWHAGhohYLBcprJa72JZauZdLgQIFZ5b9E8/ec3oD1+TNOc/vvOc5z3mf91SwLL3E6o6YgIVilYfru8XswmzdhR1z2yjsIDJvJ3qD8H+HuEhXFo3ONcGmyLHJdbojmY1ry5NOgvWVKds6YUa0ZDJg0TSONXu+4NzoINqmgmHzwguYZrSccGFWhynjCCdiawzPz+icmOUIjo3bVa0vT3FVTM2EYRg93W1YXjBiZnIMGnUnNH91Ym5qjHImOOEyHbpm3y+4auMqrG1jF+421OHatasoLs5H2Y8lePjgHqnVYWSoD89H1TzXNK3dIUhwKbONi3N6dCpbceNGBWprqtBQfxvXfy5Hbq4MZ86koF5+C5trs5ib1mGUiNW9j7FBN3F4ILxp++hQL2prq9HU1ADtmIZ/Hxnuwx35bWRkXkDh5TyMP+/nuZPGUTzpekS11NuNY6bYDWD1Yo7dIrL8glzUkLp2RQs6SK2cyCoqyyCT5SA7W4qW5rukcoYIn0GlUkLd1wHr6rSjbWymsMKODKqoXpeRmvo50tPPQSrNwPnzaUhLO8uJSkqKcfZcKup+r4aFFD1Vd6Ors41UtkE/9pRfXXCoe2kYguJhE228iG9ypMjMSEcOzfPyZJB9m4WC/EsoLspHyqfJnNA0a4CqRwnFo2ZS/Afa2xqxRbV1vpQNkqx7pkbW15mQXvwSRUV5+P5KAcrLSnGFXC65Wogv0lLxWUoyP1ivG6KrdvISNd6Tk5njvI7CCns6/PnYrq5U3EcmFT8n6yt8J8vmapMSTyLuhAQJ8bEoLszF4IAKAwO96CGFcnkduqjOTBBrcGFrfQ6blhlsrc9yySZqB2X7fdT8eh3V1Do3qypQWHAJVb/8hJY/G9CveQKddhCjw2p0dynQ+qAR5vkX+Ns6z9tJSEqIxSfJiTiVFIfTFEcOi7ma+LgYHPv4CI/jMUeRGH8CyacT+FosRYzkGA5Hi3GU1k8lxiLh5HEeAv1w4EAg9u8PgL//+wgLC+M4MDAIQUFBEIn8EBDwAQ4e/Ijwh9i37z34+PjwuVgshq+vLyNxhZubGyIjIxEdHY2oqCiEh4dzzObBwcEIDQ3l3yIiIiCRSHDokJhwGEJCQuDh8TbY/h2E7+zZAz8/Eanz56eJRCLCfnx8d+9e/s3b2xvuu3cTgQcPT09PeHl5Ydeut+Du7k7YwxkC679xbT+FBgZdPwx8bhsZHhnsQXdHK5ob5fjtZiUqy0vxQ2kR6u/Uop/+eXTU0Eb9IPXxMA/BapmGlVy20lNyjuQWc8xqd585+M+rRfz72ozXmwt2vIRXGyZnniP+A6N5aZFmTZfeAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/8225dfbb906deda73afc1c2bda83682c/a1946/videoCover.png","srcSet":"/static/8225dfbb906deda73afc1c2bda83682c/5b37e/videoCover.png 236w,\n/static/8225dfbb906deda73afc1c2bda83682c/49058/videoCover.png 472w,\n/static/8225dfbb906deda73afc1c2bda83682c/a1946/videoCover.png 944w,\n/static/8225dfbb906deda73afc1c2bda83682c/6050d/videoCover.png 1200w","srcWebp":"/static/8225dfbb906deda73afc1c2bda83682c/99fbb/videoCover.webp","srcSetWebp":"/static/8225dfbb906deda73afc1c2bda83682c/77392/videoCover.webp 236w,\n/static/8225dfbb906deda73afc1c2bda83682c/1f177/videoCover.webp 472w,\n/static/8225dfbb906deda73afc1c2bda83682c/99fbb/videoCover.webp 944w,\n/static/8225dfbb906deda73afc1c2bda83682c/9000d/videoCover.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M192%2081c0%201%200%202-2%202l-2%202-1%202-1%203c1%202%200%201-2-1-3-4-6-3-7%200l1%203h10l9%201v-3l-2-6c0-3-3-7-3-3m-10%2022l7%201%2012%202%205%202-6-1c-13-1-35-1-36%201l-4%202-1%201h-1l-1%201-7%203-9%203-4%201h-4l-1%201h-1v1l-1%201h-1l-1%201h-1l-1%201-3%201h2c3%200%203%200-3%203l-10%207-4%203c0-2-3%204-4%2011-2%207-3%209-4%209l-4%208c-4%2012-4%208%201-9l1-9h-1l-1%202c-1-1-2%201-2%203%201%202-2%204-3%203-1-2-6%209-5%2012l-1%204c-1%201-1%201-1-1%200-4-2%200-4%2010-2%208-4%2041-2%2036%201-1%201-1%201%202l2%208%202%2011%201%201v1l1%201c1-1%206%205%206%207l4%206%204%206%201%201h2c-1%201%208%206%209%206%202%200%207%201%206%202l5%202c5%202%205%202%201%202l-12-4c-10-5-12-5-5-1%2020%2012%2065%2017%2098%2010%2039-8%2060-28%2066-62%203-19%200-55-7-71-3-6-3-5-1%203%205%2015%208%2046%206%2061-1%208-4%2019-5%2019l2-8c2-10%202-42%200-53-4-15-9-26-17-37-4-5-5-7-2-5%201%201%201%201%200%200v-1l3%201c1-1-10-9-17-13-8-4-16-6-13-4%202%202%201%201-8-1l-15-3-11-2-3%201m147%2013l-2%206c0%203%200%203-1%201s-1-2-1%200l2%204c2%202%203%205%201%205l-1%202-1-1-1-2-1%202c-1%202-1%202-3%200h-2l2%203c5%205%209%2011%208%2011-1%201%200%201%201%202%205%202%207-1%203-6l-1-5c1-1%200-4-1-7-2-3-2-5-1-10%200-5%200-8-1-5m-174%2018c-17%202-36%207-37%2010-2%204%201%2010%205%2010h3l3%203c3%201%203%202%202%203-2%201-3%203-1%202%201-1%205%202%204%203v5c0%202%201%202%203%202l2%202%203%201%201%201%202%201%202%204%201%203%201-2c-1-3-1-3%204-3%205-1%205-1%205%202%201%202%201%202%208-1%205-3%2011-4%209-2l2%201%201-3c1-5%205-6%207-1%200%202%203%203%203%200l3-1c2%200%202%200%202-3%200-4%201-5%202-3v-1l1-1%201-1%202-1c1%201%202%200%202-1-1-1%200-1%201-2%202%200%202-1%201-1-1-1%201-5%203-5v-1h1l1-1v-1c1-1%200-11-1-12-4-5-35-8-52-6m204%2056c1%201%200%203-1%205l-1%206-1%204v4l2%206c0%206%203%208%205%207%203-2%203-9%201-9-1-1%200-1%202-1%203%200%204%200%203-2l1-2c4%202%203-6-1-8l-4-6c-1-2-2-4-4-4h-2m-26%2012c-1%203-1%203-4%203-2%200-3%200-3-2s0-2-1%201c-2%203-1%208%200%209v2c2%201%203%200%202-3%200-2%200-2%201-1s2%202%201%203l1%202c2%201%202%204-1%206l1-4-3-1c-2%200-2%201-2%203l-1%203c-1%201%201%202%203%201l-1%202c-2%202-2%207%200%208v1c-1%201%200%205%202%205l1%202%201%203c2%201%204%200%205-5%200-5%206-12%2010-12l2-1c0-2-3-2-6%200-3%201-4%201-5-1-1-1-1-1-1%201h-1c-2-2-1-5%201-5v-1c-2-2-2-3-2-12v-7m-126%208a362%20362%200%2001-87-1c-8%200%209%203%2032%205l8%201c2%201%2038%200%2042-1s9-4%208-5l-3%201m11%2013c-4%204-4%205-12%205l-3%202c-1%203-18%204-25%201h-5l-2-1%206-1h6l-5-1c-3-1-7-2-8-1l-3-1h-1c0%201%201%202%203%202%202%201%202%201%201%202-1%202-14%203-14%201v-3c3-1%200-2-6-2h-5c1-1-3-1-11-1s-13%200-11%201l26%202c1%200%202%200%201%201l1%201%201%201h-14c-7-2-26-2-24%200%201%201%2014%202%2019%201l4%201c3%203%2067%203%2075%201l4-3%201-2v-2l1-1c1%201%205-6%204-7l-4%204m131%2019v1l-1%201h-1l-2%201c-3%201-5%204-3%207%201%202%201%202-1%202v-1l-2%201c-1%201-2%203-1%204l-1%201c-2-1-5%203-4%205%201%201%200%201-1%203-2%200-3%202-2%202l-1%201c-1-1-1-1%200%200l-2%204c-2%202-2%203%200%204v1c-1%200-2%200-1%201l-1%201h-1c1%201-3%204-4%203l-1%201c1%201-32%201-104%201H110v-2c0-2-1-3-4-3-2%200-3%200-1%201%202%200%205%203%204%204l-2-1-4-1-6-2c-1-2-6-2-11-2-2%200-2%200%201%201%205%203%205%205-1%205-4%200-5%200-5-2h-1v1l-40%201H0v75h84a1901%201901%200%2001104%203%202003%202003%200%200169%207h3l1-1v-4c1%200%202%201%202%205l1%203h-7c0%202%2011%201%2024-3a387%20387%200%2001119-11l1-37v-37h-74l8-10a87%2087%200%200017-27c2%200%200-7-1-8l-2%201m-196%2012c8%200%2010%201%206%202l-4%201%205%201c5%201%206%202%206%203-1%201%200%201%201%201l-3%201-10%201a498%20498%200%20004%202l6%201%207-4c8-5%208-7%200-7l-6-1c-1-2-3-2-9-2s-7%200-3%201m88%204c-8%205-16%209-23%2010-14%204-21%206-16%206l-4%201c-8%202-11%201-8-1l3-2h-6a718%20718%200%2001-34%204h5l-5%201c-6%201%2014%202%2024%202%2025-2%2026-2%2037-6l10-2%202-1%208-6%2012-8c0-1-1-1-5%202m-20%2046c0%202%200%202-2%201-4-1-8%205-5%2010%201%202%202%202%205%202h4v-8l-1-8-1%203m-152%206v7h4c6%200%208-2%208-7%200-6-2-8-8-8h-4v8m188-3c-4%204-2%2010%203%2010%203%200%205-2%205-6%200-5-5-8-8-4m66%200c-5%205%201%2013%207%209%202-1%202-7%200-9-3-3-4-3-7%200M25%20326c-6%204-4%2014%203%2015%205%200%207-2%207-8s-5-9-10-7m187%208v7h5c5%200%208-3%208-7%200-5-3-8-8-8h-5v8m-187-5c-5%206%202%2014%206%209%202-1%203-8%201-10s-6-1-7%201m108%202c-4%204-2%2010%203%2010%206%200%208-8%203-11-3-1-4-1-6%201'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y2VU60/TVxj+JTgcOD4QHC6FySIMF/jALRVNpikKctGwMbMEDUMHswO2Ti4CTsgcDOYEN3CSWHAGhohYLBcprJa72JZauZdLgQIFZ5b9E8/ec3oD1+TNOc/vvOc5z3mf91SwLL3E6o6YgIVilYfru8XswmzdhR1z2yjsIDJvJ3qD8H+HuEhXFo3ONcGmyLHJdbojmY1ry5NOgvWVKds6YUa0ZDJg0TSONXu+4NzoINqmgmHzwguYZrSccGFWhynjCCdiawzPz+icmOUIjo3bVa0vT3FVTM2EYRg93W1YXjBiZnIMGnUnNH91Ym5qjHImOOEyHbpm3y+4auMqrG1jF+421OHatasoLs5H2Y8lePjgHqnVYWSoD89H1TzXNK3dIUhwKbONi3N6dCpbceNGBWprqtBQfxvXfy5Hbq4MZ86koF5+C5trs5ib1mGUiNW9j7FBN3F4ILxp++hQL2prq9HU1ADtmIZ/Hxnuwx35bWRkXkDh5TyMP+/nuZPGUTzpekS11NuNY6bYDWD1Yo7dIrL8glzUkLp2RQs6SK2cyCoqyyCT5SA7W4qW5rukcoYIn0GlUkLd1wHr6rSjbWymsMKODKqoXpeRmvo50tPPQSrNwPnzaUhLO8uJSkqKcfZcKup+r4aFFD1Vd6Ors41UtkE/9pRfXXCoe2kYguJhE228iG9ypMjMSEcOzfPyZJB9m4WC/EsoLspHyqfJnNA0a4CqRwnFo2ZS/Afa2xqxRbV1vpQNkqx7pkbW15mQXvwSRUV5+P5KAcrLSnGFXC65Wogv0lLxWUoyP1ivG6KrdvISNd6Tk5njvI7CCns6/PnYrq5U3EcmFT8n6yt8J8vmapMSTyLuhAQJ8bEoLszF4IAKAwO96CGFcnkduqjOTBBrcGFrfQ6blhlsrc9yySZqB2X7fdT8eh3V1Do3qypQWHAJVb/8hJY/G9CveQKddhCjw2p0dynQ+qAR5vkX+Ns6z9tJSEqIxSfJiTiVFIfTFEcOi7ma+LgYHPv4CI/jMUeRGH8CyacT+FosRYzkGA5Hi3GU1k8lxiLh5HEeAv1w4EAg9u8PgL//+wgLC+M4MDAIQUFBEIn8EBDwAQ4e/Ijwh9i37z34+PjwuVgshq+vLyNxhZubGyIjIxEdHY2oqCiEh4dzzObBwcEIDQ3l3yIiIiCRSHDokJhwGEJCQuDh8TbY/h2E7+zZAz8/Eanz56eJRCLCfnx8d+9e/s3b2xvuu3cTgQcPT09PeHl5Ydeut+Du7k7YwxkC679xbT+FBgZdPwx8bhsZHhnsQXdHK5ob5fjtZiUqy0vxQ2kR6u/Uop/+eXTU0Eb9IPXxMA/BapmGlVy20lNyjuQWc8xqd585+M+rRfz72ozXmwt2vIRXGyZnniP+A6N5aZFmTZfeAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/8225dfbb906deda73afc1c2bda83682c/3ddd4/videoCover.png","srcSet":"/static/8225dfbb906deda73afc1c2bda83682c/078a8/videoCover.png 163w,\n/static/8225dfbb906deda73afc1c2bda83682c/e56da/videoCover.png 327w,\n/static/8225dfbb906deda73afc1c2bda83682c/3ddd4/videoCover.png 653w,\n/static/8225dfbb906deda73afc1c2bda83682c/c5cc7/videoCover.png 980w,\n/static/8225dfbb906deda73afc1c2bda83682c/6050d/videoCover.png 1200w","srcWebp":"/static/8225dfbb906deda73afc1c2bda83682c/0acdf/videoCover.webp","srcSetWebp":"/static/8225dfbb906deda73afc1c2bda83682c/ac59e/videoCover.webp 163w,\n/static/8225dfbb906deda73afc1c2bda83682c/7660b/videoCover.webp 327w,\n/static/8225dfbb906deda73afc1c2bda83682c/0acdf/videoCover.webp 653w,\n/static/8225dfbb906deda73afc1c2bda83682c/75470/videoCover.webp 980w,\n/static/8225dfbb906deda73afc1c2bda83682c/9000d/videoCover.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M192%2081c0%201%200%202-2%202l-2%202-1%202-1%203c1%202%200%201-2-1-3-4-6-3-7%200l1%203h10l9%201v-3l-2-6c0-3-3-7-3-3m-10%2022l7%201%2012%202%205%202-6-1c-13-1-35-1-36%201l-4%202-1%201h-1l-1%201-7%203-9%203-4%201h-4l-1%201h-1v1l-1%201h-1l-1%201h-1l-1%201-3%201h2c3%200%203%200-3%203l-10%207-4%203c0-2-3%204-4%2011-2%207-3%209-4%209l-4%208c-4%2012-4%208%201-9l1-9h-1l-1%202c-1-1-2%201-2%203%201%202-2%204-3%203-1-2-6%209-5%2012l-1%204c-1%201-1%201-1-1%200-4-2%200-4%2010-2%208-4%2041-2%2036%201-1%201-1%201%202l2%208%202%2011%201%201v1l1%201c1-1%206%205%206%207l4%206%204%206%201%201h2c-1%201%208%206%209%206%202%200%207%201%206%202l5%202c5%202%205%202%201%202l-12-4c-10-5-12-5-5-1%2020%2012%2065%2017%2098%2010%2039-8%2060-28%2066-62%203-19%200-55-7-71-3-6-3-5-1%203%205%2015%208%2046%206%2061-1%208-4%2019-5%2019l2-8c2-10%202-42%200-53-4-15-9-26-17-37-4-5-5-7-2-5%201%201%201%201%200%200v-1l3%201c1-1-10-9-17-13-8-4-16-6-13-4%202%202%201%201-8-1l-15-3-11-2-3%201m147%2013l-2%206c0%203%200%203-1%201s-1-2-1%200l2%204c2%202%203%205%201%205l-1%202-1-1-1-2-1%202c-1%202-1%202-3%200h-2l2%203c5%205%209%2011%208%2011-1%201%200%201%201%202%205%202%207-1%203-6l-1-5c1-1%200-4-1-7-2-3-2-5-1-10%200-5%200-8-1-5m-174%2018c-17%202-36%207-37%2010-2%204%201%2010%205%2010h3l3%203c3%201%203%202%202%203-2%201-3%203-1%202%201-1%205%202%204%203v5c0%202%201%202%203%202l2%202%203%201%201%201%202%201%202%204%201%203%201-2c-1-3-1-3%204-3%205-1%205-1%205%202%201%202%201%202%208-1%205-3%2011-4%209-2l2%201%201-3c1-5%205-6%207-1%200%202%203%203%203%200l3-1c2%200%202%200%202-3%200-4%201-5%202-3v-1l1-1%201-1%202-1c1%201%202%200%202-1-1-1%200-1%201-2%202%200%202-1%201-1-1-1%201-5%203-5v-1h1l1-1v-1c1-1%200-11-1-12-4-5-35-8-52-6m204%2056c1%201%200%203-1%205l-1%206-1%204v4l2%206c0%206%203%208%205%207%203-2%203-9%201-9-1-1%200-1%202-1%203%200%204%200%203-2l1-2c4%202%203-6-1-8l-4-6c-1-2-2-4-4-4h-2m-26%2012c-1%203-1%203-4%203-2%200-3%200-3-2s0-2-1%201c-2%203-1%208%200%209v2c2%201%203%200%202-3%200-2%200-2%201-1s2%202%201%203l1%202c2%201%202%204-1%206l1-4-3-1c-2%200-2%201-2%203l-1%203c-1%201%201%202%203%201l-1%202c-2%202-2%207%200%208v1c-1%201%200%205%202%205l1%202%201%203c2%201%204%200%205-5%200-5%206-12%2010-12l2-1c0-2-3-2-6%200-3%201-4%201-5-1-1-1-1-1-1%201h-1c-2-2-1-5%201-5v-1c-2-2-2-3-2-12v-7m-126%208a362%20362%200%2001-87-1c-8%200%209%203%2032%205l8%201c2%201%2038%200%2042-1s9-4%208-5l-3%201m11%2013c-4%204-4%205-12%205l-3%202c-1%203-18%204-25%201h-5l-2-1%206-1h6l-5-1c-3-1-7-2-8-1l-3-1h-1c0%201%201%202%203%202%202%201%202%201%201%202-1%202-14%203-14%201v-3c3-1%200-2-6-2h-5c1-1-3-1-11-1s-13%200-11%201l26%202c1%200%202%200%201%201l1%201%201%201h-14c-7-2-26-2-24%200%201%201%2014%202%2019%201l4%201c3%203%2067%203%2075%201l4-3%201-2v-2l1-1c1%201%205-6%204-7l-4%204m131%2019v1l-1%201h-1l-2%201c-3%201-5%204-3%207%201%202%201%202-1%202v-1l-2%201c-1%201-2%203-1%204l-1%201c-2-1-5%203-4%205%201%201%200%201-1%203-2%200-3%202-2%202l-1%201c-1-1-1-1%200%200l-2%204c-2%202-2%203%200%204v1c-1%200-2%200-1%201l-1%201h-1c1%201-3%204-4%203l-1%201c1%201-32%201-104%201H110v-2c0-2-1-3-4-3-2%200-3%200-1%201%202%200%205%203%204%204l-2-1-4-1-6-2c-1-2-6-2-11-2-2%200-2%200%201%201%205%203%205%205-1%205-4%200-5%200-5-2h-1v1l-40%201H0v75h84a1901%201901%200%2001104%203%202003%202003%200%200169%207h3l1-1v-4c1%200%202%201%202%205l1%203h-7c0%202%2011%201%2024-3a387%20387%200%2001119-11l1-37v-37h-74l8-10a87%2087%200%200017-27c2%200%200-7-1-8l-2%201m-196%2012c8%200%2010%201%206%202l-4%201%205%201c5%201%206%202%206%203-1%201%200%201%201%201l-3%201-10%201a498%20498%200%20004%202l6%201%207-4c8-5%208-7%200-7l-6-1c-1-2-3-2-9-2s-7%200-3%201m88%204c-8%205-16%209-23%2010-14%204-21%206-16%206l-4%201c-8%202-11%201-8-1l3-2h-6a718%20718%200%2001-34%204h5l-5%201c-6%201%2014%202%2024%202%2025-2%2026-2%2037-6l10-2%202-1%208-6%2012-8c0-1-1-1-5%202m-20%2046c0%202%200%202-2%201-4-1-8%205-5%2010%201%202%202%202%205%202h4v-8l-1-8-1%203m-152%206v7h4c6%200%208-2%208-7%200-6-2-8-8-8h-4v8m188-3c-4%204-2%2010%203%2010%203%200%205-2%205-6%200-5-5-8-8-4m66%200c-5%205%201%2013%207%209%202-1%202-7%200-9-3-3-4-3-7%200M25%20326c-6%204-4%2014%203%2015%205%200%207-2%207-8s-5-9-10-7m187%208v7h5c5%200%208-3%208-7%200-5-3-8-8-8h-5v8m-187-5c-5%206%202%2014%206%209%202-1%203-8%201-10s-6-1-7%201m108%202c-4%204-2%2010%203%2010%206%200%208-8%203-11-3-1-4-1-6%201'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAEGklEQVQ4y2VU60/TVxj+JTgcOD4QHC6FySIMF/jALRVNpikKctGwMbMEDUMHswO2Ti4CTsgcDOYEN3CSWHAGhohYLBcprJa72JZauZdLgQIFZ5b9E8/ec3oD1+TNOc/vvOc5z3mf91SwLL3E6o6YgIVilYfru8XswmzdhR1z2yjsIDJvJ3qD8H+HuEhXFo3ONcGmyLHJdbojmY1ry5NOgvWVKds6YUa0ZDJg0TSONXu+4NzoINqmgmHzwguYZrSccGFWhynjCCdiawzPz+icmOUIjo3bVa0vT3FVTM2EYRg93W1YXjBiZnIMGnUnNH91Ym5qjHImOOEyHbpm3y+4auMqrG1jF+421OHatasoLs5H2Y8lePjgHqnVYWSoD89H1TzXNK3dIUhwKbONi3N6dCpbceNGBWprqtBQfxvXfy5Hbq4MZ86koF5+C5trs5ib1mGUiNW9j7FBN3F4ILxp++hQL2prq9HU1ADtmIZ/Hxnuwx35bWRkXkDh5TyMP+/nuZPGUTzpekS11NuNY6bYDWD1Yo7dIrL8glzUkLp2RQs6SK2cyCoqyyCT5SA7W4qW5rukcoYIn0GlUkLd1wHr6rSjbWymsMKODKqoXpeRmvo50tPPQSrNwPnzaUhLO8uJSkqKcfZcKup+r4aFFD1Vd6Ors41UtkE/9pRfXXCoe2kYguJhE228iG9ypMjMSEcOzfPyZJB9m4WC/EsoLspHyqfJnNA0a4CqRwnFo2ZS/Afa2xqxRbV1vpQNkqx7pkbW15mQXvwSRUV5+P5KAcrLSnGFXC65Wogv0lLxWUoyP1ivG6KrdvISNd6Tk5njvI7CCns6/PnYrq5U3EcmFT8n6yt8J8vmapMSTyLuhAQJ8bEoLszF4IAKAwO96CGFcnkduqjOTBBrcGFrfQ6blhlsrc9yySZqB2X7fdT8eh3V1Do3qypQWHAJVb/8hJY/G9CveQKddhCjw2p0dynQ+qAR5vkX+Ns6z9tJSEqIxSfJiTiVFIfTFEcOi7ma+LgYHPv4CI/jMUeRGH8CyacT+FosRYzkGA5Hi3GU1k8lxiLh5HEeAv1w4EAg9u8PgL//+wgLC+M4MDAIQUFBEIn8EBDwAQ4e/Ijwh9i37z34+PjwuVgshq+vLyNxhZubGyIjIxEdHY2oqCiEh4dzzObBwcEIDQ3l3yIiIiCRSHDokJhwGEJCQuDh8TbY/h2E7+zZAz8/Eanz56eJRCLCfnx8d+9e/s3b2xvuu3cTgQcPT09PeHl5Ydeut+Du7k7YwxkC679xbT+FBgZdPwx8bhsZHhnsQXdHK5ob5fjtZiUqy0vxQ2kR6u/Uop/+eXTU0Eb9IPXxMA/BapmGlVy20lNyjuQWc8xqd585+M+rRfz72ozXmwt2vIRXGyZnniP+A6N5aZFmTZfeAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/8225dfbb906deda73afc1c2bda83682c/502b1/videoCover.png","srcSet":"/static/8225dfbb906deda73afc1c2bda83682c/f2e6d/videoCover.png 114w,\n/static/8225dfbb906deda73afc1c2bda83682c/4ddba/videoCover.png 229w,\n/static/8225dfbb906deda73afc1c2bda83682c/502b1/videoCover.png 457w,\n/static/8225dfbb906deda73afc1c2bda83682c/7ddc2/videoCover.png 686w,\n/static/8225dfbb906deda73afc1c2bda83682c/435bf/videoCover.png 914w,\n/static/8225dfbb906deda73afc1c2bda83682c/6050d/videoCover.png 1200w","srcWebp":"/static/8225dfbb906deda73afc1c2bda83682c/15384/videoCover.webp","srcSetWebp":"/static/8225dfbb906deda73afc1c2bda83682c/31fce/videoCover.webp 114w,\n/static/8225dfbb906deda73afc1c2bda83682c/e3e25/videoCover.webp 229w,\n/static/8225dfbb906deda73afc1c2bda83682c/15384/videoCover.webp 457w,\n/static/8225dfbb906deda73afc1c2bda83682c/0258d/videoCover.webp 686w,\n/static/8225dfbb906deda73afc1c2bda83682c/64ea2/videoCover.webp 914w,\n/static/8225dfbb906deda73afc1c2bda83682c/9000d/videoCover.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M192%2081c0%201%200%202-2%202l-2%202-1%202-1%203c1%202%200%201-2-1-3-4-6-3-7%200l1%203h10l9%201v-3l-2-6c0-3-3-7-3-3m-10%2022l7%201%2012%202%205%202-6-1c-13-1-35-1-36%201l-4%202-1%201h-1l-1%201-7%203-9%203-4%201h-4l-1%201h-1v1l-1%201h-1l-1%201h-1l-1%201-3%201h2c3%200%203%200-3%203l-10%207-4%203c0-2-3%204-4%2011-2%207-3%209-4%209l-4%208c-4%2012-4%208%201-9l1-9h-1l-1%202c-1-1-2%201-2%203%201%202-2%204-3%203-1-2-6%209-5%2012l-1%204c-1%201-1%201-1-1%200-4-2%200-4%2010-2%208-4%2041-2%2036%201-1%201-1%201%202l2%208%202%2011%201%201v1l1%201c1-1%206%205%206%207l4%206%204%206%201%201h2c-1%201%208%206%209%206%202%200%207%201%206%202l5%202c5%202%205%202%201%202l-12-4c-10-5-12-5-5-1%2020%2012%2065%2017%2098%2010%2039-8%2060-28%2066-62%203-19%200-55-7-71-3-6-3-5-1%203%205%2015%208%2046%206%2061-1%208-4%2019-5%2019l2-8c2-10%202-42%200-53-4-15-9-26-17-37-4-5-5-7-2-5%201%201%201%201%200%200v-1l3%201c1-1-10-9-17-13-8-4-16-6-13-4%202%202%201%201-8-1l-15-3-11-2-3%201m147%2013l-2%206c0%203%200%203-1%201s-1-2-1%200l2%204c2%202%203%205%201%205l-1%202-1-1-1-2-1%202c-1%202-1%202-3%200h-2l2%203c5%205%209%2011%208%2011-1%201%200%201%201%202%205%202%207-1%203-6l-1-5c1-1%200-4-1-7-2-3-2-5-1-10%200-5%200-8-1-5m-174%2018c-17%202-36%207-37%2010-2%204%201%2010%205%2010h3l3%203c3%201%203%202%202%203-2%201-3%203-1%202%201-1%205%202%204%203v5c0%202%201%202%203%202l2%202%203%201%201%201%202%201%202%204%201%203%201-2c-1-3-1-3%204-3%205-1%205-1%205%202%201%202%201%202%208-1%205-3%2011-4%209-2l2%201%201-3c1-5%205-6%207-1%200%202%203%203%203%200l3-1c2%200%202%200%202-3%200-4%201-5%202-3v-1l1-1%201-1%202-1c1%201%202%200%202-1-1-1%200-1%201-2%202%200%202-1%201-1-1-1%201-5%203-5v-1h1l1-1v-1c1-1%200-11-1-12-4-5-35-8-52-6m204%2056c1%201%200%203-1%205l-1%206-1%204v4l2%206c0%206%203%208%205%207%203-2%203-9%201-9-1-1%200-1%202-1%203%200%204%200%203-2l1-2c4%202%203-6-1-8l-4-6c-1-2-2-4-4-4h-2m-26%2012c-1%203-1%203-4%203-2%200-3%200-3-2s0-2-1%201c-2%203-1%208%200%209v2c2%201%203%200%202-3%200-2%200-2%201-1s2%202%201%203l1%202c2%201%202%204-1%206l1-4-3-1c-2%200-2%201-2%203l-1%203c-1%201%201%202%203%201l-1%202c-2%202-2%207%200%208v1c-1%201%200%205%202%205l1%202%201%203c2%201%204%200%205-5%200-5%206-12%2010-12l2-1c0-2-3-2-6%200-3%201-4%201-5-1-1-1-1-1-1%201h-1c-2-2-1-5%201-5v-1c-2-2-2-3-2-12v-7m-126%208a362%20362%200%2001-87-1c-8%200%209%203%2032%205l8%201c2%201%2038%200%2042-1s9-4%208-5l-3%201m11%2013c-4%204-4%205-12%205l-3%202c-1%203-18%204-25%201h-5l-2-1%206-1h6l-5-1c-3-1-7-2-8-1l-3-1h-1c0%201%201%202%203%202%202%201%202%201%201%202-1%202-14%203-14%201v-3c3-1%200-2-6-2h-5c1-1-3-1-11-1s-13%200-11%201l26%202c1%200%202%200%201%201l1%201%201%201h-14c-7-2-26-2-24%200%201%201%2014%202%2019%201l4%201c3%203%2067%203%2075%201l4-3%201-2v-2l1-1c1%201%205-6%204-7l-4%204m131%2019v1l-1%201h-1l-2%201c-3%201-5%204-3%207%201%202%201%202-1%202v-1l-2%201c-1%201-2%203-1%204l-1%201c-2-1-5%203-4%205%201%201%200%201-1%203-2%200-3%202-2%202l-1%201c-1-1-1-1%200%200l-2%204c-2%202-2%203%200%204v1c-1%200-2%200-1%201l-1%201h-1c1%201-3%204-4%203l-1%201c1%201-32%201-104%201H110v-2c0-2-1-3-4-3-2%200-3%200-1%201%202%200%205%203%204%204l-2-1-4-1-6-2c-1-2-6-2-11-2-2%200-2%200%201%201%205%203%205%205-1%205-4%200-5%200-5-2h-1v1l-40%201H0v75h84a1901%201901%200%2001104%203%202003%202003%200%200169%207h3l1-1v-4c1%200%202%201%202%205l1%203h-7c0%202%2011%201%2024-3a387%20387%200%2001119-11l1-37v-37h-74l8-10a87%2087%200%200017-27c2%200%200-7-1-8l-2%201m-196%2012c8%200%2010%201%206%202l-4%201%205%201c5%201%206%202%206%203-1%201%200%201%201%201l-3%201-10%201a498%20498%200%20004%202l6%201%207-4c8-5%208-7%200-7l-6-1c-1-2-3-2-9-2s-7%200-3%201m88%204c-8%205-16%209-23%2010-14%204-21%206-16%206l-4%201c-8%202-11%201-8-1l3-2h-6a718%20718%200%2001-34%204h5l-5%201c-6%201%2014%202%2024%202%2025-2%2026-2%2037-6l10-2%202-1%208-6%2012-8c0-1-1-1-5%202m-20%2046c0%202%200%202-2%201-4-1-8%205-5%2010%201%202%202%202%205%202h4v-8l-1-8-1%203m-152%206v7h4c6%200%208-2%208-7%200-6-2-8-8-8h-4v8m188-3c-4%204-2%2010%203%2010%203%200%205-2%205-6%200-5-5-8-8-4m66%200c-5%205%201%2013%207%209%202-1%202-7%200-9-3-3-4-3-7%200M25%20326c-6%204-4%2014%203%2015%205%200%207-2%207-8s-5-9-10-7m187%208v7h5c5%200%208-3%208-7%200-5-3-8-8-8h-5v8m-187-5c-5%206%202%2014%206%209%202-1%203-8%201-10s-6-1-7%201m108%202c-4%204-2%2010%203%2010%206%200%208-8%203-11-3-1-4-1-6%201'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/8225dfbb906deda73afc1c2bda83682c/6050d/videoCover.png"}}},{"id":"61fa597a-8957-56d5-9c77-a33a0581d31b","slug":"/how-browsers-read-html-render-and-apply-styles-the-sequence-and-developer-best-practices","secret":false,"title":"How Browsers Read HTML, Render, and Apply Styles, The Sequence and Developer Best Practices","author":"Luke Celitan","date":"July 2nd, 2025","dateForSEO":"2025-07-02T00:00:00.000Z","timeToRead":6,"excerpt":"A comprehensive deep-dive into the browser rendering pipeline, from HTML parsing to painting pixels, with actionable insights for building fast, responsive web apps.","subscription":true,"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"How Browsers Read HTML, Render, and Apply Styles, The Sequence and Developer Best Practices\",\n  \"excerpt\": \"A comprehensive deep-dive into the browser rendering pipeline, from HTML parsing to painting pixels, with actionable insights for building fast, responsive web apps.\",\n  \"date\": \"2025-07-02T00:00:00.000Z\",\n  \"hero\": \"browser.png\",\n  \"author\": \"Luke Celitan\",\n  \"category\": \"Post\",\n  \"tech\": [\"TS\", \"JS\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h1\", {\n    \"id\": \"how-browsers-read-html-render-and-apply-styles-the-sequence-and-developer-best-practices\"\n  }, \"How Browsers Read HTML, Render, and Apply Styles: The Sequence and Developer Best Practices\"), mdx(\"h2\", {\n    \"id\": \"introduction\"\n  }, \"Introduction\"), mdx(\"p\", null, \"Have you ever wondered what happens under the hood when you load a web page? As developers, understanding the browser\\u2019s rendering pipeline is crucial for building fast, responsive, and accessible web apps. In this deep-dive, I\\u2019ll walk you through every step of how browsers read HTML, apply styles, execute scripts, and paint pixels to the screen. We\\u2019ll explore the technical sequence, performance implications, and actionable best practices to help you optimize your sites for real-world users.\"), mdx(\"p\", null, \"Whether you\\u2019re a frontend engineer, a performance enthusiast, or just curious about browser internals, this guide will equip you with the knowledge to make informed decisions and troubleshoot rendering bottlenecks. Let\\u2019s get started!\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"the-browser-rendering-pipeline-an-overview\"\n  }, \"The Browser Rendering Pipeline: An Overview\"), mdx(\"p\", null, \"At a high level, the browser rendering pipeline consists of several sequential steps:\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Navigation & Network Requests\"), \": The browser locates the server, establishes a connection, and requests the HTML document.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Receiving the HTML Response\"), \": The browser receives the initial chunk of HTML and begins resource discovery.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Parsing HTML\"), \": The browser tokenizes the HTML and builds the DOM tree, requesting additional resources as it parses.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Building the CSSOM\"), \": CSS is parsed and the CSS Object Model is constructed.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"JavaScript Compilation\"), \": Scripts are parsed, compiled, and executed, potentially modifying the DOM and CSSOM.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Accessibility Tree\"), \": The browser builds a semantic tree for assistive technologies.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Critical Rendering Path\"), \": The DOM and CSSOM are combined into the render tree, which is styled, laid out, painted, and composited.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Interactivity\"), \": The browser becomes responsive to user input once the main thread is free.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Performance Optimization\"), \": Techniques like lazy loading, speculative loading, and performance budgets are applied.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Animation and Frame Rate\"), \": Smoothness and responsiveness are maintained through efficient animation techniques.\")), mdx(\"p\", null, \"Each step has its own performance considerations, edge cases, and best practices. Let\\u2019s break down each phase in detail.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"step-1-navigation-and-network-requests\"\n  }, \"Step 1: Navigation and Network Requests\"), mdx(\"p\", null, \"Before any HTML is parsed, the browser must locate and connect to the server hosting your site. This involves several network steps:\"), mdx(\"h3\", {\n    \"id\": \"dns-lookup\"\n  }, \"DNS Lookup\"), mdx(\"p\", null, \"When a user enters a URL, the browser performs a DNS lookup to resolve the domain name to an IP address. Multiple hostnames (for fonts, images, scripts) mean multiple DNS lookups, which can add latency\\u2014especially on mobile networks.\"), mdx(\"h3\", {\n    \"id\": \"tcp-handshake\"\n  }, \"TCP Handshake\"), mdx(\"p\", null, \"Once the IP is known, the browser establishes a TCP connection using a three-way handshake (SYN, SYN-ACK, ACK). This ensures reliable communication.\"), mdx(\"h3\", {\n    \"id\": \"tls-negotiation\"\n  }, \"TLS Negotiation\"), mdx(\"p\", null, \"For HTTPS sites, a TLS handshake negotiates encryption and verifies the server. This adds several round trips before data transfer begins.\"), mdx(\"h3\", {\n    \"id\": \"latency-and-bandwidth\"\n  }, \"Latency and Bandwidth\"), mdx(\"p\", null, \"Network latency (the time for data to travel) and bandwidth (the amount of data that can be transferred) are major factors in perceived performance. Optimizing for fewer hostnames, using HTTP/2 multiplexing, and leveraging CDNs can reduce these costs.\"), mdx(\"h4\", {\n    \"id\": \"performance-impact-and-optimization-tips\"\n  }, \"Performance Impact and Optimization Tips\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Minimize DNS lookups\"), \": Consolidate resources under fewer hostnames.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Use HTTP/2\"), \": Multiplex requests to reduce connection overhead.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Leverage CDNs\"), \": Serve assets closer to users.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Preconnect and dns-prefetch\"), \": Use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"<link rel=\\\"preconnect\\\">\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"<link rel=\\\"dns-prefetch\\\">\"), \" to speed up connections.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"step-2-receiving-and-parsing-html\"\n  }, \"Step 2: Receiving and Parsing HTML\"), mdx(\"p\", null, \"Once the connection is established, the browser requests the HTML document. The server responds, and the browser receives the first chunk of data.\"), mdx(\"h3\", {\n    \"id\": \"time-to-first-byte-ttfb\"\n  }, \"Time to First Byte (TTFB)\"), mdx(\"p\", null, \"TTFB measures the time from the request to the first byte received. Fast TTFB is critical for perceived performance.\"), mdx(\"h3\", {\n    \"id\": \"initial-chunk-and-resource-discovery\"\n  }, \"Initial Chunk and Resource Discovery\"), mdx(\"p\", null, \"Browsers typically start with a 14KB chunk. As the HTML is parsed, the browser discovers references to CSS, JS, images, and other resources.\"), mdx(\"h3\", {\n    \"id\": \"parsing-html-tokenization-and-dom-construction\"\n  }, \"Parsing HTML: Tokenization and DOM Construction\"), mdx(\"p\", null, \"The browser tokenizes the HTML and builds the Document Object Model (DOM) tree, representing the structure and content of the page.\"), mdx(\"h4\", {\n    \"id\": \"preload-scanner\"\n  }, \"Preload Scanner\"), mdx(\"p\", null, \"While parsing, the preload scanner looks ahead to request high-priority resources (CSS, JS, fonts) early, reducing blocking.\"), mdx(\"h4\", {\n    \"id\": \"blocking-vs-non-blocking-resources\"\n  }, \"Blocking vs. Non-Blocking Resources\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Blocking\"), \": \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"<script>\"), \" tags without \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"async\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"defer\"), \" block parsing and rendering.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Non-Blocking\"), \": Images, CSS (to some extent), and scripts with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"async\"), \"/\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"defer\"), \" do not block parsing.\")), mdx(\"h4\", {\n    \"id\": \"code-example-minimal-html-and-resource-loading\"\n  }, \"Code Example: Minimal HTML and Resource Loading\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-html\"\n  }, \"<!doctype html>\\n<html lang=\\\"en\\\">\\n  <head>\\n    <meta charset=\\\"UTF-8\\\" />\\n    <title>Minimal Page</title>\\n    <link rel=\\\"stylesheet\\\" href=\\\"styles.css\\\" />\\n    <script src=\\\"main.js\\\" defer></script>\\n  </head>\\n  <body>\\n    <h1>Hello, world!</h1>\\n    <img src=\\\"hero.jpg\\\" alt=\\\"Hero Image\\\" />\\n  </body>\\n</html>\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tip:\"), \" Place critical CSS in the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"<head>\"), \" and use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"defer\"), \" for scripts to avoid blocking rendering.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"step-3-cssom-construction\"\n  }, \"Step 3: CSSOM Construction\"), mdx(\"p\", null, \"After discovering CSS resources, the browser parses them and builds the CSS Object Model (CSSOM).\"), mdx(\"h3\", {\n    \"id\": \"css-parsing-cascade-and-specificity\"\n  }, \"CSS Parsing, Cascade, and Specificity\"), mdx(\"p\", null, \"CSS rules are parsed, and the cascade determines which styles apply to each element. Specificity resolves conflicts between selectors.\"), mdx(\"h3\", {\n    \"id\": \"render-blocking-resources\"\n  }, \"Render-Blocking Resources\"), mdx(\"p\", null, \"External CSS files block rendering until they\\u2019re downloaded and parsed. Inline styles and critical CSS can reduce this blocking.\"), mdx(\"h4\", {\n    \"id\": \"code-example-css-that-blocks-vs-async-loading\"\n  }, \"Code Example: CSS That Blocks vs. Async Loading\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-html\"\n  }, \"<!-- Render-blocking CSS -->\\n<link rel=\\\"stylesheet\\\" href=\\\"main.css\\\" />\\n\\n<!-- Non-blocking CSS (for non-critical styles) -->\\n<link rel=\\\"stylesheet\\\" href=\\\"print.css\\\" media=\\\"print\\\" />\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tip:\"), \" Use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"media\"), \" attributes or split critical/non-critical CSS to minimize render-blocking.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"step-4-javascript-compilation-and-execution\"\n  }, \"Step 4: JavaScript Compilation and Execution\"), mdx(\"p\", null, \"JavaScript can significantly impact rendering and interactivity.\"), mdx(\"h3\", {\n    \"id\": \"parsing-compiling-and-main-thread-impact\"\n  }, \"Parsing, Compiling, and Main Thread Impact\"), mdx(\"p\", null, \"Scripts are parsed and compiled into bytecode. Execution happens on the main thread, which can block rendering and user interactions.\"), mdx(\"h3\", {\n    \"id\": \"async-and-defer-attributes\"\n  }, \"Async and Defer Attributes\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"async\")), \": Script downloads and executes asynchronously, not blocking HTML parsing.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"defer\")), \": Script downloads asynchronously but executes after HTML parsing is complete.\")), mdx(\"h4\", {\n    \"id\": \"code-example-async-vs-blocking-scripts\"\n  }, \"Code Example: Async vs. Blocking Scripts\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-html\"\n  }, \"<!-- Blocking script -->\\n<script src=\\\"blocking.js\\\"></script>\\n\\n<!-- Async script -->\\n<script src=\\\"async.js\\\" async></script>\\n\\n<!-- Defer script -->\\n<script src=\\\"defer.js\\\" defer></script>\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tip:\"), \" Use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"async\"), \" for independent scripts and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"defer\"), \" for scripts that depend on DOM readiness.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"step-5-building-the-accessibility-tree\"\n  }, \"Step 5: Building the Accessibility Tree\"), mdx(\"p\", null, \"Accessibility is a first-class concern. The browser builds an Accessibility Object Model (AOM) for assistive technologies.\"), mdx(\"h3\", {\n    \"id\": \"aom-and-accessibility-best-practices\"\n  }, \"AOM and Accessibility Best Practices\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use semantic HTML (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"<nav>\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"<main>\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"<header>\"), \", etc.).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Provide \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"aria-*\"), \" attributes for additional context.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Ensure all interactive elements are keyboard accessible.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tip:\"), \" Test with screen readers and accessibility tools to ensure your site is usable for all users.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"step-6-the-critical-rendering-path\"\n  }, \"Step 6: The Critical Rendering Path\"), mdx(\"p\", null, \"The critical rendering path is the sequence of steps the browser takes to convert HTML, CSS, and JS into pixels on the screen.\"), mdx(\"h3\", {\n    \"id\": \"render-tree-construction\"\n  }, \"Render Tree Construction\"), mdx(\"p\", null, \"The DOM and CSSOM are combined into the render tree, which contains only visible elements and their computed styles.\"), mdx(\"h4\", {\n    \"id\": \"style-calculation\"\n  }, \"Style Calculation\"), mdx(\"p\", null, \"The browser applies CSS rules to each node in the render tree, resolving the cascade and specificity.\"), mdx(\"h4\", {\n    \"id\": \"layout-geometry\"\n  }, \"Layout (Geometry)\"), mdx(\"p\", null, \"The browser calculates the size and position of each element, considering the viewport and box model properties.\"), mdx(\"h4\", {\n    \"id\": \"paint-rasterization\"\n  }, \"Paint (Rasterization)\"), mdx(\"p\", null, \"Elements are drawn to the screen, converting boxes and styles into pixels.\"), mdx(\"h4\", {\n    \"id\": \"compositing-layers\"\n  }, \"Compositing (Layers)\"), mdx(\"p\", null, \"Some elements are promoted to their own layers (e.g., with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"will-change\"), \", 3D transforms, opacity), which are composited for efficient painting.\"), mdx(\"h4\", {\n    \"id\": \"diagrams-dom-cssom-render-tree\"\n  }, \"Diagrams: DOM, CSSOM, Render Tree\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"[HTML] --> [DOM Tree]\\n[CSS]  --> [CSSOM Tree]\\n[DOM + CSSOM] --> [Render Tree] --> [Layout] --> [Paint] --> [Composite]\\n\")), mdx(\"h4\", {\n    \"id\": \"code-example-impact-of-display-none-vs-visibility-hidden\"\n  }, \"Code Example: Impact of \", mdx(\"inlineCode\", {\n    parentName: \"h4\"\n  }, \"display: none\"), \" vs. \", mdx(\"inlineCode\", {\n    parentName: \"h4\"\n  }, \"visibility: hidden\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-html\"\n  }, \"<div style=\\\"display: none;\\\">Not in render tree</div>\\n<div style=\\\"visibility: hidden;\\\">In render tree, but not visible</div>\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tip:\"), \" Use \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"display: none\"), \" to remove elements from the render tree and avoid layout calculations.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"step-7-interactivity-and-time-to-interactive\"\n  }, \"Step 7: Interactivity and Time to Interactive\"), mdx(\"p\", null, \"A page is only truly usable when it responds quickly to user input.\"), mdx(\"h3\", {\n    \"id\": \"main-thread-responsiveness-and-tti\"\n  }, \"Main Thread, Responsiveness, and TTI\"), mdx(\"p\", null, \"The main thread handles parsing, layout, paint, and JS execution. If it\\u2019s busy, the page can\\u2019t respond to interactions.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Time to Interactive (TTI)\"), \" measures when the page is visually rendered and reliably responsive.\"), mdx(\"h4\", {\n    \"id\": \"code-example-heavy-js-blocking-interactivity\"\n  }, \"Code Example: Heavy JS Blocking Interactivity\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-html\"\n  }, \"<script>\\n// Simulate heavy computation\\nconst start = performance.now();\\nwhile (performance.now() - start < 2000) {\\n  // Block main thread for 2 seconds\\n}\\n</script>\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tip:\"), \" Offload heavy work to Web Workers or defer non-critical JS to avoid blocking interactivity.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"performance-optimization-strategies\"\n  }, \"Performance Optimization Strategies\"), mdx(\"p\", null, \"Optimizing the rendering pipeline is key to fast, smooth web experiences.\"), mdx(\"h3\", {\n    \"id\": \"lazy-loading\"\n  }, \"Lazy Loading\"), mdx(\"p\", null, \"Load non-critical resources (images, scripts) only when needed.\"), mdx(\"h3\", {\n    \"id\": \"speculative-loading\"\n  }, \"Speculative Loading\"), mdx(\"p\", null, \"Predict and preload resources the user is likely to need next.\"), mdx(\"h3\", {\n    \"id\": \"performance-budgets\"\n  }, \"Performance Budgets\"), mdx(\"p\", null, \"Set limits on resource sizes and load times to prevent regressions.\"), mdx(\"h3\", {\n    \"id\": \"apis-for-measurement\"\n  }, \"APIs for Measurement\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Performance API\"), \": High-precision timing for benchmarking.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Resource Timing API\"), \": Detailed network timing for each resource.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Navigation Timing API\"), \": Metrics for page navigation events.\")), mdx(\"h4\", {\n    \"id\": \"code-example-using-performance-api-to-measure-tti\"\n  }, \"Code Example: Using Performance API to Measure TTI\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"window.addEventListener('load', () => {\\n  const tti = performance.now();\\n  console.log('Time to Interactive:', tti, 'ms');\\n});\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tip:\"), \" Use Lighthouse, WebPageTest, and browser dev tools to profile and optimize performance.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"animation-and-frame-rate\"\n  }, \"Animation and Frame Rate\"), mdx(\"p\", null, \"Animations can delight users\\u2014or cause jank if not optimized.\"), mdx(\"h3\", {\n    \"id\": \"css-vs-js-animation\"\n  }, \"CSS vs. JS Animation\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"CSS Animations/Transitions\"), \": Offloaded to the browser, often GPU-accelerated.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"JS Animations\"), \": Use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"requestAnimationFrame\"), \" for smoothness, but can block the main thread if not managed.\")), mdx(\"h3\", {\n    \"id\": \"impact-on-smoothness-and-jank\"\n  }, \"Impact on Smoothness and Jank\"), mdx(\"p\", null, \"Aim for frame times under 16.7ms (60fps) for smooth animations.\"), mdx(\"h4\", {\n    \"id\": \"code-example-requestanimationframe-vs-css-transitions\"\n  }, \"Code Example: \", mdx(\"inlineCode\", {\n    parentName: \"h4\"\n  }, \"requestAnimationFrame\"), \" vs. CSS Transitions\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-css\"\n  }, \"/* CSS Transition */\\n.box {\\n  transition: transform 0.3s ease;\\n}\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-js\"\n  }, \"// JS Animation\\nfunction animateBox() {\\n  let start = null;\\n  function step(timestamp) {\\n    if (!start) start = timestamp;\\n    const progress = timestamp - start;\\n    box.style.transform = `translateX(${progress}px)`;\\n    if (progress < 300) {\\n      requestAnimationFrame(step);\\n    }\\n  }\\n  requestAnimationFrame(step);\\n}\\nanimateBox();\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Tip:\"), \" Prefer CSS for simple animations; use JS only when necessary and avoid layout thrashing.\"), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"best-practices-and-common-pitfalls\"\n  }, \"Best Practices and Common Pitfalls\"), mdx(\"h3\", {\n    \"id\": \"minimizing-main-thread-work\"\n  }, \"Minimizing Main Thread Work\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Defer non-critical JS and CSS.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use Web Workers for heavy computation.\")), mdx(\"h3\", {\n    \"id\": \"optimizing-resource-order-and-attributes\"\n  }, \"Optimizing Resource Order and Attributes\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Place critical CSS in \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"<head>\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"async\"), \"/\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"defer\"), \" for scripts.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Preload important resources.\")), mdx(\"h3\", {\n    \"id\": \"avoiding-layout-thrashing-and-excessive-reflows\"\n  }, \"Avoiding Layout Thrashing and Excessive Reflows\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Batch DOM reads/writes.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Avoid changing layout properties in rapid succession.\")), mdx(\"h3\", {\n    \"id\": \"defining-image-dimensions-to-prevent-reflows\"\n  }, \"Defining Image Dimensions to Prevent Reflows\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Always set \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"width\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"height\"), \" on images to reserve space.\")), mdx(\"h3\", {\n    \"id\": \"using-layers-and-compositing-judiciously\"\n  }, \"Using Layers and Compositing Judiciously\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Promote only necessary elements to layers (e.g., with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"will-change\"), \").\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Avoid excessive layer creation, which can hurt memory usage.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"advanced-concepts\"\n  }, \"Advanced Concepts\"), mdx(\"h3\", {\n    \"id\": \"compositing-and-gpu-acceleration\"\n  }, \"Compositing and GPU Acceleration\"), mdx(\"p\", null, \"Elements with certain CSS properties (opacity, 3D transforms, \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"will-change\"), \") are promoted to GPU layers for efficient compositing.\"), mdx(\"h3\", {\n    \"id\": \"performance-monitoring-rum-vs-synthetic\"\n  }, \"Performance Monitoring: RUM vs. Synthetic\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"RUM (Real User Monitoring)\"), \": Measures actual user experiences.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Synthetic Monitoring\"), \": Simulates user interactions for regression testing.\")), mdx(\"h3\", {\n    \"id\": \"profiling-tools-and-apis\"\n  }, \"Profiling Tools and APIs\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Chrome DevTools\"), \": Performance tab for flame charts, call trees.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Firefox Profiler\"), \": Advanced performance analysis.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"PerformanceObserver API\"), \": Programmatic access to performance entries.\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"real-world-use-cases\"\n  }, \"Real-World Use Cases\"), mdx(\"h3\", {\n    \"id\": \"case-study-optimizing-a-slow-loading-page\"\n  }, \"Case Study: Optimizing a Slow-Loading Page\"), mdx(\"p\", null, \"Suppose your site loads slowly on mobile. Using the techniques above:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Consolidate resources under fewer hostnames.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Inline critical CSS and defer non-critical JS.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use lazy loading for images below the fold.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Profile with Lighthouse and fix main thread bottlenecks.\")), mdx(\"h3\", {\n    \"id\": \"troubleshooting-guide-diagnosing-render-bottlenecks\"\n  }, \"Troubleshooting Guide: Diagnosing Render Bottlenecks\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use DevTools to identify long tasks and main thread blocks.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Check for render-blocking CSS/JS.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Audit image sizes and dimensions.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Monitor TTI and FCP (First Contentful Paint).\")), mdx(\"hr\", null), mdx(\"h2\", {\n    \"id\": \"conclusion\"\n  }, \"Conclusion\"), mdx(\"p\", null, \"Understanding the browser\\u2019s rendering pipeline is essential for building fast, responsive, and accessible web apps. By optimizing each step\\u2014from network requests to painting pixels\\u2014you can deliver delightful experiences to your users. Remember to measure, profile, and iterate using the tools and APIs available. With these best practices, you\\u2019ll be well-equipped to tackle performance challenges and build world-class web applications.\"), mdx(\"p\", null, \"Ready to dive deeper? Explore browser developer tools, performance APIs, and accessibility guides to further enhance your skills. Happy coding!\"));\n}\n;\nMDXContent.isMDXComponent = true;","tech":["TS","JS"],"category":"Post","appDescription":null,"hero":{"full":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAE8klEQVQ4y1VU+U9UVxR+KhWJYhTKYiRUBkRksYLgjhuRWGw0aiKKwtRGw+IolQFhoCCkWNlVBlkaZZFlhn0tDCiy6QgiA1JMrG1NA7Gpf0Njvn73Gk384ebe9955555vOUcJDw9HeXkFTp48CUVRPltLly6FjY0NVq9eDXd3D+zYsQOnTp1GQ0MDpqenodUmyjgrKyssWbIEixYtghIXF4e6unqUlZUhMzMTeXl5KOW5uroaXV1dGHz0CA8ePsTQ0DBqampQWFSElpZWxMbG4fbtYqxcufLzQkymfgwPDzOo5VPiq1eTERERgdDQUPj6+kKlckdTUzPUajWsra2Rn1+AI0eOorm5BQcPhsrKHB0d4ePj8yGh0WhEaWkZIVp/umnx4sUy0MrqC/mckXENxcXF2L9/Pzo6OoigRiIQqLRaLXJycpGamgalqOgmmnl7Q30DvDZskBXY29uTNztW5wd//wCZMCYmFuPj46ioqMDExATevv0HFouFl+hRWFgkqejt7YOi06WisbEJ/aYBhIWFSSFsbW2Z9EsEBW2F53pPSXp4+Cn09w/Azs5OVvWQvBqNjXjx4gVyc/MobDlqSZlSUFAIg8GAzs4uREdHy2oEHx4eHlC5qXh2wqpVqxAYGCTd4OLigqioKJnIYpnG3bv3ELw7mC5wh7e3NxQRJKAI0rOzr0vunJyc4Oy8Bo4OjrAj9I+XlJWV4x4TmEwmzM3NobunB7W1tfDz82MyH4QcCIEi1BWWGB0dozCl0k8igdhFZZ6enlT0CNLS0tDe3o7Xr/+QrhD22kDORTEajUaqLWykGAyNaGtrw9jYY1llSEgI9u7di4SEBOj1eknH4OAgzOanmJ2dxatXr/CYsSUlJdCl6FBVWYXSO6VMegnpGRlQIiLOIoUfnk1O4ubNW/RYPnoIpbu7Gx2dnRgZGZEJ9foSPHliJsQ6FtCOIip740YOjAajfBZqC28qzs7OCAjYIn3Yzg8zMzNM+Cuyf8pGVVU1aug3ATEzMwut7JCsrCyk/5guUU1NTWF0ZJStaEBlZSUy0q9BcXBwwInjJyQnzyef492/7wi9CQ8GHsDUZ5JJxPuhR0OYfDaJhfkFKcgkEV28eBF7goORzM4SMQKhUnjrFoYpSE9fH9o6OmGmafNp0gHCHDOb0ctOGufPs3Mv8ff8PB6TSxFnIZJc0tPU2ipj20hPIwVWSiJOI+/oUSTt3ImUPcHIDD2I815eiKEV0vbtw8+HD3OFIYdKX//2MBIZFx8YiCzGFR4/huxvDiFS5cZ3W5C8exeUcFrkikqFK25ucmlp6CSuq7SEZs0aaNevRyLPP/CbZu1a6NiOsWxN8d/HpaZ3z3I/I+bABc66a9u3I2XTJqQFBOASOyGZEyaJrk/194du82Ykbdwon0VMPBNHsj2juM5xVn7H3ldbf3hW86xErViBy2yxGN6uWbcOcdzj2UbxPF/mnsTkGtevoBMU8ALxPo5dIwo5u2wZ1PxfvXw5znEuil2xtV4GH05jXw6BIL+vodVcRoX+Dhpr69FJo09QsLkpC3rbO2Cm0k+HR5B//QZC9x1A8DZO8GMncCk6Br//9hILf72BYk/buLGSXZTfxdUVZyKjcI/+a+Akec7m/+/9e/z55g2q799HHf0Ww0kdtHUbvH188f35C/iFvX2F81CbmAjL9Az+ByoFkXWUHm8uAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/f4485edfdde8a60673160ba454fafa80/a1946/browser.png","srcSet":"/static/f4485edfdde8a60673160ba454fafa80/5b37e/browser.png 236w,\n/static/f4485edfdde8a60673160ba454fafa80/49058/browser.png 472w,\n/static/f4485edfdde8a60673160ba454fafa80/a1946/browser.png 944w,\n/static/f4485edfdde8a60673160ba454fafa80/6050d/browser.png 1200w","srcWebp":"/static/f4485edfdde8a60673160ba454fafa80/99fbb/browser.webp","srcSetWebp":"/static/f4485edfdde8a60673160ba454fafa80/77392/browser.webp 236w,\n/static/f4485edfdde8a60673160ba454fafa80/1f177/browser.webp 472w,\n/static/f4485edfdde8a60673160ba454fafa80/99fbb/browser.webp 944w,\n/static/f4485edfdde8a60673160ba454fafa80/9000d/browser.webp 1200w","sizes":"(max-width: 944px) 100vw, 944px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2023v23h3c6%200%208%201%208%203-1%202-1%202%201%200l3-2%203-4%201-4v-4l3-3%202-2c1-2%201-2%202-1h1v3c-1%202-1%202%205%202l9-2a766%20766%200%200171-5A29085%2029085%200%2001304%209c-2%200-3%200-2-2%200-1-1-1-2%201-3%203-3%201%200-4l1-4-2%202c-1%205-5%208-11%208-14%202-13%202-12%200%200-1%200-2-2-2-3%201-4%200-1-3l1-3-4%204c-3%205-3%206-7%206-4%201-6-2-4-3s5-7%205-8L164%200%2065%201l-5%2014-4%2015-2-6c0-2%200-2%201%200s1%202%201-1v-2c1%201%201%201%201-2v-3l1%201v-3l1-6c2-8%202-8-3-8-4%200-4%200-5%204-2%208-3%2010-2%205l1-7-1-2-2%204-2%207-1%203v-3c0-2%200-2-1%200h-1c0-1%200-2-1-1l-1-1%201-1V6l1-1c1%201%202-1%201-3-1-3-2-2-3%204-2%205-2%206%200%208%201%201%201%201-1%203v4c-1-1-2%201-2%204%200%205%200%205%203%205h2l-3%201c-3%200-4%200-3-3%200-3%200-3-1%200-1%204-3%205-3%203%200-1-1-1-1%201-2%201-2%201-1-2l2-9%205-20-2-1-2%202-1%202-1-1-1-1-2%201%201%201c2%200%203%201%202%204l-2%202-1%201%201%201c3%200%203%202%201%207-3%207-5%209-5%205%200-2%200-2-1%200-1%201-1%201-1-1s-2-4-2-1l-1%202-1%202h2c2-1%203%200%201%203-1%202-5-2-5-4l-1-2v1l-1%201c-2-1-2%200-2%201%200%202%200%202%201%201h2a43%2043%200%2001-2%2017l-1%202-1-4v-3l-1%204-2%202c-4%200-5-1-4-5l7-37%201-3H0v23M316%203c-6%206-7%208-5%2011s5%2010%205%2013%201%205%204%206%203%206%200%206c-2%200-2%200-2%206a1632%201632%200%20016%2036l2%208%202%204c0-2%200-2%202-1l2%202%201%201c1-1%203%201%202%202l1%201h1l2%206c5%2010%205%2029%200%2032l-1-1v-2l-2%202-2%201%202-5%202-7-1-3-2-10-3-7v7c0%205%201%206%201%204%201-3%201-3%201%201v8c1%205%200%207-3%206v3c1%201%201%201-2%201-1%200-2%200-1-1l1-2c0-2%200-2-1-1%200%201-1%202-2%201v-1l1-2h-1l-1-2c0-3-2-2-2%201v5l-1%201-6%202c-5%202-3%203%203%201%204-2%205-2%205-1l2%203v1c-2%200-2%200%200%202s4%202%204-1c0-2%201-3%202-3v5c2%200%203%201%206%2012l4%2012c1-2%201-2%203%201%207%209%209%2018%207%2026l-1%207-3-12c-2-11-4-17-4-12l1%205%203%2017%203%2011%201-4%201-3%202-3%201-1%201-1-1-1v-2l1-2%201-1c1%201%201%201%200%200l1-3%201%201c-1%202%200%202%202%200%202-1%202%200%201%205-1%202-1%202-1%200v-3l-2%202-2%204v1l2%2010-1%2013c-1%201%200%202%202%205l5%203h1v-2l1-3%202%204c1%206%202%207%204%206l3-1c3%200%205%200%203-1h-3v-3l-1-7-2-4v5l1%205v2c0%201-5-5-6-9h-1c0%202-2%202-2-1h1c2%201%201-2-1-3-3-3-2-24%201-22a1664%201664%200%20017%202c-4-3-3%200%201%204%206%206%209%2011%2010%2018%201%206%201%206-3%204-2-1-2-1-2%202s0%203%201%201c1-3%201-3%202%201l-1%202-1%202%201%201h1c1%201%200%201-1%201l1%201%202%202-2%201c-2%201-2%201%201%201s1%202-3%202c-1%200-2%200-1%201v1l1%201%201%201v2c-2%202-1%203%201%202h1c0%201%206%202%207%201l-3-1c-2%200-3%200-2-1%200-2%207-1%207%201l-1%201v1h6l-1%202v8h1c1-1%201%200%201%203l-1%203-1%201v5l1%201-1%201c-2-1-1%201%201%202%201%201%201%201%201-1a891%20891%200%20001-76v-5l-6-1c-11-2-19-5-21-7-3-3-4-12-2-13%202-2%202-5%201-4v-4c1-1%202-2%204-1l5-1c3-1%206-1%205%201v1l2-1%201-1c2%200%201%205-1%205v-1h-1c-2%200-2%201-1%202v4l2-1c2-1%202-2%201-2-1-1%200-1%201-1l3-1%201-1c1%200-2%206-5%206l-2%202c1%200%200%202-2%202-1%202-2%202-2%201h-1c-3%204-7%203-8-2l-2-2v3c3%204%2010%209%208%206%200-3%204-3%2011-1%209%202%209%202%209%200l-1-2v-1l-1-3-3-1c0%202-2%203-5%202l2-3c3-2%204-2%204-1%202%204%204%202%204-2%200-5-1-6-3-5l-1-1%202-1c2%200%203-6%203-20l-1-17v-5h-22l11-1c10-1%2011-1%2011-3s0-2-7-2a727%20727%200%2001-41%201l1-2v-1c0-1%201-3%2016-13%2013-11%2016-13%2017-16%200-2%200-2-5%202l-6%204-6%203c-3%202-7%203-10%203-6%201-9%202-7%203h2l4-1c6%200%205%203-5%2010-3%202-4%204-4%205l-1%202-2%205c1%201%200%203-1%204v-3l1-7%201-3c-1-3%201-8%204-10v-1l-4%203c-3%205-4%205-4%201l-4-7-3-6c0-2-1-2-2-2l-1-1%203-1a734%20734%200%200127-6l8-2a560%20560%200%2000-5%203l5%201a325%20325%200%200118-3l6-1%205-1-5-1h-6l4-1c6%200%207-1%207-4%200-2%200-3-2-3l1-2c2-1%203-4%201-2l-1-1c1-1%201-1-1-1l-7%202-3%201v1l-2%202a1888%201888%200%2000-60%209c1-1%200-2-1-3l-1-2v-2c-2-2-3-9-1-9l3%204%201%202c0-2%200-2%2026-6l43-7c5%200%205%201%204-31V0h-82l-2%203m-15%2019l2%201%201%201-3%203a633%20633%200%2000-19%200l2-1h-2c-2%200-3%201-4%204-2%205-2%205-1%2018l3%2013v-1l1-3h5c3%200%204-1%204-3l-1-2-1-1c0-2%203%200%203%203%201%202%202%202%204%202l8-2-2-2a1161%201161%200%20002-8c1%201%201%201%201-1l-1-8-1-6%201-1%202-2%201-1c2-1%201-4-2-4l-3%201m-65%206c-5%200-7%201-9%203-3%203-3%202%201%2029%203%2019%203%2020%206%2023%201%201%203%202%205%201a374%20374%200%200126-6h1l2-3c2-5%201-26-1-28l2%2021c0%202%200%202-1%201v1c0%202%200%202-1%201h-1v1l-1%202v1h-1l-3%202v1l-3%201c-2%200-1-2%202-3v-2h-1c-3%202-3%201-1-1%201-2%202-2%202-1l1%201%201-2h-1l-1-1%201-1h1c0%202%204-2%204-4%201-11-2-25-6-28l-1-1%201-1%201-1v-3h-5v-1l-11-1c-11%201-11%200%201-1l8-1h-6l-12%201m-9%208a131%20131%200%20006%2040h-1l2%202h2c-2-2%200-1%203%201%202%203%203%203%208%202l5-1h-5l-5-1h9l-4-1h-5c-2%200-2%200-1-1h-1c-2%200-2%200-1-1%202-1%200-2-2-1v-1l-1-1c-3%202-7-14-8-36%200-3-1-3-1-1m-52%204A3171%203171%200%200155%2055c-1%200-1%207%201%209l1%207c0%202%200%203%201%202v3l1%202c1-1%201%200%201%202v3c1-1%201%200%201%202v2c1-1%201-1%201%201a558%20558%200%200013%2077c-1%202%200%203%201%207l2%203c1-2%201-1%204%2012l3%2010v1c0%202%202%205%203%205v-1c-2-2%200-2%203-1v2c-3%200%202%202%206%202l-1-1c-6-2-5-3%2020-9a220%20220%200%200023-7%201439%201439%200%200072-19c10-2%2011-2%2011-8%200-3-1-5-2-3-1%201-1%200-1-1l-1-5h1l1%203v-3l-1-11c0-8%200-7%203%207%202%2010%202%204%200-7-1-6-2-12-1-13%200-2%200-3-2-4l-1-7v-3c-1%203-2-4-1-9%200-2%200-3-1-2-1%202-3-13-2-15l-1-2-2-8a305%20305%200%2000-9-40l-4-1-23%203M31%2051c-3%204-4%207-2%2011v-3l1-4%201%203%204%2017a74%2074%200%20013%2021c1-2%201-2%201%201l1%207v2c1-3%201-2%201%202v3c0-3%201-1%204%2011%203%2013%204%2021%202%2015-1-2-1-2-1%200l1%206c2%203%202%204%202%202v-2l1%202%201%206v2c1-2%201-2%201%202v5c0%203%200%204%201%202s1-2%201%202v2l1-2v-16l2-1h1l2-1c1%200%202%200%201-1l-1-2-1%201v-2c0-4%200-4-1-2l-1%201c0-1%200-2-1-1l-1-1v-2l1-1-3-1h-2c1-2%200-5-1-4-1%202-2%200-2-5v-4c1%201%201%200%201-1a161%20161%200%20010-5c-4-4-5-6-6-11l1-6v-6l-1-1h-3l-1-2h3v-2l-1-3%201-4v-2l1%202-1-16-5-13c-1%200%200%206%202%2010l-1%202-1-3-1-2-1-2-1-2-3-2%201-3%202-3-3%204M12%2064l-5%207%202-1%203-2%201-2c2-2%203%200%205%205%201%207%201%2010-1%205l-2-4v3l6%2035%205%2022c13%2050%2013%2054%2013%2046-1-7%200-12%201-10%202%202%201%200-1-9l-2-7%201%206c0%204%200%206-1%205l-1-2-4-9v-8c1%201%201%200%201-1%200-2%201%200%202%203a295%20295%200%2001-4-18c2%205%202%2011%201%2011v3h-2v-7l-3-4c-2-6-3-13-2-14l-1-1v-2l-1-2-1-9v-1l-2-16-1-6%202%206a885%20885%200%2000-4-26c0-1-3%201-5%204m14-3l2%2010c3%2012%204%2022%203%2023l1%202%201%203a22299%2022299%200%20005%2012l1-1c-2-1-2-1-4-11a684%20684%200%2000-9-38m267%200c-10%202-12%203-8%206%204%202%209%204%209%202h4l3-1%202-2c3-1%204%200%203%202%200%201%201%202%203%202%204%200%205-1%203-2v-3c1-3%200-6-2-4v1c2%200%201%203-1%203-2%201-2%200-2-2%201-3-1-3-14-2M6%2094l-5%203c-1-1-1%201-1%209s0%2010%201%209h2l1-2%202-2c2%200%205%206%203%207-1%201-1%201-1-1l-1-2%201%208c1%202%201%202%201-1v-3l1%203v4c-2%201-4-1-4-4%200-2%200-2-1-1v2l-2%202c-3%201-3%203%201%202l2%201-2%201v1l1%203c0%201%200%202%201%201s13-1%2014%201c2%202%201-2-1-6l-1-4v7c-1%200-2-2-1-6l-1-4-1-2v-1c2%201%202%200%202-1%200-4-3-12-4-13l-1-2h1v-6c-2-7-3-7-7-3m241%203c-3%201-5%201-4%202l-2%203h-1v-2l-1%202v2h1l-2%201v1l-1%201-1%205c0%204%200%204-1%202v3a317%20317%200%20003%2030l-1-2c-1-1-1%200-1%201%200%202%200%203%201%202l4%203c3%203%203%203%208%202%202-1%205-2%206-1l2-1%202-1%209-3c9-3%2010-4%2010-12v-5l-1%204-2%206v3l-8%203c-10%202-10%202-9%200l-3-1h-3l3-1%207-3%204-1-3%203-4%202c0%202%205%200%207-2%201-2%201-2%202-1%202%203%206-6%207-12%200-8%200-8%201-4l1%205v-5l-1-12-2-11-1-3c0%201-3%200-5-2-5-3-14-4-21-1m52%2020a77%2077%200%2000-7%202c-1%200-2%203-1%205%200%202%201%202%205%202l5-1%203-1c5%201%209-1%209-3l-1-4h-13m-69%207c1%203%200%204-1%204-2%200-2%200-1%201%202%202%204%207%202%207l-1%201%201%201c2%200%204%208%203%2010-2%202-6%201-6-1l-1-1%201%207c1%207%202%208%206%206%203-1%204%200%204%205l1%203%201-2-1-7-1-6v-2l-1%202c-1%201-1%201-1-1a336%20336%200%2000-5-27m9%2012l2%208v2l1%201h1v1c1-1%202%200%203%201%203%202%208%202%208%200h1l1-1-6-1c-2%200-2%200-1-1%202%200%202%200-1-2-3-1-3-1-2-2s0-2-2-2h-1l-1-3-3-5v4M1%20144c0%202%201%203%202%203v1H2l-1%201%202%201%203%201H3c-2%200-3%203-1%205l1%201-1%201c-2-2-1%201%203%209l5%207c0-2%200-2%201-1l1%203h-1v4c1%201%201%201%201-1%200-4%203%203%203%208%200%202%200%202-1%200v18l-6%201-5%202c-2%200-2%201-2%2033l1%2033%204-2c4-4%2013-8%2015-7%202%200%205%203%208%206l6%205%201%201%202%204%202%205H1l-1%2057v57h94l-1-14%201-14%201%202c0%202%205%207%206%206l5%203%205%202%201%201%201%201c3%200-11-13-17-18-5-3-6-4-5-6%200-1%202-1%204%201%201%201%203%202%203%200h1v-1c-1-2%200-2%2014-2%2013%200%2015%200%2017%202%201%201%201%201%201-1-1-1-1-2%206-2l8%201h1c1-1%201%200%203%202l2%202h1c0%204%200%205%201%203h1v3h1c1-1%201-1%201%201v1h1v3c2%200%2011-3%2011-5h-1c-2%201-6-4-5-6l-1-1v-2c1-2%203-2%2016-2l13%201%201%201h3l-1%201c-1%200-2%200-1%201l-1%201c-1-1-1%200-1%201h-3c-1-2-2-2-2-1l4%203c3%202%203%202%205%200s3-6%201-6v-1a786%20786%200%200188-1l3%201-5%203-3%202%206-2c3-2%205-3%2010-3%207%200%206%201-7%208l-18%209c-8%205-10%206-10%204h-5l-1%201%202%201c1%200%201%201-1%204l-6%2011a354%20354%200%200062-2c0-3%200-4%201-2s4-1%204-5l2-5%203-5c1-3%202-4%203-3l6%202c6%201%206%202%202%209-2%205-3%206%200%203l2-1-1%203-2%202%202-1%204%201h3c3-2%203-2%205%200%201%201%202%201%203-2s1-4-1-5c-2-2-3-2-3-1%200%202-2%203-2%201l-2-1c-1%201-1%201%200%200l-1-1v-2l1-1%201-1c-1-2%202-4%203-2h1l6%204c2%203%205%205%206%205%201%201-1%202-5%205-4%202-7%205-6%205l23%201%2023-1v-1h-1l-1-1c1-1-21-15-24-15l1%201c1%202%201%202-2%203l-3%201h-2l-4-3-4-3-1-4c0-3%200-3%202-2%203%202%204%200%201-2-3-1-4-4-2-2l1-1-2-2c-1-1%200-1%202-1l3-2%201-1v3c0%202%200%202%201%201%200-2%201-2%201-1h2v-2l-1-2c1-2%2012-2%2012-1h1l7-2c6%200%207%200%2013%204l8%204v16l1-41-1-58-3-3-2-1c1%201%200%202-1%202l-2-3-1-3-1-1v-3l-1%203v7h2v1h1c0%201-3%202-9%202-8%200-12-1-7-2%201%200%201-1-1-3l-2-3-4%202-4%204c1%202%200%202-5%202h-6l8-4c8-5%209-6%208-8-1-1-1-1%201-1h1l1-1c1%201%201%201%201-1l-2-2v2h-3c-2-2-3-2-10%202-6%203-9%204-10%203-2%200-2%200-1%201%202%201-15%2010-18%208h-3l-10%201c-7%200-8%200-7-2v-1l-2%201c1%201-1%202-11%202-8%200-10%200-12-2l-2-2-5%202c-4%202-9%203-10%201v-2l-4%201c-3%203-16%203-15%200h-2c-1%202-3%202-8%202-6%200-7-1-8-4s-1-3-1-1l-1%203v1l-14%201-15-1c0-2%200-3-1-2l-1%202c1%201-1%201-8%201l-9-1h-24c1-1%200-2-1-2l-1%202c1%201%200%201-6%201s-7%200-6-2h-1l-2%202v-2c3-3%204-12%201-12v5l-2%201%201%201%201%201-3%201c-2%200-2%200-1-1v-3h-1l-2%202c-1%202-1%202-2%200-3-2-3-1-2%203l2%203-10%201h-10l5-2%204-3%201-1%203-1%203-2h1c0-2-1-2-2-2-4%201-5%200-3-4%202-7%200-14-5-16l-2-3h-2c-2%200-2%200%200-1%201-1%201-1-3-1-5%200-14%204-12%205v3c-1%204-2%209-1%2012%202%203%203%204%204%203h1v1c-3%200%203%205%207%206h3l-2%202c-2%201-3%201-4-1h-3c-2%200-3-1-2-3l-1-1v-1l-1-1-2-3c-2-5-3-5-2%200%202%206%200%207-2%203l-3-4%203%207%204%207c0%202-13%201-13%200h-1l-3%201c-4%200-4%200-8-8l-11-20c-7-14-7-14-5-16%201-2%201-2%203%201%200%202%201%203%202%203l-3-6-3-9c-1-4-1-4-2-2v-2c0-3%200-4-1-3-1%202-1%202-1%200-1-2-1-3-2-2s-3-5-4-11c0-3%200-3%201-2l1%203%202%202v-7c-1-3-2-5-2-3l-1%202c-1-1-1%200-1%201h-1c-2-3-1%202%202%2012a167%20167%200%200022%2056l6%2011h-4l-4-1-1-3v2l-1%202-1-4v-1h-1c1-2-10-23-11-22l-1-1-2-6-2-6c2%200%201-2-1-5l-2-3-1-2v-4l-2-2v-3l-1-1-2-3-2-1c-1%201-1%201-1-1v-1h-2l1-1%201-1%201-2%201-3c0-2%200-2-2-2-2%201-2%200-7-19l-3-11%202%2011%201%2010-2-5v-4l-1%203c-1%203-1%203-1-1v-5l-1-5c0-3%200-5-1-3%200%202-1%201-2-4-3-10-14-31-14-26H6v-4c-1-2%200-4%203-4l3%202c0%202%200%202%201%201%201-2%201-2%202%201%201%204%201%205%202%202%202-4%200-7-3-7l-8-1c-4%200-5%200-5%202m305%2011l-17%204-4%201%204%2018%205%2017%202-1c2%200%2029-8%2031-10%202-1-5-32-7-33l-14%204m-70%2018c-2%203-3%203-5%203h-2c1%201%201%201-1%201h-2a1047%201047%200%2001-124%2034l-11%203h-5c-5%200-5%200-1%201l4%201h-4l-6-1v-2l-2-1c-2%201-4%200-4-2h-2v-1c2-1%202-3-1-14l-4-11%203%2012%202%2010-2%202-2%202-1-2-1-1%202%206c1%204%201%205-1%203l-1-1%201%203v1l1%201h1c-1%202%204%204%208%204l16-4a3312%203312%200%200186-24%202923%202923%200%200045-13c11-3%2011-3%2013-7l2-4v-2l-2%203m31-1l-1%203c0%202-2%203-2%200l-1%201c-1%201-1%201-1-1-1-2-1-2-1%201l1%203%201%202%203%203c1%201%201%201-1%201-1-1-2%200-2%201l1%201h3c2%201%205-2%204-4h2v-3c0-2%203%201%203%203l1%204c1%201%201%201%201-1v-3l1%203h1c1-1%202-2%201-3-2%200-10-8-10-10l-2-1h-2m58%2019l-3%203h5l-2%201%201%201c3%201%202%203%200%202l-3%201-4%201-2-1%203-1c3-1%203-1%201-1l-4%201-3%203h2c4%200%204%200%205%203l1%203v2l-1%203-1-2v-2l-1-2-1-1v5l-1%203-2-2c0-3-3-7-5-6h-3v1c1%202-1%207-3%206v3l-1%204c-1%201-1%200-1-1l-1-6c-1-2-2-4-1-5l-2-1-1%201%203%206c2%205%202%205-4%205-3%201-4%200-4-1l-4%202c-2%202-4%204-3%205-1-1-2%200-3%201s-1%201-2-4l-2-6v2c1%203-1%207-3%206l-1%202-1-2c-2-12-3-15-6-18l-1-2%203%201%201%201v-1c-1-2-12-3-10-1l2%201c5-3%2011%2016%208%2024-1%204-3%203-3-1%201-1%200-5-1-8l-1-2c1%206%200%2014-1%2015h-1v-2c-1%201-2-5-2-8l-4-7%201%204c2%202%202%203%201%207-1%206-4%207-4%203s-5-14-8-17c-4-3-4-3-2-4h6c-2-2-2-2%200-2h5c2%200%202%200%201-1s-1-1%201-1v-1l-2-2c-1-1-1-1-1%201%200%201-1%202-3%202l-4%201-7%203c-8%203-8%204-3%2010%204%206%207%2014%207%2019s1%205%2010%203l7-2%204-2%2012-5%209-3%207-2a129%20129%200%200034-16l5-2h4l4-1h-7l3-1%204-2-3-1c-2%200-3%200-2-1v-1c-2%200-2%200-1-3s1-3-1-2c-2%200-2%200-1%201v1c-3%200-3-1-2-4%202-1%202-2%200-3-1-1-1-1%201-2%201-1%201-1-1-1-3%200-4%201-6%203m-41%204l-1%202c-1-1-2%200-3%201s-1%201%202%201h6l2%201%202%202%203%201c1-1%201%200%202%201l2%201c1-2%205-2%205%200l2-1%201-2v-1l1-2c0-3-1-4-6-1l-5%201h-6c-1-1%200-1%201-1%202%200%202%200%201-1l-1-2-2-1h-4c-1-1-1-1-2%201m-76%2010l-2%201h-2l-1%201c-2%200-4%203-4%207%200%202%200%202-1%201h-3v-1c1-1%201-1%200%200l-2-1h-1c-1%201%200%205%202%208%201%201%204%200%203-2l1-1c1%200%202%201%201%203v1c1%200%202%201%202%203s0%202-2%201l-2-1c0%203%2010%207%2012%205%201-1%201-1%201%201a1201%201201%200%20002%205l3%202h1l3-2%202-2v-2l1%205v5l2-8%202-4c0-2%200-2-3-1l-3-1-2-2v1l-1%201-4-4c-1-3-7-8-10-7-3%200-4-1-2-4%201-3%208-2%2015%202l5%202-2-2c-4-2-4-3%200-2l2-1v-1c2%200%200-1-3-2-5%200-8-2-8-4l-1-1-1%201m-49%2010c-2%200-3%202-1%202l1%201h-3v-1h-3c-1%202%201%206%202%204l1%201%202%201c3%200%207%204%206%205l2%203c3%204-2%209-6%205-2-1-2-1-1%201%200%201%201%202%203%202%203%200%205%203%204%206-1%202%200%203%203%201l1-6-1-5c-1-6-2-7-3-6l-1-1c1-1%200-2-1-4l-1-3v-1h-1l-2-2c-1-1%200-2%201-3h-2m238%204l-3%204c-2%201-2%201-1%202%203%200%202%201%200%204l-1%202%201%202-1%201c-2%200%200%206%203%209l4%207%201%204v-18c0-18-1-22-3-17m-269%201l-1%204v1c1-2%204%203%203%206h1c1-2%203%200%201%202l1%201h1l2%206c3%203%204%204%208%204%205%200%205%200%204-1s-2-2%200-3v-3l-8-10c-6-8-8-9-12-7m-11%209l-5%203-3%202c-2%200-2%200-1%201l1%202c0%203%200%203%202%203v2c-2%201-1%202%203%203l4%201h-4c-5%200-5%201%200%201l2%201h3l3-2v-1l1-2%201-5c2-2%202-3%201-3v-3c1-4%201-4-3-5l-5%202m204%2011l-27%2011c-2%202-1%204%200%203l1%201%201%203c1%202%202%202%203%201l3-2-1%202-2%201c-2-1-1%202%202%205l2%201%203-1c2%200%202%200%200%201l-2%201c-2-1-1%202%202%205l4%203%2011-5%2026-12c19-8%2019-8%2012-17l-6-5-1%201v-3h-1l-3-5-27%2011M39%20250c2%201%201%202-2%201-3-2-6-1-3%200v3c0%201-1%201-5-2l-4-2%204%203c5%204%2014%2016%2012%2017l1%202h1l4%205%204%205%201%202c1%202%2012%203%2012%201%200-5-10-21-11-19l-3-1c-1-1-1-1%201-1s2-1%200-3v-4l-1-2h-1l-4-2-6-4v1m70%203l-1%201-1%202c-2%202-3%202-3%200l-2%203c-2%204-2%205-1%208l3%203-1-3-1-5%201-2v2c0%204%202%204%202%201l2-5c2-3%203-2%200%202-1%203-1%203%201%207l4%204c7%200%2012-4%2010-8v-3h-1v-1h-1v-1h-1l-1-1h-1c-2%200-2%200-1-1%202-1%202-1-1-2-3-2-4-2-6-1m-84%208c4%202%207%205%207%206%200%202%202%204%204%206l3%205%201%201%203%204%203%203c2%200%201-1-3-8-8-14-16-22-21-22-3%200-3%200%203%205m239%205c-2%202-2%202-1%203v2h1v5c-1%202-2%201-3-1-1-1-1%200-1%202l1%203h-4c-5-1-5-1-6-7%200-6%200-5-4-3s-4%202-1%202l2%203%201%202%201%203v2h-1c0%201%203%203%206%203%205-2%207-2%208-4s1-2%202-1h3v-2l-2-3h2c2%203%208%203%207%200h2l3-2%202-3h-1c-2%202-11%202-11%200h1l1-1-2-2-3-2c-1-1-2-1-3%201m-58%2039c0%202%200%202-3%202l-4%202c-3%205%200%209%206%209h3v-8l-1-8-1%203m-137%206v7h4c5%200%208-4%205-8v-1c3-2-1-6-6-6h-3v8m94%200l1%207%201-3c0-4%202-4%205%200s4%203%202%200-2-3-1-5c4-3%201-7-5-7h-3v8m-33%2019c0%203%200%203-2%203-2-1-6%202-6%205s3%206%206%206h4v-9l-1-8-1%203m-110%207l1%207%201-3c0-2%200-3%202-3l4%203c0%202%202%203%202%203l-1-3c-1-3-2-4%200-4v-7l-5-1h-4v8m136-4c-2%200-3%2015-1%2015l1-2%202-2c3%200%206-3%206-6%200-4-4-6-8-5m114%2036a777%20777%200%2001-43%2024c9-5%2013-6%2013-5%201%201%201%201%202-1l2-2h1c1-2%2014-9%2015-7%201%201%203%200%203-2l7-5c8-5%208-5%206-5l-6%203m-50%202v1h-1c-2%200-2%200-1%201s1%201-1%201l-2%202h-4l-1%202-1%201v1l2%202v1c-1%201-4-2-4-3l-1-1-2%201-1%201h-1l-1%201h-2l-1%201c1%201%201%201%200%200-2%200-3%201-2%203h1c0-2%200-2%201-1v3l1%201v1h2c-1%203%202%202%2012-3%209-5%2016-10%2013-10v-1l-2-2-2-3h-2M97%20386c0%202%200%202-1%201s-1%200-1%205c1%208%201%208%204%208h3l-3-4-3-5c0-2%200-2%208%205%206%205%207%205%203%200-3-2-4-4-3-4l5%204%204%204c2%200%200-1-8-9-7-6-8-7-8-5'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"regular":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAE8klEQVQ4y1VU+U9UVxR+KhWJYhTKYiRUBkRksYLgjhuRWGw0aiKKwtRGw+IolQFhoCCkWNlVBlkaZZFlhn0tDCiy6QgiA1JMrG1NA7Gpf0Njvn73Gk384ebe9955555vOUcJDw9HeXkFTp48CUVRPltLly6FjY0NVq9eDXd3D+zYsQOnTp1GQ0MDpqenodUmyjgrKyssWbIEixYtghIXF4e6unqUlZUhMzMTeXl5KOW5uroaXV1dGHz0CA8ePsTQ0DBqampQWFSElpZWxMbG4fbtYqxcufLzQkymfgwPDzOo5VPiq1eTERERgdDQUPj6+kKlckdTUzPUajWsra2Rn1+AI0eOorm5BQcPhsrKHB0d4ePj8yGh0WhEaWkZIVp/umnx4sUy0MrqC/mckXENxcXF2L9/Pzo6OoigRiIQqLRaLXJycpGamgalqOgmmnl7Q30DvDZskBXY29uTNztW5wd//wCZMCYmFuPj46ioqMDExATevv0HFouFl+hRWFgkqejt7YOi06WisbEJ/aYBhIWFSSFsbW2Z9EsEBW2F53pPSXp4+Cn09w/Azs5OVvWQvBqNjXjx4gVyc/MobDlqSZlSUFAIg8GAzs4uREdHy2oEHx4eHlC5qXh2wqpVqxAYGCTd4OLigqioKJnIYpnG3bv3ELw7mC5wh7e3NxQRJKAI0rOzr0vunJyc4Oy8Bo4OjrAj9I+XlJWV4x4TmEwmzM3NobunB7W1tfDz82MyH4QcCIEi1BWWGB0dozCl0k8igdhFZZ6enlT0CNLS0tDe3o7Xr/+QrhD22kDORTEajUaqLWykGAyNaGtrw9jYY1llSEgI9u7di4SEBOj1eknH4OAgzOanmJ2dxatXr/CYsSUlJdCl6FBVWYXSO6VMegnpGRlQIiLOIoUfnk1O4ubNW/RYPnoIpbu7Gx2dnRgZGZEJ9foSPHliJsQ6FtCOIip740YOjAajfBZqC28qzs7OCAjYIn3Yzg8zMzNM+Cuyf8pGVVU1aug3ATEzMwut7JCsrCyk/5guUU1NTWF0ZJStaEBlZSUy0q9BcXBwwInjJyQnzyef492/7wi9CQ8GHsDUZ5JJxPuhR0OYfDaJhfkFKcgkEV28eBF7goORzM4SMQKhUnjrFoYpSE9fH9o6OmGmafNp0gHCHDOb0ctOGufPs3Mv8ff8PB6TSxFnIZJc0tPU2ipj20hPIwVWSiJOI+/oUSTt3ImUPcHIDD2I815eiKEV0vbtw8+HD3OFIYdKX//2MBIZFx8YiCzGFR4/huxvDiFS5cZ3W5C8exeUcFrkikqFK25ucmlp6CSuq7SEZs0aaNevRyLPP/CbZu1a6NiOsWxN8d/HpaZ3z3I/I+bABc66a9u3I2XTJqQFBOASOyGZEyaJrk/194du82Ykbdwon0VMPBNHsj2juM5xVn7H3ldbf3hW86xErViBy2yxGN6uWbcOcdzj2UbxPF/mnsTkGtevoBMU8ALxPo5dIwo5u2wZ1PxfvXw5znEuil2xtV4GH05jXw6BIL+vodVcRoX+Dhpr69FJo09QsLkpC3rbO2Cm0k+HR5B//QZC9x1A8DZO8GMncCk6Br//9hILf72BYk/buLGSXZTfxdUVZyKjcI/+a+Akec7m/+/9e/z55g2q799HHf0Ww0kdtHUbvH188f35C/iFvX2F81CbmAjL9Az+ByoFkXWUHm8uAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/f4485edfdde8a60673160ba454fafa80/3ddd4/browser.png","srcSet":"/static/f4485edfdde8a60673160ba454fafa80/078a8/browser.png 163w,\n/static/f4485edfdde8a60673160ba454fafa80/e56da/browser.png 327w,\n/static/f4485edfdde8a60673160ba454fafa80/3ddd4/browser.png 653w,\n/static/f4485edfdde8a60673160ba454fafa80/c5cc7/browser.png 980w,\n/static/f4485edfdde8a60673160ba454fafa80/6050d/browser.png 1200w","srcWebp":"/static/f4485edfdde8a60673160ba454fafa80/0acdf/browser.webp","srcSetWebp":"/static/f4485edfdde8a60673160ba454fafa80/ac59e/browser.webp 163w,\n/static/f4485edfdde8a60673160ba454fafa80/7660b/browser.webp 327w,\n/static/f4485edfdde8a60673160ba454fafa80/0acdf/browser.webp 653w,\n/static/f4485edfdde8a60673160ba454fafa80/75470/browser.webp 980w,\n/static/f4485edfdde8a60673160ba454fafa80/9000d/browser.webp 1200w","sizes":"(max-width: 653px) 100vw, 653px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2023v23h3c6%200%208%201%208%203-1%202-1%202%201%200l3-2%203-4%201-4v-4l3-3%202-2c1-2%201-2%202-1h1v3c-1%202-1%202%205%202l9-2a766%20766%200%200171-5A29085%2029085%200%2001304%209c-2%200-3%200-2-2%200-1-1-1-2%201-3%203-3%201%200-4l1-4-2%202c-1%205-5%208-11%208-14%202-13%202-12%200%200-1%200-2-2-2-3%201-4%200-1-3l1-3-4%204c-3%205-3%206-7%206-4%201-6-2-4-3s5-7%205-8L164%200%2065%201l-5%2014-4%2015-2-6c0-2%200-2%201%200s1%202%201-1v-2c1%201%201%201%201-2v-3l1%201v-3l1-6c2-8%202-8-3-8-4%200-4%200-5%204-2%208-3%2010-2%205l1-7-1-2-2%204-2%207-1%203v-3c0-2%200-2-1%200h-1c0-1%200-2-1-1l-1-1%201-1V6l1-1c1%201%202-1%201-3-1-3-2-2-3%204-2%205-2%206%200%208%201%201%201%201-1%203v4c-1-1-2%201-2%204%200%205%200%205%203%205h2l-3%201c-3%200-4%200-3-3%200-3%200-3-1%200-1%204-3%205-3%203%200-1-1-1-1%201-2%201-2%201-1-2l2-9%205-20-2-1-2%202-1%202-1-1-1-1-2%201%201%201c2%200%203%201%202%204l-2%202-1%201%201%201c3%200%203%202%201%207-3%207-5%209-5%205%200-2%200-2-1%200-1%201-1%201-1-1s-2-4-2-1l-1%202-1%202h2c2-1%203%200%201%203-1%202-5-2-5-4l-1-2v1l-1%201c-2-1-2%200-2%201%200%202%200%202%201%201h2a43%2043%200%2001-2%2017l-1%202-1-4v-3l-1%204-2%202c-4%200-5-1-4-5l7-37%201-3H0v23M316%203c-6%206-7%208-5%2011s5%2010%205%2013%201%205%204%206%203%206%200%206c-2%200-2%200-2%206a1632%201632%200%20016%2036l2%208%202%204c0-2%200-2%202-1l2%202%201%201c1-1%203%201%202%202l1%201h1l2%206c5%2010%205%2029%200%2032l-1-1v-2l-2%202-2%201%202-5%202-7-1-3-2-10-3-7v7c0%205%201%206%201%204%201-3%201-3%201%201v8c1%205%200%207-3%206v3c1%201%201%201-2%201-1%200-2%200-1-1l1-2c0-2%200-2-1-1%200%201-1%202-2%201v-1l1-2h-1l-1-2c0-3-2-2-2%201v5l-1%201-6%202c-5%202-3%203%203%201%204-2%205-2%205-1l2%203v1c-2%200-2%200%200%202s4%202%204-1c0-2%201-3%202-3v5c2%200%203%201%206%2012l4%2012c1-2%201-2%203%201%207%209%209%2018%207%2026l-1%207-3-12c-2-11-4-17-4-12l1%205%203%2017%203%2011%201-4%201-3%202-3%201-1%201-1-1-1v-2l1-2%201-1c1%201%201%201%200%200l1-3%201%201c-1%202%200%202%202%200%202-1%202%200%201%205-1%202-1%202-1%200v-3l-2%202-2%204v1l2%2010-1%2013c-1%201%200%202%202%205l5%203h1v-2l1-3%202%204c1%206%202%207%204%206l3-1c3%200%205%200%203-1h-3v-3l-1-7-2-4v5l1%205v2c0%201-5-5-6-9h-1c0%202-2%202-2-1h1c2%201%201-2-1-3-3-3-2-24%201-22a1664%201664%200%20017%202c-4-3-3%200%201%204%206%206%209%2011%2010%2018%201%206%201%206-3%204-2-1-2-1-2%202s0%203%201%201c1-3%201-3%202%201l-1%202-1%202%201%201h1c1%201%200%201-1%201l1%201%202%202-2%201c-2%201-2%201%201%201s1%202-3%202c-1%200-2%200-1%201v1l1%201%201%201v2c-2%202-1%203%201%202h1c0%201%206%202%207%201l-3-1c-2%200-3%200-2-1%200-2%207-1%207%201l-1%201v1h6l-1%202v8h1c1-1%201%200%201%203l-1%203-1%201v5l1%201-1%201c-2-1-1%201%201%202%201%201%201%201%201-1a891%20891%200%20001-76v-5l-6-1c-11-2-19-5-21-7-3-3-4-12-2-13%202-2%202-5%201-4v-4c1-1%202-2%204-1l5-1c3-1%206-1%205%201v1l2-1%201-1c2%200%201%205-1%205v-1h-1c-2%200-2%201-1%202v4l2-1c2-1%202-2%201-2-1-1%200-1%201-1l3-1%201-1c1%200-2%206-5%206l-2%202c1%200%200%202-2%202-1%202-2%202-2%201h-1c-3%204-7%203-8-2l-2-2v3c3%204%2010%209%208%206%200-3%204-3%2011-1%209%202%209%202%209%200l-1-2v-1l-1-3-3-1c0%202-2%203-5%202l2-3c3-2%204-2%204-1%202%204%204%202%204-2%200-5-1-6-3-5l-1-1%202-1c2%200%203-6%203-20l-1-17v-5h-22l11-1c10-1%2011-1%2011-3s0-2-7-2a727%20727%200%2001-41%201l1-2v-1c0-1%201-3%2016-13%2013-11%2016-13%2017-16%200-2%200-2-5%202l-6%204-6%203c-3%202-7%203-10%203-6%201-9%202-7%203h2l4-1c6%200%205%203-5%2010-3%202-4%204-4%205l-1%202-2%205c1%201%200%203-1%204v-3l1-7%201-3c-1-3%201-8%204-10v-1l-4%203c-3%205-4%205-4%201l-4-7-3-6c0-2-1-2-2-2l-1-1%203-1a734%20734%200%200127-6l8-2a560%20560%200%2000-5%203l5%201a325%20325%200%200118-3l6-1%205-1-5-1h-6l4-1c6%200%207-1%207-4%200-2%200-3-2-3l1-2c2-1%203-4%201-2l-1-1c1-1%201-1-1-1l-7%202-3%201v1l-2%202a1888%201888%200%2000-60%209c1-1%200-2-1-3l-1-2v-2c-2-2-3-9-1-9l3%204%201%202c0-2%200-2%2026-6l43-7c5%200%205%201%204-31V0h-82l-2%203m-15%2019l2%201%201%201-3%203a633%20633%200%2000-19%200l2-1h-2c-2%200-3%201-4%204-2%205-2%205-1%2018l3%2013v-1l1-3h5c3%200%204-1%204-3l-1-2-1-1c0-2%203%200%203%203%201%202%202%202%204%202l8-2-2-2a1161%201161%200%20002-8c1%201%201%201%201-1l-1-8-1-6%201-1%202-2%201-1c2-1%201-4-2-4l-3%201m-65%206c-5%200-7%201-9%203-3%203-3%202%201%2029%203%2019%203%2020%206%2023%201%201%203%202%205%201a374%20374%200%200126-6h1l2-3c2-5%201-26-1-28l2%2021c0%202%200%202-1%201v1c0%202%200%202-1%201h-1v1l-1%202v1h-1l-3%202v1l-3%201c-2%200-1-2%202-3v-2h-1c-3%202-3%201-1-1%201-2%202-2%202-1l1%201%201-2h-1l-1-1%201-1h1c0%202%204-2%204-4%201-11-2-25-6-28l-1-1%201-1%201-1v-3h-5v-1l-11-1c-11%201-11%200%201-1l8-1h-6l-12%201m-9%208a131%20131%200%20006%2040h-1l2%202h2c-2-2%200-1%203%201%202%203%203%203%208%202l5-1h-5l-5-1h9l-4-1h-5c-2%200-2%200-1-1h-1c-2%200-2%200-1-1%202-1%200-2-2-1v-1l-1-1c-3%202-7-14-8-36%200-3-1-3-1-1m-52%204A3171%203171%200%200155%2055c-1%200-1%207%201%209l1%207c0%202%200%203%201%202v3l1%202c1-1%201%200%201%202v3c1-1%201%200%201%202v2c1-1%201-1%201%201a558%20558%200%200013%2077c-1%202%200%203%201%207l2%203c1-2%201-1%204%2012l3%2010v1c0%202%202%205%203%205v-1c-2-2%200-2%203-1v2c-3%200%202%202%206%202l-1-1c-6-2-5-3%2020-9a220%20220%200%200023-7%201439%201439%200%200072-19c10-2%2011-2%2011-8%200-3-1-5-2-3-1%201-1%200-1-1l-1-5h1l1%203v-3l-1-11c0-8%200-7%203%207%202%2010%202%204%200-7-1-6-2-12-1-13%200-2%200-3-2-4l-1-7v-3c-1%203-2-4-1-9%200-2%200-3-1-2-1%202-3-13-2-15l-1-2-2-8a305%20305%200%2000-9-40l-4-1-23%203M31%2051c-3%204-4%207-2%2011v-3l1-4%201%203%204%2017a74%2074%200%20013%2021c1-2%201-2%201%201l1%207v2c1-3%201-2%201%202v3c0-3%201-1%204%2011%203%2013%204%2021%202%2015-1-2-1-2-1%200l1%206c2%203%202%204%202%202v-2l1%202%201%206v2c1-2%201-2%201%202v5c0%203%200%204%201%202s1-2%201%202v2l1-2v-16l2-1h1l2-1c1%200%202%200%201-1l-1-2-1%201v-2c0-4%200-4-1-2l-1%201c0-1%200-2-1-1l-1-1v-2l1-1-3-1h-2c1-2%200-5-1-4-1%202-2%200-2-5v-4c1%201%201%200%201-1a161%20161%200%20010-5c-4-4-5-6-6-11l1-6v-6l-1-1h-3l-1-2h3v-2l-1-3%201-4v-2l1%202-1-16-5-13c-1%200%200%206%202%2010l-1%202-1-3-1-2-1-2-1-2-3-2%201-3%202-3-3%204M12%2064l-5%207%202-1%203-2%201-2c2-2%203%200%205%205%201%207%201%2010-1%205l-2-4v3l6%2035%205%2022c13%2050%2013%2054%2013%2046-1-7%200-12%201-10%202%202%201%200-1-9l-2-7%201%206c0%204%200%206-1%205l-1-2-4-9v-8c1%201%201%200%201-1%200-2%201%200%202%203a295%20295%200%2001-4-18c2%205%202%2011%201%2011v3h-2v-7l-3-4c-2-6-3-13-2-14l-1-1v-2l-1-2-1-9v-1l-2-16-1-6%202%206a885%20885%200%2000-4-26c0-1-3%201-5%204m14-3l2%2010c3%2012%204%2022%203%2023l1%202%201%203a22299%2022299%200%20005%2012l1-1c-2-1-2-1-4-11a684%20684%200%2000-9-38m267%200c-10%202-12%203-8%206%204%202%209%204%209%202h4l3-1%202-2c3-1%204%200%203%202%200%201%201%202%203%202%204%200%205-1%203-2v-3c1-3%200-6-2-4v1c2%200%201%203-1%203-2%201-2%200-2-2%201-3-1-3-14-2M6%2094l-5%203c-1-1-1%201-1%209s0%2010%201%209h2l1-2%202-2c2%200%205%206%203%207-1%201-1%201-1-1l-1-2%201%208c1%202%201%202%201-1v-3l1%203v4c-2%201-4-1-4-4%200-2%200-2-1-1v2l-2%202c-3%201-3%203%201%202l2%201-2%201v1l1%203c0%201%200%202%201%201s13-1%2014%201c2%202%201-2-1-6l-1-4v7c-1%200-2-2-1-6l-1-4-1-2v-1c2%201%202%200%202-1%200-4-3-12-4-13l-1-2h1v-6c-2-7-3-7-7-3m241%203c-3%201-5%201-4%202l-2%203h-1v-2l-1%202v2h1l-2%201v1l-1%201-1%205c0%204%200%204-1%202v3a317%20317%200%20003%2030l-1-2c-1-1-1%200-1%201%200%202%200%203%201%202l4%203c3%203%203%203%208%202%202-1%205-2%206-1l2-1%202-1%209-3c9-3%2010-4%2010-12v-5l-1%204-2%206v3l-8%203c-10%202-10%202-9%200l-3-1h-3l3-1%207-3%204-1-3%203-4%202c0%202%205%200%207-2%201-2%201-2%202-1%202%203%206-6%207-12%200-8%200-8%201-4l1%205v-5l-1-12-2-11-1-3c0%201-3%200-5-2-5-3-14-4-21-1m52%2020a77%2077%200%2000-7%202c-1%200-2%203-1%205%200%202%201%202%205%202l5-1%203-1c5%201%209-1%209-3l-1-4h-13m-69%207c1%203%200%204-1%204-2%200-2%200-1%201%202%202%204%207%202%207l-1%201%201%201c2%200%204%208%203%2010-2%202-6%201-6-1l-1-1%201%207c1%207%202%208%206%206%203-1%204%200%204%205l1%203%201-2-1-7-1-6v-2l-1%202c-1%201-1%201-1-1a336%20336%200%2000-5-27m9%2012l2%208v2l1%201h1v1c1-1%202%200%203%201%203%202%208%202%208%200h1l1-1-6-1c-2%200-2%200-1-1%202%200%202%200-1-2-3-1-3-1-2-2s0-2-2-2h-1l-1-3-3-5v4M1%20144c0%202%201%203%202%203v1H2l-1%201%202%201%203%201H3c-2%200-3%203-1%205l1%201-1%201c-2-2-1%201%203%209l5%207c0-2%200-2%201-1l1%203h-1v4c1%201%201%201%201-1%200-4%203%203%203%208%200%202%200%202-1%200v18l-6%201-5%202c-2%200-2%201-2%2033l1%2033%204-2c4-4%2013-8%2015-7%202%200%205%203%208%206l6%205%201%201%202%204%202%205H1l-1%2057v57h94l-1-14%201-14%201%202c0%202%205%207%206%206l5%203%205%202%201%201%201%201c3%200-11-13-17-18-5-3-6-4-5-6%200-1%202-1%204%201%201%201%203%202%203%200h1v-1c-1-2%200-2%2014-2%2013%200%2015%200%2017%202%201%201%201%201%201-1-1-1-1-2%206-2l8%201h1c1-1%201%200%203%202l2%202h1c0%204%200%205%201%203h1v3h1c1-1%201-1%201%201v1h1v3c2%200%2011-3%2011-5h-1c-2%201-6-4-5-6l-1-1v-2c1-2%203-2%2016-2l13%201%201%201h3l-1%201c-1%200-2%200-1%201l-1%201c-1-1-1%200-1%201h-3c-1-2-2-2-2-1l4%203c3%202%203%202%205%200s3-6%201-6v-1a786%20786%200%200188-1l3%201-5%203-3%202%206-2c3-2%205-3%2010-3%207%200%206%201-7%208l-18%209c-8%205-10%206-10%204h-5l-1%201%202%201c1%200%201%201-1%204l-6%2011a354%20354%200%200062-2c0-3%200-4%201-2s4-1%204-5l2-5%203-5c1-3%202-4%203-3l6%202c6%201%206%202%202%209-2%205-3%206%200%203l2-1-1%203-2%202%202-1%204%201h3c3-2%203-2%205%200%201%201%202%201%203-2s1-4-1-5c-2-2-3-2-3-1%200%202-2%203-2%201l-2-1c-1%201-1%201%200%200l-1-1v-2l1-1%201-1c-1-2%202-4%203-2h1l6%204c2%203%205%205%206%205%201%201-1%202-5%205-4%202-7%205-6%205l23%201%2023-1v-1h-1l-1-1c1-1-21-15-24-15l1%201c1%202%201%202-2%203l-3%201h-2l-4-3-4-3-1-4c0-3%200-3%202-2%203%202%204%200%201-2-3-1-4-4-2-2l1-1-2-2c-1-1%200-1%202-1l3-2%201-1v3c0%202%200%202%201%201%200-2%201-2%201-1h2v-2l-1-2c1-2%2012-2%2012-1h1l7-2c6%200%207%200%2013%204l8%204v16l1-41-1-58-3-3-2-1c1%201%200%202-1%202l-2-3-1-3-1-1v-3l-1%203v7h2v1h1c0%201-3%202-9%202-8%200-12-1-7-2%201%200%201-1-1-3l-2-3-4%202-4%204c1%202%200%202-5%202h-6l8-4c8-5%209-6%208-8-1-1-1-1%201-1h1l1-1c1%201%201%201%201-1l-2-2v2h-3c-2-2-3-2-10%202-6%203-9%204-10%203-2%200-2%200-1%201%202%201-15%2010-18%208h-3l-10%201c-7%200-8%200-7-2v-1l-2%201c1%201-1%202-11%202-8%200-10%200-12-2l-2-2-5%202c-4%202-9%203-10%201v-2l-4%201c-3%203-16%203-15%200h-2c-1%202-3%202-8%202-6%200-7-1-8-4s-1-3-1-1l-1%203v1l-14%201-15-1c0-2%200-3-1-2l-1%202c1%201-1%201-8%201l-9-1h-24c1-1%200-2-1-2l-1%202c1%201%200%201-6%201s-7%200-6-2h-1l-2%202v-2c3-3%204-12%201-12v5l-2%201%201%201%201%201-3%201c-2%200-2%200-1-1v-3h-1l-2%202c-1%202-1%202-2%200-3-2-3-1-2%203l2%203-10%201h-10l5-2%204-3%201-1%203-1%203-2h1c0-2-1-2-2-2-4%201-5%200-3-4%202-7%200-14-5-16l-2-3h-2c-2%200-2%200%200-1%201-1%201-1-3-1-5%200-14%204-12%205v3c-1%204-2%209-1%2012%202%203%203%204%204%203h1v1c-3%200%203%205%207%206h3l-2%202c-2%201-3%201-4-1h-3c-2%200-3-1-2-3l-1-1v-1l-1-1-2-3c-2-5-3-5-2%200%202%206%200%207-2%203l-3-4%203%207%204%207c0%202-13%201-13%200h-1l-3%201c-4%200-4%200-8-8l-11-20c-7-14-7-14-5-16%201-2%201-2%203%201%200%202%201%203%202%203l-3-6-3-9c-1-4-1-4-2-2v-2c0-3%200-4-1-3-1%202-1%202-1%200-1-2-1-3-2-2s-3-5-4-11c0-3%200-3%201-2l1%203%202%202v-7c-1-3-2-5-2-3l-1%202c-1-1-1%200-1%201h-1c-2-3-1%202%202%2012a167%20167%200%200022%2056l6%2011h-4l-4-1-1-3v2l-1%202-1-4v-1h-1c1-2-10-23-11-22l-1-1-2-6-2-6c2%200%201-2-1-5l-2-3-1-2v-4l-2-2v-3l-1-1-2-3-2-1c-1%201-1%201-1-1v-1h-2l1-1%201-1%201-2%201-3c0-2%200-2-2-2-2%201-2%200-7-19l-3-11%202%2011%201%2010-2-5v-4l-1%203c-1%203-1%203-1-1v-5l-1-5c0-3%200-5-1-3%200%202-1%201-2-4-3-10-14-31-14-26H6v-4c-1-2%200-4%203-4l3%202c0%202%200%202%201%201%201-2%201-2%202%201%201%204%201%205%202%202%202-4%200-7-3-7l-8-1c-4%200-5%200-5%202m305%2011l-17%204-4%201%204%2018%205%2017%202-1c2%200%2029-8%2031-10%202-1-5-32-7-33l-14%204m-70%2018c-2%203-3%203-5%203h-2c1%201%201%201-1%201h-2a1047%201047%200%2001-124%2034l-11%203h-5c-5%200-5%200-1%201l4%201h-4l-6-1v-2l-2-1c-2%201-4%200-4-2h-2v-1c2-1%202-3-1-14l-4-11%203%2012%202%2010-2%202-2%202-1-2-1-1%202%206c1%204%201%205-1%203l-1-1%201%203v1l1%201h1c-1%202%204%204%208%204l16-4a3312%203312%200%200186-24%202923%202923%200%200045-13c11-3%2011-3%2013-7l2-4v-2l-2%203m31-1l-1%203c0%202-2%203-2%200l-1%201c-1%201-1%201-1-1-1-2-1-2-1%201l1%203%201%202%203%203c1%201%201%201-1%201-1-1-2%200-2%201l1%201h3c2%201%205-2%204-4h2v-3c0-2%203%201%203%203l1%204c1%201%201%201%201-1v-3l1%203h1c1-1%202-2%201-3-2%200-10-8-10-10l-2-1h-2m58%2019l-3%203h5l-2%201%201%201c3%201%202%203%200%202l-3%201-4%201-2-1%203-1c3-1%203-1%201-1l-4%201-3%203h2c4%200%204%200%205%203l1%203v2l-1%203-1-2v-2l-1-2-1-1v5l-1%203-2-2c0-3-3-7-5-6h-3v1c1%202-1%207-3%206v3l-1%204c-1%201-1%200-1-1l-1-6c-1-2-2-4-1-5l-2-1-1%201%203%206c2%205%202%205-4%205-3%201-4%200-4-1l-4%202c-2%202-4%204-3%205-1-1-2%200-3%201s-1%201-2-4l-2-6v2c1%203-1%207-3%206l-1%202-1-2c-2-12-3-15-6-18l-1-2%203%201%201%201v-1c-1-2-12-3-10-1l2%201c5-3%2011%2016%208%2024-1%204-3%203-3-1%201-1%200-5-1-8l-1-2c1%206%200%2014-1%2015h-1v-2c-1%201-2-5-2-8l-4-7%201%204c2%202%202%203%201%207-1%206-4%207-4%203s-5-14-8-17c-4-3-4-3-2-4h6c-2-2-2-2%200-2h5c2%200%202%200%201-1s-1-1%201-1v-1l-2-2c-1-1-1-1-1%201%200%201-1%202-3%202l-4%201-7%203c-8%203-8%204-3%2010%204%206%207%2014%207%2019s1%205%2010%203l7-2%204-2%2012-5%209-3%207-2a129%20129%200%200034-16l5-2h4l4-1h-7l3-1%204-2-3-1c-2%200-3%200-2-1v-1c-2%200-2%200-1-3s1-3-1-2c-2%200-2%200-1%201v1c-3%200-3-1-2-4%202-1%202-2%200-3-1-1-1-1%201-2%201-1%201-1-1-1-3%200-4%201-6%203m-41%204l-1%202c-1-1-2%200-3%201s-1%201%202%201h6l2%201%202%202%203%201c1-1%201%200%202%201l2%201c1-2%205-2%205%200l2-1%201-2v-1l1-2c0-3-1-4-6-1l-5%201h-6c-1-1%200-1%201-1%202%200%202%200%201-1l-1-2-2-1h-4c-1-1-1-1-2%201m-76%2010l-2%201h-2l-1%201c-2%200-4%203-4%207%200%202%200%202-1%201h-3v-1c1-1%201-1%200%200l-2-1h-1c-1%201%200%205%202%208%201%201%204%200%203-2l1-1c1%200%202%201%201%203v1c1%200%202%201%202%203s0%202-2%201l-2-1c0%203%2010%207%2012%205%201-1%201-1%201%201a1201%201201%200%20002%205l3%202h1l3-2%202-2v-2l1%205v5l2-8%202-4c0-2%200-2-3-1l-3-1-2-2v1l-1%201-4-4c-1-3-7-8-10-7-3%200-4-1-2-4%201-3%208-2%2015%202l5%202-2-2c-4-2-4-3%200-2l2-1v-1c2%200%200-1-3-2-5%200-8-2-8-4l-1-1-1%201m-49%2010c-2%200-3%202-1%202l1%201h-3v-1h-3c-1%202%201%206%202%204l1%201%202%201c3%200%207%204%206%205l2%203c3%204-2%209-6%205-2-1-2-1-1%201%200%201%201%202%203%202%203%200%205%203%204%206-1%202%200%203%203%201l1-6-1-5c-1-6-2-7-3-6l-1-1c1-1%200-2-1-4l-1-3v-1h-1l-2-2c-1-1%200-2%201-3h-2m238%204l-3%204c-2%201-2%201-1%202%203%200%202%201%200%204l-1%202%201%202-1%201c-2%200%200%206%203%209l4%207%201%204v-18c0-18-1-22-3-17m-269%201l-1%204v1c1-2%204%203%203%206h1c1-2%203%200%201%202l1%201h1l2%206c3%203%204%204%208%204%205%200%205%200%204-1s-2-2%200-3v-3l-8-10c-6-8-8-9-12-7m-11%209l-5%203-3%202c-2%200-2%200-1%201l1%202c0%203%200%203%202%203v2c-2%201-1%202%203%203l4%201h-4c-5%200-5%201%200%201l2%201h3l3-2v-1l1-2%201-5c2-2%202-3%201-3v-3c1-4%201-4-3-5l-5%202m204%2011l-27%2011c-2%202-1%204%200%203l1%201%201%203c1%202%202%202%203%201l3-2-1%202-2%201c-2-1-1%202%202%205l2%201%203-1c2%200%202%200%200%201l-2%201c-2-1-1%202%202%205l4%203%2011-5%2026-12c19-8%2019-8%2012-17l-6-5-1%201v-3h-1l-3-5-27%2011M39%20250c2%201%201%202-2%201-3-2-6-1-3%200v3c0%201-1%201-5-2l-4-2%204%203c5%204%2014%2016%2012%2017l1%202h1l4%205%204%205%201%202c1%202%2012%203%2012%201%200-5-10-21-11-19l-3-1c-1-1-1-1%201-1s2-1%200-3v-4l-1-2h-1l-4-2-6-4v1m70%203l-1%201-1%202c-2%202-3%202-3%200l-2%203c-2%204-2%205-1%208l3%203-1-3-1-5%201-2v2c0%204%202%204%202%201l2-5c2-3%203-2%200%202-1%203-1%203%201%207l4%204c7%200%2012-4%2010-8v-3h-1v-1h-1v-1h-1l-1-1h-1c-2%200-2%200-1-1%202-1%202-1-1-2-3-2-4-2-6-1m-84%208c4%202%207%205%207%206%200%202%202%204%204%206l3%205%201%201%203%204%203%203c2%200%201-1-3-8-8-14-16-22-21-22-3%200-3%200%203%205m239%205c-2%202-2%202-1%203v2h1v5c-1%202-2%201-3-1-1-1-1%200-1%202l1%203h-4c-5-1-5-1-6-7%200-6%200-5-4-3s-4%202-1%202l2%203%201%202%201%203v2h-1c0%201%203%203%206%203%205-2%207-2%208-4s1-2%202-1h3v-2l-2-3h2c2%203%208%203%207%200h2l3-2%202-3h-1c-2%202-11%202-11%200h1l1-1-2-2-3-2c-1-1-2-1-3%201m-58%2039c0%202%200%202-3%202l-4%202c-3%205%200%209%206%209h3v-8l-1-8-1%203m-137%206v7h4c5%200%208-4%205-8v-1c3-2-1-6-6-6h-3v8m94%200l1%207%201-3c0-4%202-4%205%200s4%203%202%200-2-3-1-5c4-3%201-7-5-7h-3v8m-33%2019c0%203%200%203-2%203-2-1-6%202-6%205s3%206%206%206h4v-9l-1-8-1%203m-110%207l1%207%201-3c0-2%200-3%202-3l4%203c0%202%202%203%202%203l-1-3c-1-3-2-4%200-4v-7l-5-1h-4v8m136-4c-2%200-3%2015-1%2015l1-2%202-2c3%200%206-3%206-6%200-4-4-6-8-5m114%2036a777%20777%200%2001-43%2024c9-5%2013-6%2013-5%201%201%201%201%202-1l2-2h1c1-2%2014-9%2015-7%201%201%203%200%203-2l7-5c8-5%208-5%206-5l-6%203m-50%202v1h-1c-2%200-2%200-1%201s1%201-1%201l-2%202h-4l-1%202-1%201v1l2%202v1c-1%201-4-2-4-3l-1-1-2%201-1%201h-1l-1%201h-2l-1%201c1%201%201%201%200%200-2%200-3%201-2%203h1c0-2%200-2%201-1v3l1%201v1h2c-1%203%202%202%2012-3%209-5%2016-10%2013-10v-1l-2-2-2-3h-2M97%20386c0%202%200%202-1%201s-1%200-1%205c1%208%201%208%204%208h3l-3-4-3-5c0-2%200-2%208%205%206%205%207%205%203%200-3-2-4-4-3-4l5%204%204%204c2%200%200-1-8-9-7-6-8-7-8-5'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"narrow":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAAE8klEQVQ4y1VU+U9UVxR+KhWJYhTKYiRUBkRksYLgjhuRWGw0aiKKwtRGw+IolQFhoCCkWNlVBlkaZZFlhn0tDCiy6QgiA1JMrG1NA7Gpf0Njvn73Gk384ebe9955555vOUcJDw9HeXkFTp48CUVRPltLly6FjY0NVq9eDXd3D+zYsQOnTp1GQ0MDpqenodUmyjgrKyssWbIEixYtghIXF4e6unqUlZUhMzMTeXl5KOW5uroaXV1dGHz0CA8ePsTQ0DBqampQWFSElpZWxMbG4fbtYqxcufLzQkymfgwPDzOo5VPiq1eTERERgdDQUPj6+kKlckdTUzPUajWsra2Rn1+AI0eOorm5BQcPhsrKHB0d4ePj8yGh0WhEaWkZIVp/umnx4sUy0MrqC/mckXENxcXF2L9/Pzo6OoigRiIQqLRaLXJycpGamgalqOgmmnl7Q30DvDZskBXY29uTNztW5wd//wCZMCYmFuPj46ioqMDExATevv0HFouFl+hRWFgkqejt7YOi06WisbEJ/aYBhIWFSSFsbW2Z9EsEBW2F53pPSXp4+Cn09w/Azs5OVvWQvBqNjXjx4gVyc/MobDlqSZlSUFAIg8GAzs4uREdHy2oEHx4eHlC5qXh2wqpVqxAYGCTd4OLigqioKJnIYpnG3bv3ELw7mC5wh7e3NxQRJKAI0rOzr0vunJyc4Oy8Bo4OjrAj9I+XlJWV4x4TmEwmzM3NobunB7W1tfDz82MyH4QcCIEi1BWWGB0dozCl0k8igdhFZZ6enlT0CNLS0tDe3o7Xr/+QrhD22kDORTEajUaqLWykGAyNaGtrw9jYY1llSEgI9u7di4SEBOj1eknH4OAgzOanmJ2dxatXr/CYsSUlJdCl6FBVWYXSO6VMegnpGRlQIiLOIoUfnk1O4ubNW/RYPnoIpbu7Gx2dnRgZGZEJ9foSPHliJsQ6FtCOIip740YOjAajfBZqC28qzs7OCAjYIn3Yzg8zMzNM+Cuyf8pGVVU1aug3ATEzMwut7JCsrCyk/5guUU1NTWF0ZJStaEBlZSUy0q9BcXBwwInjJyQnzyef492/7wi9CQ8GHsDUZ5JJxPuhR0OYfDaJhfkFKcgkEV28eBF7goORzM4SMQKhUnjrFoYpSE9fH9o6OmGmafNp0gHCHDOb0ctOGufPs3Mv8ff8PB6TSxFnIZJc0tPU2ipj20hPIwVWSiJOI+/oUSTt3ImUPcHIDD2I815eiKEV0vbtw8+HD3OFIYdKX//2MBIZFx8YiCzGFR4/huxvDiFS5cZ3W5C8exeUcFrkikqFK25ucmlp6CSuq7SEZs0aaNevRyLPP/CbZu1a6NiOsWxN8d/HpaZ3z3I/I+bABc66a9u3I2XTJqQFBOASOyGZEyaJrk/194du82Ykbdwon0VMPBNHsj2juM5xVn7H3ldbf3hW86xErViBy2yxGN6uWbcOcdzj2UbxPF/mnsTkGtevoBMU8ALxPo5dIwo5u2wZ1PxfvXw5znEuil2xtV4GH05jXw6BIL+vodVcRoX+Dhpr69FJo09QsLkpC3rbO2Cm0k+HR5B//QZC9x1A8DZO8GMncCk6Br//9hILf72BYk/buLGSXZTfxdUVZyKjcI/+a+Akec7m/+/9e/z55g2q799HHf0Ww0kdtHUbvH188f35C/iFvX2F81CbmAjL9Az+ByoFkXWUHm8uAAAAAElFTkSuQmCC","aspectRatio":1,"src":"/static/f4485edfdde8a60673160ba454fafa80/502b1/browser.png","srcSet":"/static/f4485edfdde8a60673160ba454fafa80/f2e6d/browser.png 114w,\n/static/f4485edfdde8a60673160ba454fafa80/4ddba/browser.png 229w,\n/static/f4485edfdde8a60673160ba454fafa80/502b1/browser.png 457w,\n/static/f4485edfdde8a60673160ba454fafa80/7ddc2/browser.png 686w,\n/static/f4485edfdde8a60673160ba454fafa80/435bf/browser.png 914w,\n/static/f4485edfdde8a60673160ba454fafa80/6050d/browser.png 1200w","srcWebp":"/static/f4485edfdde8a60673160ba454fafa80/15384/browser.webp","srcSetWebp":"/static/f4485edfdde8a60673160ba454fafa80/31fce/browser.webp 114w,\n/static/f4485edfdde8a60673160ba454fafa80/e3e25/browser.webp 229w,\n/static/f4485edfdde8a60673160ba454fafa80/15384/browser.webp 457w,\n/static/f4485edfdde8a60673160ba454fafa80/0258d/browser.webp 686w,\n/static/f4485edfdde8a60673160ba454fafa80/64ea2/browser.webp 914w,\n/static/f4485edfdde8a60673160ba454fafa80/9000d/browser.webp 1200w","sizes":"(max-width: 457px) 100vw, 457px","tracedSVG":"data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='400'%20height='400'%20viewBox='0%200%20400%20400'%20preserveAspectRatio='none'%3e%3cpath%20d='M0%2023v23h3c6%200%208%201%208%203-1%202-1%202%201%200l3-2%203-4%201-4v-4l3-3%202-2c1-2%201-2%202-1h1v3c-1%202-1%202%205%202l9-2a766%20766%200%200171-5A29085%2029085%200%2001304%209c-2%200-3%200-2-2%200-1-1-1-2%201-3%203-3%201%200-4l1-4-2%202c-1%205-5%208-11%208-14%202-13%202-12%200%200-1%200-2-2-2-3%201-4%200-1-3l1-3-4%204c-3%205-3%206-7%206-4%201-6-2-4-3s5-7%205-8L164%200%2065%201l-5%2014-4%2015-2-6c0-2%200-2%201%200s1%202%201-1v-2c1%201%201%201%201-2v-3l1%201v-3l1-6c2-8%202-8-3-8-4%200-4%200-5%204-2%208-3%2010-2%205l1-7-1-2-2%204-2%207-1%203v-3c0-2%200-2-1%200h-1c0-1%200-2-1-1l-1-1%201-1V6l1-1c1%201%202-1%201-3-1-3-2-2-3%204-2%205-2%206%200%208%201%201%201%201-1%203v4c-1-1-2%201-2%204%200%205%200%205%203%205h2l-3%201c-3%200-4%200-3-3%200-3%200-3-1%200-1%204-3%205-3%203%200-1-1-1-1%201-2%201-2%201-1-2l2-9%205-20-2-1-2%202-1%202-1-1-1-1-2%201%201%201c2%200%203%201%202%204l-2%202-1%201%201%201c3%200%203%202%201%207-3%207-5%209-5%205%200-2%200-2-1%200-1%201-1%201-1-1s-2-4-2-1l-1%202-1%202h2c2-1%203%200%201%203-1%202-5-2-5-4l-1-2v1l-1%201c-2-1-2%200-2%201%200%202%200%202%201%201h2a43%2043%200%2001-2%2017l-1%202-1-4v-3l-1%204-2%202c-4%200-5-1-4-5l7-37%201-3H0v23M316%203c-6%206-7%208-5%2011s5%2010%205%2013%201%205%204%206%203%206%200%206c-2%200-2%200-2%206a1632%201632%200%20016%2036l2%208%202%204c0-2%200-2%202-1l2%202%201%201c1-1%203%201%202%202l1%201h1l2%206c5%2010%205%2029%200%2032l-1-1v-2l-2%202-2%201%202-5%202-7-1-3-2-10-3-7v7c0%205%201%206%201%204%201-3%201-3%201%201v8c1%205%200%207-3%206v3c1%201%201%201-2%201-1%200-2%200-1-1l1-2c0-2%200-2-1-1%200%201-1%202-2%201v-1l1-2h-1l-1-2c0-3-2-2-2%201v5l-1%201-6%202c-5%202-3%203%203%201%204-2%205-2%205-1l2%203v1c-2%200-2%200%200%202s4%202%204-1c0-2%201-3%202-3v5c2%200%203%201%206%2012l4%2012c1-2%201-2%203%201%207%209%209%2018%207%2026l-1%207-3-12c-2-11-4-17-4-12l1%205%203%2017%203%2011%201-4%201-3%202-3%201-1%201-1-1-1v-2l1-2%201-1c1%201%201%201%200%200l1-3%201%201c-1%202%200%202%202%200%202-1%202%200%201%205-1%202-1%202-1%200v-3l-2%202-2%204v1l2%2010-1%2013c-1%201%200%202%202%205l5%203h1v-2l1-3%202%204c1%206%202%207%204%206l3-1c3%200%205%200%203-1h-3v-3l-1-7-2-4v5l1%205v2c0%201-5-5-6-9h-1c0%202-2%202-2-1h1c2%201%201-2-1-3-3-3-2-24%201-22a1664%201664%200%20017%202c-4-3-3%200%201%204%206%206%209%2011%2010%2018%201%206%201%206-3%204-2-1-2-1-2%202s0%203%201%201c1-3%201-3%202%201l-1%202-1%202%201%201h1c1%201%200%201-1%201l1%201%202%202-2%201c-2%201-2%201%201%201s1%202-3%202c-1%200-2%200-1%201v1l1%201%201%201v2c-2%202-1%203%201%202h1c0%201%206%202%207%201l-3-1c-2%200-3%200-2-1%200-2%207-1%207%201l-1%201v1h6l-1%202v8h1c1-1%201%200%201%203l-1%203-1%201v5l1%201-1%201c-2-1-1%201%201%202%201%201%201%201%201-1a891%20891%200%20001-76v-5l-6-1c-11-2-19-5-21-7-3-3-4-12-2-13%202-2%202-5%201-4v-4c1-1%202-2%204-1l5-1c3-1%206-1%205%201v1l2-1%201-1c2%200%201%205-1%205v-1h-1c-2%200-2%201-1%202v4l2-1c2-1%202-2%201-2-1-1%200-1%201-1l3-1%201-1c1%200-2%206-5%206l-2%202c1%200%200%202-2%202-1%202-2%202-2%201h-1c-3%204-7%203-8-2l-2-2v3c3%204%2010%209%208%206%200-3%204-3%2011-1%209%202%209%202%209%200l-1-2v-1l-1-3-3-1c0%202-2%203-5%202l2-3c3-2%204-2%204-1%202%204%204%202%204-2%200-5-1-6-3-5l-1-1%202-1c2%200%203-6%203-20l-1-17v-5h-22l11-1c10-1%2011-1%2011-3s0-2-7-2a727%20727%200%2001-41%201l1-2v-1c0-1%201-3%2016-13%2013-11%2016-13%2017-16%200-2%200-2-5%202l-6%204-6%203c-3%202-7%203-10%203-6%201-9%202-7%203h2l4-1c6%200%205%203-5%2010-3%202-4%204-4%205l-1%202-2%205c1%201%200%203-1%204v-3l1-7%201-3c-1-3%201-8%204-10v-1l-4%203c-3%205-4%205-4%201l-4-7-3-6c0-2-1-2-2-2l-1-1%203-1a734%20734%200%200127-6l8-2a560%20560%200%2000-5%203l5%201a325%20325%200%200118-3l6-1%205-1-5-1h-6l4-1c6%200%207-1%207-4%200-2%200-3-2-3l1-2c2-1%203-4%201-2l-1-1c1-1%201-1-1-1l-7%202-3%201v1l-2%202a1888%201888%200%2000-60%209c1-1%200-2-1-3l-1-2v-2c-2-2-3-9-1-9l3%204%201%202c0-2%200-2%2026-6l43-7c5%200%205%201%204-31V0h-82l-2%203m-15%2019l2%201%201%201-3%203a633%20633%200%2000-19%200l2-1h-2c-2%200-3%201-4%204-2%205-2%205-1%2018l3%2013v-1l1-3h5c3%200%204-1%204-3l-1-2-1-1c0-2%203%200%203%203%201%202%202%202%204%202l8-2-2-2a1161%201161%200%20002-8c1%201%201%201%201-1l-1-8-1-6%201-1%202-2%201-1c2-1%201-4-2-4l-3%201m-65%206c-5%200-7%201-9%203-3%203-3%202%201%2029%203%2019%203%2020%206%2023%201%201%203%202%205%201a374%20374%200%200126-6h1l2-3c2-5%201-26-1-28l2%2021c0%202%200%202-1%201v1c0%202%200%202-1%201h-1v1l-1%202v1h-1l-3%202v1l-3%201c-2%200-1-2%202-3v-2h-1c-3%202-3%201-1-1%201-2%202-2%202-1l1%201%201-2h-1l-1-1%201-1h1c0%202%204-2%204-4%201-11-2-25-6-28l-1-1%201-1%201-1v-3h-5v-1l-11-1c-11%201-11%200%201-1l8-1h-6l-12%201m-9%208a131%20131%200%20006%2040h-1l2%202h2c-2-2%200-1%203%201%202%203%203%203%208%202l5-1h-5l-5-1h9l-4-1h-5c-2%200-2%200-1-1h-1c-2%200-2%200-1-1%202-1%200-2-2-1v-1l-1-1c-3%202-7-14-8-36%200-3-1-3-1-1m-52%204A3171%203171%200%200155%2055c-1%200-1%207%201%209l1%207c0%202%200%203%201%202v3l1%202c1-1%201%200%201%202v3c1-1%201%200%201%202v2c1-1%201-1%201%201a558%20558%200%200013%2077c-1%202%200%203%201%207l2%203c1-2%201-1%204%2012l3%2010v1c0%202%202%205%203%205v-1c-2-2%200-2%203-1v2c-3%200%202%202%206%202l-1-1c-6-2-5-3%2020-9a220%20220%200%200023-7%201439%201439%200%200072-19c10-2%2011-2%2011-8%200-3-1-5-2-3-1%201-1%200-1-1l-1-5h1l1%203v-3l-1-11c0-8%200-7%203%207%202%2010%202%204%200-7-1-6-2-12-1-13%200-2%200-3-2-4l-1-7v-3c-1%203-2-4-1-9%200-2%200-3-1-2-1%202-3-13-2-15l-1-2-2-8a305%20305%200%2000-9-40l-4-1-23%203M31%2051c-3%204-4%207-2%2011v-3l1-4%201%203%204%2017a74%2074%200%20013%2021c1-2%201-2%201%201l1%207v2c1-3%201-2%201%202v3c0-3%201-1%204%2011%203%2013%204%2021%202%2015-1-2-1-2-1%200l1%206c2%203%202%204%202%202v-2l1%202%201%206v2c1-2%201-2%201%202v5c0%203%200%204%201%202s1-2%201%202v2l1-2v-16l2-1h1l2-1c1%200%202%200%201-1l-1-2-1%201v-2c0-4%200-4-1-2l-1%201c0-1%200-2-1-1l-1-1v-2l1-1-3-1h-2c1-2%200-5-1-4-1%202-2%200-2-5v-4c1%201%201%200%201-1a161%20161%200%20010-5c-4-4-5-6-6-11l1-6v-6l-1-1h-3l-1-2h3v-2l-1-3%201-4v-2l1%202-1-16-5-13c-1%200%200%206%202%2010l-1%202-1-3-1-2-1-2-1-2-3-2%201-3%202-3-3%204M12%2064l-5%207%202-1%203-2%201-2c2-2%203%200%205%205%201%207%201%2010-1%205l-2-4v3l6%2035%205%2022c13%2050%2013%2054%2013%2046-1-7%200-12%201-10%202%202%201%200-1-9l-2-7%201%206c0%204%200%206-1%205l-1-2-4-9v-8c1%201%201%200%201-1%200-2%201%200%202%203a295%20295%200%2001-4-18c2%205%202%2011%201%2011v3h-2v-7l-3-4c-2-6-3-13-2-14l-1-1v-2l-1-2-1-9v-1l-2-16-1-6%202%206a885%20885%200%2000-4-26c0-1-3%201-5%204m14-3l2%2010c3%2012%204%2022%203%2023l1%202%201%203a22299%2022299%200%20005%2012l1-1c-2-1-2-1-4-11a684%20684%200%2000-9-38m267%200c-10%202-12%203-8%206%204%202%209%204%209%202h4l3-1%202-2c3-1%204%200%203%202%200%201%201%202%203%202%204%200%205-1%203-2v-3c1-3%200-6-2-4v1c2%200%201%203-1%203-2%201-2%200-2-2%201-3-1-3-14-2M6%2094l-5%203c-1-1-1%201-1%209s0%2010%201%209h2l1-2%202-2c2%200%205%206%203%207-1%201-1%201-1-1l-1-2%201%208c1%202%201%202%201-1v-3l1%203v4c-2%201-4-1-4-4%200-2%200-2-1-1v2l-2%202c-3%201-3%203%201%202l2%201-2%201v1l1%203c0%201%200%202%201%201s13-1%2014%201c2%202%201-2-1-6l-1-4v7c-1%200-2-2-1-6l-1-4-1-2v-1c2%201%202%200%202-1%200-4-3-12-4-13l-1-2h1v-6c-2-7-3-7-7-3m241%203c-3%201-5%201-4%202l-2%203h-1v-2l-1%202v2h1l-2%201v1l-1%201-1%205c0%204%200%204-1%202v3a317%20317%200%20003%2030l-1-2c-1-1-1%200-1%201%200%202%200%203%201%202l4%203c3%203%203%203%208%202%202-1%205-2%206-1l2-1%202-1%209-3c9-3%2010-4%2010-12v-5l-1%204-2%206v3l-8%203c-10%202-10%202-9%200l-3-1h-3l3-1%207-3%204-1-3%203-4%202c0%202%205%200%207-2%201-2%201-2%202-1%202%203%206-6%207-12%200-8%200-8%201-4l1%205v-5l-1-12-2-11-1-3c0%201-3%200-5-2-5-3-14-4-21-1m52%2020a77%2077%200%2000-7%202c-1%200-2%203-1%205%200%202%201%202%205%202l5-1%203-1c5%201%209-1%209-3l-1-4h-13m-69%207c1%203%200%204-1%204-2%200-2%200-1%201%202%202%204%207%202%207l-1%201%201%201c2%200%204%208%203%2010-2%202-6%201-6-1l-1-1%201%207c1%207%202%208%206%206%203-1%204%200%204%205l1%203%201-2-1-7-1-6v-2l-1%202c-1%201-1%201-1-1a336%20336%200%2000-5-27m9%2012l2%208v2l1%201h1v1c1-1%202%200%203%201%203%202%208%202%208%200h1l1-1-6-1c-2%200-2%200-1-1%202%200%202%200-1-2-3-1-3-1-2-2s0-2-2-2h-1l-1-3-3-5v4M1%20144c0%202%201%203%202%203v1H2l-1%201%202%201%203%201H3c-2%200-3%203-1%205l1%201-1%201c-2-2-1%201%203%209l5%207c0-2%200-2%201-1l1%203h-1v4c1%201%201%201%201-1%200-4%203%203%203%208%200%202%200%202-1%200v18l-6%201-5%202c-2%200-2%201-2%2033l1%2033%204-2c4-4%2013-8%2015-7%202%200%205%203%208%206l6%205%201%201%202%204%202%205H1l-1%2057v57h94l-1-14%201-14%201%202c0%202%205%207%206%206l5%203%205%202%201%201%201%201c3%200-11-13-17-18-5-3-6-4-5-6%200-1%202-1%204%201%201%201%203%202%203%200h1v-1c-1-2%200-2%2014-2%2013%200%2015%200%2017%202%201%201%201%201%201-1-1-1-1-2%206-2l8%201h1c1-1%201%200%203%202l2%202h1c0%204%200%205%201%203h1v3h1c1-1%201-1%201%201v1h1v3c2%200%2011-3%2011-5h-1c-2%201-6-4-5-6l-1-1v-2c1-2%203-2%2016-2l13%201%201%201h3l-1%201c-1%200-2%200-1%201l-1%201c-1-1-1%200-1%201h-3c-1-2-2-2-2-1l4%203c3%202%203%202%205%200s3-6%201-6v-1a786%20786%200%200188-1l3%201-5%203-3%202%206-2c3-2%205-3%2010-3%207%200%206%201-7%208l-18%209c-8%205-10%206-10%204h-5l-1%201%202%201c1%200%201%201-1%204l-6%2011a354%20354%200%200062-2c0-3%200-4%201-2s4-1%204-5l2-5%203-5c1-3%202-4%203-3l6%202c6%201%206%202%202%209-2%205-3%206%200%203l2-1-1%203-2%202%202-1%204%201h3c3-2%203-2%205%200%201%201%202%201%203-2s1-4-1-5c-2-2-3-2-3-1%200%202-2%203-2%201l-2-1c-1%201-1%201%200%200l-1-1v-2l1-1%201-1c-1-2%202-4%203-2h1l6%204c2%203%205%205%206%205%201%201-1%202-5%205-4%202-7%205-6%205l23%201%2023-1v-1h-1l-1-1c1-1-21-15-24-15l1%201c1%202%201%202-2%203l-3%201h-2l-4-3-4-3-1-4c0-3%200-3%202-2%203%202%204%200%201-2-3-1-4-4-2-2l1-1-2-2c-1-1%200-1%202-1l3-2%201-1v3c0%202%200%202%201%201%200-2%201-2%201-1h2v-2l-1-2c1-2%2012-2%2012-1h1l7-2c6%200%207%200%2013%204l8%204v16l1-41-1-58-3-3-2-1c1%201%200%202-1%202l-2-3-1-3-1-1v-3l-1%203v7h2v1h1c0%201-3%202-9%202-8%200-12-1-7-2%201%200%201-1-1-3l-2-3-4%202-4%204c1%202%200%202-5%202h-6l8-4c8-5%209-6%208-8-1-1-1-1%201-1h1l1-1c1%201%201%201%201-1l-2-2v2h-3c-2-2-3-2-10%202-6%203-9%204-10%203-2%200-2%200-1%201%202%201-15%2010-18%208h-3l-10%201c-7%200-8%200-7-2v-1l-2%201c1%201-1%202-11%202-8%200-10%200-12-2l-2-2-5%202c-4%202-9%203-10%201v-2l-4%201c-3%203-16%203-15%200h-2c-1%202-3%202-8%202-6%200-7-1-8-4s-1-3-1-1l-1%203v1l-14%201-15-1c0-2%200-3-1-2l-1%202c1%201-1%201-8%201l-9-1h-24c1-1%200-2-1-2l-1%202c1%201%200%201-6%201s-7%200-6-2h-1l-2%202v-2c3-3%204-12%201-12v5l-2%201%201%201%201%201-3%201c-2%200-2%200-1-1v-3h-1l-2%202c-1%202-1%202-2%200-3-2-3-1-2%203l2%203-10%201h-10l5-2%204-3%201-1%203-1%203-2h1c0-2-1-2-2-2-4%201-5%200-3-4%202-7%200-14-5-16l-2-3h-2c-2%200-2%200%200-1%201-1%201-1-3-1-5%200-14%204-12%205v3c-1%204-2%209-1%2012%202%203%203%204%204%203h1v1c-3%200%203%205%207%206h3l-2%202c-2%201-3%201-4-1h-3c-2%200-3-1-2-3l-1-1v-1l-1-1-2-3c-2-5-3-5-2%200%202%206%200%207-2%203l-3-4%203%207%204%207c0%202-13%201-13%200h-1l-3%201c-4%200-4%200-8-8l-11-20c-7-14-7-14-5-16%201-2%201-2%203%201%200%202%201%203%202%203l-3-6-3-9c-1-4-1-4-2-2v-2c0-3%200-4-1-3-1%202-1%202-1%200-1-2-1-3-2-2s-3-5-4-11c0-3%200-3%201-2l1%203%202%202v-7c-1-3-2-5-2-3l-1%202c-1-1-1%200-1%201h-1c-2-3-1%202%202%2012a167%20167%200%200022%2056l6%2011h-4l-4-1-1-3v2l-1%202-1-4v-1h-1c1-2-10-23-11-22l-1-1-2-6-2-6c2%200%201-2-1-5l-2-3-1-2v-4l-2-2v-3l-1-1-2-3-2-1c-1%201-1%201-1-1v-1h-2l1-1%201-1%201-2%201-3c0-2%200-2-2-2-2%201-2%200-7-19l-3-11%202%2011%201%2010-2-5v-4l-1%203c-1%203-1%203-1-1v-5l-1-5c0-3%200-5-1-3%200%202-1%201-2-4-3-10-14-31-14-26H6v-4c-1-2%200-4%203-4l3%202c0%202%200%202%201%201%201-2%201-2%202%201%201%204%201%205%202%202%202-4%200-7-3-7l-8-1c-4%200-5%200-5%202m305%2011l-17%204-4%201%204%2018%205%2017%202-1c2%200%2029-8%2031-10%202-1-5-32-7-33l-14%204m-70%2018c-2%203-3%203-5%203h-2c1%201%201%201-1%201h-2a1047%201047%200%2001-124%2034l-11%203h-5c-5%200-5%200-1%201l4%201h-4l-6-1v-2l-2-1c-2%201-4%200-4-2h-2v-1c2-1%202-3-1-14l-4-11%203%2012%202%2010-2%202-2%202-1-2-1-1%202%206c1%204%201%205-1%203l-1-1%201%203v1l1%201h1c-1%202%204%204%208%204l16-4a3312%203312%200%200186-24%202923%202923%200%200045-13c11-3%2011-3%2013-7l2-4v-2l-2%203m31-1l-1%203c0%202-2%203-2%200l-1%201c-1%201-1%201-1-1-1-2-1-2-1%201l1%203%201%202%203%203c1%201%201%201-1%201-1-1-2%200-2%201l1%201h3c2%201%205-2%204-4h2v-3c0-2%203%201%203%203l1%204c1%201%201%201%201-1v-3l1%203h1c1-1%202-2%201-3-2%200-10-8-10-10l-2-1h-2m58%2019l-3%203h5l-2%201%201%201c3%201%202%203%200%202l-3%201-4%201-2-1%203-1c3-1%203-1%201-1l-4%201-3%203h2c4%200%204%200%205%203l1%203v2l-1%203-1-2v-2l-1-2-1-1v5l-1%203-2-2c0-3-3-7-5-6h-3v1c1%202-1%207-3%206v3l-1%204c-1%201-1%200-1-1l-1-6c-1-2-2-4-1-5l-2-1-1%201%203%206c2%205%202%205-4%205-3%201-4%200-4-1l-4%202c-2%202-4%204-3%205-1-1-2%200-3%201s-1%201-2-4l-2-6v2c1%203-1%207-3%206l-1%202-1-2c-2-12-3-15-6-18l-1-2%203%201%201%201v-1c-1-2-12-3-10-1l2%201c5-3%2011%2016%208%2024-1%204-3%203-3-1%201-1%200-5-1-8l-1-2c1%206%200%2014-1%2015h-1v-2c-1%201-2-5-2-8l-4-7%201%204c2%202%202%203%201%207-1%206-4%207-4%203s-5-14-8-17c-4-3-4-3-2-4h6c-2-2-2-2%200-2h5c2%200%202%200%201-1s-1-1%201-1v-1l-2-2c-1-1-1-1-1%201%200%201-1%202-3%202l-4%201-7%203c-8%203-8%204-3%2010%204%206%207%2014%207%2019s1%205%2010%203l7-2%204-2%2012-5%209-3%207-2a129%20129%200%200034-16l5-2h4l4-1h-7l3-1%204-2-3-1c-2%200-3%200-2-1v-1c-2%200-2%200-1-3s1-3-1-2c-2%200-2%200-1%201v1c-3%200-3-1-2-4%202-1%202-2%200-3-1-1-1-1%201-2%201-1%201-1-1-1-3%200-4%201-6%203m-41%204l-1%202c-1-1-2%200-3%201s-1%201%202%201h6l2%201%202%202%203%201c1-1%201%200%202%201l2%201c1-2%205-2%205%200l2-1%201-2v-1l1-2c0-3-1-4-6-1l-5%201h-6c-1-1%200-1%201-1%202%200%202%200%201-1l-1-2-2-1h-4c-1-1-1-1-2%201m-76%2010l-2%201h-2l-1%201c-2%200-4%203-4%207%200%202%200%202-1%201h-3v-1c1-1%201-1%200%200l-2-1h-1c-1%201%200%205%202%208%201%201%204%200%203-2l1-1c1%200%202%201%201%203v1c1%200%202%201%202%203s0%202-2%201l-2-1c0%203%2010%207%2012%205%201-1%201-1%201%201a1201%201201%200%20002%205l3%202h1l3-2%202-2v-2l1%205v5l2-8%202-4c0-2%200-2-3-1l-3-1-2-2v1l-1%201-4-4c-1-3-7-8-10-7-3%200-4-1-2-4%201-3%208-2%2015%202l5%202-2-2c-4-2-4-3%200-2l2-1v-1c2%200%200-1-3-2-5%200-8-2-8-4l-1-1-1%201m-49%2010c-2%200-3%202-1%202l1%201h-3v-1h-3c-1%202%201%206%202%204l1%201%202%201c3%200%207%204%206%205l2%203c3%204-2%209-6%205-2-1-2-1-1%201%200%201%201%202%203%202%203%200%205%203%204%206-1%202%200%203%203%201l1-6-1-5c-1-6-2-7-3-6l-1-1c1-1%200-2-1-4l-1-3v-1h-1l-2-2c-1-1%200-2%201-3h-2m238%204l-3%204c-2%201-2%201-1%202%203%200%202%201%200%204l-1%202%201%202-1%201c-2%200%200%206%203%209l4%207%201%204v-18c0-18-1-22-3-17m-269%201l-1%204v1c1-2%204%203%203%206h1c1-2%203%200%201%202l1%201h1l2%206c3%203%204%204%208%204%205%200%205%200%204-1s-2-2%200-3v-3l-8-10c-6-8-8-9-12-7m-11%209l-5%203-3%202c-2%200-2%200-1%201l1%202c0%203%200%203%202%203v2c-2%201-1%202%203%203l4%201h-4c-5%200-5%201%200%201l2%201h3l3-2v-1l1-2%201-5c2-2%202-3%201-3v-3c1-4%201-4-3-5l-5%202m204%2011l-27%2011c-2%202-1%204%200%203l1%201%201%203c1%202%202%202%203%201l3-2-1%202-2%201c-2-1-1%202%202%205l2%201%203-1c2%200%202%200%200%201l-2%201c-2-1-1%202%202%205l4%203%2011-5%2026-12c19-8%2019-8%2012-17l-6-5-1%201v-3h-1l-3-5-27%2011M39%20250c2%201%201%202-2%201-3-2-6-1-3%200v3c0%201-1%201-5-2l-4-2%204%203c5%204%2014%2016%2012%2017l1%202h1l4%205%204%205%201%202c1%202%2012%203%2012%201%200-5-10-21-11-19l-3-1c-1-1-1-1%201-1s2-1%200-3v-4l-1-2h-1l-4-2-6-4v1m70%203l-1%201-1%202c-2%202-3%202-3%200l-2%203c-2%204-2%205-1%208l3%203-1-3-1-5%201-2v2c0%204%202%204%202%201l2-5c2-3%203-2%200%202-1%203-1%203%201%207l4%204c7%200%2012-4%2010-8v-3h-1v-1h-1v-1h-1l-1-1h-1c-2%200-2%200-1-1%202-1%202-1-1-2-3-2-4-2-6-1m-84%208c4%202%207%205%207%206%200%202%202%204%204%206l3%205%201%201%203%204%203%203c2%200%201-1-3-8-8-14-16-22-21-22-3%200-3%200%203%205m239%205c-2%202-2%202-1%203v2h1v5c-1%202-2%201-3-1-1-1-1%200-1%202l1%203h-4c-5-1-5-1-6-7%200-6%200-5-4-3s-4%202-1%202l2%203%201%202%201%203v2h-1c0%201%203%203%206%203%205-2%207-2%208-4s1-2%202-1h3v-2l-2-3h2c2%203%208%203%207%200h2l3-2%202-3h-1c-2%202-11%202-11%200h1l1-1-2-2-3-2c-1-1-2-1-3%201m-58%2039c0%202%200%202-3%202l-4%202c-3%205%200%209%206%209h3v-8l-1-8-1%203m-137%206v7h4c5%200%208-4%205-8v-1c3-2-1-6-6-6h-3v8m94%200l1%207%201-3c0-4%202-4%205%200s4%203%202%200-2-3-1-5c4-3%201-7-5-7h-3v8m-33%2019c0%203%200%203-2%203-2-1-6%202-6%205s3%206%206%206h4v-9l-1-8-1%203m-110%207l1%207%201-3c0-2%200-3%202-3l4%203c0%202%202%203%202%203l-1-3c-1-3-2-4%200-4v-7l-5-1h-4v8m136-4c-2%200-3%2015-1%2015l1-2%202-2c3%200%206-3%206-6%200-4-4-6-8-5m114%2036a777%20777%200%2001-43%2024c9-5%2013-6%2013-5%201%201%201%201%202-1l2-2h1c1-2%2014-9%2015-7%201%201%203%200%203-2l7-5c8-5%208-5%206-5l-6%203m-50%202v1h-1c-2%200-2%200-1%201s1%201-1%201l-2%202h-4l-1%202-1%201v1l2%202v1c-1%201-4-2-4-3l-1-1-2%201-1%201h-1l-1%201h-2l-1%201c1%201%201%201%200%200-2%200-3%201-2%203h1c0-2%200-2%201-1v3l1%201v1h2c-1%203%202%202%2012-3%209-5%2016-10%2013-10v-1l-2-2-2-3h-2M97%20386c0%202%200%202-1%201s-1%200-1%205c1%208%201%208%204%208h3l-3-4-3-5c0-2%200-2%208%205%206%205%207%205%203%200-3-2-4-4-3-4l5%204%204%204c2%200%200-1-8-9-7-6-8-7-8-5'%20fill='%23fafafa'%20fill-rule='evenodd'/%3e%3c/svg%3e"},"seo":{"src":"/static/f4485edfdde8a60673160ba454fafa80/6050d/browser.png"}}}]}},"staticQueryHashes":["1609575157","2068910035","2361467917","2361467917","3838421970","500183989","5650841"]}