Files
website/docs/getting-started/overview.html
github-actions[bot] 100c4713cf deploy: 99736b7944
2022-02-15 03:13:43 +00:00

17 lines
23 KiB
HTML

<!doctype html>
<html lang="en" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Docusaurus v2.0.0-beta.3">
<title data-react-helmet="true">Overview | Stardust XR</title><meta data-react-helmet="true" property="og:url" content="https://stardustxr.org/docs/getting-started/overview"><meta data-react-helmet="true" name="docusaurus_locale" content="en"><meta data-react-helmet="true" name="docusaurus_version" content="current"><meta data-react-helmet="true" name="docusaurus_tag" content="docs-default-current"><meta data-react-helmet="true" property="og:title" content="Overview | Stardust XR"><meta data-react-helmet="true" name="description" content="Description"><meta data-react-helmet="true" property="og:description" content="Description"><link data-react-helmet="true" rel="shortcut icon" href="/img/favicon.ico"><link data-react-helmet="true" rel="canonical" href="https://stardustxr.org/docs/getting-started/overview"><link data-react-helmet="true" rel="alternate" href="https://stardustxr.org/docs/getting-started/overview" hreflang="en"><link data-react-helmet="true" rel="alternate" href="https://stardustxr.org/docs/getting-started/overview" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.49daaa62.css">
<link rel="preload" href="/assets/js/runtime~main.3d825730.js" as="script">
<link rel="preload" href="/assets/js/main.33f96ac5.js" as="script">
</head>
<body>
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"dark")}()</script><div id="__docusaurus">
<div><a href="#" class="skipToContent_OuoZ">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><img src="/img/icon.webp" alt="Stardust XR logo, a yellow astroid with smaller white astroids around it" class="themedImage_TMUO themedImage--light_4Vu1 navbar__logo"><img src="/img/icon.webp" alt="Stardust XR logo, a yellow astroid with smaller white astroids around it" class="themedImage_TMUO themedImage--dark_uzRr navbar__logo"><b class="navbar__title">Stardust XR</b></a><a class="navbar__item navbar__link" href="/roadmap">Roadmap</a><a aria-current="page" class="navbar__item navbar__link navbar__link--active navbar__link--active" href="/docs/getting-started/overview">Docs</a></div><div class="navbar__items navbar__items--right"><a href="https://twitter.com/stardustxr" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><span>Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a><a href="https://discord.gg/qwxuwRrbP5" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><span>Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a><a href="https://matrix.to/#/#stardustxr:matrix.org" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><span>Matrix<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a><a href="https://github.com/StardustXR" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link"><span>GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div><div class="navbar-sidebar"><div class="navbar-sidebar__brand"><a class="navbar__brand" href="/"><img src="/img/icon.webp" alt="Stardust XR logo, a yellow astroid with smaller white astroids around it" class="themedImage_TMUO themedImage--light_4Vu1 navbar__logo"><img src="/img/icon.webp" alt="Stardust XR logo, a yellow astroid with smaller white astroids around it" class="themedImage_TMUO themedImage--dark_uzRr navbar__logo"><b class="navbar__title">Stardust XR</b></a></div><div class="navbar-sidebar__items"><div class="menu"><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" href="/roadmap">Roadmap</a></li><li class="menu__list-item"><a aria-current="page" class="menu__link navbar__link--active navbar__link--active" href="/docs/getting-started/overview">Docs</a></li><li class="menu__list-item"><a href="https://twitter.com/stardustxr" target="_blank" rel="noopener noreferrer" class="menu__link"><span>Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li><li class="menu__list-item"><a href="https://discord.gg/qwxuwRrbP5" target="_blank" rel="noopener noreferrer" class="menu__link"><span>Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li><li class="menu__list-item"><a href="https://matrix.to/#/#stardustxr:matrix.org" target="_blank" rel="noopener noreferrer" class="menu__link"><span>Matrix<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li><li class="menu__list-item"><a href="https://github.com/StardustXR" target="_blank" rel="noopener noreferrer" class="menu__link"><span>GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li></ul></div></div></div></nav><div class="main-wrapper docs-wrapper doc-page"><div class="docPage_lDyR"><aside class="docSidebarContainer_0YBq"><div class="sidebar_a3j0"><nav class="menu menu--responsive thin-scrollbar menu_cyFh menuWithAnnouncementBar_+O1J" aria-label="Sidebar navigation"><button aria-label="Open menu" aria-haspopup="true" class="button button--secondary button--sm menu__button" type="button"><svg class="sidebarMenuIcon_iZzd" width="24" height="24" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><ul class="menu__list"><li class="menu__list-item"><a class="menu__link menu__link--sublist menu__link--active" href="#">Getting Started</a><ul class="menu__list"><li class="menu__list-item"><a aria-current="page" class="menu__link menu__link--active active" tabindex="0" href="/docs/getting-started/overview">Overview</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/install">Installation</a></li><li class="menu__list-item"><a class="menu__link" tabindex="0" href="/docs/getting-started/run">Use</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#">Protocol</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/protocol">Protocol</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#" tabindex="-1">Client</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/client/initial-connection">Initial Client Connection</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#" tabindex="-1">Server</a><ul class="menu__list"><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#" tabindex="-1">Node Types</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/Node">Node</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/Spatial">Spatial</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/Model">Model</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#" tabindex="-1">Fields</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/field/BoxField">BoxField</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/field/CylinderField">CylinderField</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/field/Field">Field</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/field/SphereField">SphereField</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#" tabindex="-1">Input</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/input/InputHandler">InputHandler</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/input/InputMethod">InputMethod</a></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#" tabindex="-1">Input Method Types</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/input/inputtypes/HandInput">HandInput</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/input/inputtypes/PointerInput">PointerInput</a></li></ul></li></ul></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/types/Zone">Zone</a></li></ul></li><li class="menu__list-item menu__list-item--collapsed"><a class="menu__link menu__link--sublist" href="#" tabindex="-1">Server Objects</a><ul class="menu__list"><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/objects/drawable">/drawable</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/objects/field">/field</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/objects/hmd">/hmd</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/objects/input">/input</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/objects/root">/</a></li><li class="menu__list-item"><a class="menu__link" tabindex="-1" href="/docs/stardust-protocol/server/objects/spatial">/spatial</a></li></ul></li></ul></li></ul></li></ul></nav></div></aside><main class="docMainContainer_r8cw"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_zHA2"><div class="docItemContainer_oiyr"><article><div class="markdown"><header><h1 class="h1Heading_dC7a">Overview</h1></header><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="description"></a>Description<a class="hash-link" href="#description" title="Direct link to heading">#</a></h2><p>Stardust XR (informally known as Stardust) is an XR display server for Linux-based distros. Unlike display servers of the past that were run on bounded 2D screens, Stardust has to break convention in order to account for unbounded 3D space in any potential virtual or real environment.</p><p>Put simply, Stardust is a system UI framework where multiple different clients (programs that connect to Stardust directly) can create objects for the user to interact with. The user can choose to use the objects that work best for their current scenario, and default setups can easily be created so users start out with all the essentials.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="server"></a>Server<a class="hash-link" href="#server" title="Direct link to heading">#</a></h2><p>The server is what renders all the meshes of each client, takes in input from input methods, and spits out input to input handlers according to the SUIS (Spatial Universal Interaction System). As well, the server is going to be part Wayland compositor and OpenXR runtime so all 2D and XR applications can be used together at once (if the hardware allows). It is the glue of Stardust, allowing any number of clients and apps to work in harmony while allowing the user full control in an intuitive way.</p><p>As new technologies come out, keeping the same server and trying to progressively upgrade it may lead to bloat and issues, so the protocol is designed to make creating new servers possible without too much hassle. Old interfaces can be deprecated without breaking the overall system, and new interfaces can be added if needed due to the object-oriented design. The design is highly inspired by game engines, however the reference server is made in StereoKit due to it being more optimal.</p><h3><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="reference-server"></a>Reference Server<a class="hash-link" href="#reference-server" title="Direct link to heading">#</a></h3><p>Stardust has a reference server, but unlike other display servers this reference server is just as functional as any other Stardust server would be, because all the functionality is implemented in the clients. The server is just the glue.</p><p>The reference server uses StereoKit as its backend for many reasons:</p><ul><li>Much more lightweight than any other framework/other engine<ul><li>It was originally designed to run AR apps on HoloLens, and now it works on Quest</li><li>It&#x27;s able to render thousands of objects on a HoloLens without breaking a sweat</li></ul></li><li>Does not include unnecessary features that slow down performance<ul><li>Physics and UI are not needed for Stardust, but those do not actively run and can always have an option to not be compiled at all.</li></ul></li><li>Uses C-style C++ meaning not bytecode or interpreted (however has a C# API that is not used by Stardust)</li><li>Uses immediate mode rendering meaning the logic is many times easier to implement</li><li>Exposes its rendering insides whenever needed<ul><li>Very needed for Wayland when it needs to display EGL Wayland surface textures on meshes</li><li>Overriding the depthbuffer per-pixel in fragment shader is useful for XR depth compositing</li></ul></li><li>Is constantly getting new updates faster than most engines<ul><li>World semantics for OpenXR was implemented ~1 week after the official OpenXR extension release</li></ul></li><li>Is optimized to load resources JIT<ul><li>Many game engines are best at caching their assets, but this is not practical in a display server</li></ul></li><li>Uses OpenXR as its backend out of the box</li></ul><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="ipc"></a>IPC<a class="hash-link" href="#ipc" title="Direct link to heading">#</a></h2><p>The Stardust XR IPC uses Unix domain sockets for initial connection and establishes anonymous pipes for communication.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="protocol"></a><a href="/docs/stardust-protocol/protocol">Protocol</a><a class="hash-link" href="#protocol" title="Direct link to heading">#</a></h2><p>The Stardust XR protocol is object-oriented, depending on a scenegraph on the server end and scenegraph or functionally equivalent structure on the client end. This allows easier implementation of the protocol while still remaining fast and reliable.</p><h2><a aria-hidden="true" tabindex="-1" class="anchor enhancedAnchor_WiXH" id="clients"></a>Clients<a class="hash-link" href="#clients" title="Direct link to heading">#</a></h2><p>The clients tell the server what models to draw, where they would like to accept input in, etc. Stardust clients are much more suited to widgets or user interfaces to 2D/XR apps. However, if a more fully featured application works better in Stardust it can do that too.</p></div><footer class="row docusaurus-mt-lg"><div class="col"><a href="https://github.com/StardustXR/website/edit/main/docs/getting-started/overview.md" target="_blank" rel="noreferrer noopener"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_mS5F" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_wj+Z"></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><div class="pagination-nav__item"></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/docs/getting-started/install"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Installation »</div></a></div></nav></div></div><div class="col col--3"><div class="tableOfContents_vrFS thin-scrollbar"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#description" class="table-of-contents__link">Description</a></li><li><a href="#server" class="table-of-contents__link">Server</a><ul><li><a href="#reference-server" class="table-of-contents__link">Reference Server</a></li></ul></li><li><a href="#ipc" class="table-of-contents__link">IPC</a></li><li><a href="#protocol" class="table-of-contents__link">Protocol</a></li><li><a href="#clients" class="table-of-contents__link">Clients</a></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/roadmap">Roadmap</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/getting-started/overview">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/stardust-protocol/protocol">Protocol</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items"><li class="footer__item"><a href="https://discord.gg/qwxuwRrbP5" target="_blank" rel="noopener noreferrer" class="footer__link-item"><span>Discord<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li><li class="footer__item"><a href="https://matrix.to/#/#stardustxr:matrix.org" target="_blank" rel="noopener noreferrer" class="footer__link-item"><span>Matrix<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li><li class="footer__item"><a href="https://twitter.com/stardustxr" target="_blank" rel="noopener noreferrer" class="footer__link-item"><span>Twitter<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li><li class="footer__item"><a href="https://github.com/StardustXR" target="_blank" rel="noopener noreferrer" class="footer__link-item"><span>Stardust XR (GitHub)<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li></ul></div><div class="col footer__col"><div class="footer__title">Code</div><ul class="footer__items"><li class="footer__item"><a href="https://github.com/StardustXR/stardust-xr" target="_blank" rel="noopener noreferrer" class="footer__link-item"><span>Stardust XR (Server)<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li><li class="footer__item"><a href="https://github.com/StardustXR/libstardustxr" target="_blank" rel="noopener noreferrer" class="footer__link-item"><span>libstardustxr (includes Fusion)<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li><li class="footer__item"><a href="https://github.com/StardustXR/stardust-client-tests" target="_blank" rel="noopener noreferrer" class="footer__link-item"><span>Stardust Client Tests<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_wgqa"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></span></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2022 Nova King</div></div></div></footer></div>
<script src="/assets/js/runtime~main.3d825730.js"></script>
<script src="/assets/js/main.33f96ac5.js"></script>
</body>
</html>