From 8ebbc634405c67e70f3371691d814b317b960472 Mon Sep 17 00:00:00 2001 From: gabek Date: Sun, 29 Jan 2023 03:30:16 +0000 Subject: [PATCH] Bundle embedded web app --- static/web/404.html | 4 ++-- static/web/404/index.html | 4 ++-- .../static/chunks/pages/embed/video-1d13106092c28bfe.js | 6 ++++++ ...719b38032ab0471.js.map => video-1d13106092c28bfe.js.map} | 2 +- .../static/chunks/pages/embed/video-d719b38032ab0471.js | 6 ------ .../web/_next/static/chunks/pages/index-bdafcb99f7642b3d.js | 2 ++ .../_next/static/chunks/pages/index-bdafcb99f7642b3d.js.map | 1 + .../web/_next/static/chunks/pages/index-f3356902e89fd801.js | 2 -- .../_next/static/chunks/pages/index-f3356902e89fd801.js.map | 1 - ...pack-d15bbfacc7e1b816.js => webpack-6a854de85966e9b5.js} | 4 ++-- ...bbfacc7e1b816.js.map => webpack-6a854de85966e9b5.js.map} | 2 +- static/web/_next/static/css/0fefb6c196e09999.css | 2 -- static/web/_next/static/css/0fefb6c196e09999.css.map | 1 - static/web/_next/static/css/1df159939d7a0181.css | 2 ++ static/web/_next/static/css/1df159939d7a0181.css.map | 1 + static/web/_next/static/css/46cdd3001cf6ba89.css | 2 -- static/web/_next/static/css/46cdd3001cf6ba89.css.map | 1 - static/web/_next/static/css/5403c47e72c755b5.css | 2 ++ .../{6137966142b1f6fd.css.map => 5403c47e72c755b5.css.map} | 2 +- static/web/_next/static/css/549d0e94116c35bb.css | 2 ++ static/web/_next/static/css/549d0e94116c35bb.css.map | 1 + static/web/_next/static/css/6137966142b1f6fd.css | 2 -- static/web/_next/static/css/7639a8cfc7d2f5c7.css | 2 -- static/web/_next/static/css/7639a8cfc7d2f5c7.css.map | 1 - static/web/_next/static/css/7bd6db4742156fee.css | 2 ++ static/web/_next/static/css/7bd6db4742156fee.css.map | 1 + .../_buildManifest.js | 2 +- .../_ssgManifest.js | 0 static/web/admin/access-tokens/index.html | 2 +- static/web/admin/actions/index.html | 2 +- static/web/admin/chat/emojis/index.html | 2 +- static/web/admin/chat/messages/index.html | 2 +- static/web/admin/chat/users/index.html | 2 +- static/web/admin/config-chat/index.html | 2 +- static/web/admin/config-federation/index.html | 2 +- static/web/admin/config-notify/index.html | 2 +- static/web/admin/config-social-items/index.html | 2 +- static/web/admin/config-video/index.html | 2 +- static/web/admin/config/general/index.html | 2 +- static/web/admin/config/server/index.html | 2 +- static/web/admin/federation/actions/index.html | 2 +- static/web/admin/federation/followers/index.html | 2 +- static/web/admin/hardware-info/index.html | 2 +- static/web/admin/help/index.html | 2 +- static/web/admin/index.html | 2 +- static/web/admin/logs/index.html | 2 +- static/web/admin/stream-health/index.html | 2 +- static/web/admin/upgrade/index.html | 2 +- static/web/admin/viewer-info/index.html | 2 +- static/web/admin/webhooks/index.html | 2 +- static/web/embed/chat/readonly/index.html | 4 ++-- static/web/embed/chat/readwrite/index.html | 4 ++-- static/web/embed/video/index.html | 4 ++-- static/web/index.html | 6 +++--- 54 files changed, 61 insertions(+), 61 deletions(-) create mode 100644 static/web/_next/static/chunks/pages/embed/video-1d13106092c28bfe.js rename static/web/_next/static/chunks/pages/embed/{video-d719b38032ab0471.js.map => video-1d13106092c28bfe.js.map} (52%) delete mode 100644 static/web/_next/static/chunks/pages/embed/video-d719b38032ab0471.js create mode 100644 static/web/_next/static/chunks/pages/index-bdafcb99f7642b3d.js create mode 100644 static/web/_next/static/chunks/pages/index-bdafcb99f7642b3d.js.map delete mode 100644 static/web/_next/static/chunks/pages/index-f3356902e89fd801.js delete mode 100644 static/web/_next/static/chunks/pages/index-f3356902e89fd801.js.map rename static/web/_next/static/chunks/{webpack-d15bbfacc7e1b816.js => webpack-6a854de85966e9b5.js} (96%) rename static/web/_next/static/chunks/{webpack-d15bbfacc7e1b816.js.map => webpack-6a854de85966e9b5.js.map} (98%) delete mode 100644 static/web/_next/static/css/0fefb6c196e09999.css delete mode 100644 static/web/_next/static/css/0fefb6c196e09999.css.map create mode 100644 static/web/_next/static/css/1df159939d7a0181.css create mode 100644 static/web/_next/static/css/1df159939d7a0181.css.map delete mode 100644 static/web/_next/static/css/46cdd3001cf6ba89.css delete mode 100644 static/web/_next/static/css/46cdd3001cf6ba89.css.map create mode 100644 static/web/_next/static/css/5403c47e72c755b5.css rename static/web/_next/static/css/{6137966142b1f6fd.css.map => 5403c47e72c755b5.css.map} (50%) create mode 100644 static/web/_next/static/css/549d0e94116c35bb.css create mode 100644 static/web/_next/static/css/549d0e94116c35bb.css.map delete mode 100644 static/web/_next/static/css/6137966142b1f6fd.css delete mode 100644 static/web/_next/static/css/7639a8cfc7d2f5c7.css delete mode 100644 static/web/_next/static/css/7639a8cfc7d2f5c7.css.map create mode 100644 static/web/_next/static/css/7bd6db4742156fee.css create mode 100644 static/web/_next/static/css/7bd6db4742156fee.css.map rename static/web/_next/static/{qPVJ53aXKCvSYd7FZbJ-8 => wDQmF72pswrbNrrJJD56T}/_buildManifest.js (93%) rename static/web/_next/static/{qPVJ53aXKCvSYd7FZbJ-8 => wDQmF72pswrbNrrJJD56T}/_ssgManifest.js (100%) diff --git a/static/web/404.html b/static/web/404.html index ee60aa642..7ae4e1069 100644 --- a/static/web/404.html +++ b/static/web/404.html @@ -1,6 +1,6 @@ 404: This page could not be found

404

This page could not be found.

+ }

404

This page could not be found.

diff --git a/static/web/404/index.html b/static/web/404/index.html index ee60aa642..7ae4e1069 100644 --- a/static/web/404/index.html +++ b/static/web/404/index.html @@ -1,6 +1,6 @@ 404: This page could not be found

404

This page could not be found.

+ }

404

This page could not be found.

diff --git a/static/web/_next/static/chunks/pages/embed/video-1d13106092c28bfe.js b/static/web/_next/static/chunks/pages/embed/video-1d13106092c28bfe.js new file mode 100644 index 000000000..8d1a5e711 --- /dev/null +++ b/static/web/_next/static/chunks/pages/embed/video-1d13106092c28bfe.js @@ -0,0 +1,6 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3126,5202],{53124:function(e,t,n){"use strict";n.d(t,{C:function(){return a},E_:function(){return i},PG:function(){return s}});var r=n(87462),o=n(67294),i=o.createContext({getPrefixCls:function(e,t){return t||(e?"ant-".concat(e):"ant")}}),a=i.Consumer;function s(e){return function(t){var n=t.constructor;return n&&n.displayName||t.name,function(n){return o.createElement(a,null,function(i){var a=e.prefixCls,s=(0,i.getPrefixCls)(a,n.prefixCls);return o.createElement(t,(0,r.Z)({},i,n,{prefixCls:s}))})}}}},94184:function(e,t){var n;/*! + Copyright (c) 2018 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;tPromise.all([n.e(2074),n.e(2138),n.e(9095)]).then(n.t.bind(n,69095,23)),{loadableGenerated:{webpack:()=>[69095]},ssr:!1}),f=e=>{let t,{streamName:n,customText:a,lastLive:s,notificationsEnabled:c,fediverseAccount:f,showsHeader:d=!0,onNotifyClick:p,onFollowClick:h}=e;return t=a||(!a&&c&&f?(0,r.jsxs)("span",{children:["This stream is offline. You can"," ",(0,r.jsx)("span",{role:"link",tabIndex:0,className:u().actionLink,onClick:p,children:"be notified"})," ","the next time ",n," goes live or"," ",(0,r.jsx)("span",{role:"link",tabIndex:0,className:u().actionLink,onClick:h,children:"follow"})," ",f," on the Fediverse."]}):!a&&c?(0,r.jsxs)("span",{children:["This stream is offline."," ",(0,r.jsx)("span",{role:"link",tabIndex:0,className:u().actionLink,onClick:p,children:"Be notified"})," ","the next time ",n," goes live."]}):!a&&f?(0,r.jsxs)("span",{children:["This stream is offline."," ",(0,r.jsx)("span",{role:"link",tabIndex:0,className:u().actionLink,onClick:h,children:"Follow"})," ",f," on the Fediverse to see the next time ",n," goes live."]}):"This stream is offline. Check back soon!"),(0,r.jsx)("div",{id:"offline-banner",className:u().outerContainer,children:(0,r.jsxs)("div",{className:u().innerContainer,children:[d&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:u().header,children:n}),(0,r.jsx)(o.Z,{className:u().separator})]}),(0,r.jsx)("div",{className:u().bodyText,children:t}),s&&(0,r.jsxs)("div",{className:u().lastLiveDate,children:[(0,r.jsx)(l,{className:u().clockIcon}),"Last live ".concat((0,i.Z)(new Date(s))," ago.")]})]})})}},69357:function(e,t,n){"use strict";n.d(t,{X:function(){return d}});var r=n(85893),o=n(45938),i=n(68730),a=n(67294),s=n(5152),c=n.n(s),u=n(37970),l=n.n(u);let f=c()(()=>Promise.all([n.e(2074),n.e(2138),n.e(1965)]).then(n.t.bind(n,41965,23)),{loadableGenerated:{webpack:()=>[41965]},ssr:!1}),d=e=>{let t,{online:n,lastConnectTime:s,lastDisconnectTime:c,viewerCount:u}=e,[,d]=(0,a.useState)(new Date);(0,a.useEffect)(()=>{let e=setInterval(()=>d(new Date),1e3);return()=>{clearInterval(e)}},[]);let p="";if(n&&s){let e=function(e){let t=(0,i.Z)({start:e,end:new Date});return t.days>1?"".concat(t.days," days ").concat(t.hours," hours"):t.hours>=1?"".concat(t.hours," hours ").concat(t.minutes," minutes"):"".concat(t.minutes," minutes ").concat(t.seconds," seconds")}(new Date(s));p=n?"Live for ".concat(e):"Offline",t=u>0&&(0,r.jsxs)("div",{className:l().right,children:[(0,r.jsx)("span",{children:(0,r.jsx)(f,{})}),(0,r.jsx)("span",{children:" ".concat(u)})]})}else!n&&(p="Offline",c&&(t="Last live ".concat((0,o.Z)(new Date(c))," ago.")));return(0,r.jsxs)("div",{className:l().statusbar,role:"status",children:[(0,r.jsx)("div",{children:p}),(0,r.jsx)("div",{children:t})]})};d.defaultProps={lastConnectTime:null,lastDisconnectTime:null}},54564:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.suspense=function(){let e=Error(r.NEXT_DYNAMIC_NO_SSR_CODE);throw e.digest=r.NEXT_DYNAMIC_NO_SSR_CODE,e},t.NoSSR=function(e){let{children:t}=e;return t},(0,n(92648).Z)(n(67294));var r=n(92983)},37645:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let n=i.default,o={loading:e=>{let{error:t,isLoading:n,pastDelay:r}=e;return null}};e instanceof Promise?o.loader=()=>e:"function"==typeof e?o.loader=e:"object"==typeof e&&(o=r({},o,e)),o=r({},o,t);let s=o.loader,c=()=>null!=s?s().then(a):Promise.resolve(a(()=>null));return o.loadableGenerated&&delete(o=r({},o,o.loadableGenerated)).loadableGenerated,"boolean"!=typeof o.ssr||o.ssr||(delete o.webpack,delete o.modules),n(r({},o,{loader:c}))};var r=n(6495).Z,o=n(92648).Z;o(n(67294));var i=o(n(14588));function a(e){return{default:(null==e?void 0:e.default)||e}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},33644:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LoadableContext=void 0;var r=(0,n(92648).Z)(n(67294));let o=r.default.createContext(null);t.LoadableContext=o},14588:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(6495).Z,o=(0,n(92648).Z)(n(67294)),i=n(54564),a=n(33644);let s=[],c=[],u=!1;function l(e){let t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then(e=>(n.loading=!1,n.loaded=e,e)).catch(e=>{throw n.loading=!1,n.error=e,e}),n}class f{promise(){return this._res.promise}retry(){this._clearTimeouts(),this._res=this._loadFn(this._opts.loader),this._state={pastDelay:!1,timedOut:!1};let{_res:e,_opts:t}=this;e.loading&&("number"==typeof t.delay&&(0===t.delay?this._state.pastDelay=!0:this._delay=setTimeout(()=>{this._update({pastDelay:!0})},t.delay)),"number"==typeof t.timeout&&(this._timeout=setTimeout(()=>{this._update({timedOut:!0})},t.timeout))),this._res.promise.then(()=>{this._update({}),this._clearTimeouts()}).catch(e=>{this._update({}),this._clearTimeouts()}),this._update({})}_update(e){this._state=r({},this._state,{error:this._res.error,loaded:this._res.loaded,loading:this._res.loading},e),this._callbacks.forEach(e=>e())}_clearTimeouts(){clearTimeout(this._delay),clearTimeout(this._timeout)}getCurrentValue(){return this._state}subscribe(e){return this._callbacks.add(e),()=>{this._callbacks.delete(e)}}constructor(e,t){this._loadFn=e,this._opts=t,this._callbacks=new Set,this._delay=null,this._timeout=null,this.retry()}}function d(e){return function(e,t){let n=Object.assign({loader:null,loading:null,delay:200,timeout:null,webpack:null,modules:null,ssr:!0},t);n.lazy=o.default.lazy(n.loader);let r=null;function s(){if(!r){let t=new f(e,n);r={getCurrentValue:t.getCurrentValue.bind(t),subscribe:t.subscribe.bind(t),retry:t.retry.bind(t),promise:t.promise.bind(t)}}return r.promise()}if(!u){let e=n.webpack?n.webpack():n.modules;e&&c.push(t=>{for(let n of e)if(-1!==t.indexOf(n))return s()})}function l(e){!function(){s();let e=o.default.useContext(a.LoadableContext);e&&Array.isArray(n.modules)&&n.modules.forEach(t=>{e(t)})}();let t=n.loading,r=o.default.createElement(t,{isLoading:!0,pastDelay:!0,error:null}),c=n.ssr?o.default.Fragment:i.NoSSR,u=n.lazy;return o.default.createElement(o.default.Suspense,{fallback:r},o.default.createElement(c,null,o.default.createElement(u,Object.assign({},e))))}return l.preload=()=>s(),l.displayName="LoadableComponent",l}(l,e)}function p(e,t){let n=[];for(;e.length;){let r=e.pop();n.push(r(t))}return Promise.all(n).then(()=>{if(e.length)return p(e,t)})}d.preloadAll=()=>new Promise((e,t)=>{p(s).then(e,t)}),d.preloadReady=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return new Promise(t=>{let n=()=>(u=!0,t());p(c,e).then(n,n)})},window.__NEXT_PRELOADREADY=d.preloadReady,t.default=d},29942:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});var r=n(85893);n(67294);var o=n(4480),i=n(11163),a=n(77466),s=n(51513),c=n(69357),u=n(8888);function l(){var e;let t=(0,o.sJ)(a.RI),n=(0,o.sJ)(a.g1),{name:l}=n,{offlineMessage:f}=n,{viewerCount:d,lastConnectTime:p,lastDisconnectTime:h,streamTitle:m}=t,_=(0,o.sJ)(a.YW),b=(0,i.useRouter)(),y=null!==(e=b.asPath.split("?")[1])&&void 0!==e?e:"",v=y.split("&").reduce((e,t)=>{let[n,r]=t.split("=");return{...e,[n]:r}},{}),g="true"===v.initiallyMuted;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.me,{}),(0,r.jsxs)("div",{className:"video-embed",children:[_&&(0,r.jsx)(u.OwncastPlayer,{source:"/hls/stream.m3u8",online:_,initiallyMuted:g,title:m||l}),!_&&(0,r.jsx)(s.R,{streamName:l,customText:f,notificationsEnabled:!1}),_&&(0,r.jsx)(c.X,{online:_,lastConnectTime:p,lastDisconnectTime:h,viewerCount:d})]})]})}},64777:function(e,t,n){"use strict";n.d(t,{$i:function(){return B},$l:function(){return z},Bu:function(){return b},E8:function(){return A},Ff:function(){return C},GC:function(){return g},GR:function(){return Q},HP:function(){return L},IO:function(){return T},Kp:function(){return h},Kt:function(){return U},M_:function(){return Z},N$:function(){return X},NE:function(){return c},NM:function(){return _},Q_:function(){return u},Qc:function(){return N},RB:function(){return y},UJ:function(){return Y},WB:function(){return a},WE:function(){return O},WQ:function(){return w},Wr:function(){return P},XA:function(){return S},Y9:function(){return I},a_:function(){return p},ao:function(){return f},bl:function(){return l},e_:function(){return R},hn:function(){return k},iG:function(){return D},iV:function(){return d},jr:function(){return v},kb:function(){return M},kg:function(){return J},ms:function(){return E},nx:function(){return x},op:function(){return G},qk:function(){return m},rQ:function(){return V},sG:function(){return j},um:function(){return F}});var r=n(34155);let o=r.env.NEXT_PUBLIC_ADMIN_USERNAME,i=r.env.NEXT_PUBLIC_ADMIN_STREAMKEY,a="/",s="".concat(a,"api/admin/"),c=15e3,u="".concat(s,"status"),l="".concat(s,"serverconfig"),f="".concat(s,"config"),d="".concat(s,"viewersOverTime"),p="".concat(s,"viewers"),h="".concat(s,"chat/clients"),m="".concat(s,"chat/users/disabled"),_="".concat(s,"chat/users/setenabled"),b="".concat(s,"chat/users/ipbans"),y="".concat(s,"chat/users/ipbans/remove"),v="".concat(s,"chat/users/setmoderator"),g="".concat(s,"chat/users/moderators"),x="".concat(s,"hardwarestats"),j="".concat(s,"logs"),w="".concat(s,"logs/warnings"),O="".concat(s,"chat/messages"),k="/api/admin/chat/messagevisibility",N="".concat(s,"emoji/upload"),C="".concat(s,"emoji/delete"),E="".concat(s,"accesstokens"),P="".concat(s,"accesstokens/delete"),T="".concat(s,"accesstokens/create"),S="".concat(s,"webhooks"),Z="".concat(s,"webhooks/delete"),D="".concat(s,"webhooks/create"),B="".concat(a,"api/socialplatforms"),R="".concat(s,"federation/send"),L="".concat(s,"followers"),A="".concat(s,"followers/pending"),I="".concat(s,"followers/blocked"),M="".concat(s,"followers/approve"),G="".concat(s,"federation/actions"),X="".concat(s,"metrics/video"),F="".concat(s,"config/streamkeys"),Y="".concat(s,"yp/reset");async function V(e,t){let{data:n,method:r="GET",auth:a=!0}=t||{},s={method:r};if(n&&(s.body=JSON.stringify(n)),a&&o&&i){let e=btoa("".concat(o,":").concat(i));s.headers={Authorization:"Basic ".concat(e)},s.mode="cors",s.credentials="include"}try{let t=await fetch(e,s),n=await t.json();if(!t.ok){let e=n.message||"An error has occurred: ".concat(t.status);throw Error(e)}return n}catch(e){return console.error(e),e}}async function z(e,t){let n={method:"GET",auth:!1,...t};return V(e,n)}async function J(e){try{let t=await fetch(e,{referrerPolicy:"no-referrer",referrer:""});if(!t.ok){let e="An error has occured: ".concat(t.status);throw Error(e)}let n=await t.json();return n}catch(e){console.log(e)}return{}}async function U(){return J("https://api.github.com/repos/owncast/owncast/releases/latest")}let W=/^\d+(\.\d+){0,2}$/;async function Q(e){let t=await U(),n=t.tag_name;return("v"===n.substr(0,1)&&(n=n.substr(1)),!function(e,t){if(!e||!t||0===e.length||0===t.length)return!1;if(e===t)return!0;if(W.test(e)&&W.test(t)){let n=e.split(".");for(;n.length<3;)n.push("0");let r=t.split(".");for(;r.length<3;)r.push("0");for(let e=0;e<3;e++){let t=parseInt(n[e],10),o=parseInt(r[e],10);if(t!==o)return t>o}return!0}return e>=t}(e,n))?n:null}},88335:function(e){e.exports={outerContainer:"OfflineBanner_outerContainer__3AbsB",innerContainer:"OfflineBanner_innerContainer__zTm13",bodyText:"OfflineBanner_bodyText__nNNy0",separator:"OfflineBanner_separator___j_Ss",lastLiveDate:"OfflineBanner_lastLiveDate___UZdO",clockIcon:"OfflineBanner_clockIcon__s0DB_",header:"OfflineBanner_header__Vu20o",footer:"OfflineBanner_footer__o3Zl5",actionLink:"OfflineBanner_actionLink__b4Mwa"}},37970:function(e){e.exports={statusbar:"Statusbar_statusbar__AtVnB"}},5152:function(e,t,n){e.exports=n(37645)},11163:function(e,t,n){e.exports=n(80880)},10434:function(e){function t(){return e.exports=t=Object.assign?Object.assign.bind():function(e){for(var t=1;t"],"sourcesContent":["import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nvar defaultGetPrefixCls = function defaultGetPrefixCls(suffixCls, customizePrefixCls) {\n if (customizePrefixCls) return customizePrefixCls;\n return suffixCls ? \"ant-\".concat(suffixCls) : 'ant';\n};\n// zombieJ: 🚨 Do not pass `defaultRenderEmpty` here since it will case circular dependency.\nexport var ConfigContext = /*#__PURE__*/React.createContext({\n // We provide a default function for Context without provider\n getPrefixCls: defaultGetPrefixCls\n});\nexport var ConfigConsumer = ConfigContext.Consumer;\n/** @deprecated Use hooks instead. This is a legacy function */\nexport function withConfigConsumer(config) {\n return function withConfigConsumerFunc(Component) {\n // Wrap with ConfigConsumer. Since we need compatible with react 15, be care when using ref methods\n var SFC = function SFC(props) {\n return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (configProps) {\n var basicPrefixCls = config.prefixCls;\n var getPrefixCls = configProps.getPrefixCls;\n var customizePrefixCls = props.prefixCls;\n var prefixCls = getPrefixCls(basicPrefixCls, customizePrefixCls);\n return /*#__PURE__*/React.createElement(Component, _extends({}, configProps, props, {\n prefixCls: prefixCls\n }));\n });\n };\n var cons = Component.constructor;\n var name = cons && cons.displayName || Component.name || 'Component';\n if (process.env.NODE_ENV !== 'production') {\n SFC.displayName = \"withConfigConsumer(\".concat(name, \")\");\n }\n return SFC;\n };\n}","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/embed/video\",\n function () {\n return require(\"private-next-pages/embed/video/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/embed/video\"])\n });\n }\n ","/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport { Divider } from 'antd';\nimport { FC } from 'react';\nimport formatDistanceToNow from 'date-fns/formatDistanceToNow';\nimport dynamic from 'next/dynamic';\nimport styles from './OfflineBanner.module.scss';\n\n// Lazy loaded components\n\nconst ClockCircleOutlined = dynamic(() => import('@ant-design/icons/ClockCircleOutlined'), {\n ssr: false,\n});\n\nexport type OfflineBannerProps = {\n streamName: string;\n customText?: string;\n lastLive?: Date;\n notificationsEnabled: boolean;\n fediverseAccount?: string;\n onNotifyClick?: () => void;\n onFollowClick?: () => void;\n};\n\nexport const OfflineBanner: FC = ({\n streamName,\n customText,\n lastLive,\n notificationsEnabled,\n fediverseAccount,\n onNotifyClick,\n onFollowClick,\n}) => {\n let text;\n if (customText) {\n text = customText;\n } else if (!customText && notificationsEnabled && fediverseAccount) {\n text = (\n \n This stream is offline. You can{' '}\n \n be notified\n {' '}\n the next time {streamName} goes live or{' '}\n \n follow\n {' '}\n {fediverseAccount} on the Fediverse.\n \n );\n } else if (!customText && notificationsEnabled) {\n text = (\n \n This stream is offline.{' '}\n \n Be notified\n {' '}\n the next time {streamName} goes live.\n \n );\n } else if (!customText && fediverseAccount) {\n text = (\n \n This stream is offline.{' '}\n \n Follow\n {' '}\n {fediverseAccount} on the Fediverse to see the next time {streamName} goes live.\n \n );\n } else {\n text = `This stream is offline. Check back soon!`;\n }\n\n return (\n
\n
\n
{streamName}
\n \n
{text}
\n {lastLive && (\n
\n \n {`Last live ${formatDistanceToNow(new Date(lastLive))} ago.`}\n
\n )}\n
\n
\n );\n};\n","import formatDistanceToNow from 'date-fns/formatDistanceToNow';\nimport intervalToDuration from 'date-fns/intervalToDuration';\nimport { FC, useEffect, useState } from 'react';\nimport dynamic from 'next/dynamic';\nimport styles from './Statusbar.module.scss';\n\n// Lazy loaded components\n\nconst EyeFilled = dynamic(() => import('@ant-design/icons/EyeFilled'), {\n ssr: false,\n});\n\nexport type StatusbarProps = {\n online: Boolean;\n lastConnectTime?: Date;\n lastDisconnectTime?: Date;\n viewerCount: number;\n};\n\nfunction makeDurationString(lastConnectTime: Date): string {\n const diff = intervalToDuration({ start: lastConnectTime, end: new Date() });\n if (diff.days > 1) {\n return `${diff.days} days ${diff.hours} hours`;\n }\n if (diff.hours >= 1) {\n return `${diff.hours} hours ${diff.minutes} minutes`;\n }\n\n return `${diff.minutes} minutes ${diff.seconds} seconds`;\n}\n\nexport const Statusbar: FC = ({\n online,\n lastConnectTime,\n lastDisconnectTime,\n viewerCount,\n}) => {\n const [, setNow] = useState(new Date());\n\n // Set a timer to update the status bar.\n useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 1000);\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n let onlineMessage = '';\n let rightSideMessage: any;\n if (online && lastConnectTime) {\n const duration = makeDurationString(new Date(lastConnectTime));\n onlineMessage = online ? `Live for ${duration}` : 'Offline';\n rightSideMessage = viewerCount > 0 && (\n
\n \n \n \n {` ${viewerCount}`}\n
\n );\n } else if (!online) {\n onlineMessage = 'Offline';\n if (lastDisconnectTime) {\n rightSideMessage = `Last live ${formatDistanceToNow(new Date(lastDisconnectTime))} ago.`;\n }\n }\n\n return (\n
\n
{onlineMessage}
\n
{rightSideMessage}
\n
\n );\n};\nexport default Statusbar;\n\nStatusbar.defaultProps = {\n lastConnectTime: null,\n lastDisconnectTime: null,\n};\n","\"use client\";\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.suspense = suspense;\nexports.NoSSR = NoSSR;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\nvar _noSsrError = require(\"./no-ssr-error\");\n\nfunction suspense() {\n const error = new Error(_noSsrError.NEXT_DYNAMIC_NO_SSR_CODE);\n error.digest = _noSsrError.NEXT_DYNAMIC_NO_SSR_CODE;\n throw error;\n}\nfunction NoSSR({ children }) {\n if (typeof window === 'undefined') {\n suspense();\n }\n return children;\n}\n\n//# sourceMappingURL=dynamic-no-ssr.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = dynamic;\nvar _extends = require(\"@swc/helpers/lib/_extends.js\").default;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\nvar _loadable = _interop_require_default(require(\"./loadable\"));\nfunction dynamic(dynamicOptions, options) {\n let loadableFn = _loadable.default;\n let loadableOptions = {\n // A loading component is not required, so we default it\n loading: ({ error , isLoading , pastDelay })=>{\n if (!pastDelay) return null;\n if (process.env.NODE_ENV !== 'production') {\n if (isLoading) {\n return null;\n }\n if (error) {\n return /*#__PURE__*/ _react.default.createElement(\"p\", null, error.message, /*#__PURE__*/ _react.default.createElement(\"br\", null), error.stack);\n }\n }\n return null;\n }\n };\n // Support for direct import(), eg: dynamic(import('../hello-world'))\n // Note that this is only kept for the edge case where someone is passing in a promise as first argument\n // The react-loadable babel plugin will turn dynamic(import('../hello-world')) into dynamic(() => import('../hello-world'))\n // To make sure we don't execute the import without rendering first\n if (dynamicOptions instanceof Promise) {\n loadableOptions.loader = ()=>dynamicOptions;\n // Support for having import as a function, eg: dynamic(() => import('../hello-world'))\n } else if (typeof dynamicOptions === 'function') {\n loadableOptions.loader = dynamicOptions;\n // Support for having first argument being options, eg: dynamic({loader: import('../hello-world')})\n } else if (typeof dynamicOptions === 'object') {\n loadableOptions = _extends({}, loadableOptions, dynamicOptions);\n }\n // Support for passing options, eg: dynamic(import('../hello-world'), {loading: () =>

Loading something

})\n loadableOptions = _extends({}, loadableOptions, options);\n const loaderFn = loadableOptions.loader;\n const loader = ()=>loaderFn != null ? loaderFn().then(convertModule) : Promise.resolve(convertModule(()=>null));\n // coming from build/babel/plugins/react-loadable-plugin.js\n if (loadableOptions.loadableGenerated) {\n loadableOptions = _extends({}, loadableOptions, loadableOptions.loadableGenerated);\n delete loadableOptions.loadableGenerated;\n }\n // support for disabling server side rendering, eg: dynamic(() => import('../hello-world'), {ssr: false}).\n if (typeof loadableOptions.ssr === 'boolean' && !loadableOptions.ssr) {\n delete loadableOptions.webpack;\n delete loadableOptions.modules;\n }\n return loadableFn(_extends({}, loadableOptions, {\n loader: loader\n }));\n}\n// Normalize loader to return the module as form { default: Component } for `React.lazy`.\n// Also for backward compatible since next/dynamic allows to resolve a component directly with loader\n// Client component reference proxy need to be converted to a module.\nfunction convertModule(mod) {\n var ref;\n return {\n default: ((ref = mod) == null ? void 0 : ref.default) || mod\n };\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=dynamic.js.map","\"use client\";\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LoadableContext = void 0;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\n\nconst LoadableContext = _react.default.createContext(null);\nexports.LoadableContext = LoadableContext;\nif (process.env.NODE_ENV !== 'production') {\n LoadableContext.displayName = 'LoadableContext';\n}\n\n//# sourceMappingURL=loadable-context.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _extends = require(\"@swc/helpers/lib/_extends.js\").default;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\nvar _dynamicNoSsr = require(\"./dynamic-no-ssr\");\nvar _loadableContext = require(\"./loadable-context\");\nconst ALL_INITIALIZERS = [];\nconst READY_INITIALIZERS = [];\nlet initialized = false;\nfunction load(loader) {\n let promise = loader();\n let state = {\n loading: true,\n loaded: null,\n error: null\n };\n state.promise = promise.then((loaded)=>{\n state.loading = false;\n state.loaded = loaded;\n return loaded;\n }).catch((err)=>{\n state.loading = false;\n state.error = err;\n throw err;\n });\n return state;\n}\nfunction createLoadableComponent(loadFn, options) {\n let opts = Object.assign({\n loader: null,\n loading: null,\n delay: 200,\n timeout: null,\n webpack: null,\n modules: null,\n ssr: true\n }, options);\n opts.lazy = /*#__PURE__*/ _react.default.lazy(opts.loader);\n /** @type LoadableSubscription */ let subscription = null;\n function init() {\n if (!subscription) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const sub = new LoadableSubscription(loadFn, opts);\n subscription = {\n getCurrentValue: sub.getCurrentValue.bind(sub),\n subscribe: sub.subscribe.bind(sub),\n retry: sub.retry.bind(sub),\n promise: sub.promise.bind(sub)\n };\n }\n return subscription.promise();\n }\n // Server only\n if (typeof window === 'undefined') {\n ALL_INITIALIZERS.push(init);\n }\n // Client only\n if (!initialized && typeof window !== 'undefined') {\n // require.resolveWeak check is needed for environments that don't have it available like Jest\n const moduleIds = opts.webpack && typeof require.resolveWeak === 'function' ? opts.webpack() : opts.modules;\n if (moduleIds) {\n READY_INITIALIZERS.push((ids)=>{\n for (const moduleId of moduleIds){\n if (ids.indexOf(moduleId) !== -1) {\n return init();\n }\n }\n });\n }\n }\n function useLoadableModule() {\n init();\n const context = _react.default.useContext(_loadableContext.LoadableContext);\n if (context && Array.isArray(opts.modules)) {\n opts.modules.forEach((moduleName)=>{\n context(moduleName);\n });\n }\n }\n function LoadableComponent(props) {\n useLoadableModule();\n const Loading = opts.loading;\n const fallbackElement = /*#__PURE__*/ _react.default.createElement(Loading, {\n isLoading: true,\n pastDelay: true,\n error: null\n });\n const Wrap = opts.ssr ? _react.default.Fragment : _dynamicNoSsr.NoSSR;\n const Lazy = opts.lazy;\n return /*#__PURE__*/ _react.default.createElement(_react.default.Suspense, {\n fallback: fallbackElement\n }, /*#__PURE__*/ _react.default.createElement(Wrap, null, /*#__PURE__*/ _react.default.createElement(Lazy, Object.assign({}, props))));\n }\n LoadableComponent.preload = ()=>init();\n LoadableComponent.displayName = 'LoadableComponent';\n return LoadableComponent;\n}\nclass LoadableSubscription {\n promise() {\n return this._res.promise;\n }\n retry() {\n this._clearTimeouts();\n this._res = this._loadFn(this._opts.loader);\n this._state = {\n pastDelay: false,\n timedOut: false\n };\n const { _res: res , _opts: opts } = this;\n if (res.loading) {\n if (typeof opts.delay === 'number') {\n if (opts.delay === 0) {\n this._state.pastDelay = true;\n } else {\n this._delay = setTimeout(()=>{\n this._update({\n pastDelay: true\n });\n }, opts.delay);\n }\n }\n if (typeof opts.timeout === 'number') {\n this._timeout = setTimeout(()=>{\n this._update({\n timedOut: true\n });\n }, opts.timeout);\n }\n }\n this._res.promise.then(()=>{\n this._update({});\n this._clearTimeouts();\n }).catch((_err)=>{\n this._update({});\n this._clearTimeouts();\n });\n this._update({});\n }\n _update(partial) {\n this._state = _extends({}, this._state, {\n error: this._res.error,\n loaded: this._res.loaded,\n loading: this._res.loading\n }, partial);\n this._callbacks.forEach((callback)=>callback());\n }\n _clearTimeouts() {\n clearTimeout(this._delay);\n clearTimeout(this._timeout);\n }\n getCurrentValue() {\n return this._state;\n }\n subscribe(callback) {\n this._callbacks.add(callback);\n return ()=>{\n this._callbacks.delete(callback);\n };\n }\n constructor(loadFn, opts){\n this._loadFn = loadFn;\n this._opts = opts;\n this._callbacks = new Set();\n this._delay = null;\n this._timeout = null;\n this.retry();\n }\n}\nfunction Loadable(opts) {\n return createLoadableComponent(load, opts);\n}\nfunction flushInitializers(initializers, ids) {\n let promises = [];\n while(initializers.length){\n let init = initializers.pop();\n promises.push(init(ids));\n }\n return Promise.all(promises).then(()=>{\n if (initializers.length) {\n return flushInitializers(initializers, ids);\n }\n });\n}\nLoadable.preloadAll = ()=>{\n return new Promise((resolveInitializers, reject)=>{\n flushInitializers(ALL_INITIALIZERS).then(resolveInitializers, reject);\n });\n};\nLoadable.preloadReady = (ids = [])=>{\n return new Promise((resolvePreload)=>{\n const res = ()=>{\n initialized = true;\n return resolvePreload();\n };\n // We always will resolve, errors should be handled within loading UIs.\n flushInitializers(READY_INITIALIZERS, ids).then(res, res);\n });\n};\nif (typeof window !== 'undefined') {\n window.__NEXT_PRELOADREADY = Loadable.preloadReady;\n}\nvar _default = Loadable;\nexports.default = _default;\n\n//# sourceMappingURL=loadable.js.map","import React from 'react';\nimport { useRecoilValue } from 'recoil';\nimport { useRouter } from 'next/router';\nimport {\n clientConfigStateAtom,\n ClientConfigStore,\n isOnlineSelector,\n serverStatusState,\n} from '../../../components/stores/ClientConfigStore';\nimport { OfflineBanner } from '../../../components/ui/OfflineBanner/OfflineBanner';\nimport { Statusbar } from '../../../components/ui/Statusbar/Statusbar';\nimport { OwncastPlayer } from '../../../components/video/OwncastPlayer/OwncastPlayer';\nimport { ClientConfig } from '../../../interfaces/client-config.model';\nimport { ServerStatus } from '../../../interfaces/server-status.model';\n\nexport default function VideoEmbed() {\n const status = useRecoilValue(serverStatusState);\n const clientConfig = useRecoilValue(clientConfigStateAtom);\n\n const { name } = clientConfig;\n\n const { offlineMessage } = clientConfig;\n const { viewerCount, lastConnectTime, lastDisconnectTime, streamTitle } = status;\n const online = useRecoilValue(isOnlineSelector);\n\n const router = useRouter();\n\n /**\n * router.query isn't initialized until hydration\n * (see https://github.com/vercel/next.js/discussions/11484)\n * but router.asPath is initialized earlier, so we parse the\n * query parameters ourselves\n */\n const path = router.asPath.split('?')[1] ?? '';\n const query = path.split('&').reduce((currQuery, part) => {\n const [key, value] = part.split('=');\n return { ...currQuery, [key]: value };\n }, {} as Record);\n\n const initiallyMuted = query.initiallyMuted === 'true';\n\n return (\n <>\n \n
\n {online && (\n \n )}\n {!online && (\n \n )}\n {online && (\n \n )}\n
\n \n );\n}\n","/* eslint-disable prefer-destructuring */\nconst ADMIN_USERNAME = process.env.NEXT_PUBLIC_ADMIN_USERNAME;\nconst ADMIN_STREAMKEY = process.env.NEXT_PUBLIC_ADMIN_STREAMKEY;\nexport const NEXT_PUBLIC_API_HOST = process.env.NEXT_PUBLIC_API_HOST;\n\nconst API_LOCATION = `${NEXT_PUBLIC_API_HOST}api/admin/`;\n\nexport const FETCH_INTERVAL = 15000;\n\n// Current inbound broadcaster info\nexport const STATUS = `${API_LOCATION}status`;\n\n// Disconnect inbound stream\nexport const DISCONNECT = `${API_LOCATION}disconnect`;\n\n// Change the current streaming key in memory\nexport const STREAMKEY_CHANGE = `${API_LOCATION}changekey`;\n\n// Current server config\nexport const SERVER_CONFIG = `${API_LOCATION}serverconfig`;\n\n// Base url to update config settings\nexport const SERVER_CONFIG_UPDATE_URL = `${API_LOCATION}config`;\n\n// Get viewer count over time\nexport const VIEWERS_OVER_TIME = `${API_LOCATION}viewersOverTime`;\n\n// Get active viewer details\nexport const ACTIVE_VIEWER_DETAILS = `${API_LOCATION}viewers`;\n\n// Get currently connected chat clients\nexport const CONNECTED_CLIENTS = `${API_LOCATION}chat/clients`;\n\n// Get list of disabled/blocked chat users\nexport const DISABLED_USERS = `${API_LOCATION}chat/users/disabled`;\n\n// Disable/enable a single user\nexport const USER_ENABLED_TOGGLE = `${API_LOCATION}chat/users/setenabled`;\n\n// Get banned IP addresses\nexport const BANNED_IPS = `${API_LOCATION}chat/users/ipbans`;\n\n// Remove IP ban\nexport const BANNED_IP_REMOVE = `${API_LOCATION}chat/users/ipbans/remove`;\n\n// Disable/enable a single user\nexport const USER_SET_MODERATOR = `${API_LOCATION}chat/users/setmoderator`;\n\n// Get list of moderators\nexport const MODERATORS = `${API_LOCATION}chat/users/moderators`;\n\n// Get hardware stats\nexport const HARDWARE_STATS = `${API_LOCATION}hardwarestats`;\n\n// Get all logs\nexport const LOGS_ALL = `${API_LOCATION}logs`;\n\n// Get warnings + errors\nexport const LOGS_WARN = `${API_LOCATION}logs/warnings`;\n\n// Get chat history\nexport const CHAT_HISTORY = `${API_LOCATION}chat/messages`;\n\n// Get chat history\nexport const UPDATE_CHAT_MESSGAE_VIZ = `/api/admin/chat/messagevisibility`;\n\n// Upload a new custom emoji\nexport const UPLOAD_EMOJI = `${API_LOCATION}emoji/upload`;\n\n// Delete a custom emoji\nexport const DELETE_EMOJI = `${API_LOCATION}emoji/delete`;\n\n// Get all access tokens\nexport const ACCESS_TOKENS = `${API_LOCATION}accesstokens`;\n\n// Delete a single access token\nexport const DELETE_ACCESS_TOKEN = `${API_LOCATION}accesstokens/delete`;\n\n// Create a new access token\nexport const CREATE_ACCESS_TOKEN = `${API_LOCATION}accesstokens/create`;\n\n// Get webhooks\nexport const WEBHOOKS = `${API_LOCATION}webhooks`;\n\n// Delete a single webhook\nexport const DELETE_WEBHOOK = `${API_LOCATION}webhooks/delete`;\n\n// Create a single webhook\nexport const CREATE_WEBHOOK = `${API_LOCATION}webhooks/create`;\n\n// hard coded social icons list\nexport const SOCIAL_PLATFORMS_LIST = `${NEXT_PUBLIC_API_HOST}api/socialplatforms`;\n\n// set external action links\nexport const EXTERNAL_ACTIONS = `${API_LOCATION}api/externalactions`;\n\n// send a message to the fediverse\nexport const FEDERATION_MESSAGE_SEND = `${API_LOCATION}federation/send`;\n\n// Get followers\nexport const FOLLOWERS = `${API_LOCATION}followers`;\n\n// Get followers pending approval\nexport const FOLLOWERS_PENDING = `${API_LOCATION}followers/pending`;\n\n// Get followers who were blocked or rejected\nexport const FOLLOWERS_BLOCKED = `${API_LOCATION}followers/blocked`;\n\n// Approve, reject a follow request\nexport const SET_FOLLOWER_APPROVAL = `${API_LOCATION}followers/approve`;\n\n// List of inbound federated actions that took place.\nexport const FEDERATION_ACTIONS = `${API_LOCATION}federation/actions`;\n\nexport const API_STREAM_HEALTH_METRICS = `${API_LOCATION}metrics/video`;\n\n// Save an array of stream keys\nexport const UPDATE_STREAM_KEYS = `${API_LOCATION}config/streamkeys`;\n\nexport const API_YP_RESET = `${API_LOCATION}yp/reset`;\n\nexport const TEMP_UPDATER_API = LOGS_ALL;\n\nconst GITHUB_RELEASE_URL = 'https://api.github.com/repos/owncast/owncast/releases/latest';\n\ninterface FetchOptions {\n data?: any;\n method?: string;\n auth?: boolean;\n}\n\nexport async function fetchData(url: string, options?: FetchOptions) {\n const { data, method = 'GET', auth = true } = options || {};\n\n // eslint-disable-next-line no-undef\n const requestOptions: RequestInit = {\n method,\n };\n\n if (data) {\n requestOptions.body = JSON.stringify(data);\n }\n\n if (auth && ADMIN_USERNAME && ADMIN_STREAMKEY) {\n const encoded = btoa(`${ADMIN_USERNAME}:${ADMIN_STREAMKEY}`);\n requestOptions.headers = {\n Authorization: `Basic ${encoded}`,\n };\n requestOptions.mode = 'cors';\n requestOptions.credentials = 'include';\n }\n\n try {\n const response = await fetch(url, requestOptions);\n const json = await response.json();\n\n if (!response.ok) {\n const message = json.message || `An error has occurred: ${response.status}`;\n throw new Error(message);\n }\n return json;\n } catch (error) {\n console.error(error);\n return error;\n // console.log(error)\n // throw new Error(error)\n }\n}\n\nexport async function getUnauthedData(url: string, options?: FetchOptions) {\n const opts = {\n method: 'GET',\n auth: false,\n ...options,\n };\n return fetchData(url, opts);\n}\n\nexport async function fetchExternalData(url: string) {\n try {\n const response = await fetch(url, {\n referrerPolicy: 'no-referrer', // Send no referrer header for privacy reasons.\n referrer: '',\n });\n if (!response.ok) {\n const message = `An error has occured: ${response.status}`;\n throw new Error(message);\n }\n const json = await response.json();\n return json;\n } catch (error) {\n console.log(error);\n }\n return {};\n}\n\nexport async function getGithubRelease() {\n return fetchExternalData(GITHUB_RELEASE_URL);\n}\n\n// Stolen from https://gist.github.com/prenagha/98bbb03e27163bc2f5e4\nconst VPAT = /^\\d+(\\.\\d+){0,2}$/;\nfunction upToDate(local, remote) {\n if (!local || !remote || local.length === 0 || remote.length === 0) return false;\n if (local === remote) return true;\n if (VPAT.test(local) && VPAT.test(remote)) {\n const lparts = local.split('.');\n while (lparts.length < 3) lparts.push('0');\n const rparts = remote.split('.');\n while (rparts.length < 3) rparts.push('0');\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < 3; i++) {\n const l = parseInt(lparts[i], 10);\n const r = parseInt(rparts[i], 10);\n if (l === r)\n // eslint-disable-next-line no-continue\n continue;\n return l > r;\n }\n return true;\n }\n return local >= remote;\n}\n\n// Make a request to the server status API and the Github releases API\n// and return a release if it's newer than the server version.\nexport async function upgradeVersionAvailable(currentVersion) {\n const recentRelease = await getGithubRelease();\n let recentReleaseVersion = recentRelease.tag_name;\n\n if (recentReleaseVersion.substr(0, 1) === 'v') {\n recentReleaseVersion = recentReleaseVersion.substr(1);\n }\n\n if (!upToDate(currentVersion, recentReleaseVersion)) {\n return recentReleaseVersion;\n }\n\n return null;\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerContainer\":\"OfflineBanner_outerContainer__3AbsB\",\"innerContainer\":\"OfflineBanner_innerContainer__zTm13\",\"bodyText\":\"OfflineBanner_bodyText__nNNy0\",\"separator\":\"OfflineBanner_separator___j_Ss\",\"lastLiveDate\":\"OfflineBanner_lastLiveDate___UZdO\",\"clockIcon\":\"OfflineBanner_clockIcon__s0DB_\",\"header\":\"OfflineBanner_header__Vu20o\",\"footer\":\"OfflineBanner_footer__o3Zl5\",\"actionLink\":\"OfflineBanner_actionLink__b4Mwa\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"statusbar\":\"Statusbar_statusbar__AtVnB\"};","module.exports = require('./dist/shared/lib/dynamic')\n","module.exports = require('./dist/client/router')\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}"],"names":["ConfigContext","react__WEBPACK_IMPORTED_MODULE_0__","createContext","getPrefixCls","suffixCls","customizePrefixCls","concat","ConfigConsumer","Consumer","withConfigConsumer","config","Component","cons","constructor","displayName","name","props","createElement","configProps","basicPrefixCls","prefixCls","_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__","Z","__WEBPACK_AMD_DEFINE_RESULT__","hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","argType","push","Array","isArray","inner","apply","toString","Object","prototype","includes","key","call","join","module","exports","default","undefined","window","__NEXT_P","__webpack_require__","ClockCircleOutlined","dynamic","Promise","all","e","then","t","bind","ssr","OfflineBanner","text","streamName","customText","lastLive","notificationsEnabled","fediverseAccount","onNotifyClick","onFollowClick","param","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsxs","span","jsx","role","tabIndex","className","styles","onClick","div","id","Divider","formatDistanceToNow","Date","EyeFilled","Statusbar","rightSideMessage","online","lastConnectTime","lastDisconnectTime","viewerCount","setNow","useState","useEffect","interval","setInterval","clearInterval","onlineMessage","duration","makeDurationString","diff","intervalToDuration","start","end","days","hours","minutes","seconds","defaultProps","value","error","_noSsrError","NEXT_DYNAMIC_NO_SSR_CODE","digest","children","_interop_require_default","require","dynamicOptions","options","loadableFn","_loadable","loadableOptions","loading","isLoading","pastDelay","loader","_extends","loaderFn","convertModule","resolve","loadableGenerated","webpack","modules","mod","ref","__esModule","defineProperty","assign","_react","LoadableContext","_dynamicNoSsr","_loadableContext","ALL_INITIALIZERS","READY_INITIALIZERS","initialized","load","promise","state","loaded","catch","err","LoadableSubscription","_res","retry","_clearTimeouts","_loadFn","_opts","_state","timedOut","res","opts","delay","_delay","setTimeout","_update","timeout","_timeout","partial","_callbacks","forEach","callback","clearTimeout","getCurrentValue","subscribe","add","delete","loadFn","Set","Loadable","createLoadableComponent","lazy","subscription","init","sub","moduleIds","moduleId","ids","indexOf","LoadableComponent","useLoadableModule","context","useContext","moduleName","Loading","fallbackElement","Wrap","Fragment","NoSSR","Lazy","Suspense","fallback","preload","flushInitializers","initializers","promises","pop","preloadAll","resolveInitializers","reject","preloadReady","resolvePreload","__NEXT_PRELOADREADY","VideoEmbed","router","status","useRecoilValue","serverStatusState","clientConfig","clientConfigStateAtom","offlineMessage","streamTitle","isOnlineSelector","useRouter","path","asPath","split","query","reduce","currQuery","part","initiallyMuted","ClientConfigStore","OwncastPlayer","source","title","ADMIN_USERNAME","process","env","NEXT_PUBLIC_ADMIN_USERNAME","ADMIN_STREAMKEY","NEXT_PUBLIC_ADMIN_STREAMKEY","NEXT_PUBLIC_API_HOST","API_LOCATION","FETCH_INTERVAL","STATUS","SERVER_CONFIG","SERVER_CONFIG_UPDATE_URL","VIEWERS_OVER_TIME","ACTIVE_VIEWER_DETAILS","CONNECTED_CLIENTS","DISABLED_USERS","USER_ENABLED_TOGGLE","BANNED_IPS","BANNED_IP_REMOVE","USER_SET_MODERATOR","MODERATORS","HARDWARE_STATS","LOGS_ALL","LOGS_WARN","CHAT_HISTORY","UPDATE_CHAT_MESSGAE_VIZ","UPLOAD_EMOJI","DELETE_EMOJI","ACCESS_TOKENS","DELETE_ACCESS_TOKEN","CREATE_ACCESS_TOKEN","WEBHOOKS","DELETE_WEBHOOK","CREATE_WEBHOOK","SOCIAL_PLATFORMS_LIST","FEDERATION_MESSAGE_SEND","FOLLOWERS","FOLLOWERS_PENDING","FOLLOWERS_BLOCKED","SET_FOLLOWER_APPROVAL","FEDERATION_ACTIONS","API_STREAM_HEALTH_METRICS","UPDATE_STREAM_KEYS","API_YP_RESET","fetchData","url","data","method","auth","requestOptions","body","JSON","stringify","encoded","btoa","headers","Authorization","mode","credentials","response","fetch","json","ok","message","console","getUnauthedData","fetchExternalData","referrerPolicy","referrer","log","getGithubRelease","VPAT","upgradeVersionAvailable","currentVersion","recentRelease","recentReleaseVersion","tag_name","substr","upToDate","local","remote","test","lparts","rparts","l","parseInt","r","target","_assertThisInitialized","self","_defineProperty","obj","_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__","enumerable","configurable","writable","_inherits","subClass","superClass","create","_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_toPropertyKey","_toPrimitive","input","hint","esm_typeof","prim","Symbol","toPrimitive","String","Number","_typeof","iterator"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"static/chunks/pages/embed/video-1d13106092c28bfe.js","mappings":"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","sources":["webpack://_N_E/./node_modules/antd/es/config-provider/context.js","webpack://_N_E/./node_modules/classnames/index.js","webpack://_N_E/?117d","webpack://_N_E/./components/ui/OfflineBanner/OfflineBanner.tsx","webpack://_N_E/./components/ui/Statusbar/Statusbar.tsx","webpack://_N_E/./node_modules/next/dist/shared/lib/dynamic-no-ssr.js","webpack://_N_E/./node_modules/next/dist/shared/lib/dynamic.js","webpack://_N_E/./node_modules/next/dist/shared/lib/loadable-context.js","webpack://_N_E/./node_modules/next/dist/shared/lib/loadable.js","webpack://_N_E/./pages/embed/video/index.tsx","webpack://_N_E/./utils/apis.ts","webpack://_N_E/./components/ui/OfflineBanner/OfflineBanner.module.scss","webpack://_N_E/./components/ui/Statusbar/Statusbar.module.scss","webpack://_N_E/./node_modules/next/dynamic.js","webpack://_N_E/./node_modules/next/router.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/extends.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/inherits.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://_N_E/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://_N_E/"],"sourcesContent":["import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport * as React from 'react';\nvar defaultGetPrefixCls = function defaultGetPrefixCls(suffixCls, customizePrefixCls) {\n if (customizePrefixCls) return customizePrefixCls;\n return suffixCls ? \"ant-\".concat(suffixCls) : 'ant';\n};\n// zombieJ: 🚨 Do not pass `defaultRenderEmpty` here since it will case circular dependency.\nexport var ConfigContext = /*#__PURE__*/React.createContext({\n // We provide a default function for Context without provider\n getPrefixCls: defaultGetPrefixCls\n});\nexport var ConfigConsumer = ConfigContext.Consumer;\n/** @deprecated Use hooks instead. This is a legacy function */\nexport function withConfigConsumer(config) {\n return function withConfigConsumerFunc(Component) {\n // Wrap with ConfigConsumer. Since we need compatible with react 15, be care when using ref methods\n var SFC = function SFC(props) {\n return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (configProps) {\n var basicPrefixCls = config.prefixCls;\n var getPrefixCls = configProps.getPrefixCls;\n var customizePrefixCls = props.prefixCls;\n var prefixCls = getPrefixCls(basicPrefixCls, customizePrefixCls);\n return /*#__PURE__*/React.createElement(Component, _extends({}, configProps, props, {\n prefixCls: prefixCls\n }));\n });\n };\n var cons = Component.constructor;\n var name = cons && cons.displayName || Component.name || 'Component';\n if (process.env.NODE_ENV !== 'production') {\n SFC.displayName = \"withConfigConsumer(\".concat(name, \")\");\n }\n return SFC;\n };\n}","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\tvar nativeCodeString = '[native code]';\n\n\tfunction classNames() {\n\t\tvar classes = [];\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (!arg) continue;\n\n\t\t\tvar argType = typeof arg;\n\n\t\t\tif (argType === 'string' || argType === 'number') {\n\t\t\t\tclasses.push(arg);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tif (arg.length) {\n\t\t\t\t\tvar inner = classNames.apply(null, arg);\n\t\t\t\t\tif (inner) {\n\t\t\t\t\t\tclasses.push(inner);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (argType === 'object') {\n\t\t\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\t\t\tclasses.push(arg.toString());\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tfor (var key in arg) {\n\t\t\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\t\t\tclasses.push(key);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn classes.join(' ');\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/embed/video\",\n function () {\n return require(\"private-next-pages/embed/video/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/embed/video\"])\n });\n }\n ","/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport { Divider } from 'antd';\nimport { FC } from 'react';\nimport formatDistanceToNow from 'date-fns/formatDistanceToNow';\nimport dynamic from 'next/dynamic';\nimport styles from './OfflineBanner.module.scss';\n\n// Lazy loaded components\n\nconst ClockCircleOutlined = dynamic(() => import('@ant-design/icons/ClockCircleOutlined'), {\n ssr: false,\n});\n\nexport type OfflineBannerProps = {\n streamName: string;\n customText?: string;\n lastLive?: Date;\n notificationsEnabled: boolean;\n fediverseAccount?: string;\n showsHeader?: boolean;\n onNotifyClick?: () => void;\n onFollowClick?: () => void;\n};\n\nexport const OfflineBanner: FC = ({\n streamName,\n customText,\n lastLive,\n notificationsEnabled,\n fediverseAccount,\n showsHeader = true,\n onNotifyClick,\n onFollowClick,\n}) => {\n let text;\n if (customText) {\n text = customText;\n } else if (!customText && notificationsEnabled && fediverseAccount) {\n text = (\n \n This stream is offline. You can{' '}\n \n be notified\n {' '}\n the next time {streamName} goes live or{' '}\n \n follow\n {' '}\n {fediverseAccount} on the Fediverse.\n \n );\n } else if (!customText && notificationsEnabled) {\n text = (\n \n This stream is offline.{' '}\n \n Be notified\n {' '}\n the next time {streamName} goes live.\n \n );\n } else if (!customText && fediverseAccount) {\n text = (\n \n This stream is offline.{' '}\n \n Follow\n {' '}\n {fediverseAccount} on the Fediverse to see the next time {streamName} goes live.\n \n );\n } else {\n text = `This stream is offline. Check back soon!`;\n }\n\n return (\n
\n
\n {showsHeader && (\n <>\n
{streamName}
\n \n \n )}\n
{text}
\n {lastLive && (\n
\n \n {`Last live ${formatDistanceToNow(new Date(lastLive))} ago.`}\n
\n )}\n
\n
\n );\n};\n","import formatDistanceToNow from 'date-fns/formatDistanceToNow';\nimport intervalToDuration from 'date-fns/intervalToDuration';\nimport { FC, useEffect, useState } from 'react';\nimport dynamic from 'next/dynamic';\nimport styles from './Statusbar.module.scss';\n\n// Lazy loaded components\n\nconst EyeFilled = dynamic(() => import('@ant-design/icons/EyeFilled'), {\n ssr: false,\n});\n\nexport type StatusbarProps = {\n online: Boolean;\n lastConnectTime?: Date;\n lastDisconnectTime?: Date;\n viewerCount: number;\n};\n\nfunction makeDurationString(lastConnectTime: Date): string {\n const diff = intervalToDuration({ start: lastConnectTime, end: new Date() });\n if (diff.days > 1) {\n return `${diff.days} days ${diff.hours} hours`;\n }\n if (diff.hours >= 1) {\n return `${diff.hours} hours ${diff.minutes} minutes`;\n }\n\n return `${diff.minutes} minutes ${diff.seconds} seconds`;\n}\n\nexport const Statusbar: FC = ({\n online,\n lastConnectTime,\n lastDisconnectTime,\n viewerCount,\n}) => {\n const [, setNow] = useState(new Date());\n\n // Set a timer to update the status bar.\n useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 1000);\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n let onlineMessage = '';\n let rightSideMessage: any;\n if (online && lastConnectTime) {\n const duration = makeDurationString(new Date(lastConnectTime));\n onlineMessage = online ? `Live for ${duration}` : 'Offline';\n rightSideMessage = viewerCount > 0 && (\n
\n \n \n \n {` ${viewerCount}`}\n
\n );\n } else if (!online) {\n onlineMessage = 'Offline';\n if (lastDisconnectTime) {\n rightSideMessage = `Last live ${formatDistanceToNow(new Date(lastDisconnectTime))} ago.`;\n }\n }\n\n return (\n
\n
{onlineMessage}
\n
{rightSideMessage}
\n
\n );\n};\nexport default Statusbar;\n\nStatusbar.defaultProps = {\n lastConnectTime: null,\n lastDisconnectTime: null,\n};\n","\"use client\";\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.suspense = suspense;\nexports.NoSSR = NoSSR;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\nvar _noSsrError = require(\"./no-ssr-error\");\n\nfunction suspense() {\n const error = new Error(_noSsrError.NEXT_DYNAMIC_NO_SSR_CODE);\n error.digest = _noSsrError.NEXT_DYNAMIC_NO_SSR_CODE;\n throw error;\n}\nfunction NoSSR({ children }) {\n if (typeof window === 'undefined') {\n suspense();\n }\n return children;\n}\n\n//# sourceMappingURL=dynamic-no-ssr.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = dynamic;\nvar _extends = require(\"@swc/helpers/lib/_extends.js\").default;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\nvar _loadable = _interop_require_default(require(\"./loadable\"));\nfunction dynamic(dynamicOptions, options) {\n let loadableFn = _loadable.default;\n let loadableOptions = {\n // A loading component is not required, so we default it\n loading: ({ error , isLoading , pastDelay })=>{\n if (!pastDelay) return null;\n if (process.env.NODE_ENV !== 'production') {\n if (isLoading) {\n return null;\n }\n if (error) {\n return /*#__PURE__*/ _react.default.createElement(\"p\", null, error.message, /*#__PURE__*/ _react.default.createElement(\"br\", null), error.stack);\n }\n }\n return null;\n }\n };\n // Support for direct import(), eg: dynamic(import('../hello-world'))\n // Note that this is only kept for the edge case where someone is passing in a promise as first argument\n // The react-loadable babel plugin will turn dynamic(import('../hello-world')) into dynamic(() => import('../hello-world'))\n // To make sure we don't execute the import without rendering first\n if (dynamicOptions instanceof Promise) {\n loadableOptions.loader = ()=>dynamicOptions;\n // Support for having import as a function, eg: dynamic(() => import('../hello-world'))\n } else if (typeof dynamicOptions === 'function') {\n loadableOptions.loader = dynamicOptions;\n // Support for having first argument being options, eg: dynamic({loader: import('../hello-world')})\n } else if (typeof dynamicOptions === 'object') {\n loadableOptions = _extends({}, loadableOptions, dynamicOptions);\n }\n // Support for passing options, eg: dynamic(import('../hello-world'), {loading: () =>

Loading something

})\n loadableOptions = _extends({}, loadableOptions, options);\n const loaderFn = loadableOptions.loader;\n const loader = ()=>loaderFn != null ? loaderFn().then(convertModule) : Promise.resolve(convertModule(()=>null));\n // coming from build/babel/plugins/react-loadable-plugin.js\n if (loadableOptions.loadableGenerated) {\n loadableOptions = _extends({}, loadableOptions, loadableOptions.loadableGenerated);\n delete loadableOptions.loadableGenerated;\n }\n // support for disabling server side rendering, eg: dynamic(() => import('../hello-world'), {ssr: false}).\n if (typeof loadableOptions.ssr === 'boolean' && !loadableOptions.ssr) {\n delete loadableOptions.webpack;\n delete loadableOptions.modules;\n }\n return loadableFn(_extends({}, loadableOptions, {\n loader: loader\n }));\n}\n// Normalize loader to return the module as form { default: Component } for `React.lazy`.\n// Also for backward compatible since next/dynamic allows to resolve a component directly with loader\n// Client component reference proxy need to be converted to a module.\nfunction convertModule(mod) {\n var ref;\n return {\n default: ((ref = mod) == null ? void 0 : ref.default) || mod\n };\n}\n\nif ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', { value: true });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n}\n\n//# sourceMappingURL=dynamic.js.map","\"use client\";\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LoadableContext = void 0;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\n\nconst LoadableContext = _react.default.createContext(null);\nexports.LoadableContext = LoadableContext;\nif (process.env.NODE_ENV !== 'production') {\n LoadableContext.displayName = 'LoadableContext';\n}\n\n//# sourceMappingURL=loadable-context.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _extends = require(\"@swc/helpers/lib/_extends.js\").default;\nvar _interop_require_default = require(\"@swc/helpers/lib/_interop_require_default.js\").default;\nvar _react = _interop_require_default(require(\"react\"));\nvar _dynamicNoSsr = require(\"./dynamic-no-ssr\");\nvar _loadableContext = require(\"./loadable-context\");\nconst ALL_INITIALIZERS = [];\nconst READY_INITIALIZERS = [];\nlet initialized = false;\nfunction load(loader) {\n let promise = loader();\n let state = {\n loading: true,\n loaded: null,\n error: null\n };\n state.promise = promise.then((loaded)=>{\n state.loading = false;\n state.loaded = loaded;\n return loaded;\n }).catch((err)=>{\n state.loading = false;\n state.error = err;\n throw err;\n });\n return state;\n}\nfunction createLoadableComponent(loadFn, options) {\n let opts = Object.assign({\n loader: null,\n loading: null,\n delay: 200,\n timeout: null,\n webpack: null,\n modules: null,\n ssr: true\n }, options);\n opts.lazy = /*#__PURE__*/ _react.default.lazy(opts.loader);\n /** @type LoadableSubscription */ let subscription = null;\n function init() {\n if (!subscription) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const sub = new LoadableSubscription(loadFn, opts);\n subscription = {\n getCurrentValue: sub.getCurrentValue.bind(sub),\n subscribe: sub.subscribe.bind(sub),\n retry: sub.retry.bind(sub),\n promise: sub.promise.bind(sub)\n };\n }\n return subscription.promise();\n }\n // Server only\n if (typeof window === 'undefined') {\n ALL_INITIALIZERS.push(init);\n }\n // Client only\n if (!initialized && typeof window !== 'undefined') {\n // require.resolveWeak check is needed for environments that don't have it available like Jest\n const moduleIds = opts.webpack && typeof require.resolveWeak === 'function' ? opts.webpack() : opts.modules;\n if (moduleIds) {\n READY_INITIALIZERS.push((ids)=>{\n for (const moduleId of moduleIds){\n if (ids.indexOf(moduleId) !== -1) {\n return init();\n }\n }\n });\n }\n }\n function useLoadableModule() {\n init();\n const context = _react.default.useContext(_loadableContext.LoadableContext);\n if (context && Array.isArray(opts.modules)) {\n opts.modules.forEach((moduleName)=>{\n context(moduleName);\n });\n }\n }\n function LoadableComponent(props) {\n useLoadableModule();\n const Loading = opts.loading;\n const fallbackElement = /*#__PURE__*/ _react.default.createElement(Loading, {\n isLoading: true,\n pastDelay: true,\n error: null\n });\n const Wrap = opts.ssr ? _react.default.Fragment : _dynamicNoSsr.NoSSR;\n const Lazy = opts.lazy;\n return /*#__PURE__*/ _react.default.createElement(_react.default.Suspense, {\n fallback: fallbackElement\n }, /*#__PURE__*/ _react.default.createElement(Wrap, null, /*#__PURE__*/ _react.default.createElement(Lazy, Object.assign({}, props))));\n }\n LoadableComponent.preload = ()=>init();\n LoadableComponent.displayName = 'LoadableComponent';\n return LoadableComponent;\n}\nclass LoadableSubscription {\n promise() {\n return this._res.promise;\n }\n retry() {\n this._clearTimeouts();\n this._res = this._loadFn(this._opts.loader);\n this._state = {\n pastDelay: false,\n timedOut: false\n };\n const { _res: res , _opts: opts } = this;\n if (res.loading) {\n if (typeof opts.delay === 'number') {\n if (opts.delay === 0) {\n this._state.pastDelay = true;\n } else {\n this._delay = setTimeout(()=>{\n this._update({\n pastDelay: true\n });\n }, opts.delay);\n }\n }\n if (typeof opts.timeout === 'number') {\n this._timeout = setTimeout(()=>{\n this._update({\n timedOut: true\n });\n }, opts.timeout);\n }\n }\n this._res.promise.then(()=>{\n this._update({});\n this._clearTimeouts();\n }).catch((_err)=>{\n this._update({});\n this._clearTimeouts();\n });\n this._update({});\n }\n _update(partial) {\n this._state = _extends({}, this._state, {\n error: this._res.error,\n loaded: this._res.loaded,\n loading: this._res.loading\n }, partial);\n this._callbacks.forEach((callback)=>callback());\n }\n _clearTimeouts() {\n clearTimeout(this._delay);\n clearTimeout(this._timeout);\n }\n getCurrentValue() {\n return this._state;\n }\n subscribe(callback) {\n this._callbacks.add(callback);\n return ()=>{\n this._callbacks.delete(callback);\n };\n }\n constructor(loadFn, opts){\n this._loadFn = loadFn;\n this._opts = opts;\n this._callbacks = new Set();\n this._delay = null;\n this._timeout = null;\n this.retry();\n }\n}\nfunction Loadable(opts) {\n return createLoadableComponent(load, opts);\n}\nfunction flushInitializers(initializers, ids) {\n let promises = [];\n while(initializers.length){\n let init = initializers.pop();\n promises.push(init(ids));\n }\n return Promise.all(promises).then(()=>{\n if (initializers.length) {\n return flushInitializers(initializers, ids);\n }\n });\n}\nLoadable.preloadAll = ()=>{\n return new Promise((resolveInitializers, reject)=>{\n flushInitializers(ALL_INITIALIZERS).then(resolveInitializers, reject);\n });\n};\nLoadable.preloadReady = (ids = [])=>{\n return new Promise((resolvePreload)=>{\n const res = ()=>{\n initialized = true;\n return resolvePreload();\n };\n // We always will resolve, errors should be handled within loading UIs.\n flushInitializers(READY_INITIALIZERS, ids).then(res, res);\n });\n};\nif (typeof window !== 'undefined') {\n window.__NEXT_PRELOADREADY = Loadable.preloadReady;\n}\nvar _default = Loadable;\nexports.default = _default;\n\n//# sourceMappingURL=loadable.js.map","import React from 'react';\nimport { useRecoilValue } from 'recoil';\nimport { useRouter } from 'next/router';\nimport {\n clientConfigStateAtom,\n ClientConfigStore,\n isOnlineSelector,\n serverStatusState,\n} from '../../../components/stores/ClientConfigStore';\nimport { OfflineBanner } from '../../../components/ui/OfflineBanner/OfflineBanner';\nimport { Statusbar } from '../../../components/ui/Statusbar/Statusbar';\nimport { OwncastPlayer } from '../../../components/video/OwncastPlayer/OwncastPlayer';\nimport { ClientConfig } from '../../../interfaces/client-config.model';\nimport { ServerStatus } from '../../../interfaces/server-status.model';\n\nexport default function VideoEmbed() {\n const status = useRecoilValue(serverStatusState);\n const clientConfig = useRecoilValue(clientConfigStateAtom);\n\n const { name } = clientConfig;\n\n const { offlineMessage } = clientConfig;\n const { viewerCount, lastConnectTime, lastDisconnectTime, streamTitle } = status;\n const online = useRecoilValue(isOnlineSelector);\n\n const router = useRouter();\n\n /**\n * router.query isn't initialized until hydration\n * (see https://github.com/vercel/next.js/discussions/11484)\n * but router.asPath is initialized earlier, so we parse the\n * query parameters ourselves\n */\n const path = router.asPath.split('?')[1] ?? '';\n const query = path.split('&').reduce((currQuery, part) => {\n const [key, value] = part.split('=');\n return { ...currQuery, [key]: value };\n }, {} as Record);\n\n const initiallyMuted = query.initiallyMuted === 'true';\n\n return (\n <>\n \n
\n {online && (\n \n )}\n {!online && (\n \n )}\n {online && (\n \n )}\n
\n \n );\n}\n","/* eslint-disable prefer-destructuring */\nconst ADMIN_USERNAME = process.env.NEXT_PUBLIC_ADMIN_USERNAME;\nconst ADMIN_STREAMKEY = process.env.NEXT_PUBLIC_ADMIN_STREAMKEY;\nexport const NEXT_PUBLIC_API_HOST = process.env.NEXT_PUBLIC_API_HOST;\n\nconst API_LOCATION = `${NEXT_PUBLIC_API_HOST}api/admin/`;\n\nexport const FETCH_INTERVAL = 15000;\n\n// Current inbound broadcaster info\nexport const STATUS = `${API_LOCATION}status`;\n\n// Disconnect inbound stream\nexport const DISCONNECT = `${API_LOCATION}disconnect`;\n\n// Change the current streaming key in memory\nexport const STREAMKEY_CHANGE = `${API_LOCATION}changekey`;\n\n// Current server config\nexport const SERVER_CONFIG = `${API_LOCATION}serverconfig`;\n\n// Base url to update config settings\nexport const SERVER_CONFIG_UPDATE_URL = `${API_LOCATION}config`;\n\n// Get viewer count over time\nexport const VIEWERS_OVER_TIME = `${API_LOCATION}viewersOverTime`;\n\n// Get active viewer details\nexport const ACTIVE_VIEWER_DETAILS = `${API_LOCATION}viewers`;\n\n// Get currently connected chat clients\nexport const CONNECTED_CLIENTS = `${API_LOCATION}chat/clients`;\n\n// Get list of disabled/blocked chat users\nexport const DISABLED_USERS = `${API_LOCATION}chat/users/disabled`;\n\n// Disable/enable a single user\nexport const USER_ENABLED_TOGGLE = `${API_LOCATION}chat/users/setenabled`;\n\n// Get banned IP addresses\nexport const BANNED_IPS = `${API_LOCATION}chat/users/ipbans`;\n\n// Remove IP ban\nexport const BANNED_IP_REMOVE = `${API_LOCATION}chat/users/ipbans/remove`;\n\n// Disable/enable a single user\nexport const USER_SET_MODERATOR = `${API_LOCATION}chat/users/setmoderator`;\n\n// Get list of moderators\nexport const MODERATORS = `${API_LOCATION}chat/users/moderators`;\n\n// Get hardware stats\nexport const HARDWARE_STATS = `${API_LOCATION}hardwarestats`;\n\n// Get all logs\nexport const LOGS_ALL = `${API_LOCATION}logs`;\n\n// Get warnings + errors\nexport const LOGS_WARN = `${API_LOCATION}logs/warnings`;\n\n// Get chat history\nexport const CHAT_HISTORY = `${API_LOCATION}chat/messages`;\n\n// Get chat history\nexport const UPDATE_CHAT_MESSGAE_VIZ = `/api/admin/chat/messagevisibility`;\n\n// Upload a new custom emoji\nexport const UPLOAD_EMOJI = `${API_LOCATION}emoji/upload`;\n\n// Delete a custom emoji\nexport const DELETE_EMOJI = `${API_LOCATION}emoji/delete`;\n\n// Get all access tokens\nexport const ACCESS_TOKENS = `${API_LOCATION}accesstokens`;\n\n// Delete a single access token\nexport const DELETE_ACCESS_TOKEN = `${API_LOCATION}accesstokens/delete`;\n\n// Create a new access token\nexport const CREATE_ACCESS_TOKEN = `${API_LOCATION}accesstokens/create`;\n\n// Get webhooks\nexport const WEBHOOKS = `${API_LOCATION}webhooks`;\n\n// Delete a single webhook\nexport const DELETE_WEBHOOK = `${API_LOCATION}webhooks/delete`;\n\n// Create a single webhook\nexport const CREATE_WEBHOOK = `${API_LOCATION}webhooks/create`;\n\n// hard coded social icons list\nexport const SOCIAL_PLATFORMS_LIST = `${NEXT_PUBLIC_API_HOST}api/socialplatforms`;\n\n// set external action links\nexport const EXTERNAL_ACTIONS = `${API_LOCATION}api/externalactions`;\n\n// send a message to the fediverse\nexport const FEDERATION_MESSAGE_SEND = `${API_LOCATION}federation/send`;\n\n// Get followers\nexport const FOLLOWERS = `${API_LOCATION}followers`;\n\n// Get followers pending approval\nexport const FOLLOWERS_PENDING = `${API_LOCATION}followers/pending`;\n\n// Get followers who were blocked or rejected\nexport const FOLLOWERS_BLOCKED = `${API_LOCATION}followers/blocked`;\n\n// Approve, reject a follow request\nexport const SET_FOLLOWER_APPROVAL = `${API_LOCATION}followers/approve`;\n\n// List of inbound federated actions that took place.\nexport const FEDERATION_ACTIONS = `${API_LOCATION}federation/actions`;\n\nexport const API_STREAM_HEALTH_METRICS = `${API_LOCATION}metrics/video`;\n\n// Save an array of stream keys\nexport const UPDATE_STREAM_KEYS = `${API_LOCATION}config/streamkeys`;\n\nexport const API_YP_RESET = `${API_LOCATION}yp/reset`;\n\nexport const TEMP_UPDATER_API = LOGS_ALL;\n\nconst GITHUB_RELEASE_URL = 'https://api.github.com/repos/owncast/owncast/releases/latest';\n\ninterface FetchOptions {\n data?: any;\n method?: string;\n auth?: boolean;\n}\n\nexport async function fetchData(url: string, options?: FetchOptions) {\n const { data, method = 'GET', auth = true } = options || {};\n\n // eslint-disable-next-line no-undef\n const requestOptions: RequestInit = {\n method,\n };\n\n if (data) {\n requestOptions.body = JSON.stringify(data);\n }\n\n if (auth && ADMIN_USERNAME && ADMIN_STREAMKEY) {\n const encoded = btoa(`${ADMIN_USERNAME}:${ADMIN_STREAMKEY}`);\n requestOptions.headers = {\n Authorization: `Basic ${encoded}`,\n };\n requestOptions.mode = 'cors';\n requestOptions.credentials = 'include';\n }\n\n try {\n const response = await fetch(url, requestOptions);\n const json = await response.json();\n\n if (!response.ok) {\n const message = json.message || `An error has occurred: ${response.status}`;\n throw new Error(message);\n }\n return json;\n } catch (error) {\n console.error(error);\n return error;\n // console.log(error)\n // throw new Error(error)\n }\n}\n\nexport async function getUnauthedData(url: string, options?: FetchOptions) {\n const opts = {\n method: 'GET',\n auth: false,\n ...options,\n };\n return fetchData(url, opts);\n}\n\nexport async function fetchExternalData(url: string) {\n try {\n const response = await fetch(url, {\n referrerPolicy: 'no-referrer', // Send no referrer header for privacy reasons.\n referrer: '',\n });\n if (!response.ok) {\n const message = `An error has occured: ${response.status}`;\n throw new Error(message);\n }\n const json = await response.json();\n return json;\n } catch (error) {\n console.log(error);\n }\n return {};\n}\n\nexport async function getGithubRelease() {\n return fetchExternalData(GITHUB_RELEASE_URL);\n}\n\n// Stolen from https://gist.github.com/prenagha/98bbb03e27163bc2f5e4\nconst VPAT = /^\\d+(\\.\\d+){0,2}$/;\nfunction upToDate(local, remote) {\n if (!local || !remote || local.length === 0 || remote.length === 0) return false;\n if (local === remote) return true;\n if (VPAT.test(local) && VPAT.test(remote)) {\n const lparts = local.split('.');\n while (lparts.length < 3) lparts.push('0');\n const rparts = remote.split('.');\n while (rparts.length < 3) rparts.push('0');\n // eslint-disable-next-line no-plusplus\n for (let i = 0; i < 3; i++) {\n const l = parseInt(lparts[i], 10);\n const r = parseInt(rparts[i], 10);\n if (l === r)\n // eslint-disable-next-line no-continue\n continue;\n return l > r;\n }\n return true;\n }\n return local >= remote;\n}\n\n// Make a request to the server status API and the Github releases API\n// and return a release if it's newer than the server version.\nexport async function upgradeVersionAvailable(currentVersion) {\n const recentRelease = await getGithubRelease();\n let recentReleaseVersion = recentRelease.tag_name;\n\n if (recentReleaseVersion.substr(0, 1) === 'v') {\n recentReleaseVersion = recentReleaseVersion.substr(1);\n }\n\n if (!upToDate(currentVersion, recentReleaseVersion)) {\n return recentReleaseVersion;\n }\n\n return null;\n}\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"outerContainer\":\"OfflineBanner_outerContainer__3AbsB\",\"innerContainer\":\"OfflineBanner_innerContainer__zTm13\",\"bodyText\":\"OfflineBanner_bodyText__nNNy0\",\"separator\":\"OfflineBanner_separator___j_Ss\",\"lastLiveDate\":\"OfflineBanner_lastLiveDate___UZdO\",\"clockIcon\":\"OfflineBanner_clockIcon__s0DB_\",\"header\":\"OfflineBanner_header__Vu20o\",\"footer\":\"OfflineBanner_footer__o3Zl5\",\"actionLink\":\"OfflineBanner_actionLink__b4Mwa\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"statusbar\":\"Statusbar_statusbar__AtVnB\"};","module.exports = require('./dist/shared/lib/dynamic')\n","module.exports = require('./dist/client/router')\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}","export default function _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}"],"names":["ConfigContext","react__WEBPACK_IMPORTED_MODULE_0__","createContext","getPrefixCls","suffixCls","customizePrefixCls","concat","ConfigConsumer","Consumer","withConfigConsumer","config","Component","cons","constructor","displayName","name","props","createElement","configProps","basicPrefixCls","prefixCls","_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__","Z","__WEBPACK_AMD_DEFINE_RESULT__","hasOwn","hasOwnProperty","classNames","classes","i","arguments","length","arg","argType","push","Array","isArray","inner","apply","toString","Object","prototype","includes","key","call","join","module","exports","default","undefined","window","__NEXT_P","__webpack_require__","ClockCircleOutlined","dynamic","Promise","all","e","then","t","bind","ssr","OfflineBanner","text","streamName","customText","lastLive","notificationsEnabled","fediverseAccount","showsHeader","onNotifyClick","onFollowClick","param","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsxs","span","jsx","role","tabIndex","className","styles","onClick","div","id","Fragment","Divider","formatDistanceToNow","Date","EyeFilled","Statusbar","rightSideMessage","online","lastConnectTime","lastDisconnectTime","viewerCount","setNow","useState","useEffect","interval","setInterval","clearInterval","onlineMessage","duration","makeDurationString","diff","intervalToDuration","start","end","days","hours","minutes","seconds","defaultProps","value","error","_noSsrError","NEXT_DYNAMIC_NO_SSR_CODE","digest","children","_interop_require_default","require","dynamicOptions","options","loadableFn","_loadable","loadableOptions","loading","isLoading","pastDelay","loader","_extends","loaderFn","convertModule","resolve","loadableGenerated","webpack","modules","mod","ref","__esModule","defineProperty","assign","_react","LoadableContext","_dynamicNoSsr","_loadableContext","ALL_INITIALIZERS","READY_INITIALIZERS","initialized","load","promise","state","loaded","catch","err","LoadableSubscription","_res","retry","_clearTimeouts","_loadFn","_opts","_state","timedOut","res","opts","delay","_delay","setTimeout","_update","timeout","_timeout","partial","_callbacks","forEach","callback","clearTimeout","getCurrentValue","subscribe","add","delete","loadFn","Set","Loadable","createLoadableComponent","lazy","subscription","init","sub","moduleIds","moduleId","ids","indexOf","LoadableComponent","useLoadableModule","context","useContext","moduleName","Loading","fallbackElement","Wrap","NoSSR","Lazy","Suspense","fallback","preload","flushInitializers","initializers","promises","pop","preloadAll","resolveInitializers","reject","preloadReady","resolvePreload","__NEXT_PRELOADREADY","VideoEmbed","router","status","useRecoilValue","serverStatusState","clientConfig","clientConfigStateAtom","offlineMessage","streamTitle","isOnlineSelector","useRouter","path","asPath","split","query","reduce","currQuery","part","initiallyMuted","ClientConfigStore","OwncastPlayer","source","title","ADMIN_USERNAME","process","env","NEXT_PUBLIC_ADMIN_USERNAME","ADMIN_STREAMKEY","NEXT_PUBLIC_ADMIN_STREAMKEY","NEXT_PUBLIC_API_HOST","API_LOCATION","FETCH_INTERVAL","STATUS","SERVER_CONFIG","SERVER_CONFIG_UPDATE_URL","VIEWERS_OVER_TIME","ACTIVE_VIEWER_DETAILS","CONNECTED_CLIENTS","DISABLED_USERS","USER_ENABLED_TOGGLE","BANNED_IPS","BANNED_IP_REMOVE","USER_SET_MODERATOR","MODERATORS","HARDWARE_STATS","LOGS_ALL","LOGS_WARN","CHAT_HISTORY","UPDATE_CHAT_MESSGAE_VIZ","UPLOAD_EMOJI","DELETE_EMOJI","ACCESS_TOKENS","DELETE_ACCESS_TOKEN","CREATE_ACCESS_TOKEN","WEBHOOKS","DELETE_WEBHOOK","CREATE_WEBHOOK","SOCIAL_PLATFORMS_LIST","FEDERATION_MESSAGE_SEND","FOLLOWERS","FOLLOWERS_PENDING","FOLLOWERS_BLOCKED","SET_FOLLOWER_APPROVAL","FEDERATION_ACTIONS","API_STREAM_HEALTH_METRICS","UPDATE_STREAM_KEYS","API_YP_RESET","fetchData","url","data","method","auth","requestOptions","body","JSON","stringify","encoded","btoa","headers","Authorization","mode","credentials","response","fetch","json","ok","message","console","getUnauthedData","fetchExternalData","referrerPolicy","referrer","log","getGithubRelease","VPAT","upgradeVersionAvailable","currentVersion","recentRelease","recentReleaseVersion","tag_name","substr","upToDate","local","remote","test","lparts","rparts","l","parseInt","r","target","_assertThisInitialized","self","_defineProperty","obj","_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__","enumerable","configurable","writable","_inherits","subClass","superClass","create","_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_setPrototypeOf","o","p","setPrototypeOf","__proto__","_toPropertyKey","_toPrimitive","input","hint","esm_typeof","prim","Symbol","toPrimitive","String","Number","_typeof","iterator"],"sourceRoot":""} \ No newline at end of file diff --git a/static/web/_next/static/chunks/pages/embed/video-d719b38032ab0471.js b/static/web/_next/static/chunks/pages/embed/video-d719b38032ab0471.js deleted file mode 100644 index 2725bea54..000000000 --- a/static/web/_next/static/chunks/pages/embed/video-d719b38032ab0471.js +++ /dev/null @@ -1,6 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3126,5202],{53124:function(e,t,n){"use strict";n.d(t,{C:function(){return a},E_:function(){return i},PG:function(){return s}});var r=n(87462),o=n(67294),i=o.createContext({getPrefixCls:function(e,t){return t||(e?"ant-".concat(e):"ant")}}),a=i.Consumer;function s(e){return function(t){var n=t.constructor;return n&&n.displayName||t.name,function(n){return o.createElement(a,null,function(i){var a=e.prefixCls,s=(0,i.getPrefixCls)(a,n.prefixCls);return o.createElement(t,(0,r.Z)({},i,n,{prefixCls:s}))})}}}},94184:function(e,t){var n;/*! - Copyright (c) 2018 Jed Watson. - Licensed under the MIT License (MIT), see - http://jedwatson.github.io/classnames -*/!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var e=[],t=0;tPromise.all([n.e(2074),n.e(2138),n.e(9095)]).then(n.t.bind(n,69095,23)),{loadableGenerated:{webpack:()=>[69095]},ssr:!1}),f=e=>{let t,{streamName:n,customText:a,lastLive:s,notificationsEnabled:c,fediverseAccount:f,onNotifyClick:d,onFollowClick:p}=e;return t=a||(!a&&c&&f?(0,r.jsxs)("span",{children:["This stream is offline. You can"," ",(0,r.jsx)("span",{role:"link",tabIndex:0,className:u().actionLink,onClick:d,children:"be notified"})," ","the next time ",n," goes live or"," ",(0,r.jsx)("span",{role:"link",tabIndex:0,className:u().actionLink,onClick:p,children:"follow"})," ",f," on the Fediverse."]}):!a&&c?(0,r.jsxs)("span",{children:["This stream is offline."," ",(0,r.jsx)("span",{role:"link",tabIndex:0,className:u().actionLink,onClick:d,children:"Be notified"})," ","the next time ",n," goes live."]}):!a&&f?(0,r.jsxs)("span",{children:["This stream is offline."," ",(0,r.jsx)("span",{role:"link",tabIndex:0,className:u().actionLink,onClick:p,children:"Follow"})," ",f," on the Fediverse to see the next time ",n," goes live."]}):"This stream is offline. Check back soon!"),(0,r.jsx)("div",{id:"offline-banner",className:u().outerContainer,children:(0,r.jsxs)("div",{className:u().innerContainer,children:[(0,r.jsx)("div",{className:u().header,children:n}),(0,r.jsx)(o.Z,{className:u().separator}),(0,r.jsx)("div",{className:u().bodyText,children:t}),s&&(0,r.jsxs)("div",{className:u().lastLiveDate,children:[(0,r.jsx)(l,{className:u().clockIcon}),"Last live ".concat((0,i.Z)(new Date(s))," ago.")]})]})})}},69357:function(e,t,n){"use strict";n.d(t,{X:function(){return d}});var r=n(85893),o=n(45938),i=n(68730),a=n(67294),s=n(5152),c=n.n(s),u=n(37970),l=n.n(u);let f=c()(()=>Promise.all([n.e(2074),n.e(2138),n.e(1965)]).then(n.t.bind(n,41965,23)),{loadableGenerated:{webpack:()=>[41965]},ssr:!1}),d=e=>{let t,{online:n,lastConnectTime:s,lastDisconnectTime:c,viewerCount:u}=e,[,d]=(0,a.useState)(new Date);(0,a.useEffect)(()=>{let e=setInterval(()=>d(new Date),1e3);return()=>{clearInterval(e)}},[]);let p="";if(n&&s){let e=function(e){let t=(0,i.Z)({start:e,end:new Date});return t.days>1?"".concat(t.days," days ").concat(t.hours," hours"):t.hours>=1?"".concat(t.hours," hours ").concat(t.minutes," minutes"):"".concat(t.minutes," minutes ").concat(t.seconds," seconds")}(new Date(s));p=n?"Live for ".concat(e):"Offline",t=u>0&&(0,r.jsxs)("div",{className:l().right,children:[(0,r.jsx)("span",{children:(0,r.jsx)(f,{})}),(0,r.jsx)("span",{children:" ".concat(u)})]})}else!n&&(p="Offline",c&&(t="Last live ".concat((0,o.Z)(new Date(c))," ago.")));return(0,r.jsxs)("div",{className:l().statusbar,role:"status",children:[(0,r.jsx)("div",{children:p}),(0,r.jsx)("div",{children:t})]})};d.defaultProps={lastConnectTime:null,lastDisconnectTime:null}},54564:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.suspense=function(){let e=Error(r.NEXT_DYNAMIC_NO_SSR_CODE);throw e.digest=r.NEXT_DYNAMIC_NO_SSR_CODE,e},t.NoSSR=function(e){let{children:t}=e;return t},(0,n(92648).Z)(n(67294));var r=n(92983)},37645:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){let n=i.default,o={loading:e=>{let{error:t,isLoading:n,pastDelay:r}=e;return null}};e instanceof Promise?o.loader=()=>e:"function"==typeof e?o.loader=e:"object"==typeof e&&(o=r({},o,e)),o=r({},o,t);let s=o.loader,c=()=>null!=s?s().then(a):Promise.resolve(a(()=>null));return o.loadableGenerated&&delete(o=r({},o,o.loadableGenerated)).loadableGenerated,"boolean"!=typeof o.ssr||o.ssr||(delete o.webpack,delete o.modules),n(r({},o,{loader:c}))};var r=n(6495).Z,o=n(92648).Z;o(n(67294));var i=o(n(14588));function a(e){return{default:(null==e?void 0:e.default)||e}}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},33644:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LoadableContext=void 0;var r=(0,n(92648).Z)(n(67294));let o=r.default.createContext(null);t.LoadableContext=o},14588:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(6495).Z,o=(0,n(92648).Z)(n(67294)),i=n(54564),a=n(33644);let s=[],c=[],u=!1;function l(e){let t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then(e=>(n.loading=!1,n.loaded=e,e)).catch(e=>{throw n.loading=!1,n.error=e,e}),n}class f{promise(){return this._res.promise}retry(){this._clearTimeouts(),this._res=this._loadFn(this._opts.loader),this._state={pastDelay:!1,timedOut:!1};let{_res:e,_opts:t}=this;e.loading&&("number"==typeof t.delay&&(0===t.delay?this._state.pastDelay=!0:this._delay=setTimeout(()=>{this._update({pastDelay:!0})},t.delay)),"number"==typeof t.timeout&&(this._timeout=setTimeout(()=>{this._update({timedOut:!0})},t.timeout))),this._res.promise.then(()=>{this._update({}),this._clearTimeouts()}).catch(e=>{this._update({}),this._clearTimeouts()}),this._update({})}_update(e){this._state=r({},this._state,{error:this._res.error,loaded:this._res.loaded,loading:this._res.loading},e),this._callbacks.forEach(e=>e())}_clearTimeouts(){clearTimeout(this._delay),clearTimeout(this._timeout)}getCurrentValue(){return this._state}subscribe(e){return this._callbacks.add(e),()=>{this._callbacks.delete(e)}}constructor(e,t){this._loadFn=e,this._opts=t,this._callbacks=new Set,this._delay=null,this._timeout=null,this.retry()}}function d(e){return function(e,t){let n=Object.assign({loader:null,loading:null,delay:200,timeout:null,webpack:null,modules:null,ssr:!0},t);n.lazy=o.default.lazy(n.loader);let r=null;function s(){if(!r){let t=new f(e,n);r={getCurrentValue:t.getCurrentValue.bind(t),subscribe:t.subscribe.bind(t),retry:t.retry.bind(t),promise:t.promise.bind(t)}}return r.promise()}if(!u){let e=n.webpack?n.webpack():n.modules;e&&c.push(t=>{for(let n of e)if(-1!==t.indexOf(n))return s()})}function l(e){!function(){s();let e=o.default.useContext(a.LoadableContext);e&&Array.isArray(n.modules)&&n.modules.forEach(t=>{e(t)})}();let t=n.loading,r=o.default.createElement(t,{isLoading:!0,pastDelay:!0,error:null}),c=n.ssr?o.default.Fragment:i.NoSSR,u=n.lazy;return o.default.createElement(o.default.Suspense,{fallback:r},o.default.createElement(c,null,o.default.createElement(u,Object.assign({},e))))}return l.preload=()=>s(),l.displayName="LoadableComponent",l}(l,e)}function p(e,t){let n=[];for(;e.length;){let r=e.pop();n.push(r(t))}return Promise.all(n).then(()=>{if(e.length)return p(e,t)})}d.preloadAll=()=>new Promise((e,t)=>{p(s).then(e,t)}),d.preloadReady=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return new Promise(t=>{let n=()=>(u=!0,t());p(c,e).then(n,n)})},window.__NEXT_PRELOADREADY=d.preloadReady,t.default=d},29942:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return l}});var r=n(85893);n(67294);var o=n(4480),i=n(11163),a=n(77466),s=n(51513),c=n(69357),u=n(8888);function l(){var e;let t=(0,o.sJ)(a.RI),n=(0,o.sJ)(a.g1),{name:l}=n,{offlineMessage:f}=n,{viewerCount:d,lastConnectTime:p,lastDisconnectTime:h,streamTitle:m}=t,_=(0,o.sJ)(a.YW),b=(0,i.useRouter)(),y=null!==(e=b.asPath.split("?")[1])&&void 0!==e?e:"",v=y.split("&").reduce((e,t)=>{let[n,r]=t.split("=");return{...e,[n]:r}},{}),g="true"===v.initiallyMuted;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(a.me,{}),(0,r.jsxs)("div",{className:"video-embed",children:[_&&(0,r.jsx)(u.OwncastPlayer,{source:"/hls/stream.m3u8",online:_,initiallyMuted:g,title:m||l}),!_&&(0,r.jsx)(s.R,{streamName:l,customText:f,notificationsEnabled:!1}),_&&(0,r.jsx)(c.X,{online:_,lastConnectTime:p,lastDisconnectTime:h,viewerCount:d})]})]})}},64777:function(e,t,n){"use strict";n.d(t,{$i:function(){return B},$l:function(){return z},Bu:function(){return b},E8:function(){return A},Ff:function(){return C},GC:function(){return g},GR:function(){return Q},HP:function(){return L},IO:function(){return T},Kp:function(){return h},Kt:function(){return U},M_:function(){return Z},N$:function(){return X},NE:function(){return c},NM:function(){return _},Q_:function(){return u},Qc:function(){return N},RB:function(){return y},UJ:function(){return Y},WB:function(){return a},WE:function(){return O},WQ:function(){return j},Wr:function(){return P},XA:function(){return S},Y9:function(){return I},a_:function(){return p},ao:function(){return f},bl:function(){return l},e_:function(){return R},hn:function(){return k},iG:function(){return D},iV:function(){return d},jr:function(){return v},kb:function(){return M},kg:function(){return J},ms:function(){return E},nx:function(){return x},op:function(){return G},qk:function(){return m},rQ:function(){return V},sG:function(){return w},um:function(){return F}});var r=n(34155);let o=r.env.NEXT_PUBLIC_ADMIN_USERNAME,i=r.env.NEXT_PUBLIC_ADMIN_STREAMKEY,a="/",s="".concat(a,"api/admin/"),c=15e3,u="".concat(s,"status"),l="".concat(s,"serverconfig"),f="".concat(s,"config"),d="".concat(s,"viewersOverTime"),p="".concat(s,"viewers"),h="".concat(s,"chat/clients"),m="".concat(s,"chat/users/disabled"),_="".concat(s,"chat/users/setenabled"),b="".concat(s,"chat/users/ipbans"),y="".concat(s,"chat/users/ipbans/remove"),v="".concat(s,"chat/users/setmoderator"),g="".concat(s,"chat/users/moderators"),x="".concat(s,"hardwarestats"),w="".concat(s,"logs"),j="".concat(s,"logs/warnings"),O="".concat(s,"chat/messages"),k="/api/admin/chat/messagevisibility",N="".concat(s,"emoji/upload"),C="".concat(s,"emoji/delete"),E="".concat(s,"accesstokens"),P="".concat(s,"accesstokens/delete"),T="".concat(s,"accesstokens/create"),S="".concat(s,"webhooks"),Z="".concat(s,"webhooks/delete"),D="".concat(s,"webhooks/create"),B="".concat(a,"api/socialplatforms"),R="".concat(s,"federation/send"),L="".concat(s,"followers"),A="".concat(s,"followers/pending"),I="".concat(s,"followers/blocked"),M="".concat(s,"followers/approve"),G="".concat(s,"federation/actions"),X="".concat(s,"metrics/video"),F="".concat(s,"config/streamkeys"),Y="".concat(s,"yp/reset");async function V(e,t){let{data:n,method:r="GET",auth:a=!0}=t||{},s={method:r};if(n&&(s.body=JSON.stringify(n)),a&&o&&i){let e=btoa("".concat(o,":").concat(i));s.headers={Authorization:"Basic ".concat(e)},s.mode="cors",s.credentials="include"}try{let t=await fetch(e,s),n=await t.json();if(!t.ok){let e=n.message||"An error has occurred: ".concat(t.status);throw Error(e)}return n}catch(e){return console.error(e),e}}async function z(e,t){let n={method:"GET",auth:!1,...t};return V(e,n)}async function J(e){try{let t=await fetch(e,{referrerPolicy:"no-referrer",referrer:""});if(!t.ok){let e="An error has occured: ".concat(t.status);throw Error(e)}let n=await t.json();return n}catch(e){console.log(e)}return{}}async function U(){return J("https://api.github.com/repos/owncast/owncast/releases/latest")}let W=/^\d+(\.\d+){0,2}$/;async function Q(e){let t=await U(),n=t.tag_name;return("v"===n.substr(0,1)&&(n=n.substr(1)),!function(e,t){if(!e||!t||0===e.length||0===t.length)return!1;if(e===t)return!0;if(W.test(e)&&W.test(t)){let n=e.split(".");for(;n.length<3;)n.push("0");let r=t.split(".");for(;r.length<3;)r.push("0");for(let e=0;e<3;e++){let t=parseInt(n[e],10),o=parseInt(r[e],10);if(t!==o)return t>o}return!0}return e>=t}(e,n))?n:null}},88335:function(e){e.exports={outerContainer:"OfflineBanner_outerContainer__3AbsB",innerContainer:"OfflineBanner_innerContainer__zTm13",bodyText:"OfflineBanner_bodyText__nNNy0",separator:"OfflineBanner_separator___j_Ss",lastLiveDate:"OfflineBanner_lastLiveDate___UZdO",clockIcon:"OfflineBanner_clockIcon__s0DB_",header:"OfflineBanner_header__Vu20o",footer:"OfflineBanner_footer__o3Zl5",actionLink:"OfflineBanner_actionLink__b4Mwa"}},37970:function(e){e.exports={statusbar:"Statusbar_statusbar__AtVnB"}},5152:function(e,t,n){e.exports=n(37645)},11163:function(e,t,n){e.exports=n(80880)},10434:function(e){function t(){return e.exports=t=Object.assign?Object.assign.bind():function(e){for(var t=1;tn.e(5903).then(n.t.bind(n,5903,23)),{loadableGenerated:{webpack:()=>[5903]},ssr:!1}),d=e=>{let{onClick:t,props:n}=e;return(0,o.jsx)(s.Z,{...n,type:"primary",className:l().button,icon:(0,o.jsx)(c,{}),onClick:t,id:"follow-button",children:"Follow"})}},6097:function(e,t,n){"use strict";n.d(t,{h:function(){return f}});var o=n(85893),s=n(94199),a=n(20550),i=n(94184),r=n.n(i),l=n(5152),c=n.n(l),d=n(41664),u=n.n(d),m=n(50738),h=n(31764),p=n.n(h);let x=c()(()=>Promise.all([n.e(4931),n.e(3013),n.e(850)]).then(n.bind(n,80850)).then(e=>e.UserDropdown),{loadableGenerated:{webpack:()=>[80850]},ssr:!1}),f=e=>{let{name:t="Your stream title",chatAvailable:n,chatDisabled:i,online:l}=e;return(0,o.jsxs)("header",{className:r()(["".concat(p().header)],"global-header"),children:[l&&(0,o.jsx)(u(),{href:"#player",className:p().skipLink,children:"Skip to player"}),(0,o.jsx)(u(),{href:"#skip-to-content",className:p().skipLink,children:"Skip to page content"}),(0,o.jsx)(u(),{href:"#footer",className:p().skipLink,children:"Skip to footer"}),(0,o.jsxs)("div",{className:p().logo,children:[(0,o.jsx)("div",{id:"header-logo",className:p().logoImage,children:(0,o.jsx)(m.C,{variant:"contrast"})}),(0,o.jsx)("h1",{className:p().title,id:"global-header-text",children:t})]}),n&&!i&&(0,o.jsx)(x,{}),!n&&!i&&(0,o.jsx)(s.Z,{title:"Chat is available when the stream is live.",placement:"left",children:(0,o.jsx)(a.Z,{style:{cursor:"pointer"},children:"Chat offline"})})]})};t.Z=f},14761:function(e,t,n){"use strict";n.r(t),n.d(t,{Modal:function(){return d}});var o=n(85893),s=n(85402),a=n(26303),i=n(11382),r=n(67294),l=n(77011),c=n.n(l);let d=e=>{let{title:t,url:n,open:l,handleOk:d,handleCancel:u,afterClose:m,height:h,width:p,children:x}=e,[f,j]=(0,r.useState)(!!n),_="100%",g="520px";n&&(_="70vh",g="900px");let b={padding:"0px",minHeight:h,height:null!=h?h:_},v=n&&(0,o.jsx)("iframe",{title:t,src:n,width:"100%",height:"100%",sandbox:"allow-same-origin allow-scripts allow-popups allow-forms",frameBorder:"0",allowFullScreen:!0,style:{display:"block"},onLoad:()=>j(!1)});return(0,o.jsx)(s.Z,{title:t,open:l,onOk:d,onCancel:u,afterClose:m,bodyStyle:b,width:null!=p?p:g,zIndex:999,footer:null,centered:!0,destroyOnClose:!0,children:(0,o.jsxs)("div",{id:"modal-container",style:{height:"100%"},children:[f&&(0,o.jsx)(a.Z,{active:f,style:{padding:"10px"},paragraph:{rows:10}}),v&&(0,o.jsx)("div",{style:{display:f?"none":"inline"},children:v}),x&&(0,o.jsx)("div",{className:c().content,children:x}),f&&(0,o.jsx)(i.Z,{className:c().spinner,spinning:f,size:"large"})]})})};t.default=d,d.defaultProps={url:void 0,children:void 0,handleOk:void 0,handleCancel:void 0,afterClose:void 0}},51513:function(e,t,n){"use strict";n.d(t,{R:function(){return u}});var o=n(85893),s=n(27049),a=n(45938),i=n(5152),r=n.n(i),l=n(88335),c=n.n(l);let d=r()(()=>Promise.all([n.e(2074),n.e(2138),n.e(9095)]).then(n.t.bind(n,69095,23)),{loadableGenerated:{webpack:()=>[69095]},ssr:!1}),u=e=>{let t,{streamName:n,customText:i,lastLive:r,notificationsEnabled:l,fediverseAccount:u,showsHeader:m=!0,onNotifyClick:h,onFollowClick:p}=e;return t=i||(!i&&l&&u?(0,o.jsxs)("span",{children:["This stream is offline. You can"," ",(0,o.jsx)("span",{role:"link",tabIndex:0,className:c().actionLink,onClick:h,children:"be notified"})," ","the next time ",n," goes live or"," ",(0,o.jsx)("span",{role:"link",tabIndex:0,className:c().actionLink,onClick:p,children:"follow"})," ",u," on the Fediverse."]}):!i&&l?(0,o.jsxs)("span",{children:["This stream is offline."," ",(0,o.jsx)("span",{role:"link",tabIndex:0,className:c().actionLink,onClick:h,children:"Be notified"})," ","the next time ",n," goes live."]}):!i&&u?(0,o.jsxs)("span",{children:["This stream is offline."," ",(0,o.jsx)("span",{role:"link",tabIndex:0,className:c().actionLink,onClick:p,children:"Follow"})," ",u," on the Fediverse to see the next time ",n," goes live."]}):"This stream is offline. Check back soon!"),(0,o.jsx)("div",{id:"offline-banner",className:c().outerContainer,children:(0,o.jsxs)("div",{className:c().innerContainer,children:[m&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:c().header,children:n}),(0,o.jsx)(s.Z,{className:c().separator})]}),(0,o.jsx)("div",{className:c().bodyText,children:t}),r&&(0,o.jsxs)("div",{className:c().lastLiveDate,children:[(0,o.jsx)(d,{className:c().clockIcon}),"Last live ".concat((0,a.Z)(new Date(r))," ago.")]})]})})}},69357:function(e,t,n){"use strict";n.d(t,{X:function(){return m}});var o=n(85893),s=n(45938),a=n(68730),i=n(67294),r=n(5152),l=n.n(r),c=n(37970),d=n.n(c);let u=l()(()=>Promise.all([n.e(2074),n.e(2138),n.e(1965)]).then(n.t.bind(n,41965,23)),{loadableGenerated:{webpack:()=>[41965]},ssr:!1}),m=e=>{let t,{online:n,lastConnectTime:r,lastDisconnectTime:l,viewerCount:c}=e,[,m]=(0,i.useState)(new Date);(0,i.useEffect)(()=>{let e=setInterval(()=>m(new Date),1e3);return()=>{clearInterval(e)}},[]);let h="";if(n&&r){let e=function(e){let t=(0,a.Z)({start:e,end:new Date});return t.days>1?"".concat(t.days," days ").concat(t.hours," hours"):t.hours>=1?"".concat(t.hours," hours ").concat(t.minutes," minutes"):"".concat(t.minutes," minutes ").concat(t.seconds," seconds")}(new Date(r));h=n?"Live for ".concat(e):"Offline",t=c>0&&(0,o.jsxs)("div",{className:d().right,children:[(0,o.jsx)("span",{children:(0,o.jsx)(u,{})}),(0,o.jsx)("span",{children:" ".concat(c)})]})}else!n&&(h="Offline",l&&(t="Last live ".concat((0,s.Z)(new Date(l))," ago.")));return(0,o.jsxs)("div",{className:d().statusbar,role:"status",children:[(0,o.jsx)("div",{children:h}),(0,o.jsx)("div",{children:t})]})};m.defaultProps={lastConnectTime:null,lastDisconnectTime:null}},56152:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return eH}});var o=n(85893),s=n(4480),a=n(9008),i=n.n(a),r=n(67294),l=n(97183),c=n(5152),d=n.n(c),u=n(4298),m=n.n(u),h=n(77466),p=n(26303),x=n(72581),f=n(83469),j=n(10808),_=n.n(j);let g=e=>{let{content:t}=e;return(0,o.jsx)("div",{className:_().pageContentContainer,id:"custom-page-content",children:(0,o.jsx)("div",{className:_().customPageContent,dangerouslySetInnerHTML:{__html:t}})})};var b=n(17725),v=n.n(b),w=n(87412),k=n(12341),y=n.n(k);let N=d()(()=>Promise.all([n.e(1272),n.e(8700),n.e(1323),n.e(4977),n.e(1496)]).then(n.bind(n,94977)).then(e=>e.ChatContainer),{loadableGenerated:{webpack:()=>[94977]},ssr:!1}),C=()=>{let e=(0,s.sJ)(h.db),t=(0,s.sJ)(h.pH);if(!e)return(0,o.jsx)(w.ZP,{className:y().root,collapsedWidth:0,width:320});let{id:n,isModerator:a,displayName:i}=e;return(0,o.jsx)(w.ZP,{className:y().root,collapsedWidth:0,width:320,children:(0,o.jsx)(N,{messages:t,usernameToHighlight:i,chatUserId:n,isModerator:a})})};var S=n(67917),L=n.n(S);let T=e=>{let{version:t}=e;return(0,o.jsxs)("footer",{className:L().footer,id:"footer",children:[(0,o.jsxs)("span",{children:["Powered by ",(0,o.jsx)("a",{href:"https://owncast.online",children:t})]}),(0,o.jsxs)("span",{className:L().links,children:[(0,o.jsx)("a",{href:"https://owncast.online/docs",target:"_blank",rel:"noreferrer",children:"Documentation"}),(0,o.jsx)("a",{href:"https://owncast.online/help",target:"_blank",rel:"noreferrer",children:"Contribute"}),(0,o.jsx)("a",{href:"https://github.com/owncast/owncast",target:"_blank",rel:"noreferrer",children:"Source"})]})]})};var B=n(12270),D=n.n(B);let I=e=>{let{children:t}=e;return(0,o.jsx)("div",{className:"".concat(D().row),children:t})};var H=n(71577),M=n(94184),Z=n.n(M),A=n(13959),E=n.n(A);let F=e=>{let{action:t,primary:n=!0,externalActionSelected:s}=e,{title:a,description:i,icon:r,color:l}=t;return(0,o.jsxs)(H.Z,{type:n?"primary":"default",className:Z()(["".concat(E().button),"action-button"]),onClick:()=>s(t),style:{backgroundColor:l},children:[r&&(0,o.jsx)("img",{src:r,className:"".concat(E().icon),alt:i}),a]})};var P=n(51513),R=n(78696);let z=d()(()=>n.e(62).then(n.t.bind(n,30062,23)),{loadableGenerated:{webpack:()=>[30062]},ssr:!1}),G=e=>{let{onClick:t,text:n}=e;return(0,o.jsx)(H.Z,{type:"primary",className:"".concat(E().button),icon:(0,o.jsx)(z,{}),onClick:t,id:"notify-button",children:n||"Notify"})};var O=n(53731),J=n(74933),U=n.n(J);let W=e=>{let{src:t}=e;return(0,o.jsx)("div",{className:U().root,children:(0,o.jsx)("div",{className:U().container,children:(0,o.jsx)("img",{src:t,alt:"Logo",className:U().image,loading:"lazy"})})})};var q=n(25675),Y=n.n(q),Q=n(573),V=n.n(Q);let K=e=>{let{links:t}=e;return(0,o.jsx)("div",{className:V().links,children:t.map(e=>(0,o.jsx)("a",{href:e.url,className:V().link,target:"_blank",rel:"noreferrer me",children:(0,o.jsx)(Y(),{src:e.icon||"/img/platformlogos/default.svg",alt:e.platform,className:V().link,width:"30",height:"30"})},e.platform))})};var X=n(47900),$=n.n(X);let ee=e=>{let{name:t,title:n,summary:s,logo:a,tags:i,links:r}=e;return(0,o.jsx)("div",{className:$().root,children:(0,o.jsxs)("div",{className:$().logoTitleSection,children:[(0,o.jsx)("div",{className:$().logo,children:(0,o.jsx)(W,{src:a})}),(0,o.jsxs)("div",{className:$().titleSection,children:[(0,o.jsx)("h2",{className:Z()($().title,$().row,"header-title"),children:t}),(0,o.jsx)("h3",{className:Z()($().subtitle,$().row,"header-subtitle"),children:(0,o.jsx)(O.Z,{children:n||s})}),(0,o.jsx)("div",{className:Z()($().tagList,$().row),children:i.length>0&&i.map(e=>(0,o.jsxs)("span",{children:["#",e,"\xa0"]},e))}),(0,o.jsx)("div",{className:Z()($().socialLinks,$().row),children:(0,o.jsx)(K,{links:r})})]})]})})};var et=n(69357),en=n(14761),eo=n(66516),es=n(13013),ea=n(97038),ei=n.n(ea);let er=d()(()=>n.e(6937).then(n.t.bind(n,26937,23)),{loadableGenerated:{webpack:()=>[26937]},ssr:!1}),el=d()(()=>n.e(6820).then(n.t.bind(n,96820,23)),{loadableGenerated:{webpack:()=>[96820]},ssr:!1}),ec=d()(()=>n.e(1008).then(n.t.bind(n,11008,23)),{loadableGenerated:{webpack:()=>[11008]},ssr:!1}),ed="notify",eu="follow",em=e=>{let{actions:t,externalActionSelected:n,notifyItemSelected:s,followItemSelected:a,showFollowItem:i,showNotifyItem:r,className:l}=e,c=e=>{if(e.key===ed){s();return}if(e.key===eu){a();return}let o=t.find(t=>t.url===e.key);n(o)},d=t.map(e=>({key:e.url,label:(0,o.jsxs)("span",{className:ei().item,children:[e.icon&&(0,o.jsx)("img",{className:ei().icon,src:e.icon,alt:e.title})," ",e.title]})}));i&&d.unshift({key:eu,label:(0,o.jsxs)("span",{className:ei().item,children:[(0,o.jsx)(el,{className:ei().icon})," Follow this stream"]})}),r&&d.unshift({key:ed,label:(0,o.jsxs)("span",{className:ei().item,children:[(0,o.jsx)(ec,{className:ei().icon}),"Notify when live"]})});let u=(0,o.jsx)(eo.Z,{items:d,onClick:c}),m=Z()([ei().menu,l]);return(0,o.jsx)(es.Z,{overlay:u,placement:"bottomRight",trigger:["click"],className:m,children:(0,o.jsx)("div",{className:ei().buttonWrap,children:(0,o.jsx)(H.Z,{type:"default",onClick:e=>e.preventDefault(),size:"large",icon:(0,o.jsx)(er,{size:6,style:{rotate:"90deg"}})})})})},eh=d()(()=>Promise.all([n.e(6386),n.e(3698),n.e(5817)]).then(n.bind(n,15508)).then(e=>e.FollowerCollection),{loadableGenerated:{webpack:()=>[15508]},ssr:!1}),ep=d()(()=>Promise.all([n.e(173),n.e(2231),n.e(7177)]).then(n.bind(n,77177)).then(e=>e.FollowModal),{loadableGenerated:{webpack:()=>[77177]},ssr:!1}),ex=d()(()=>Promise.all([n.e(173),n.e(5818),n.e(1424)]).then(n.bind(n,11424)).then(e=>e.BrowserNotifyModal),{loadableGenerated:{webpack:()=>[11424]},ssr:!1}),ef=d()(()=>n.e(7815).then(n.bind(n,17815)).then(e=>e.NotifyReminderPopup),{loadableGenerated:{webpack:()=>[17815]},ssr:!1}),ej=d()(()=>Promise.all([n.e(2544),n.e(7689),n.e(2239),n.e(5202)]).then(n.bind(n,8888)).then(e=>e.OwncastPlayer),{loadableGenerated:{webpack:()=>[8888]},ssr:!1}),e_=d()(()=>Promise.all([n.e(1272),n.e(8700),n.e(1323),n.e(4977),n.e(1496)]).then(n.bind(n,94977)).then(e=>e.ChatContainer),{loadableGenerated:{webpack:()=>[94977]},ssr:!1}),eg=d()(()=>Promise.all([n.e(4885),n.e(173),n.e(2231),n.e(5818),n.e(9915),n.e(6386),n.e(3698),n.e(4398),n.e(4381),n.e(5101),n.e(7910),n.e(4763),n.e(9292),n.e(9816),n.e(7916),n.e(3859),n.e(4768)]).then(n.bind(n,74768)).then(e=>e.Tabs),{loadableGenerated:{webpack:()=>[74768]},ssr:!1}),eb=e=>{let{name:t,streamTitle:n,summary:s,tags:a,socialHandles:i,extraPageContent:r,setShowFollowModal:l,supportFediverseFeatures:c}=e,d=(0,o.jsx)(g,{content:r}),u=(0,o.jsx)("div",{style:{minHeight:"16vh"},children:(0,o.jsx)(eh,{name:t,onFollowButtonClick:()=>l(!0)})}),m=[{label:"About",key:"2",children:d}];return c&&m.push({label:"Followers",key:"3",children:u}),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:v().lowerHalf,id:"skip-to-content",children:(0,o.jsx)(ee,{name:t,title:n,summary:s,tags:a,links:i,logo:"/logo"})}),(0,o.jsx)("div",{className:v().lowerSection,children:m.length>1?(0,o.jsx)(eg,{defaultActiveKey:"0",items:m}):d})]})},ev=e=>{let{name:t,streamTitle:n,summary:s,tags:a,socialHandles:i,extraPageContent:r,messages:l,currentUser:c,showChat:d,actions:u,setExternalActionToDisplay:m,setShowNotifyPopup:h,setShowFollowModal:x,supportFediverseFeatures:f,supportsBrowserNotifications:j}=e;if(!c)return(0,o.jsx)(p.Z,{loading:!0,active:!0,paragraph:{rows:7}});let{id:_,displayName:b}=c,w=d&&(0,o.jsx)(e_,{messages:l,usernameToHighlight:b,chatUserId:_,isModerator:!1}),k=(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(ee,{name:t,title:n,summary:s,tags:a,links:i,logo:"/logo"}),(0,o.jsx)(g,{content:r})]}),y=(0,o.jsx)(eh,{name:t,onFollowButtonClick:()=>x(!0)}),N=(e,t)=>(0,o.jsxs)("div",{className:v().replacementBar,children:[(0,o.jsx)(t,{...e,className:v().defaultTabBar}),(0,o.jsx)(em,{className:v().actionButtonMenu,showFollowItem:f,showNotifyItem:j,actions:u,externalActionSelected:m,notifyItemSelected:()=>h(!0),followItemSelected:()=>x(!0)})]});return(0,o.jsx)("div",{className:v().lowerSectionMobile,children:(0,o.jsx)(eg,{className:v().tabs,defaultActiveKey:"0",items:[d&&{label:"Chat",key:"0",children:w},{label:"About",key:"2",children:k},{label:"Followers",key:"3",children:y}],renderTabBar:N})})},ew=e=>{let{externalActionToDisplay:t,setExternalActionToDisplay:n}=e,{title:s,description:a,url:i}=t;return(0,o.jsx)(en.Modal,{title:a||s,url:i,open:!!t,height:"80vh",handleCancel:()=>n(null)})},ek=()=>{let e=(0,s.sJ)(h.Q),t=(0,s.sJ)(h.g1),n=(0,s.sJ)(h.pT),a=(0,s.sJ)(h.di),i=(0,s.sJ)(h.db),l=(0,s.sJ)(h.RI),[c,d]=(0,s.FV)(h.hz),u=(0,s.sJ)(h.j$),m=(0,s.sJ)(h.YW),{viewerCount:j,lastConnectTime:_,lastDisconnectTime:g,streamTitle:b}=(0,s.sJ)(h.RI),{extraPageContent:w,version:k,name:y,summary:N,socialHandles:S,tags:L,externalActions:B,offlineMessage:D,chatDisabled:H,federation:M,notifications:Z}=t,[A,E]=(0,r.useState)(!1),[z,O]=(0,r.useState)(!1),[J,U]=(0,r.useState)(!1),{account:W,enabled:q}=M,{browser:Y}=Z,{enabled:Q}=Y,{online:V}=l,[K,X]=(0,r.useState)(null),[$,ee]=(0,r.useState)(!1),eo=e=>{let{openExternally:t,url:n}=e;t?window.open(n,"_blank"):X(e)},es=B.map(e=>(0,o.jsx)(F,{action:e,externalActionSelected:eo},e.url)),ea=()=>{let e=parseInt((0,x.$o)(x.dA.userVisitCount),10);Number.isNaN(e)&&(e=0),(0,x.qQ)(x.dA.userVisitCount,e+1),e>2&&!(0,x.$o)(x.dA.hasDisplayedNotificationModal)&&E(!0)},ei=()=>{O(!1),E(!1),(0,x.qQ)(x.dA.hasDisplayedNotificationModal,!0)},er=()=>{let e=window.innerWidth;void 0===c&&(e<=768?d(!0):d(!1)),!c&&e<=768&&d(!0),c&&e>768&&d(!1)};(0,r.useEffect)(()=>(ea(),er(),window.addEventListener("resize",er),()=>{window.removeEventListener("resize",er)}),[]),(0,r.useEffect)(()=>{ee((0,f.Z)()&&Q)},[Q]);let el=!H&&a&&n;return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("div",{className:v().main,children:(0,o.jsxs)("div",{className:v().root,children:[(0,o.jsxs)("div",{className:v().mainSection,children:[(0,o.jsxs)("div",{className:v().topSection,children:[e.appLoading&&(0,o.jsx)(p.Z,{loading:!0,active:!0,paragraph:{rows:7}}),m&&(0,o.jsx)(ej,{source:"/hls/stream.m3u8",online:m,title:b||y}),!m&&!e.appLoading&&(0,o.jsx)(P.R,{showsHeader:!1,streamName:y,customText:D,notificationsEnabled:Q,fediverseAccount:W,lastLive:g,onNotifyClick:()=>O(!0),onFollowClick:()=>U(!0)}),V&&(0,o.jsx)(et.X,{online:m,lastConnectTime:_,lastDisconnectTime:g,viewerCount:j})]}),(0,o.jsx)("div",{className:v().midSection,children:(0,o.jsxs)("div",{className:v().buttonsLogoTitleSection,children:[!c&&(0,o.jsxs)(I,{children:[es,q&&(0,o.jsx)(R.e,{size:"small",onClick:()=>U(!0)}),$&&(0,o.jsx)(ef,{open:A,notificationClicked:()=>O(!0),notificationClosed:()=>ei(),children:(0,o.jsx)(G,{onClick:()=>O(!0)})})]}),(0,o.jsx)(en.Modal,{title:"Browser Notifications",open:z,afterClose:()=>ei(),handleCancel:()=>ei(),children:(0,o.jsx)(ex,{})})]})}),c?(0,o.jsx)(ev,{name:y,streamTitle:b,summary:N,tags:L,socialHandles:S,extraPageContent:w,messages:u,currentUser:i,showChat:el,actions:B,setExternalActionToDisplay:eo,setShowNotifyPopup:O,setShowFollowModal:U,supportFediverseFeatures:q,supportsBrowserNotifications:$}):(0,o.jsx)(eb,{name:y,streamTitle:b,summary:N,tags:L,socialHandles:S,extraPageContent:w,setShowFollowModal:U,supportFediverseFeatures:q}),!c&&(0,o.jsx)(T,{version:k})]}),el&&!c&&(0,o.jsx)(C,{})]})}),K&&(0,o.jsx)(ew,{externalActionToDisplay:K,setExternalActionToDisplay:X}),(0,o.jsx)(en.Modal,{title:"Follow ".concat(y),open:J,handleCancel:()=>U(!1),width:"550px",children:(0,o.jsx)(ep,{account:W,name:y,handleClose:()=>U(!1)})})]})};var ey=n(6097);let eN=e=>{let{name:t}=e,n=(0,s.sJ)(h.j$),o=(0,s.sJ)(h.RI),[a,i]=(0,r.useState)(!1),{online:l}=o,c=e=>{document.title=e},d=()=>{i(!0)},u=()=>{i(!1),c(t)},m=()=>{window.addEventListener("blur",d),window.addEventListener("focus",u)},p=()=>{window.removeEventListener("blur",d),window.removeEventListener("focus",u)};return(0,r.useEffect)(()=>(m(),()=>{p()}),[t]),(0,r.useEffect)(()=>{if(!a||!l)return;let e=n[n.length-1];"CHAT"===e.type&&c("\uD83D\uDCAC :: ".concat(t))},[n,t]),(0,r.useEffect)(()=>{a&&(l?c(" \uD83D\uDFE2 :: ".concat(t)):l||c(" \uD83D\uDD34 :: ".concat(t)))},[l,t]),null},eC=()=>(0,o.jsx)("script",{id:"server-side-hydration",nonce:"{{.Nonce}}",dangerouslySetInnerHTML:{__html:"\n window.configHydration = {{.ServerConfigJSON}};\n window.statusHydration = {{.StatusJSON}};\n "}}),eS=()=>{let e=(0,s.sJ)(h.g1),{appearanceVariables:t,customStyles:n}=e,a=Object.keys(t).filter(e=>!!t[e]).map(e=>"--".concat(e,": ").concat(t[e]));return(0,o.jsx)("style",{dangerouslySetInnerHTML:{__html:"\n :root {\n ".concat(a.join(";\n"),"\n }\n ").concat(n,"\n ")}})};var eL=n(94636),eT=n.n(eL);let eB=()=>{let e=()=>{navigator.serviceWorker.register("/serviceWorker.js").then(e=>{console.debug("Service Worker registration successful with scope: ",e.scope)},e=>{console.error("Service Worker registration failed: ",e)})};return(0,r.useEffect)(()=>("serviceWorker"in navigator&&window.addEventListener("load",e),()=>{window.removeEventListener("load",e)}),[]),null},eD=d()(()=>n.e(3625).then(n.bind(n,3625)).then(e=>e.FatalErrorStateModal),{loadableGenerated:{webpack:()=>[3625]},ssr:!1}),eI=()=>{let e=(0,s.sJ)(h.g1),{name:t,title:n,customStyles:a}=e,c=(0,s.sJ)(h.di),d=(0,s.sJ)(h.ap),u=(0,s.sJ)(h.Q),p=(0,r.useRef)(null),{chatDisabled:x}=e,{videoAvailable:f}=u;return(0,r.useEffect)(()=>{!function(e){let t=e=>{let t=e.getAttribute("rel");e.setAttribute("rel","".concat(t," noopener noreferrer"))};e.querySelectorAll("a").forEach(e=>t(e));let n=new MutationObserver(function(e){for(let n of e)for(let e of n.addedNodes)e instanceof HTMLElement&&"a"===e.tagName.toLowerCase()&&t(e)});n.observe(e,{attributes:!1,childList:!0,subtree:!0})}(p.current)},[]),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(i(),{children:[(0,o.jsx)(eC,{}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"57x57",href:"/img/favicon/apple-icon-57x57.png"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"60x60",href:"/img/favicon/apple-icon-60x60.png"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"72x72",href:"/img/favicon/apple-icon-72x72.png"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"76x76",href:"/img/favicon/apple-icon-76x76.png"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"114x114",href:"/img/favicon/apple-icon-114x114.png"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"120x120",href:"/img/favicon/apple-icon-120x120.png"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"144x144",href:"/img/favicon/apple-icon-144x144.png"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"152x152",href:"/img/favicon/apple-icon-152x152.png"}),(0,o.jsx)("link",{rel:"apple-touch-icon",sizes:"180x180",href:"/img/favicon/apple-icon-180x180.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"192x192",href:"/img/favicon/android-icon-192x192.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"32x32",href:"/img/favicon/favicon-32x32.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"96x96",href:"/img/favicon/favicon-96x96.png"}),(0,o.jsx)("link",{rel:"icon",type:"image/png",sizes:"16x16",href:"/img/favicon/favicon-16x16.png"}),(0,o.jsx)("link",{rel:"manifest",href:"/manifest.json"}),(0,o.jsx)("link",{href:"/api/auth/provider/indieauth"}),(0,o.jsx)("meta",{name:"msapplication-TileColor",content:"#ffffff"}),(0,o.jsx)("meta",{name:"msapplication-TileImage",content:"/img/favicon/ms-icon-144x144.png"}),(0,o.jsx)("meta",{name:"theme-color",content:"#ffffff"}),(0,o.jsxs)("style",{children:[a,"\nbody {\n overflow: hidden;\n}\n"]}),(0,o.jsx)("base",{target:"_blank"})]}),(0,o.jsxs)(i(),{children:[t?(0,o.jsx)("title",{children:t}):(0,o.jsx)("title",{children:"{{.Name}}"}),(0,o.jsx)("meta",{name:"description",content:"{{.Summary}}"}),(0,o.jsx)("meta",{property:"og:title",content:"{{.Name}}"}),(0,o.jsx)("meta",{property:"og:site_name",content:"{{.Name}}"}),(0,o.jsx)("meta",{property:"og:url",content:"{{.RequestedURL}}"}),(0,o.jsx)("meta",{property:"og:description",content:"{{.Summary}}"}),(0,o.jsx)("meta",{property:"og:type",content:"video.other"}),(0,o.jsx)("meta",{property:"video:tag",content:"{{.TagsString}}"}),(0,o.jsx)("meta",{property:"og:image",content:"{{.RequestedURL}}{{.Thumbnail}}"}),(0,o.jsx)("meta",{property:"og:image:url",content:"{{.RequestedURL}}{{.Thumbnail}}"}),(0,o.jsx)("meta",{property:"og:image:alt",content:"{{.RequestedURL}}{{.Image}}"}),(0,o.jsx)("meta",{property:"og:video",content:"{{.RequestedURL}}/embed/video"}),(0,o.jsx)("meta",{property:"og:video:secure_url",content:"{{.RequestedURL}}/embed/video"}),(0,o.jsx)("meta",{property:"og:video:height",content:"315"}),(0,o.jsx)("meta",{property:"og:video:width",content:"560"}),(0,o.jsx)("meta",{property:"og:video:type",content:"text/html"}),(0,o.jsx)("meta",{property:"og:video:actor",content:"{{.Name}}"}),(0,o.jsx)("meta",{property:"twitter:title",content:"{{.Name}}"}),(0,o.jsx)("meta",{property:"twitter:url",content:"{{.RequestedURL}}"}),(0,o.jsx)("meta",{property:"twitter:description",content:"{{.Summary}}"}),(0,o.jsx)("meta",{property:"twitter:image",content:"{{.Image}}"}),(0,o.jsx)("meta",{property:"twitter:card",content:"player"}),(0,o.jsx)("meta",{property:"twitter:player",content:"{{.RequestedURL}}/embed/video"}),(0,o.jsx)("meta",{property:"twitter:player:width",content:"560"}),(0,o.jsx)("meta",{property:"twitter:player:height",content:"315"})]}),(0,o.jsx)(h.me,{}),(0,o.jsx)(eB,{}),(0,o.jsx)(eN,{name:t}),(0,o.jsx)(eS,{}),(0,o.jsx)(m(),{strategy:"afterInteractive",src:"/customjavascript"}),(0,o.jsxs)(l.Z,{ref:p,className:eT().layout,children:[(0,o.jsx)(ey.h,{name:n||t,chatAvailable:c,chatDisabled:x,online:f}),(0,o.jsx)(ek,{}),d&&(0,o.jsx)(eD,{title:d.title,message:d.message})]})]})};function eH(){return(0,o.jsx)(eI,{})}eH.getLayout=function(e){return e}},83469:function(e,t,n){"use strict";function o(){return"serviceWorker"in navigator&&"PushManager"in window}n.d(t,{Z:function(){return o}})},13959:function(e){e.exports={button:"ActionButton_button__z5Z2c",icon:"ActionButton_icon__EPp7Q"}},97038:function(e){e.exports={item:"ActionButtonMenu_item__OJQdr",buttonWrap:"ActionButtonMenu_buttonWrap__WQ9kt",icon:"ActionButtonMenu_icon__edY1D",menu:"ActionButtonMenu_menu__GChDk"}},12270:function(e){e.exports={row:"ActionButtonRow_row__SiEGe"}},47900:function(e){e.exports={root:"ContentHeader_root__HaUG0",row:"ContentHeader_row__9Q8gH",logoTitleSection:"ContentHeader_logoTitleSection__Z8pUc",logo:"ContentHeader_logo__wo_HN",titleSection:"ContentHeader_titleSection___6Y15",title:"ContentHeader_title__E_DsI",subtitle:"ContentHeader_subtitle__n1Wew",tagList:"ContentHeader_tagList__rx3jY"}},94636:function(e){e.exports={layout:"Main_layout__Bm6Gz"}},17725:function(e){e.exports={root:"Content_root__h1mNK",mainSection:"Content_mainSection__Gk78Y",topSection:"Content_topSection__JIZi0",lowerSection:"Content_lowerSection__BZHYI",lowerSectionMobile:"Content_lowerSectionMobile__hRr0_",leftCol:"Content_leftCol__U2TDq",loadingSpinner:"Content_loadingSpinner__mDlYC",main:"Content_main__XVf63",replacementBar:"Content_replacementBar__yLglI",defaultTabBar:"Content_defaultTabBar__BjyV0",actionButtonMenu:"Content_actionButtonMenu__dQUjK",tabs:"Content_tabs__LMcZ1"}},10808:function(e){e.exports={pageContentContainer:"CustomPageContent_pageContentContainer__EG4tU",customPageContent:"CustomPageContent_customPageContent__Mr981",summary:"CustomPageContent_summary___Zgps"}},67917:function(e){e.exports={footer:"Footer_footer__mPuvf",links:"Footer_links__7bBxV"}},31764:function(e){e.exports={header:"Header_header__U4Ro1",logoImage:"Header_logoImage__beIL2",logo:"Header_logo__HLZ6Z",title:"Header_title__FIts2",skipLink:"Header_skipLink__9Pusb"}},74933:function(e){e.exports={root:"Logo_root__jKiJC",container:"Logo_container__A4UYT",image:"Logo_image__Ahkom"}},77011:function(e){e.exports={spinner:"Modal_spinner__GiSS0",content:"Modal_content__h9my9"}},88335:function(e){e.exports={outerContainer:"OfflineBanner_outerContainer__3AbsB",innerContainer:"OfflineBanner_innerContainer__zTm13",bodyText:"OfflineBanner_bodyText__nNNy0",separator:"OfflineBanner_separator___j_Ss",lastLiveDate:"OfflineBanner_lastLiveDate___UZdO",clockIcon:"OfflineBanner_clockIcon__s0DB_",header:"OfflineBanner_header__Vu20o",footer:"OfflineBanner_footer__o3Zl5",actionLink:"OfflineBanner_actionLink__b4Mwa"}},12341:function(e){e.exports={root:"Sidebar_root__8HE0A"}},573:function(e){e.exports={link:"SocialLinks_link___CcSm",links:"SocialLinks_links__gOAb7"}},37970:function(e){e.exports={statusbar:"Statusbar_statusbar__AtVnB"}}},function(e){e.O(0,[2074,164,2138,31,4931,5402,492,3013,5938,6395,2928,9863,4252,281,710,7466,9774,2888,179],function(){return e(e.s=48312)}),_N_E=e.O()}]); +//# sourceMappingURL=index-bdafcb99f7642b3d.js.map \ No newline at end of file diff --git a/static/web/_next/static/chunks/pages/index-bdafcb99f7642b3d.js.map b/static/web/_next/static/chunks/pages/index-bdafcb99f7642b3d.js.map new file mode 100644 index 000000000..888ba9994 --- /dev/null +++ b/static/web/_next/static/chunks/pages/index-bdafcb99f7642b3d.js.map @@ -0,0 +1 @@ +{"version":3,"file":"static/chunks/pages/index-bdafcb99f7642b3d.js","mappings":"sFACA,CAAAA,OAAAC,QAAA,CAAAD,OAAAC,QAAA,MAAAC,IAAA,EACA,IACA,WACA,OAAeC,EAAQ,MACvB,EACA,uICEA,IAAMC,EAAcC,IAAQ,IAAMF,EAAAG,CAAA,OAAAC,IAAA,CAAAJ,EAAAK,CAAA,CAAAC,IAAA,CAAAN,EAAA,UAAO,wCACvCO,IAAK,KAQMC,EAAsC,GACjD,IADkD,CAAEC,QAAAA,CAAAA,CAASC,MAAAA,CAAAA,CAAO,CAAAC,QACpE,GAAAC,EAAAC,GAAA,EAACC,EAAAA,CAAMA,CAAAA,CACJ,GAAGJ,CAAK,CACTK,KAAK,UACLC,UAAWC,IAAAA,MAAAA,CACXC,KAAM,GAAAN,EAAAC,GAAA,EAACZ,EAAAA,CAAAA,GACPQ,QAASA,EACTU,GAAG,yBACJ,UAEO,oMCjBV,IAAMC,EAAelB,IACnB,IAAMmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,QAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,QAAiDI,IAAI,CAACmB,GAAOA,EAAIH,YAAY,2CAEjFb,IAAK,KAWIiB,EAAmC,GAM9C,IAN+C,CAC/CC,KAAAA,EAAO,oBACPC,cAAAA,CAAAA,CACAC,aAAAA,CAAAA,CACAC,OAAAA,CAAAA,CACD,CAAAjB,QACC,GAAAC,EAAAiB,IAAA,EAACC,SAAAA,CAAOd,UAAWe,IAAG,CAAE,GAAgBC,MAAA,CAAdf,IAAAA,MAAAA,EAAgB,CAAE,2BACzCW,GACC,GAAAhB,EAAAC,GAAA,EAACoB,IAAIA,CAACC,KAAK,UAAUlB,UAAWC,IAAAA,QAAAA,UAAiB,mBAInD,GAAAL,EAAAC,GAAA,EAACoB,IAAIA,CAACC,KAAK,mBAAmBlB,UAAWC,IAAAA,QAAAA,UAAiB,yBAG1D,GAAAL,EAAAC,GAAA,EAACoB,IAAIA,CAACC,KAAK,UAAUlB,UAAWC,IAAAA,QAAAA,UAAiB,mBAGjD,GAAAL,EAAAiB,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,IAAAA,WACd,GAAAL,EAAAC,GAAA,EAACsB,MAAAA,CAAIhB,GAAG,cAAcH,UAAWC,IAAAA,SAAAA,UAC/B,GAAAL,EAAAC,GAAA,EAACuB,EAAAA,CAAWA,CAAAA,CAACC,QAAQ,eAEvB,GAAAzB,EAAAC,GAAA,EAACyB,KAAAA,CAAGtB,UAAWC,IAAAA,KAAAA,CAAcE,GAAG,8BAC7BM,OAGJC,GAAiB,CAACC,GAAgB,GAAAf,EAAAC,GAAA,EAACO,EAAAA,CAAAA,GACnC,CAACM,GAAiB,CAACC,GAClB,GAAAf,EAAAC,GAAA,EAAC0B,EAAAA,CAAOA,CAAAA,CAACC,MAAM,6CAA6CC,UAAU,gBACpE,GAAA7B,EAAAC,GAAA,EAAC6B,EAAAA,CAAGA,CAAAA,CAACC,MAAO,CAAEC,OAAQ,SAAU,WAAG,qBAGjC,CAEVC,CAAAA,EAAA,EAAerB,gKC1CR,IAAMsB,EAAwB,GAU/B,IAVgC,CACpCN,MAAAA,CAAAA,CACAO,IAAAA,CAAAA,CACAC,KAAAA,CAAAA,CACAC,SAAAA,CAAAA,CACAC,aAAAA,CAAAA,CACAC,WAAAA,CAAAA,CACAC,OAAAA,CAAAA,CACAC,MAAAA,CAAAA,CACAC,SAAAA,CAAAA,CACD,CAAA3C,EACO,CAAC4C,EAASC,EAAW,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,CAAC,CAACV,GAErCW,EAAgB,OAChBC,EAAe,QACfZ,IACFW,EAAgB,OAChBC,EAAe,SAGjB,IAAMC,EAAwB,CAC5BC,QAAS,MACTC,UAAWV,EACXA,OAAQA,MAAAA,EAAAA,EAAUM,CAAa,EAG3BK,EAAShB,GACb,GAAAnC,EAAAC,GAAA,EAACkD,SAAAA,CACCvB,MAAOA,EACPwB,IAAKjB,EACLM,MAAM,OACND,OAAO,OACPa,QAAQ,2DACRC,YAAY,IACZC,gBAAe,GACfxB,MAAO,CAAEyB,QAAS,OAAQ,EAE1BC,OAAQ,IAAMb,EAAW,MAM7B,MACE,GAAA5C,EAAAC,GAAA,EAACyD,EAAAA,CAAQA,CAAAA,CACP9B,MAAOA,EACPQ,KAAMA,EACNuB,KAAMtB,EACNuB,SAAUtB,EACVC,WAAYA,EACZsB,UAAWb,EACXP,MAAOA,MAAAA,EAAAA,EAASM,CAAY,CAC5Be,OAAQ,IACRC,OAAQ,IAAI,CACZC,SAAQ,GACRC,eAAc,YAEd,GAAAjE,EAAAiB,IAAA,EAACM,MAAAA,CAAIhB,GAAG,kBAAkBwB,MAAO,CAAES,OAAQ,MAAO,YAC/CG,GACC,GAAA3C,EAAAC,GAAA,EAACiE,EAAAA,CAAQA,CAAAA,CAACC,OAAQxB,EAASZ,MAAO,CAAEkB,QAAS,MAAO,EAAGmB,UAAW,CAAEC,KAAM,EAAG,IAG9ElB,GAAU,GAAAnD,EAAAC,GAAA,EAACsB,MAAAA,CAAIQ,MAAO,CAAEyB,QArBJb,EAAU,OAAS,QAAQ,WAqBSQ,IACxDT,GAAY,GAAA1C,EAAAC,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,OAAAA,UAAiBqC,IAC7CC,GAAW,GAAA3C,EAAAC,GAAA,EAACqE,EAAAA,CAAIA,CAAAA,CAAClE,UAAWC,IAAAA,OAAAA,CAAgBkE,SAAU5B,EAAS6B,KAAK,cAI7E,CACAvC,CAAAA,EAAA,QAAeC,EAEfA,EAAMuC,YAAY,CAAG,CACnBtC,IAAKuC,KAAAA,EACLhC,SAAUgC,KAAAA,EACVrC,SAAUqC,KAAAA,EACVpC,aAAcoC,KAAAA,EACdnC,WAAYmC,KAAAA,CACd,kJCpFA,IAAMC,EAAsBrF,IAAQ,IAAMmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAK,CAAA,CAAAC,IAAA,CAAAN,EAAA,WAAO,yCAC/CO,IAAK,KAcMiF,EAAwC,GAS/C,KACAC,EAVgD,CACpDC,WAAAA,CAAAA,CACAC,WAAAA,CAAAA,CACAC,SAAAA,CAAAA,CACAC,qBAAAA,CAAAA,CACAC,iBAAAA,CAAAA,CACAC,YAAAA,EAAc,EAAI,CAClBC,cAAAA,CAAAA,CACAC,cAAAA,CAAAA,CACD,CAAAtF,EA0CC,OAvCE8E,EADEE,IAEO,CAACA,GAAcE,GAAwBC,EAE9C,GAAAlF,EAAAiB,IAAA,EAACqE,OAAAA,WAAK,kCAC4B,IAChC,GAAAtF,EAAAC,GAAA,EAACqF,OAAAA,CAAKC,KAAK,OAAOC,SAAU,EAAGpF,UAAWC,IAAAA,UAAAA,CAAmBR,QAASuF,WAAe,gBAE7E,IAAI,iBACGN,EAAW,gBAAc,IACxC,GAAA9E,EAAAC,GAAA,EAACqF,OAAAA,CAAKC,KAAK,OAAOC,SAAU,EAAGpF,UAAWC,IAAAA,UAAAA,CAAmBR,QAASwF,WAAe,WAE7E,IACPH,EAAiB,wBAGb,CAACH,GAAcE,EAEtB,GAAAjF,EAAAiB,IAAA,EAACqE,OAAAA,WAAK,0BACoB,IACxB,GAAAtF,EAAAC,GAAA,EAACqF,OAAAA,CAAKC,KAAK,OAAOC,SAAU,EAAGpF,UAAWC,IAAAA,UAAAA,CAAmBR,QAASuF,WAAe,gBAE7E,IAAI,iBACGN,EAAW,iBAGrB,CAACC,GAAcG,EAEtB,GAAAlF,EAAAiB,IAAA,EAACqE,OAAAA,WAAK,0BACoB,IACxB,GAAAtF,EAAAC,GAAA,EAACqF,OAAAA,CAAKC,KAAK,OAAOC,SAAU,EAAGpF,UAAWC,IAAAA,UAAAA,CAAmBR,QAASwF,WAAe,WAE7E,IACPH,EAAiB,0CAAwCJ,EAAW,iBAIjE,4CAIR,GAAA9E,EAAAC,GAAA,EAACsB,MAAAA,CAAIhB,GAAG,iBAAiBH,UAAWC,IAAAA,cAAAA,UAClC,GAAAL,EAAAiB,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,cAAAA,WACb8E,GACC,GAAAnF,EAAAiB,IAAA,EAAAjB,EAAAyF,QAAA,YACE,GAAAzF,EAAAC,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,MAAAA,UAAgByE,IAChC,GAAA9E,EAAAC,GAAA,EAACyF,EAAAA,CAAOA,CAAAA,CAACtF,UAAWC,IAAAA,SAAAA,MAGxB,GAAAL,EAAAC,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,QAAAA,UAAkBwE,IACjCG,GACC,GAAAhF,EAAAiB,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,YAAAA,WACd,GAAAL,EAAAC,GAAA,EAAC0E,EAAAA,CAAoBvE,UAAWC,IAAAA,SAAAA,GAC9B,aAAoDe,MAAA,CAAxCuE,CAAAA,EAAAA,EAAAA,CAAAA,EAAoB,IAAIC,KAAKZ,IAAW,gBAMlE,6JCtFA,IAAMa,EAAYvG,IAAQ,IAAMmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAK,CAAA,CAAAC,IAAA,CAAAN,EAAA,WAAO,yCACrCO,IAAK,KAsBMmG,EAAgC,GAKvC,KAYAC,EAjBwC,CAC5C/E,OAAAA,CAAAA,CACAgF,gBAAAA,CAAAA,CACAC,mBAAAA,CAAAA,CACAC,YAAAA,CAAAA,CACD,CAAAnG,EACO,EAAGoG,EAAO,CAAGtD,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAAI+C,MAGhCQ,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,CACd,IAAMC,EAAWC,YAAY,IAAMH,EAAO,IAAIP,MAAS,KACvD,MAAO,IAAM,CACXW,cAAcF,EAChB,CACF,EAAG,EAAE,EAEL,IAAIG,EAAgB,GAEpB,GAAIxF,GAAUgF,EAAiB,CAC7B,IAAMS,EAAWC,SA/BOV,CAAqB,CAAU,CACzD,IAAMW,EAAOC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB,CAAEC,MAAOb,EAAiBc,IAAK,IAAIlB,IAAO,UAC1E,EAASmB,IAAI,CAAG,EACP,GAAqBJ,MAAAA,CAAlBA,EAAKI,IAAI,CAAC,UAAmB3F,MAAA,CAAXuF,EAAKK,KAAK,CAAC,UAErCL,EAAKK,KAAK,EAAI,EACT,GAAuBL,MAAAA,CAApBA,EAAKK,KAAK,CAAC,WAAsB5F,MAAA,CAAbuF,EAAKM,OAAO,CAAC,YAGtC,GAA2BN,MAAAA,CAAxBA,EAAKM,OAAO,CAAC,aAAwB7F,MAAA,CAAbuF,EAAKO,OAAO,CAAC,WAL9C,EA2BqC,IAAItB,KAAKI,IAC7CQ,EAAgBxF,EAAS,aAAsBI,MAAA,CAATqF,GAAa,SAAS,CAC5DV,EAAmBG,EAAc,GAC/B,GAAAlG,EAAAiB,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,KAAAA,WACd,GAAAL,EAAAC,GAAA,EAACqF,OAAAA,UACC,GAAAtF,EAAAC,GAAA,EAAC4F,EAAAA,CAAAA,KAEH,GAAA7F,EAAAC,GAAA,EAACqF,OAAAA,UAAM,IAAgBlE,MAAA,CAAZ8E,OAGjB,KAAW,CAAClF,IACVwF,EAAgB,UACZP,GACFF,CAAAA,EAAmB,aAA+D3E,MAAA,CAAlDuE,CAAAA,EAAAA,EAAAA,CAAAA,EAAoB,IAAIC,KAAKK,IAAqB,UAErF,CAED,MACE,GAAAjG,EAAAiB,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,SAAAA,CAAkBkF,KAAK,mBACrC,GAAAvF,EAAAC,GAAA,EAACsB,MAAAA,UAAKiF,IACN,GAAAxG,EAAAC,GAAA,EAACsB,MAAAA,UAAKwE,MAGZ,CAGAD,CAAAA,EAAUrB,YAAY,CAAG,CACvBuB,gBAAiB,IAAI,CACrBC,mBAAoB,IAAI,4PCtEnB,IAAMkB,EAAgD,GAC3D,IAD4D,CAAEC,QAAAA,CAAAA,CAAS,CAAArH,QACvE,GAAAsH,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,oBAA2B,CAAEE,GAAG,+BAC9C,GAAA8G,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,iBAAwB,CAAEiH,wBAAyB,CAAEC,OAAQH,CAAQ,KAClF,yDCDP,IAAMI,EAAgBlI,IACpB,IAAMmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,QAAiDI,IAAI,CAACmB,GAAOA,EAAI6G,aAAa,2CAElF7H,IAAK,KAII8H,EAAc,IAAM,CAC/B,IAAMC,EAAcC,CAAAA,EAAAA,EAAAA,EAAAA,EAAeC,EAAAA,EAAeA,EAC5CC,EAAWF,CAAAA,EAAAA,EAAAA,EAAAA,EAA8BG,EAAAA,EAA2BA,EAC1E,GAAI,CAACJ,EACH,MAAO,GAAAL,EAAApH,GAAA,EAAC8H,EAAAA,EAAKA,CAAAA,CAAC3H,UAAWC,IAAAA,IAAW,CAAE2H,eAAgB,EAAGvF,MAAO,KACjE,CAED,GAAM,CAAElC,GAAAA,CAAAA,CAAI0H,YAAAA,CAAAA,CAAaC,YAAAA,CAAAA,CAAa,CAAGR,EACzC,MACE,GAAAL,EAAApH,GAAA,EAAC8H,EAAAA,EAAKA,CAAAA,CAAC3H,UAAWC,IAAAA,IAAW,CAAE2H,eAAgB,EAAGvF,MAAO,aACvD,GAAA4E,EAAApH,GAAA,EAACuH,EAAAA,CACCK,SAAUA,EACVM,oBAAqBD,EACrBE,WAAY7H,EACZ0H,YAAaA,KAIrB,0BC5BO,IAAMI,EAA0B,GACrC,IADsC,CAAEC,QAAAA,CAAAA,CAAS,CAAAvI,QACjD,GAAAsH,EAAApG,IAAA,EAAC8C,SAAAA,CAAO3D,UAAWC,IAAAA,MAAa,CAAEE,GAAG,mBACnC,GAAA8G,EAAApG,IAAA,EAACqE,OAAAA,WAAK,cACO,GAAA+B,EAAApH,GAAA,EAACsI,IAAAA,CAAEjH,KAAK,kCAA0BgH,OAE/C,GAAAjB,EAAApG,IAAA,EAACqE,OAAAA,CAAKlF,UAAWC,IAAAA,KAAY,WAC3B,GAAAgH,EAAApH,GAAA,EAACsI,IAAAA,CAAEjH,KAAK,8BAA8BkH,OAAO,SAASC,IAAI,sBAAa,kBAGvE,GAAApB,EAAApH,GAAA,EAACsI,IAAAA,CAAEjH,KAAK,8BAA8BkH,OAAO,SAASC,IAAI,sBAAa,eAGvE,GAAApB,EAAApH,GAAA,EAACsI,IAAAA,CAAEjH,KAAK,qCAAqCkH,OAAO,SAASC,IAAI,sBAAa,gBAI1E,0BChBH,IAAMC,EAA4C,GACvD,IADwD,CAAEhG,SAAAA,CAAAA,CAAU,CAAA3C,QACpE,GAAAsH,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAW,GAAcgB,MAAA,CAAXf,IAAAA,GAAU,WAAKqC,GAAc,yDCI3C,IAAMiG,EAAsC,GAI7C,IAJ8C,CAClDC,OAAAA,CAAAA,CACAC,QAAAA,EAAU,EAAI,CACdC,uBAAAA,CAAAA,CACD,CAAA/I,EACO,CAAE6B,MAAAA,CAAAA,CAAOmH,YAAAA,CAAAA,CAAazI,KAAAA,CAAAA,CAAM0I,MAAAA,CAAAA,CAAO,CAAGJ,EAE5C,MACE,GAAAvB,EAAApG,IAAA,EAACf,EAAAA,CAAMA,CAAAA,CACLC,KAAM0I,EAAU,UAAY,SAAS,CACrCzI,UAAWe,IAAG,CAAE,GAAgBC,MAAA,CAAdf,IAAAA,MAAa,EAAI,gBAAgB,EACnDR,QAAS,IAAMiJ,EAAuBF,GACtC7G,MAAO,CAAEkH,gBAAiBD,CAAM,YAE/B1I,GAAQ,GAAA+G,EAAApH,GAAA,EAACiJ,MAAAA,CAAI9F,IAAK9C,EAAMF,UAAW,GAAegB,MAAA,CAAZf,IAAAA,IAAW,EAAI8I,IAAKJ,IAC1DnH,IAGP,4BCvBA,IAAMwH,EAAa9J,IAAQ,IAAMF,EAAAG,CAAA,KAAAC,IAAA,CAAAJ,EAAAK,CAAA,CAAAC,IAAA,CAAAN,EAAA,WAAO,yCACtCO,IAAK,KAQM0J,EAAsC,GACjD,IADkD,CAAExJ,QAAAA,CAAAA,CAASgF,KAAAA,CAAAA,CAAM,CAAA9E,QACnE,GAAAsH,EAAApH,GAAA,EAACC,EAAAA,CAAMA,CAAAA,CACLC,KAAK,UACLC,UAAW,GAAiBgB,MAAA,CAAdf,IAAAA,MAAa,EAC3BC,KAAM,GAAA+G,EAAApH,GAAA,EAACmJ,EAAAA,CAAAA,GACPvJ,QAASA,EACTU,GAAG,yBAEFsE,GAAQ,UACH,qCClBH,IAAMyE,EAAsB,GACjC,IADkC,CAAElG,IAAAA,CAAAA,CAAK,CAAArD,QACzC,GAAAsH,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,IAAW,UACzB,GAAAgH,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,SAAgB,UAC9B,GAAAgH,EAAApH,GAAA,EAACiJ,MAAAA,CAAI9F,IAAKA,EAAK+F,IAAI,OAAO/I,UAAWC,IAAAA,KAAY,CAAEsC,QAAQ,YAE1D,4CCHA,IAAM4G,EAAoC,GAC/C,IADgD,CAAEC,MAAAA,CAAAA,CAAO,CAAAzJ,QACzD,GAAAsH,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,KAAY,UACzBmJ,EAAMC,GAAG,CAACC,GACT,GAAArC,EAAApH,GAAA,EAACsI,IAAAA,CAECjH,KAAMoI,EAAKvH,GAAG,CACd/B,UAAWC,IAAAA,IAAW,CACtBmI,OAAO,SAEPC,IAAI,yBAEJ,GAAApB,EAAApH,GAAA,EAAC0J,IAAKA,CACJvG,IAAKsG,EAAKpJ,IAAI,EAAI,iCAClB6I,IAAKO,EAAKE,QAAQ,CAClBxJ,UAAWC,IAAAA,IAAW,CACtBoC,MAAM,KACND,OAAO,QAZJkH,EAAKE,QAAQ,IAgBnB,0BCZA,IAAMC,GAAwC,GAQnD,IARoD,CACpDhJ,KAAAA,CAAAA,CACAe,MAAAA,CAAAA,CACAkI,QAAAA,CAAAA,CACAC,KAAAA,CAAAA,CACAC,KAAAA,CAAAA,CACAR,MAAAA,CAAAA,CACD,CAAAzJ,QACC,GAAAsH,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,IAAW,UACzB,GAAAgH,EAAApG,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,gBAAuB,WACrC,GAAAgH,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,IAAW,UACzB,GAAAgH,EAAApH,GAAA,EAACqJ,EAAIA,CAAClG,IAAK2G,MAEb,GAAA1C,EAAApG,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,YAAmB,WACjC,GAAAgH,EAAApH,GAAA,EAACgK,KAAAA,CAAG7J,UAAWe,IAAGd,IAAAA,KAAY,CAAEA,IAAAA,GAAU,CAAE,yBAAkBQ,IAC9D,GAAAwG,EAAApH,GAAA,EAACiK,KAAAA,CAAG9J,UAAWe,IAAGd,IAAAA,QAAe,CAAEA,IAAAA,GAAU,CAAE,4BAC7C,GAAAgH,EAAApH,GAAA,EAACkK,EAAAA,CAAOA,CAAAA,UAAEvI,GAASkI,MAErB,GAAAzC,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWe,IAAGd,IAAAA,OAAc,CAAEA,IAAAA,GAAU,WAC1C2J,EAAKI,MAAM,CAAG,GAAKJ,EAAKP,GAAG,CAACY,GAAO,GAAAhD,EAAApG,IAAA,EAACqE,OAAAA,WAAe,IAAE+E,EAAI,SAAXA,MAEjD,GAAAhD,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWe,IAAGd,IAAAA,WAAkB,CAAEA,IAAAA,GAAU,WAC/C,GAAAgH,EAAApH,GAAA,EAACsJ,EAAWA,CAACC,MAAOA,aAIvB,6EClCP,IAAMc,GAAmBhL,IAAQ,IAAMF,EAAAG,CAAA,OAAAC,IAAA,CAAAJ,EAAAK,CAAA,CAAAC,IAAA,CAAAN,EAAA,WAAO,yCAC5CO,IAAK,KAGD4K,GAAgBjL,IAAQ,IAAMF,EAAAG,CAAA,OAAAC,IAAA,CAAAJ,EAAAK,CAAA,CAAAC,IAAA,CAAAN,EAAA,WAAO,yCACzCO,IAAK,KAGD6K,GAAelL,IAAQ,IAAMF,EAAAG,CAAA,OAAAC,IAAA,CAAAJ,EAAAK,CAAA,CAAAC,IAAA,CAAAN,EAAA,WAAO,yCACxCO,IAAK,KAGD8K,GAAa,SACbC,GAAa,SAYNC,GAA8C,GAQrD,IARsD,CAC1DC,QAAAA,CAAAA,CACA9B,uBAAAA,CAAAA,CACA+B,mBAAAA,CAAAA,CACAC,mBAAAA,CAAAA,CACAC,eAAAA,CAAAA,CACAC,eAAAA,CAAAA,CACA5K,UAAAA,CAAAA,CACD,CAAAL,EACOkL,EAAc1C,GAAK,CACvB,GAAIA,EAAE2C,GAAG,GAAKT,GAAY,CACxBI,IACA,MACF,CAAC,GACGtC,EAAE2C,GAAG,GAAKR,GAAY,CACxBI,IACA,MACF,CAAC,IACKlC,EAASgC,EAAQO,IAAI,CAACC,GAAKA,EAAEjJ,GAAG,GAAKoG,EAAE2C,GAAG,EAChDpC,EAAuBF,EACzB,EAEMyC,EAAQT,EAAQnB,GAAG,CAACb,GAAW,EACnCsC,IAAKtC,EAAOzG,GAAG,CACfmJ,MACE,GAAAjE,EAAApG,IAAA,EAACqE,OAAAA,CAAKlF,UAAWC,KAAAA,IAAW,WACzBuI,EAAOtI,IAAI,EAAI,GAAA+G,EAAApH,GAAA,EAACiJ,MAAAA,CAAI9I,UAAWC,KAAAA,IAAW,CAAE+C,IAAKwF,EAAOtI,IAAI,CAAE6I,IAAKP,EAAOhH,KAAK,GAAM,IACrFgH,EAAOhH,KAAK,GAGnB,IAEImJ,GACFM,EAAME,OAAO,CAAC,CACZL,IAAKR,GACLY,MACE,GAAAjE,EAAApG,IAAA,EAACqE,OAAAA,CAAKlF,UAAWC,KAAAA,IAAW,WAC1B,GAAAgH,EAAApH,GAAA,EAACsK,GAAAA,CAAcnK,UAAWC,KAAAA,IAAW,GAAI,wBAG/C,GAGE2K,GACFK,EAAME,OAAO,CAAC,CACZL,IAAKT,GACLa,MACE,GAAAjE,EAAApG,IAAA,EAACqE,OAAAA,CAAKlF,UAAWC,KAAAA,IAAW,WAC1B,GAAAgH,EAAApH,GAAA,EAACuK,GAAAA,CAAapK,UAAWC,KAAAA,IAAW,GAAI,qBAI9C,GAGF,IAAMmL,EAAO,GAAAnE,EAAApH,GAAA,EAACwL,GAAAA,CAAIA,CAAAA,CAACJ,MAAOA,EAAOxL,QAASoL,IAEpCS,EAAkBC,IAAW,CAACtL,KAAAA,IAAW,CAAED,EAAU,EAE3D,MACE,GAAAiH,EAAApH,GAAA,EAAC2L,GAAAA,CAAQA,CAAAA,CACPC,QAASL,EACT3J,UAAU,cACViK,QAAS,CAAC,QAAQ,CAClB1L,UAAWsL,WAEX,GAAArE,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,KAAAA,UAAiB,UAC/B,GAAAgH,EAAApH,GAAA,EAACC,EAAAA,CAAMA,CAAAA,CACLC,KAAK,UACLN,QAASN,GAAKA,EAAEwM,cAAc,GAC9BvH,KAAK,QACLlE,KAAM,GAAA+G,EAAApH,GAAA,EAACqK,GAAAA,CAAiB9F,KAAM,EAAGzC,MAAO,CAAEiK,OAAQ,OAAQ,SAKpE,ECrEMC,GAAqB3M,IACzB,IACEmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,QAA6DI,IAAI,CAC/DmB,GAAOA,EAAIsL,kBAAkB,2CAG/BtM,IAAK,KAIHuM,GAAc5M,IAClB,IAAMmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,MAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,QAA+CI,IAAI,CAACmB,GAAOA,EAAIuL,WAAW,2CAE9EvM,IAAK,KAIHwM,GAAqB7M,IACzB,IACEmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,MAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,QAA6DI,IAAI,CAC/DmB,GAAOA,EAAIwL,kBAAkB,2CAG/BxM,IAAK,KAIHyM,GAAsB9M,IAC1B,IAAMF,EAAAG,CAAA,OAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,QAAqDI,IAAI,CAACmB,GAAOA,EAAIyL,mBAAmB,2CAE5FzM,IAAK,KAIH0M,GAAgB/M,IACpB,IAAMmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,OAAkDI,IAAI,CAACmB,GAAOA,EAAI0L,aAAa,0CAEnF1M,IAAK,KAIH6H,GAAgBlI,IACpB,IAAMmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,QAAiDI,IAAI,CAACmB,GAAOA,EAAI6G,aAAa,2CAElF7H,IAAK,KAIH2M,GAAOhN,IAAQ,IAAMmB,QAAAC,GAAA,EAAAtB,EAAAG,CAAA,OAAAH,EAAAG,CAAA,MAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,OAAAH,EAAAG,CAAA,SAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,QAAeI,IAAI,CAACmB,GAAOA,EAAI2L,IAAI,2CAC5D3M,IAAK,KAGD4M,GAAiB,GASjB,IATkB,CACtB1L,KAAAA,CAAAA,CACA2L,YAAAA,CAAAA,CACA1C,QAAAA,CAAAA,CACAE,KAAAA,CAAAA,CACAyC,cAAAA,CAAAA,CACAC,iBAAAA,CAAAA,CACAC,mBAAAA,CAAAA,CACAC,yBAAAA,CAAAA,CACD,CAAA7M,EACO8M,EAAkB,GAAAxF,EAAApH,GAAA,EAACkH,EAAiBA,CAACC,QAASsF,IAC9CI,EACJ,GAAAzF,EAAApH,GAAA,EAACsB,MAAAA,CAAIQ,MAAO,CAAEmB,UAAW,MAAO,WAC9B,GAAAmE,EAAApH,GAAA,EAACgM,GAAAA,CAAmBpL,KAAMA,EAAMkM,oBAAqB,IAAMJ,EAAmB,QAI5EtB,EAAQ,CAAC,CAAEC,MAAO,QAASJ,IAAK,IAAKxI,SAAUmK,CAAgB,EAAE,CAKvE,OAJID,GACFvB,EAAMlM,IAAI,CAAC,CAAEmM,MAAO,YAAaJ,IAAK,IAAKxI,SAAUoK,CAAoB,GAIzE,GAAAzF,EAAApG,IAAA,EAAAoG,EAAA5B,QAAA,YACE,GAAA4B,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,SAAgB,CAAEE,GAAG,2BACnC,GAAA8G,EAAApH,GAAA,EAAC4J,GAAaA,CACZhJ,KAAMA,EACNe,MAAO4K,EACP1C,QAASA,EACTE,KAAMA,EACNR,MAAOiD,EACP1C,KAAK,YAIT,GAAA1C,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,YAAmB,UAChCgL,EAAMjB,MAAM,CAAG,EAAI,GAAA/C,EAAApH,GAAA,EAACqM,GAAAA,CAAKU,iBAAiB,IAAI3B,MAAOA,IAAYwB,CAAe,KAIzF,EAEMI,GAAgB,GAgBhB,IAhBiB,CACrBpM,KAAAA,CAAAA,CACA2L,YAAAA,CAAAA,CACA1C,QAAAA,CAAAA,CACAE,KAAAA,CAAAA,CACAyC,cAAAA,CAAAA,CACAC,iBAAAA,CAAAA,CACA7E,SAAAA,CAAAA,CACAH,YAAAA,CAAAA,CACAwF,SAAAA,CAAAA,CACAtC,QAAAA,CAAAA,CACAuC,2BAAAA,CAAAA,CACAC,mBAAAA,CAAAA,CACAT,mBAAAA,CAAAA,CACAC,yBAAAA,CAAAA,CACAS,6BAAAA,CAAAA,CACD,CAAAtN,EACC,GAAI,CAAC2H,EACH,MAAO,GAAAL,EAAApH,GAAA,EAACiE,EAAAA,CAAQA,CAAAA,CAACvB,QAAO,GAACwB,OAAM,GAACC,UAAW,CAAEC,KAAM,CAAE,GACtD,CACD,GAAM,CAAE9D,GAAAA,CAAAA,CAAI2H,YAAAA,CAAAA,CAAa,CAAGR,EAEtB4F,EAAcJ,GAClB,GAAA7F,EAAApH,GAAA,EAACuH,GAAaA,CACZK,SAAUA,EACVM,oBAAqBD,EACrBE,WAAY7H,EACZ0H,YAAa,KAIX4E,EACJ,GAAAxF,EAAApG,IAAA,EAAAoG,EAAA5B,QAAA,YACE,GAAA4B,EAAApH,GAAA,EAAC4J,GAAaA,CACZhJ,KAAMA,EACNe,MAAO4K,EACP1C,QAASA,EACTE,KAAMA,EACNR,MAAOiD,EACP1C,KAAK,UAEP,GAAA1C,EAAApH,GAAA,EAACkH,EAAiBA,CAACC,QAASsF,OAG1BI,EACJ,GAAAzF,EAAApH,GAAA,EAACgM,GAAAA,CAAmBpL,KAAMA,EAAMkM,oBAAqB,IAAMJ,EAAmB,MAS1EY,EAAoB,CAACzN,EAAO0N,IAChC,GAAAnG,EAAApG,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,cAAqB,WACnC,GAAAgH,EAAApH,GAAA,EAACuN,EAAAA,CAAe,GAAG1N,CAAK,CAAEM,UAAWC,IAAAA,aAAoB,GACzD,GAAAgH,EAAApH,GAAA,EAAC0K,GAAgBA,CACfvK,UAAWC,IAAAA,gBAAuB,CAClC0K,eAAgB6B,EAChB5B,eAAgBqC,EAChBzC,QAASA,EACT9B,uBAAwBqE,EACxBtC,mBAAoB,IAAMuC,EAAmB,IAC7CtC,mBAAoB,IAAM6B,EAAmB,SAKnD,MACE,GAAAtF,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,kBAAyB,UACvC,GAAAgH,EAAApH,GAAA,EAACqM,GAAAA,CACClM,UAAWC,IAAAA,IAAW,CACtB2M,iBAAiB,IACjB3B,MA1BQ,CACZ6B,GAAY,CAAE5B,MAAO,OAAQJ,IAAK,IAAKxI,SAAU4K,CAAY,EAC7D,CAAEhC,MAAO,QAASJ,IAAK,IAAKxI,SAAUmK,CAAgB,EACtD,CAAEvB,MAAO,YAAaJ,IAAK,IAAKxI,SAAUoK,CAAoB,EAC/D,CAuBKW,aAAcF,KAItB,EAEMG,GAAgB,GAA6D,IAA5D,CAAEC,wBAAAA,CAAAA,CAAyBR,2BAAAA,CAAAA,CAA4B,CAAApN,EACtE,CAAE6B,MAAAA,CAAAA,CAAOmH,YAAAA,CAAAA,CAAa5G,IAAAA,CAAAA,CAAK,CAAGwL,EACpC,MACE,GAAAtG,EAAApH,GAAA,EAACiC,GAAAA,KAAKA,CAAAA,CACJN,MAAOmH,GAAenH,EACtBO,IAAKA,EACLC,KAAM,CAAC,CAACuL,EACRnL,OAAO,OACPF,aAAc,IAAM6K,EAA2B,IAAI,GAGzD,EAEaS,GAAc,IAAM,CAC/B,IAAMC,EAAWlG,CAAAA,EAAAA,EAAAA,EAAAA,EAAgCmG,EAAAA,CAAYA,EACvDC,EAAepG,CAAAA,EAAAA,EAAAA,EAAAA,EAA6BqG,EAAAA,EAAqBA,EACjEC,EAAgBtG,CAAAA,EAAAA,EAAAA,EAAAA,EAAwBuG,EAAAA,EAAqBA,EAC7DC,EAAkBxG,CAAAA,EAAAA,EAAAA,EAAAA,EAAwByG,EAAAA,EAAuBA,EACjE1G,EAAcC,CAAAA,EAAAA,EAAAA,EAAAA,EAAeC,EAAAA,EAAeA,EAC5CyG,EAAe1G,CAAAA,EAAAA,EAAAA,EAAAA,EAA6B2G,EAAAA,EAAiBA,EAC7D,CAACC,EAAUC,EAAY,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,EAAoCC,EAAAA,EAAYA,EAC1E7G,EAAWF,CAAAA,EAAAA,EAAAA,EAAAA,EAA8BgH,EAAAA,EAAgBA,EACzD3N,EAAS2G,CAAAA,EAAAA,EAAAA,EAAAA,EAAwBiH,EAAAA,EAAgBA,EAEjD,CAAE1I,YAAAA,CAAAA,CAAaF,gBAAAA,CAAAA,CAAiBC,mBAAAA,CAAAA,CAAoBuG,YAAAA,CAAAA,CAAa,CACrE7E,CAAAA,EAAAA,EAAAA,EAAAA,EAA6B2G,EAAAA,EAAiBA,EAC1C,CACJ5B,iBAAAA,CAAAA,CACApE,QAAAA,CAAAA,CACAzH,KAAAA,CAAAA,CACAiJ,QAAAA,CAAAA,CACA2C,cAAAA,CAAAA,CACAzC,KAAAA,CAAAA,CACA6E,gBAAAA,CAAAA,CACAC,eAAAA,CAAAA,CACA/N,aAAAA,CAAAA,CACAgO,WAAAA,CAAAA,CACAC,cAAAA,CAAAA,CACD,CAAGjB,EACE,CAACkB,EAAoBC,EAAsB,CAAGrM,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACvD,CAACsM,EAAiBC,EAAmB,CAAGvM,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACjD,CAACwM,EAAiB1C,EAAmB,CAAG9J,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACjD,CAAEyM,QAASpK,CAAAA,CAAkBqK,QAASC,CAAAA,CAAkB,CAAGT,EAC3D,CAAEU,QAASC,CAAAA,CAAsB,CAAGV,EACpC,CAAEO,QAASI,CAAAA,CAA6B,CAAGD,EAC3C,CAAE1O,OAAQ4O,CAAAA,CAAc,CAAGvB,EAC3B,CAACV,EAAyBR,EAA2B,CAAGtK,CAAAA,EAAAA,EAAAA,QAAAA,EAAyB,IAAI,EAErF,CAACwK,EAA8BwC,GAAgC,CAAGhN,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAG3EiG,GAAyB,GAA4B,CACzD,GAAM,CAAEgH,eAAAA,CAAAA,CAAgB3N,IAAAA,CAAAA,CAAK,CAAGyG,EAC5BkH,EACF7Q,OAAOmD,IAAI,CAACD,EAAK,UAEjBgL,EAA2BvE,EAE/B,EAEMmH,GAAwBlB,EAAgBpF,GAAG,CAACb,GAChD,GAAAvB,EAAApH,GAAA,EAAC0I,EAAYA,CAEXC,OAAQA,EACRE,uBAAwBA,IAFnBF,EAAOzG,GAAG,GAMb6N,GAAwB,IAAM,CAClC,IAAIC,EAASC,SAASC,CAAAA,EAAAA,EAAAA,EAAAA,EAAgBC,EAAAA,EAAAA,CAAAA,cAAiC,EAAG,IACtEC,OAAOC,KAAK,CAACL,IACfA,CAAAA,EAAS,GAGXM,CAAAA,EAAAA,EAAAA,EAAAA,EAAgBH,EAAAA,EAAAA,CAAAA,cAAiC,CAAEH,EAAS,GAExDA,EAAS,GAAK,CAACE,CAAAA,EAAAA,EAAAA,EAAAA,EAAgBC,EAAAA,EAAAA,CAAAA,6BAAgD,GACjFlB,EAAsB,GAE1B,EAEMsB,GAA6B,IAAM,CACvCpB,EAAmB,IACnBF,EAAsB,IACtBqB,CAAAA,EAAAA,EAAAA,EAAAA,EAAgBH,EAAAA,EAAAA,CAAAA,6BAAgD,CAAE,GACpE,EAEMK,GAAgB,IAAM,CAC1B,IAAMC,EAAIzR,OAAO0R,UAAU,MACVjM,IAAb6J,IACEmC,GAAK,IAAKlC,EAAY,IACrBA,EAAY,KAEf,CAACD,GAAYmC,GAAK,KAAKlC,EAAY,IACnCD,GAAYmC,EAAI,KAAKlC,EAAY,GACvC,EAEApI,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR4J,KACAS,KACAxR,OAAO2R,gBAAgB,CAAC,SAAUH,IAC3B,IAAM,CACXxR,OAAO4R,mBAAmB,CAAC,SAAUJ,GACvC,GACC,EAAE,EAELrK,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,CAGdyJ,GAAgCiB,CAAAA,EAAAA,EAAAA,CAAAA,KAAiCnB,EACnE,EAAG,CAACA,EAA4B,EAEhC,IAAMzC,GAAW,CAACnM,GAAgBoN,GAAmBF,EAErD,MACE,GAAA5G,EAAApG,IAAA,EAAAoG,EAAA5B,QAAA,YACE,GAAA4B,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,IAAW,UACzB,GAAAgH,EAAApG,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,IAAW,WACzB,GAAAgH,EAAApG,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,WAAkB,WAChC,GAAAgH,EAAApG,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,UAAiB,WAC9BwN,EAASkD,UAAU,EAAI,GAAA1J,EAAApH,GAAA,EAACiE,EAAAA,CAAQA,CAAAA,CAACvB,QAAO,GAACwB,OAAM,GAACC,UAAW,CAAEC,KAAM,CAAE,IACrErD,GACC,GAAAqG,EAAApH,GAAA,EAACoM,GAAAA,CACC2E,OAAO,mBACPhQ,OAAQA,EACRY,MAAO4K,GAAe3L,IAGzB,CAACG,GAAU,CAAC6M,EAASkD,UAAU,EAC9B,GAAA1J,EAAApH,GAAA,EAAC2E,EAAAA,CAAaA,CAAAA,CACZO,YAAa,GACbL,WAAYjE,EACZkE,WAAY+J,EACZ7J,qBAAsB0K,EACtBzK,iBAAkBA,EAClBF,SAAUiB,EACVb,cAAe,IAAMgK,EAAmB,IACxC/J,cAAe,IAAMsH,EAAmB,MAG3CiD,GACC,GAAAvI,EAAApH,GAAA,EAAC6F,GAAAA,CAASA,CAAAA,CACR9E,OAAQA,EACRgF,gBAAiBA,EACjBC,mBAAoBA,EACpBC,YAAaA,OAInB,GAAAmB,EAAApH,GAAA,EAACsB,MAAAA,CAAInB,UAAWC,IAAAA,UAAiB,UAC/B,GAAAgH,EAAApG,IAAA,EAACM,MAAAA,CAAInB,UAAWC,IAAAA,uBAA8B,WAC3C,CAACkO,GACA,GAAAlH,EAAApG,IAAA,EAACyH,EAAeA,WACbqH,GACAnD,GACC,GAAAvF,EAAApH,GAAA,EAACL,EAAAA,CAAYA,CAAAA,CAAC4E,KAAK,QAAQ3E,QAAS,IAAM8M,EAAmB,MAE9DU,GACC,GAAAhG,EAAApH,GAAA,EAACmM,GAAAA,CACChK,KAAM6M,EACNgC,oBAAqB,IAAM7B,EAAmB,IAC9C8B,mBAAoB,IAAMV,cAE1B,GAAAnJ,EAAApH,GAAA,EAACoJ,EAAYA,CAACxJ,QAAS,IAAMuP,EAAmB,WAMxD,GAAA/H,EAAApH,GAAA,EAACiC,GAAAA,KAAKA,CAAAA,CACJN,MAAM,wBACNQ,KAAM+M,EACN5M,WAAY,IAAMiO,KAClBlO,aAAc,IAAMkO,cAEpB,GAAAnJ,EAAApH,GAAA,EAACkM,GAAAA,CAAAA,UAINoC,EACC,GAAAlH,EAAApH,GAAA,EAACgN,GAAAA,CACCpM,KAAMA,EACN2L,YAAaA,EACb1C,QAASA,EACTE,KAAMA,EACNyC,cAAeA,EACfC,iBAAkBA,EAClB7E,SAAUA,EACVH,YAAaA,EACbwF,SAAUA,GACVtC,QAASiE,EACT1B,2BAA4BrE,GAC5BsE,mBAAoBgC,EACpBzC,mBAAoBA,EACpBC,yBAjJmB4C,EAkJnBnC,6BAA8BA,IAGhC,GAAAhG,EAAApH,GAAA,EAACsM,GAAAA,CACC1L,KAAMA,EACN2L,YAAaA,EACb1C,QAASA,EACTE,KAAMA,EACNyC,cAAeA,EACfC,iBAAkBA,EAClBC,mBAAoBA,EACpBC,yBA7JmB4C,GA+JtB,CACA,CAACjB,GAAY,GAAAlH,EAAApH,GAAA,EAACoI,EAAMA,CAACC,QAASA,OAEhC4E,IAAY,CAACqB,GAAY,GAAAlH,EAAApH,GAAA,EAACwH,EAAOA,CAAAA,QAGrCkG,GACC,GAAAtG,EAAApH,GAAA,EAACyN,GAAAA,CACCC,wBAAyBA,EACzBR,2BAA4BA,IAGhC,GAAA9F,EAAApH,GAAA,EAACiC,GAAAA,KAAKA,CAAAA,CACJN,MAAO,UAAeR,MAAA,CAALP,GACjBuB,KAAMiN,EACN/M,aAAc,IAAMqK,EAAmB,IACvClK,MAAM,iBAEN,GAAA4E,EAAApH,GAAA,EAACiM,GAAAA,CACCoD,QAASpK,EACTrE,KAAMA,EACNsQ,YAAa,IAAMxE,EAAmB,UAKhD,iBEnbO,IAAMyE,GAAwC,GAAc,IAAb,CAAEvQ,KAAAA,CAAAA,CAAM,CAAAd,EACtDsR,EAAe1J,CAAAA,EAAAA,EAAAA,EAAAA,EAAegH,EAAAA,EAAgBA,EAC9CN,EAAe1G,CAAAA,EAAAA,EAAAA,EAAAA,EAAe2G,EAAAA,EAAiBA,EAE/C,CAACgD,EAAcC,EAAgB,CAAG1O,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAE3C,CAAE7B,OAAAA,CAAAA,CAAQ,CAAGqN,EAEbmD,EAAW,GAAmB,CAClCC,SAAS7P,KAAK,CAAGA,CACnB,EAEM8P,EAAS,IAAM,CACnBH,EAAgB,GAClB,EAEMI,EAAU,IAAM,CACpBJ,EAAgB,IAChBC,EAAS3Q,EACX,EAEM+Q,EAAkB,IAAM,CAE5B3S,OAAO2R,gBAAgB,CAAC,OAAQc,GAChCzS,OAAO2R,gBAAgB,CAAC,QAASe,EACnC,EAEME,EAAe,IAAM,CACzB5S,OAAO4R,mBAAmB,CAAC,OAAQa,GACnCzS,OAAO4R,mBAAmB,CAAC,QAASc,EACtC,EAoCA,MAlCAvL,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACRwL,IAEO,IAAM,CACXC,GACF,GACC,CAAChR,EAAK,EAETuF,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,CACd,GAAI,CAACkL,GAAgB,CAACtQ,EACpB,MACD,CAGD,IAAM8Q,EAAcT,CAAY,CAACA,EAAajH,MAAM,CAAG,EAAE,CAChC,SAArB0H,EAAY3R,IAAI,EAIpBqR,EAAS,mBAAcpQ,MAAA,CAALP,GACpB,EAAG,CAACwQ,EAAcxQ,EAAK,EAEvBuF,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,CACTkL,IAIDtQ,EACFwQ,EAAS,oBAAepQ,MAAA,CAALP,IACTG,GACVwQ,EAAS,oBAAepQ,MAAA,CAALP,IAEvB,EAAG,CAACG,EAAQH,EAAK,EAEV,IAAI,EC9EAkR,GAA8B,IACzC,GAAA1K,EAAApH,GAAA,EAAC+R,SAAAA,CACCzR,GAAG,wBACH0R,MAAM,aACN3K,wBAAyB,CACvBC,OAAS,mGAIX,ICNS2K,GAAY,IAAM,CAC7B,IAAMnE,EAAepG,CAAAA,EAAAA,EAAAA,EAAAA,EAA6BqG,EAAAA,EAAqBA,EACjE,CAAEmE,oBAAAA,CAAAA,CAAqBC,aAAAA,CAAAA,CAAc,CAAGrE,EAExCsE,EAAiBC,OAAOC,IAAI,CAACJ,GAChCK,MAAM,CAACC,GAAY,CAAC,CAACN,CAAmB,CAACM,EAAS,EAClDhJ,GAAG,CAACgJ,GAAY,KAAkBN,MAAAA,CAAbM,EAAS,MAAkCrR,MAAA,CAA9B+Q,CAAmB,CAACM,EAAS,GAElE,MACE,GAAApL,EAAApH,GAAA,EAAC8B,QAAAA,CACCuF,wBAAyB,CACvBC,OAAQ,uBAIV6K,MAAAA,CAFCC,EAAeK,IAAI,CAAC,OAAO,iBAEftR,MAAA,CAAbgR,EAAa,QAEb,GAGN,6BCvBO,IAAMO,GAAoC,IAAM,CACrD,IAAMC,EAAM,IAAM,CAChBC,UAAUC,aAAa,CAACC,QAAQ,CAAC,qBAAqBvT,IAAI,CACxDwT,GAAgB,CACdC,QAAQC,KAAK,CAAC,sDAAuDF,EAAaG,KAAK,CACzF,EACAC,GAAO,CACLH,QAAQI,KAAK,CAAC,uCAAwCD,EACxD,EAEJ,EAYA,MAVAhN,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJ,kBAAmByM,WACrB5T,OAAO2R,gBAAgB,CAAC,OAAQgC,GAG3B,IAAM,CACX3T,OAAO4R,mBAAmB,CAAC,OAAQ+B,EACrC,GACC,EAAE,EAEE,IAAI,ECUPU,GAAuBhU,IAC3B,IACEF,EAAAG,CAAA,OAAAC,IAAA,CAAAJ,EAAAM,IAAA,CAAAN,EAAA,OAAiEI,IAAI,CACnEmB,GAAOA,EAAI2S,oBAAoB,0CAGjC3T,IAAK,KAII4T,GAAW,IAAM,CAC5B,IAAMxF,EAAepG,CAAAA,EAAAA,EAAAA,EAAAA,EAA6BqG,EAAAA,EAAqBA,EACjE,CAAEnN,KAAAA,CAAAA,CAAMe,MAAAA,CAAAA,CAAOwQ,aAAAA,CAAAA,CAAc,CAAGrE,EAChCI,EAAkBxG,CAAAA,EAAAA,EAAAA,EAAAA,EAAwByG,EAAAA,EAAuBA,EACjEoF,EAAa7L,CAAAA,EAAAA,EAAAA,EAAAA,EAAiC8L,EAAAA,EAAmBA,EACjE5F,EAAWlG,CAAAA,EAAAA,EAAAA,EAAAA,EAAgCmG,EAAAA,CAAYA,EAEvD4F,EAAYC,CAAAA,EAAAA,EAAAA,MAAAA,EAAuB,IAAI,EACvC,CAAE5S,aAAAA,CAAAA,CAAc,CAAGgN,EACnB,CAAE6F,eAAAA,CAAAA,CAAgB,CAAG/F,QAE3BzH,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,IAAM,EACdyN,SL7CwCC,CAA4B,CAAQ,CAI9E,IAAMC,EAAgB,GAAyB,CAC7C,IAAMC,EAAqBC,EAAKC,YAAY,CAAC,OAE7CD,EAAKE,YAAY,CAAC,MADC,GAAsB/S,MAAA,CAAnB4S,EAAmB,wBAE3C,EAkBAF,EAAgBM,gBAAgB,CAAC,KAAKC,OAAO,CAACC,GAAUP,EAAcO,IAGtE,IAAMC,EAAW,IAAIC,iBAjBJ,SAAUC,CAAY,CAAE,CACvC,IAAK,IAAMC,KAAYD,EACrB,IAAK,IAAMR,KAAQS,EAASC,UAAU,CAG9BV,aAAgBW,aAElBX,MAAAA,EAAKY,OAAO,CAACC,WAAW,IAC1Bf,EAAcE,EAItB,GAQAM,EAASQ,OAAO,CAACjB,EA9BF,CAAEkB,WAAY,GAAOC,UAAW,GAAMC,QAAS,EAAK,EA+BrE,EKYwBxB,EAAUyB,OAAO,CACvC,EAAG,EAAE,EAKH,GAAA9N,EAAApG,IAAA,EAAAoG,EAAA5B,QAAA,YACE,GAAA4B,EAAApG,IAAA,EAACmU,IAAIA,WACc,GAAA/N,EAAApH,GAAA,EAAC8R,GAAuBA,CAAAA,GAEzC,GAAA1K,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,QAAQ/T,KAAK,sCAChD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,QAAQ/T,KAAK,sCAChD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,QAAQ/T,KAAK,sCAChD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,QAAQ/T,KAAK,sCAChD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,UAAU/T,KAAK,wCAClD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,UAAU/T,KAAK,wCAClD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,UAAU/T,KAAK,wCAClD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,UAAU/T,KAAK,wCAClD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,mBAAmB4M,MAAM,UAAU/T,KAAK,wCAClD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CACCjB,IAAI,OACJtI,KAAK,YACLkV,MAAM,UACN/T,KAAK,0CAEP,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,OAAOtI,KAAK,YAAYkV,MAAM,QAAQ/T,KAAK,mCACrD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,OAAOtI,KAAK,YAAYkV,MAAM,QAAQ/T,KAAK,mCACrD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,OAAOtI,KAAK,YAAYkV,MAAM,QAAQ/T,KAAK,mCACrD,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKjB,IAAI,WAAWnH,KAAK,mBAC1B,GAAA+F,EAAApH,GAAA,EAACyJ,OAAAA,CAAKpI,KAAK,iCACX,GAAA+F,EAAApH,GAAA,EAACqV,OAAAA,CAAKzU,KAAK,0BAA0BuG,QAAQ,YAC7C,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKzU,KAAK,0BAA0BuG,QAAQ,qCAC7C,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKzU,KAAK,cAAcuG,QAAQ,YAEjC,GAAAC,EAAApG,IAAA,EAACc,QAAAA,WACEqQ,EAjEY,wCAoEf,GAAA/K,EAAApH,GAAA,EAACsV,OAAAA,CAAK/M,OAAO,cAIb,GAAAnB,EAAApG,IAAA,EAACmU,IAAIA,WACFvU,EAAO,GAAAwG,EAAApH,GAAA,EAAC2B,QAAAA,UAAOf,IAAgB,GAAAwG,EAAApH,GAAA,EAAC2B,QAAAA,UAAO,aAAoB,CAC5D,GAAAyF,EAAApH,GAAA,EAACqV,OAAAA,CAAKzU,KAAK,cAAcuG,QAAQ,iBAEjC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,WAAWpO,QAAQ,cAClC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,eAAepO,QAAQ,cACtC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,SAASpO,QAAQ,sBAChC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,iBAAiBpO,QAAQ,iBACxC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,UAAUpO,QAAQ,gBACjC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,YAAYpO,QAAQ,oBAEnC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,WAAWpO,QAAQ,oCAClC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,eAAepO,QAAQ,oCACtC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,eAAepO,QAAQ,gCAEtC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,WAAWpO,QAAQ,kCAClC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,sBAAsBpO,QAAQ,kCAC7C,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,kBAAkBpO,QAAQ,QACzC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,iBAAiBpO,QAAQ,QACxC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,gBAAgBpO,QAAQ,cACvC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,iBAAiBpO,QAAQ,cAExC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,gBAAgBpO,QAAQ,cACvC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,cAAcpO,QAAQ,sBACrC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,sBAAsBpO,QAAQ,iBAC7C,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,gBAAgBpO,QAAQ,eACvC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,eAAepO,QAAQ,WACtC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,iBAAiBpO,QAAQ,kCACxC,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,uBAAuBpO,QAAQ,QAC9C,GAAAC,EAAApH,GAAA,EAACqV,OAAAA,CAAKE,SAAS,wBAAwBpO,QAAQ,WAQnD,GAAAC,EAAApH,GAAA,EAACwV,EAAAA,EAAiBA,CAAAA,CAAAA,GAClB,GAAApO,EAAApH,GAAA,EAAC0S,GAA6BA,CAAAA,GAC9B,GAAAtL,EAAApH,GAAA,EAACmR,GAAaA,CAACvQ,KAAMA,IACrB,GAAAwG,EAAApH,GAAA,EAACiS,GAAKA,CAAAA,GACN,GAAA7K,EAAApH,GAAA,EAACyV,IAAMA,CAACC,SAAS,mBAAmBvS,IAAI,sBAExC,GAAAiE,EAAApG,IAAA,EAAC2U,EAAAA,CAAMA,CAAAA,CAACC,IAAKnC,EAAWtT,UAAWC,KAAAA,MAAa,WAC9C,GAAAgH,EAAApH,GAAA,EAACW,GAAAA,CAAMA,CAAAA,CACLC,KAAMe,GAASf,EACfC,cAAeqN,EACfpN,aAAcA,EACdC,OAAQ4S,IAEV,GAAAvM,EAAApH,GAAA,EAAC2N,GAAOA,CAAAA,GACP4F,GACC,GAAAnM,EAAApH,GAAA,EAACqT,GAAAA,CAAqB1R,MAAO4R,EAAW5R,KAAK,CAAEkU,QAAStC,EAAWsC,OAAO,QAKpF,ECzJe,SAASC,IAAO,CAC7B,MAAO,GAAA1O,EAAApH,GAAA,EAACsT,GAAIA,CAAAA,EACd,CACAwC,GAAKC,SAAS,CAAG,SAAmBC,CAAkB,CAAE,CACtD,OAAOA,CACT,sCCRe,SAASnF,GAA8B,CACpD,MAAO,kBAAmB+B,WAAa,gBAAiB5T,MAC1D,oDCDAiX,EAAAC,OAAA,EAAkB,wFCAlBD,EAAAC,OAAA,EAAkB,gLCAlBD,EAAAC,OAAA,EAAkB,qDCAlBD,EAAAC,OAAA,EAAkB,kVCAlBD,EAAAC,OAAA,EAAkB,gDCAlBD,EAAAC,OAAA,EAAkB,sfCAlBD,EAAAC,OAAA,EAAkB,mMCAlBD,EAAAC,OAAA,EAAkB,8ECAlBD,EAAAC,OAAA,EAAkB,8KCAlBD,EAAAC,OAAA,EAAkB,wGCAlBD,EAAAC,OAAA,EAAkB,kFCAlBD,EAAAC,OAAA,EAAkB,qaCAlBD,EAAAC,OAAA,EAAkB,6CCAlBD,EAAAC,OAAA,EAAkB,oFCAlBD,EAAAC,OAAA,EAAkB","sources":["webpack://_N_E/","webpack://_N_E/./components/action-buttons/FollowButton.tsx","webpack://_N_E/./components/ui/Header/Header.tsx","webpack://_N_E/./components/ui/Modal/Modal.tsx","webpack://_N_E/./components/ui/OfflineBanner/OfflineBanner.tsx","webpack://_N_E/./components/ui/Statusbar/Statusbar.tsx","webpack://_N_E/./components/ui/CustomPageContent/CustomPageContent.tsx","webpack://_N_E/./components/ui/Sidebar/Sidebar.tsx","webpack://_N_E/./components/ui/Footer/Footer.tsx","webpack://_N_E/./components/action-buttons/ActionButtonRow/ActionButtonRow.tsx","webpack://_N_E/./components/action-buttons/ActionButton/ActionButton.tsx","webpack://_N_E/./components/action-buttons/NotifyButton.tsx","webpack://_N_E/./components/ui/Logo/Logo.tsx","webpack://_N_E/./components/ui/SocialLinks/SocialLinks.tsx","webpack://_N_E/./components/common/ContentHeader/ContentHeader.tsx","webpack://_N_E/./components/action-buttons/ActionButtonMenu/ActionButtonMenu.tsx","webpack://_N_E/./components/ui/Content/Content.tsx","webpack://_N_E/./utils/no-link-referrer.ts","webpack://_N_E/./components/TitleNotifier/TitleNotifier.tsx","webpack://_N_E/./components/ServerRendered/ServerRenderedHydration.tsx","webpack://_N_E/./components/theme/Theme.tsx","webpack://_N_E/./components/workers/PushNotificationServiceWorker/PushNotificationServiceWorker.tsx","webpack://_N_E/./components/layouts/Main/Main.tsx","webpack://_N_E/./pages/index.tsx","webpack://_N_E/./utils/browserPushNotifications.ts","webpack://_N_E/./components/action-buttons/ActionButton/ActionButton.module.scss","webpack://_N_E/./components/action-buttons/ActionButtonMenu/ActionButtonMenu.module.scss","webpack://_N_E/./components/action-buttons/ActionButtonRow/ActionButtonRow.module.scss","webpack://_N_E/./components/common/ContentHeader/ContentHeader.module.scss","webpack://_N_E/./components/layouts/Main/Main.module.scss","webpack://_N_E/./components/ui/Content/Content.module.scss","webpack://_N_E/./components/ui/CustomPageContent/CustomPageContent.module.scss","webpack://_N_E/./components/ui/Footer/Footer.module.scss","webpack://_N_E/./components/ui/Header/Header.module.scss","webpack://_N_E/./components/ui/Logo/Logo.module.scss","webpack://_N_E/./components/ui/Modal/Modal.module.scss","webpack://_N_E/./components/ui/OfflineBanner/OfflineBanner.module.scss","webpack://_N_E/./components/ui/Sidebar/Sidebar.module.scss","webpack://_N_E/./components/ui/SocialLinks/SocialLinks.module.scss","webpack://_N_E/./components/ui/Statusbar/Statusbar.module.scss","webpack://_N_E/"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/\",\n function () {\n return require(\"private-next-pages/index.tsx\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/\"])\n });\n }\n ","import { Button, ButtonProps } from 'antd';\n\nimport { FC } from 'react';\nimport dynamic from 'next/dynamic';\nimport styles from './ActionButton/ActionButton.module.scss';\n\n// Lazy loaded components\n\nconst HeartFilled = dynamic(() => import('@ant-design/icons/HeartFilled'), {\n ssr: false,\n});\n\nexport type FollowButtonProps = ButtonProps & {\n onClick?: () => void;\n props?: ButtonProps;\n};\n\nexport const FollowButton: FC = ({ onClick, props }) => (\n }\n onClick={onClick}\n id=\"follow-button\"\n >\n Follow\n \n);\n","import { Tag, Tooltip } from 'antd';\nimport { FC } from 'react';\nimport cn from 'classnames';\nimport dynamic from 'next/dynamic';\nimport Link from 'next/link';\nimport { OwncastLogo } from '../../common/OwncastLogo/OwncastLogo';\nimport styles from './Header.module.scss';\n\n// Lazy loaded components\n\nconst UserDropdown = dynamic(\n () => import('../../common/UserDropdown/UserDropdown').then(mod => mod.UserDropdown),\n {\n ssr: false,\n },\n);\n\nexport type HeaderComponentProps = {\n name: string;\n chatAvailable: boolean;\n chatDisabled: boolean;\n online: boolean;\n};\n\nexport const Header: FC = ({\n name = 'Your stream title',\n chatAvailable,\n chatDisabled,\n online,\n}) => (\n
\n {online && (\n \n Skip to player\n \n )}\n \n Skip to page content\n \n \n Skip to footer\n \n
\n
\n \n
\n

\n {name}\n

\n
\n {chatAvailable && !chatDisabled && }\n {!chatAvailable && !chatDisabled && (\n \n Chat offline\n \n )}\n
\n);\nexport default Header;\n","import { Spin, Skeleton, Modal as AntModal } from 'antd';\nimport React, { FC, ReactNode, useState } from 'react';\nimport styles from './Modal.module.scss';\n\nexport type ModalProps = {\n title: string;\n url?: string;\n open: boolean;\n handleOk?: () => void;\n handleCancel?: () => void;\n afterClose?: () => void;\n children?: ReactNode;\n height?: string;\n width?: string;\n};\n\nexport const Modal: FC = ({\n title,\n url,\n open,\n handleOk,\n handleCancel,\n afterClose,\n height,\n width,\n children,\n}) => {\n const [loading, setLoading] = useState(!!url);\n\n let defaultHeight = '100%';\n let defaultWidth = '520px';\n if (url) {\n defaultHeight = '70vh';\n defaultWidth = '900px';\n }\n\n const modalContentBodyStyle = {\n padding: '0px',\n minHeight: height,\n height: height ?? defaultHeight,\n };\n\n const iframe = url && (\n setLoading(false)}\n />\n );\n\n const iframeDisplayStyle = loading ? 'none' : 'inline';\n\n return (\n \n
\n {loading && (\n \n )}\n\n {iframe &&
{iframe}
}\n {children &&
{children}
}\n {loading && }\n
\n \n );\n};\nexport default Modal;\n\nModal.defaultProps = {\n url: undefined,\n children: undefined,\n handleOk: undefined,\n handleCancel: undefined,\n afterClose: undefined,\n};\n","/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport { Divider } from 'antd';\nimport { FC } from 'react';\nimport formatDistanceToNow from 'date-fns/formatDistanceToNow';\nimport dynamic from 'next/dynamic';\nimport styles from './OfflineBanner.module.scss';\n\n// Lazy loaded components\n\nconst ClockCircleOutlined = dynamic(() => import('@ant-design/icons/ClockCircleOutlined'), {\n ssr: false,\n});\n\nexport type OfflineBannerProps = {\n streamName: string;\n customText?: string;\n lastLive?: Date;\n notificationsEnabled: boolean;\n fediverseAccount?: string;\n showsHeader?: boolean;\n onNotifyClick?: () => void;\n onFollowClick?: () => void;\n};\n\nexport const OfflineBanner: FC = ({\n streamName,\n customText,\n lastLive,\n notificationsEnabled,\n fediverseAccount,\n showsHeader = true,\n onNotifyClick,\n onFollowClick,\n}) => {\n let text;\n if (customText) {\n text = customText;\n } else if (!customText && notificationsEnabled && fediverseAccount) {\n text = (\n \n This stream is offline. You can{' '}\n \n be notified\n {' '}\n the next time {streamName} goes live or{' '}\n \n follow\n {' '}\n {fediverseAccount} on the Fediverse.\n \n );\n } else if (!customText && notificationsEnabled) {\n text = (\n \n This stream is offline.{' '}\n \n Be notified\n {' '}\n the next time {streamName} goes live.\n \n );\n } else if (!customText && fediverseAccount) {\n text = (\n \n This stream is offline.{' '}\n \n Follow\n {' '}\n {fediverseAccount} on the Fediverse to see the next time {streamName} goes live.\n \n );\n } else {\n text = `This stream is offline. Check back soon!`;\n }\n\n return (\n
\n
\n {showsHeader && (\n <>\n
{streamName}
\n \n \n )}\n
{text}
\n {lastLive && (\n
\n \n {`Last live ${formatDistanceToNow(new Date(lastLive))} ago.`}\n
\n )}\n
\n
\n );\n};\n","import formatDistanceToNow from 'date-fns/formatDistanceToNow';\nimport intervalToDuration from 'date-fns/intervalToDuration';\nimport { FC, useEffect, useState } from 'react';\nimport dynamic from 'next/dynamic';\nimport styles from './Statusbar.module.scss';\n\n// Lazy loaded components\n\nconst EyeFilled = dynamic(() => import('@ant-design/icons/EyeFilled'), {\n ssr: false,\n});\n\nexport type StatusbarProps = {\n online: Boolean;\n lastConnectTime?: Date;\n lastDisconnectTime?: Date;\n viewerCount: number;\n};\n\nfunction makeDurationString(lastConnectTime: Date): string {\n const diff = intervalToDuration({ start: lastConnectTime, end: new Date() });\n if (diff.days > 1) {\n return `${diff.days} days ${diff.hours} hours`;\n }\n if (diff.hours >= 1) {\n return `${diff.hours} hours ${diff.minutes} minutes`;\n }\n\n return `${diff.minutes} minutes ${diff.seconds} seconds`;\n}\n\nexport const Statusbar: FC = ({\n online,\n lastConnectTime,\n lastDisconnectTime,\n viewerCount,\n}) => {\n const [, setNow] = useState(new Date());\n\n // Set a timer to update the status bar.\n useEffect(() => {\n const interval = setInterval(() => setNow(new Date()), 1000);\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n let onlineMessage = '';\n let rightSideMessage: any;\n if (online && lastConnectTime) {\n const duration = makeDurationString(new Date(lastConnectTime));\n onlineMessage = online ? `Live for ${duration}` : 'Offline';\n rightSideMessage = viewerCount > 0 && (\n
\n \n \n \n {` ${viewerCount}`}\n
\n );\n } else if (!online) {\n onlineMessage = 'Offline';\n if (lastDisconnectTime) {\n rightSideMessage = `Last live ${formatDistanceToNow(new Date(lastDisconnectTime))} ago.`;\n }\n }\n\n return (\n
\n
{onlineMessage}
\n
{rightSideMessage}
\n
\n );\n};\nexport default Statusbar;\n\nStatusbar.defaultProps = {\n lastConnectTime: null,\n lastDisconnectTime: null,\n};\n","/* eslint-disable react/no-danger */\nimport { FC } from 'react';\nimport styles from './CustomPageContent.module.scss';\n\nexport type CustomPageContentProps = {\n content: string;\n};\n\nexport const CustomPageContent: FC = ({ content }) => (\n
\n
\n
\n);\n","import Sider from 'antd/lib/layout/Sider';\nimport { useRecoilValue } from 'recoil';\nimport { FC } from 'react';\nimport dynamic from 'next/dynamic';\nimport { ChatMessage } from '../../../interfaces/chat-message.model';\nimport styles from './Sidebar.module.scss';\n\nimport { currentUserAtom, visibleChatMessagesSelector } from '../../stores/ClientConfigStore';\n\n// Lazy loaded components\nconst ChatContainer = dynamic(\n () => import('../../chat/ChatContainer/ChatContainer').then(mod => mod.ChatContainer),\n {\n ssr: false,\n },\n);\n\nexport const Sidebar: FC = () => {\n const currentUser = useRecoilValue(currentUserAtom);\n const messages = useRecoilValue(visibleChatMessagesSelector);\n if (!currentUser) {\n return ;\n }\n\n const { id, isModerator, displayName } = currentUser;\n return (\n \n \n \n );\n};\n","import { FC } from 'react';\nimport styles from './Footer.module.scss';\n\nexport type FooterProps = {\n version: string;\n};\n\nexport const Footer: FC = ({ version }) => (\n \n);\nexport default Footer;\n","import { FC, ReactNode } from 'react';\nimport styles from './ActionButtonRow.module.scss';\n\nexport type ActionButtonRowProps = {\n children: ReactNode;\n};\n\nexport const ActionButtonRow: FC = ({ children }) => (\n
{children}
\n);\n","import { Button } from 'antd';\nimport { FC } from 'react';\nimport cn from 'classnames';\nimport { ExternalAction } from '../../../interfaces/external-action';\nimport styles from './ActionButton.module.scss';\n\nexport type ActionButtonProps = {\n action: ExternalAction;\n primary?: boolean;\n externalActionSelected: (action: ExternalAction) => void;\n};\n\nexport const ActionButton: FC = ({\n action,\n primary = true,\n externalActionSelected,\n}) => {\n const { title, description, icon, color } = action;\n\n return (\n externalActionSelected(action)}\n style={{ backgroundColor: color }}\n >\n {icon && {description}}\n {title}\n \n );\n};\n","import { Button } from 'antd';\nimport { FC } from 'react';\nimport dynamic from 'next/dynamic';\nimport styles from './ActionButton/ActionButton.module.scss';\n\n// Lazy loaded components\n\nconst BellFilled = dynamic(() => import('@ant-design/icons/BellFilled'), {\n ssr: false,\n});\n\nexport type NotifyButtonProps = {\n text?: string;\n onClick?: () => void;\n};\n\nexport const NotifyButton: FC = ({ onClick, text }) => (\n }\n onClick={onClick}\n id=\"notify-button\"\n >\n {text || 'Notify'}\n \n);\n","import { FC } from 'react';\nimport styles from './Logo.module.scss';\n\nexport type LogoProps = {\n src: string;\n};\n\nexport const Logo: FC = ({ src }) => (\n
\n
\n \"Logo\"\n
\n
\n);\nexport default Logo;\n","import Image from 'next/image';\nimport { FC } from 'react';\nimport { SocialLink } from '../../../interfaces/social-link.model';\nimport styles from './SocialLinks.module.scss';\n\nexport type SocialLinksProps = {\n links: SocialLink[];\n};\n\nexport const SocialLinks: FC = ({ links }) => (\n
\n {links.map(link => (\n \n \n \n ))}\n
\n);\n","import cn from 'classnames';\nimport { FC } from 'react';\nimport Linkify from 'react-linkify';\nimport { Logo } from '../../ui/Logo/Logo';\nimport { SocialLinks } from '../../ui/SocialLinks/SocialLinks';\nimport { SocialLink } from '../../../interfaces/social-link.model';\nimport styles from './ContentHeader.module.scss';\n\nexport type ContentHeaderProps = {\n name: string;\n title: string;\n summary: string;\n tags: string[];\n links: SocialLink[];\n logo: string;\n};\n\nexport const ContentHeader: FC = ({\n name,\n title,\n summary,\n logo,\n tags,\n links,\n}) => (\n
\n
\n
\n \n
\n
\n

{name}

\n

\n {title || summary}\n

\n
\n {tags.length > 0 && tags.map(tag => #{tag} )}\n
\n
\n \n
\n
\n
\n
\n);\n","import { FC } from 'react';\nimport { Button, Dropdown, Menu } from 'antd';\nimport classNames from 'classnames';\nimport dynamic from 'next/dynamic';\nimport styles from './ActionButtonMenu.module.scss';\nimport { ExternalAction } from '../../../interfaces/external-action';\n\n// Lazy loaded components\n\nconst EllipsisOutlined = dynamic(() => import('@ant-design/icons/EllipsisOutlined'), {\n ssr: false,\n});\n\nconst HeartOutlined = dynamic(() => import('@ant-design/icons/HeartOutlined'), {\n ssr: false,\n});\n\nconst BellOutlined = dynamic(() => import('@ant-design/icons/BellOutlined'), {\n ssr: false,\n});\n\nconst NOTIFY_KEY = 'notify';\nconst FOLLOW_KEY = 'follow';\n\nexport type ActionButtonMenuProps = {\n actions: ExternalAction[];\n showFollowItem?: boolean;\n showNotifyItem?: boolean;\n externalActionSelected: (action: ExternalAction) => void;\n notifyItemSelected: () => void;\n followItemSelected: () => void;\n className?: string;\n};\n\nexport const ActionButtonMenu: FC = ({\n actions,\n externalActionSelected,\n notifyItemSelected,\n followItemSelected,\n showFollowItem,\n showNotifyItem,\n className,\n}) => {\n const onMenuClick = a => {\n if (a.key === NOTIFY_KEY) {\n notifyItemSelected();\n return;\n }\n if (a.key === FOLLOW_KEY) {\n followItemSelected();\n return;\n }\n const action = actions.find(x => x.url === a.key);\n externalActionSelected(action);\n };\n\n const items = actions.map(action => ({\n key: action.url,\n label: (\n \n {action.icon && {action.title}}{' '}\n {action.title}\n \n ),\n }));\n\n if (showFollowItem) {\n items.unshift({\n key: FOLLOW_KEY,\n label: (\n \n Follow this stream\n \n ),\n });\n }\n\n if (showNotifyItem) {\n items.unshift({\n key: NOTIFY_KEY,\n label: (\n \n \n Notify when live\n \n ),\n });\n }\n\n const menu = ;\n\n const dropdownClasses = classNames([styles.menu, className]);\n\n return (\n \n
\n e.preventDefault()}\n size=\"large\"\n icon={}\n />\n
\n \n );\n};\n","import { useRecoilState, useRecoilValue } from 'recoil';\nimport { Skeleton } from 'antd';\nimport { FC, useEffect, useState } from 'react';\nimport dynamic from 'next/dynamic';\nimport { LOCAL_STORAGE_KEYS, getLocalStorage, setLocalStorage } from '../../../utils/localStorage';\nimport isPushNotificationSupported from '../../../utils/browserPushNotifications';\n\nimport {\n clientConfigStateAtom,\n chatMessagesAtom,\n currentUserAtom,\n isChatAvailableSelector,\n isChatVisibleSelector,\n appStateAtom,\n isOnlineSelector,\n isMobileAtom,\n serverStatusState,\n} from '../../stores/ClientConfigStore';\nimport { ClientConfig } from '../../../interfaces/client-config.model';\nimport { CustomPageContent } from '../CustomPageContent/CustomPageContent';\n\nimport styles from './Content.module.scss';\nimport { Sidebar } from '../Sidebar/Sidebar';\nimport { Footer } from '../Footer/Footer';\n\nimport { ActionButtonRow } from '../../action-buttons/ActionButtonRow/ActionButtonRow';\nimport { ActionButton } from '../../action-buttons/ActionButton/ActionButton';\nimport { OfflineBanner } from '../OfflineBanner/OfflineBanner';\nimport { AppStateOptions } from '../../stores/application-state';\nimport { FollowButton } from '../../action-buttons/FollowButton';\nimport { NotifyButton } from '../../action-buttons/NotifyButton';\nimport { ContentHeader } from '../../common/ContentHeader/ContentHeader';\nimport { ServerStatus } from '../../../interfaces/server-status.model';\nimport { Statusbar } from '../Statusbar/Statusbar';\nimport { ChatMessage } from '../../../interfaces/chat-message.model';\nimport { ExternalAction } from '../../../interfaces/external-action';\nimport { Modal } from '../Modal/Modal';\nimport { ActionButtonMenu } from '../../action-buttons/ActionButtonMenu/ActionButtonMenu';\n\n// Lazy loaded components\n\nconst FollowerCollection = dynamic(\n () =>\n import('../followers/FollowerCollection/FollowerCollection').then(\n mod => mod.FollowerCollection,\n ),\n {\n ssr: false,\n },\n);\n\nconst FollowModal = dynamic(\n () => import('../../modals/FollowModal/FollowModal').then(mod => mod.FollowModal),\n {\n ssr: false,\n },\n);\n\nconst BrowserNotifyModal = dynamic(\n () =>\n import('../../modals/BrowserNotifyModal/BrowserNotifyModal').then(\n mod => mod.BrowserNotifyModal,\n ),\n {\n ssr: false,\n },\n);\n\nconst NotifyReminderPopup = dynamic(\n () => import('../NotifyReminderPopup/NotifyReminderPopup').then(mod => mod.NotifyReminderPopup),\n {\n ssr: false,\n },\n);\n\nconst OwncastPlayer = dynamic(\n () => import('../../video/OwncastPlayer/OwncastPlayer').then(mod => mod.OwncastPlayer),\n {\n ssr: false,\n },\n);\n\nconst ChatContainer = dynamic(\n () => import('../../chat/ChatContainer/ChatContainer').then(mod => mod.ChatContainer),\n {\n ssr: false,\n },\n);\n\nconst Tabs = dynamic(() => import('antd').then(mod => mod.Tabs), {\n ssr: false,\n});\n\nconst DesktopContent = ({\n name,\n streamTitle,\n summary,\n tags,\n socialHandles,\n extraPageContent,\n setShowFollowModal,\n supportFediverseFeatures,\n}) => {\n const aboutTabContent = ;\n const followersTabContent = (\n
\n setShowFollowModal(true)} />\n
\n );\n\n const items = [{ label: 'About', key: '2', children: aboutTabContent }];\n if (supportFediverseFeatures) {\n items.push({ label: 'Followers', key: '3', children: followersTabContent });\n }\n\n return (\n <>\n
\n \n
\n\n
\n {items.length > 1 ? : aboutTabContent}\n
\n \n );\n};\n\nconst MobileContent = ({\n name,\n streamTitle,\n summary,\n tags,\n socialHandles,\n extraPageContent,\n messages,\n currentUser,\n showChat,\n actions,\n setExternalActionToDisplay,\n setShowNotifyPopup,\n setShowFollowModal,\n supportFediverseFeatures,\n supportsBrowserNotifications,\n}) => {\n if (!currentUser) {\n return ;\n }\n const { id, displayName } = currentUser;\n\n const chatContent = showChat && (\n \n );\n\n const aboutTabContent = (\n <>\n \n \n \n );\n const followersTabContent = (\n setShowFollowModal(true)} />\n );\n\n const items = [\n showChat && { label: 'Chat', key: '0', children: chatContent },\n { label: 'About', key: '2', children: aboutTabContent },\n { label: 'Followers', key: '3', children: followersTabContent },\n ];\n\n const replacementTabBar = (props, DefaultTabBar) => (\n
\n \n setShowNotifyPopup(true)}\n followItemSelected={() => setShowFollowModal(true)}\n />\n
\n );\n\n return (\n
\n \n
\n );\n};\n\nconst ExternalModal = ({ externalActionToDisplay, setExternalActionToDisplay }) => {\n const { title, description, url } = externalActionToDisplay;\n return (\n setExternalActionToDisplay(null)}\n />\n );\n};\n\nexport const Content: FC = () => {\n const appState = useRecoilValue(appStateAtom);\n const clientConfig = useRecoilValue(clientConfigStateAtom);\n const isChatVisible = useRecoilValue(isChatVisibleSelector);\n const isChatAvailable = useRecoilValue(isChatAvailableSelector);\n const currentUser = useRecoilValue(currentUserAtom);\n const serverStatus = useRecoilValue(serverStatusState);\n const [isMobile, setIsMobile] = useRecoilState(isMobileAtom);\n const messages = useRecoilValue(chatMessagesAtom);\n const online = useRecoilValue(isOnlineSelector);\n\n const { viewerCount, lastConnectTime, lastDisconnectTime, streamTitle } =\n useRecoilValue(serverStatusState);\n const {\n extraPageContent,\n version,\n name,\n summary,\n socialHandles,\n tags,\n externalActions,\n offlineMessage,\n chatDisabled,\n federation,\n notifications,\n } = clientConfig;\n const [showNotifyReminder, setShowNotifyReminder] = useState(false);\n const [showNotifyModal, setShowNotifyModal] = useState(false);\n const [showFollowModal, setShowFollowModal] = useState(false);\n const { account: fediverseAccount, enabled: fediverseEnabled } = federation;\n const { browser: browserNotifications } = notifications;\n const { enabled: browserNotificationsEnabled } = browserNotifications;\n const { online: isStreamLive } = serverStatus;\n const [externalActionToDisplay, setExternalActionToDisplay] = useState(null);\n\n const [supportsBrowserNotifications, setSupportsBrowserNotifications] = useState(false);\n const supportFediverseFeatures = fediverseEnabled;\n\n const externalActionSelected = (action: ExternalAction) => {\n const { openExternally, url } = action;\n if (openExternally) {\n window.open(url, '_blank');\n } else {\n setExternalActionToDisplay(action);\n }\n };\n\n const externalActionButtons = externalActions.map(action => (\n \n ));\n\n const incrementVisitCounter = () => {\n let visits = parseInt(getLocalStorage(LOCAL_STORAGE_KEYS.userVisitCount), 10);\n if (Number.isNaN(visits)) {\n visits = 0;\n }\n\n setLocalStorage(LOCAL_STORAGE_KEYS.userVisitCount, visits + 1);\n\n if (visits > 2 && !getLocalStorage(LOCAL_STORAGE_KEYS.hasDisplayedNotificationModal)) {\n setShowNotifyReminder(true);\n }\n };\n\n const disableNotifyReminderPopup = () => {\n setShowNotifyModal(false);\n setShowNotifyReminder(false);\n setLocalStorage(LOCAL_STORAGE_KEYS.hasDisplayedNotificationModal, true);\n };\n\n const checkIfMobile = () => {\n const w = window.innerWidth;\n if (isMobile === undefined) {\n if (w <= 768) setIsMobile(true);\n else setIsMobile(false);\n }\n if (!isMobile && w <= 768) setIsMobile(true);\n if (isMobile && w > 768) setIsMobile(false);\n };\n\n useEffect(() => {\n incrementVisitCounter();\n checkIfMobile();\n window.addEventListener('resize', checkIfMobile);\n return () => {\n window.removeEventListener('resize', checkIfMobile);\n };\n }, []);\n\n useEffect(() => {\n // isPushNotificationSupported relies on `navigator` so that needs to be\n // fired from this useEffect.\n setSupportsBrowserNotifications(isPushNotificationSupported() && browserNotificationsEnabled);\n }, [browserNotificationsEnabled]);\n\n const showChat = !chatDisabled && isChatAvailable && isChatVisible;\n\n return (\n <>\n
\n
\n
\n
\n {appState.appLoading && }\n {online && (\n \n )}\n {!online && !appState.appLoading && (\n setShowNotifyModal(true)}\n onFollowClick={() => setShowFollowModal(true)}\n />\n )}\n {isStreamLive && (\n \n )}\n
\n
\n
\n {!isMobile && (\n \n {externalActionButtons}\n {supportFediverseFeatures && (\n setShowFollowModal(true)} />\n )}\n {supportsBrowserNotifications && (\n setShowNotifyModal(true)}\n notificationClosed={() => disableNotifyReminderPopup()}\n >\n setShowNotifyModal(true)} />\n \n )}\n \n )}\n\n disableNotifyReminderPopup()}\n handleCancel={() => disableNotifyReminderPopup()}\n >\n \n \n
\n
\n {isMobile ? (\n \n ) : (\n \n )}\n {!isMobile &&
}\n
\n {showChat && !isMobile && }\n
\n
\n {externalActionToDisplay && (\n \n )}\n setShowFollowModal(false)}\n width=\"550px\"\n >\n setShowFollowModal(false)}\n />\n \n \n );\n};\nexport default Content;\n","/*\nDue to Owncast's goal of being private by default, we don't want any external\nlinks to leak the instance of Owncast as a referrer.\nThis observer attempts to catch any anchor tags and automatically add the\nnoopener and noreferrer attributes to them so the instance of Owncast isn't\npassed along in the headers.\n\nThis should should be fired somewhere relatively high level in the DOM and live\nfor the entirety of the page.\n*/\n\n/* eslint-disable no-restricted-syntax */\nexport default function setupNoLinkReferrer(observationRoot: HTMLElement): void {\n // Options for the observer (which mutations to observe)\n const config = { attributes: false, childList: true, subtree: true };\n\n const addNoReferrer = (node: Element): void => {\n const existingAttributes = node.getAttribute('rel');\n const attributes = `${existingAttributes} noopener noreferrer`;\n node.setAttribute('rel', attributes);\n };\n\n // Callback function to execute when mutations are observed\n // eslint-disable-next-line func-names\n const callback = function (mutationList) {\n for (const mutation of mutationList) {\n for (const node of mutation.addedNodes) {\n // we track only elements, skip other nodes (e.g. text nodes)\n // eslint-disable-next-line no-continue\n if (!(node instanceof HTMLElement)) continue;\n\n if (node.tagName.toLowerCase() === 'a') {\n addNoReferrer(node);\n }\n }\n }\n };\n\n observationRoot.querySelectorAll('a').forEach(anchor => addNoReferrer(anchor));\n\n // Create an observer instance linked to the callback function\n const observer = new MutationObserver(callback);\n\n // Start observing the target node for configured mutations\n observer.observe(observationRoot, config);\n}\n","/**\n * This component is responsible for updating the title of the page when\n * different state changes occur.\n * If the stream live state changes, or chat messages come in while the\n * page is backgrounded, this component will update the title to reflect it. *\n * @component\n */\nimport { FC, useEffect, useState } from 'react';\nimport { useRecoilValue } from 'recoil';\nimport { serverStatusState, chatMessagesAtom } from '../stores/ClientConfigStore';\n\nexport type TitleNotifierProps = {\n name: string;\n};\n\nexport const TitleNotifier: FC = ({ name }) => {\n const chatMessages = useRecoilValue(chatMessagesAtom);\n const serverStatus = useRecoilValue(serverStatusState);\n\n const [backgrounded, setBackgrounded] = useState(false);\n\n const { online } = serverStatus;\n\n const setTitle = (title: string) => {\n document.title = title;\n };\n\n const onBlur = () => {\n setBackgrounded(true);\n };\n\n const onFocus = () => {\n setBackgrounded(false);\n setTitle(name);\n };\n\n const listenForEvents = () => {\n // Listen for events that should update the title\n window.addEventListener('blur', onBlur);\n window.addEventListener('focus', onFocus);\n };\n\n const removeEvents = () => {\n window.removeEventListener('blur', onBlur);\n window.removeEventListener('focus', onFocus);\n };\n\n useEffect(() => {\n listenForEvents();\n\n return () => {\n removeEvents();\n };\n }, [name]);\n\n useEffect(() => {\n if (!backgrounded || !online) {\n return;\n }\n\n // Only alert on real chat messages from people.\n const lastMessage = chatMessages[chatMessages.length - 1];\n if (lastMessage.type !== 'CHAT') {\n return;\n }\n\n setTitle(`💬 :: ${name}`);\n }, [chatMessages, name]);\n\n useEffect(() => {\n if (!backgrounded) {\n return;\n }\n\n if (online) {\n setTitle(` 🟢 :: ${name}`);\n } else if (!online) {\n setTitle(` 🔴 :: ${name}`);\n }\n }, [online, name]);\n\n return null;\n};\n","/* eslint-disable react/no-danger */\nimport { FC } from 'react';\n\nexport const ServerRenderedHydration: FC = () => (\n \n);\n","/* eslint-disable react/no-danger */\nimport { FC } from 'react';\nimport { useRecoilValue } from 'recoil';\nimport { ClientConfig } from '../../interfaces/client-config.model';\nimport { clientConfigStateAtom } from '../stores/ClientConfigStore';\n\nexport const Theme: FC = () => {\n const clientConfig = useRecoilValue(clientConfigStateAtom);\n const { appearanceVariables, customStyles } = clientConfig;\n\n const appearanceVars = Object.keys(appearanceVariables)\n .filter(variable => !!appearanceVariables[variable])\n .map(variable => `--${variable}: ${appearanceVariables[variable]}`);\n\n return (\n \n );\n};\n","/* eslint-disable react/no-danger */\nimport { FC, useEffect } from 'react';\n\nexport const PushNotificationServiceWorker: FC = () => {\n const add = () => {\n navigator.serviceWorker.register('/serviceWorker.js').then(\n registration => {\n console.debug('Service Worker registration successful with scope: ', registration.scope);\n },\n err => {\n console.error('Service Worker registration failed: ', err);\n },\n );\n };\n\n useEffect(() => {\n if ('serviceWorker' in navigator) {\n window.addEventListener('load', add);\n }\n\n return () => {\n window.removeEventListener('load', add);\n };\n }, []);\n\n return null;\n};\n","/* eslint-disable react/no-danger */\n/* eslint-disable react/no-unescaped-entities */\nimport { useRecoilValue } from 'recoil';\nimport Head from 'next/head';\nimport { FC, useEffect, useRef } from 'react';\nimport { Layout } from 'antd';\nimport dynamic from 'next/dynamic';\nimport Script from 'next/script';\nimport {\n ClientConfigStore,\n isChatAvailableSelector,\n clientConfigStateAtom,\n fatalErrorStateAtom,\n appStateAtom,\n} from '../../stores/ClientConfigStore';\nimport { Content } from '../../ui/Content/Content';\nimport { Header } from '../../ui/Header/Header';\nimport { ClientConfig } from '../../../interfaces/client-config.model';\nimport { DisplayableError } from '../../../types/displayable-error';\nimport setupNoLinkReferrer from '../../../utils/no-link-referrer';\nimport { TitleNotifier } from '../../TitleNotifier/TitleNotifier';\nimport { ServerRenderedHydration } from '../../ServerRendered/ServerRenderedHydration';\nimport { Theme } from '../../theme/Theme';\nimport styles from './Main.module.scss';\nimport { PushNotificationServiceWorker } from '../../workers/PushNotificationServiceWorker/PushNotificationServiceWorker';\nimport { AppStateOptions } from '../../stores/application-state';\n\nconst lockBodyStyle = `\nbody {\n overflow: hidden;\n}\n`;\n\n// Lazy loaded components\n\nconst FatalErrorStateModal = dynamic(\n () =>\n import('../../modals/FatalErrorStateModal/FatalErrorStateModal').then(\n mod => mod.FatalErrorStateModal,\n ),\n {\n ssr: false,\n },\n);\n\nexport const Main: FC = () => {\n const clientConfig = useRecoilValue(clientConfigStateAtom);\n const { name, title, customStyles } = clientConfig;\n const isChatAvailable = useRecoilValue(isChatAvailableSelector);\n const fatalError = useRecoilValue(fatalErrorStateAtom);\n const appState = useRecoilValue(appStateAtom);\n\n const layoutRef = useRef(null);\n const { chatDisabled } = clientConfig;\n const { videoAvailable } = appState;\n\n useEffect(() => {\n setupNoLinkReferrer(layoutRef.current);\n }, []);\n\n const isProduction = process.env.NODE_ENV === 'production';\n\n return (\n <>\n \n {isProduction && }\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n\n {isProduction ? (\n \n {name ? {name} : {'{{.Name}}'}}\n \n\n \n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n ) : (\n \n {name}\n \n )}\n\n \n \n \n \n

What is your stream about today?

What is your stream about today?
Offline

Access Tokens

Access tokens are used to allow external, 3rd party tools to perform specific actions on your Owncast server. They should be kept secure and never included in client code, instead they should be kept on a server that you control.
Read more about how to use these tokens, with examples, at our documentation.
NameTokenScopesLast Used
No data

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Access Tokens

Access tokens are used to allow external, 3rd party tools to perform specific actions on your Owncast server. They should be kept secure and never included in client code, instead they should be kept on a server that you control.
Read more about how to use these tokens, with examples, at our documentation.
NameTokenScopesLast Used
No data

diff --git a/static/web/admin/actions/index.html b/static/web/admin/actions/index.html index f2d5eaef8..4f15fc45b 100644 --- a/static/web/admin/actions/index.html +++ b/static/web/admin/actions/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

External Actions

External action URLs are 3rd party UI you can display, embedded, into your Owncast page when a user clicks on a button to launch your action.
Read more about how to use actions, with examples, at our documentation.
NameDescriptionURLIconColorOpens
No data

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

External Actions

External action URLs are 3rd party UI you can display, embedded, into your Owncast page when a user clicks on a button to launch your action.
Read more about how to use actions, with examples, at our documentation.
NameDescriptionURLIconColorOpens
No data

diff --git a/static/web/admin/chat/emojis/index.html b/static/web/admin/chat/emojis/index.html index 6444b016b..70941231a 100644 --- a/static/web/admin/chat/emojis/index.html +++ b/static/web/admin/chat/emojis/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Emojis

Here you can upload new custom emojis for usage in the chat. When uploading a new emoji, the filename will be used as emoji name.
NameEmoji
No data

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Emojis

Here you can upload new custom emojis for usage in the chat. When uploading a new emoji, the filename will be used as emoji name.
NameEmoji
No data

diff --git a/static/web/admin/chat/messages/index.html b/static/web/admin/chat/messages/index.html index 5c4e4a955..aa784c314 100644 --- a/static/web/admin/chat/messages/index.html +++ b/static/web/admin/chat/messages/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Chat Messages

Manage the messages from viewers that show up on your stream.

Check multiple messages to change their visibility to:
Time
User
Message
No data
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Chat Messages

Manage the messages from viewers that show up on your stream.

Check multiple messages to change their visibility to:
Time
User
Message
No data
diff --git a/static/web/admin/chat/users/index.html b/static/web/admin/chat/users/index.html index 0057745dc..be0da44c0 100644 --- a/static/web/admin/chat/users/index.html +++ b/static/web/admin/chat/users/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

When a stream is active and chat is enabled, connected chat clients will be displayed here.

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

When a stream is active and chat is enabled, connected chat clients will be displayed here.

diff --git a/static/web/admin/config-chat/index.html b/static/web/admin/config-chat/index.html index 9b62bfa92..cc517f077 100644 --- a/static/web/admin/config-chat/index.html +++ b/static/web/admin/config-chat/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline
diff --git a/static/web/admin/config-federation/index.html b/static/web/admin/config-federation/index.html index 4033712cf..273e6ce76 100644 --- a/static/web/admin/config-federation/index.html +++ b/static/web/admin/config-federation/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline
diff --git a/static/web/admin/config-notify/index.html b/static/web/admin/config-notify/index.html index 79af38d96..f4e9a7916 100644 --- a/static/web/admin/config-notify/index.html +++ b/static/web/admin/config-notify/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Notifications

Let your viewers know when you go live by supporting any of the below notification channels. Learn more about live notifications.


The full url to your Owncast server is required to enable social features. Must use SSL (https). Once people start following your instance you should not change this.

The full url to your Owncast server is required to enable social features. Must use SSL (https). Once people start following your instance you should not change this.

Browser Alerts

Viewers can opt into being notified when you go live with their browser.

Not all browsers support this.

Enable browser notifications

The text to send when you go live.

Discord

Let your Discord channel know each time you go live.

Create a webhook under Edit Channel / Integrations on your Discord channel and provide it below.

Enable Discord

The webhook assigned to your channel.

The text to send when you go live.

Fediverse Social

Enabling the Fediverse social features will not just alert people to when you go live, but also enable other functionality.

Fediverse social features: Disabled

Custom

Build your own notifications by using custom webhooks.

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Notifications

Let your viewers know when you go live by supporting any of the below notification channels. Learn more about live notifications.


The full url to your Owncast server is required to enable social features. Must use SSL (https). Once people start following your instance you should not change this.

The full url to your Owncast server is required to enable social features. Must use SSL (https). Once people start following your instance you should not change this.

Browser Alerts

Viewers can opt into being notified when you go live with their browser.

Not all browsers support this.

Enable browser notifications

The text to send when you go live.

Discord

Let your Discord channel know each time you go live.

Create a webhook under Edit Channel / Integrations on your Discord channel and provide it below.

Enable Discord

The webhook assigned to your channel.

The text to send when you go live.

Fediverse Social

Enabling the Fediverse social features will not just alert people to when you go live, but also enable other functionality.

Fediverse social features: Disabled

Custom

Build your own notifications by using custom webhooks.

diff --git a/static/web/admin/config-social-items/index.html b/static/web/admin/config-social-items/index.html index 3d684a267..63e3a042a 100644 --- a/static/web/admin/config-social-items/index.html +++ b/static/web/admin/config-social-items/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Social Items

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Social Items

diff --git a/static/web/admin/config-video/index.html b/static/web/admin/config-video/index.html index a34a02b4c..8c182677c 100644 --- a/static/web/admin/config-video/index.html +++ b/static/web/admin/config-video/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Video configuration

Before changing your video configuration visit the video documentation to learn how it impacts your stream performance. The general rule is to start conservatively by having one middle quality stream output variant and experiment with adding more of varied qualities.

Stream output

NameVideo bitrateCPU Usage
No name800 kbpsMedium

Latency Buffer

While it's natural to want to keep your latency as low as possible, you may experience reduced error tolerance and stability the lower you go. The lowest setting is not recommended.

For interactive live streams you may want to experiment with a lower latency, for non-interactive broadcasts you may want to increase it. Read to learn more.

LowestHighest

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Video configuration

Before changing your video configuration visit the video documentation to learn how it impacts your stream performance. The general rule is to start conservatively by having one middle quality stream output variant and experiment with adding more of varied qualities.

Stream output

NameVideo bitrateCPU Usage
No name800 kbpsMedium

Latency Buffer

While it's natural to want to keep your latency as low as possible, you may experience reduced error tolerance and stability the lower you go. The lowest setting is not recommended.

For interactive live streams you may want to experiment with a lower latency, for non-interactive broadcasts you may want to increase it. Read to learn more.

LowestHighest

diff --git a/static/web/admin/config/general/index.html b/static/web/admin/config/general/index.html index 326dbf417..b76a27428 100644 --- a/static/web/admin/config/general/index.html +++ b/static/web/admin/config/general/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

The following are displayed on your site to describe your stream and its content. Learn more.

Custom Page Content

Edit the content of your page by using simple Markdown syntax.


+/*# sourceMappingURL=8f3c1acb703369d5.css.map*/

What is your stream about today?

What is your stream about today?
Offline

The following are displayed on your site to describe your stream and its content. Learn more.

Custom Page Content

Edit the content of your page by using simple Markdown syntax.


diff --git a/static/web/admin/config/server/index.html b/static/web/admin/config/server/index.html index 242269296..6c0760323 100644 --- a/static/web/admin/config/server/index.html +++ b/static/web/admin/config/server/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

You should change your admin password from the default and keep it safe. For most people it's likely the other settings will not need to be changed.

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

You should change your admin password from the default and keep it safe. For most people it's likely the other settings will not need to be changed.

diff --git a/static/web/admin/federation/actions/index.html b/static/web/admin/federation/actions/index.html index f59c455d7..d08ac8ccb 100644 --- a/static/web/admin/federation/actions/index.html +++ b/static/web/admin/federation/actions/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Fediverse Actions

Below is a list of actions that were taken by others in response to your posts as well as people who requested to follow you.
ActionFromWhen
No data
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Fediverse Actions

Below is a list of actions that were taken by others in response to your posts as well as people who requested to follow you.
ActionFromWhen
No data
diff --git a/static/web/admin/federation/followers/index.html b/static/web/admin/federation/followers/index.html index 8b894ac8b..c80f6dc59 100644 --- a/static/web/admin/federation/followers/index.html +++ b/static/web/admin/federation/followers/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

The following accounts get notified when you go live or send a post.

NameURL
Added
Remove
No data
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

The following accounts get notified when you go live or send a post.

NameURL
Added
Remove
No data
diff --git a/static/web/admin/hardware-info/index.html b/static/web/admin/hardware-info/index.html index d54892602..dcbb2933e 100644 --- a/static/web/admin/hardware-info/index.html +++ b/static/web/admin/hardware-info/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Hardware Info


CPU
0%
Memory
0%
Disk
0%
Loading...
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Hardware Info


CPU
0%
Memory
0%
Disk
0%
Loading...
diff --git a/static/web/admin/help/index.html b/static/web/admin/help/index.html index fab0309c6..1095e7941 100644 --- a/static/web/admin/help/index.html +++ b/static/web/admin/help/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

How can we help you?

Troubleshooting

Fix your problems

Documentation

Read the Docs

Common tasks

I want to configure my owncast instance
Help configuring my broadcasting software
I want to embed my stream into another site
I want to customize my website
I want to tweak my video output
I want to use an external storage provider

Other

I found a bug
If you found a bug, then please let us know
I have a general question
Most general questions are answered in our FAQ or exist in our discussions
I want to build add-ons for Owncast
You can build your own bots, overlays, tools and add-ons with our developer APIs. 
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

How can we help you?

Troubleshooting

Fix your problems

Documentation

Read the Docs

Common tasks

I want to configure my owncast instance
Help configuring my broadcasting software
I want to embed my stream into another site
I want to customize my website
I want to tweak my video output
I want to use an external storage provider

Other

I found a bug
If you found a bug, then please let us know
I have a general question
Most general questions are answered in our FAQ or exist in our discussions
I want to build add-ons for Owncast
You can build your own bots, overlays, tools and add-ons with our developer APIs. 
diff --git a/static/web/admin/index.html b/static/web/admin/index.html index 8b3b85936..9f788de8d 100644 --- a/static/web/admin/index.html +++ b/static/web/admin/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

No stream is active

You should start one.

Chat is disabled
Chat will continue to be disabled until you begin a live stream.
Find an audience on the Owncast Directory
List yourself in the Owncast Directory and show off your stream. Enable it in settings.
fediverse
Add your Owncast instance to the Fediverse
Enable Owncast social features to have your instance join the Fediverse, allowing people to follow, share and engage with your live stream.

News & Updates from Owncast

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

No stream is active

You should start one.

Chat is disabled
Chat will continue to be disabled until you begin a live stream.
Find an audience on the Owncast Directory
List yourself in the Owncast Directory and show off your stream. Enable it in settings.
fediverse
Add your Owncast instance to the Fediverse
Enable Owncast social features to have your instance join the Fediverse, allowing people to follow, share and engage with your live stream.

News & Updates from Owncast

diff --git a/static/web/admin/logs/index.html b/static/web/admin/logs/index.html index e8b5e00e9..acb786201 100644 --- a/static/web/admin/logs/index.html +++ b/static/web/admin/logs/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline
diff --git a/static/web/admin/stream-health/index.html b/static/web/admin/stream-health/index.html index c5f7fa36a..94b5dce70 100644 --- a/static/web/admin/stream-health/index.html +++ b/static/web/admin/stream-health/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Stream Performance

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Stream Performance

diff --git a/static/web/admin/upgrade/index.html b/static/web/admin/upgrade/index.html index 6f3933014..4dbf78483 100644 --- a/static/web/admin/upgrade/index.html +++ b/static/web/admin/upgrade/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Thu Jan 01 1970

Downloads

NameSize
No data
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Thu Jan 01 1970

Downloads

NameSize
No data
diff --git a/static/web/admin/viewer-info/index.html b/static/web/admin/viewer-info/index.html index 42d4fbbab..cf5a23c89 100644 --- a/static/web/admin/viewer-info/index.html +++ b/static/web/admin/viewer-info/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Viewer Info


Max viewers last stream
0
All-time max viewers
0
User AgentLocation
Watch Time
No data
+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Viewer Info


Max viewers last stream
0
All-time max viewers
0
User AgentLocation
Watch Time
No data
diff --git a/static/web/admin/webhooks/index.html b/static/web/admin/webhooks/index.html index 5ba9dc98e..89d1c960c 100644 --- a/static/web/admin/webhooks/index.html +++ b/static/web/admin/webhooks/index.html @@ -1,7 +1,7 @@ Owncast Admin

What is your stream about today?

What is your stream about today?
Offline

Webhooks

A webhook is a callback made to an external API in response to an event that takes place within Owncast. This can be used to build chat bots or sending automatic notifications that you've started streaming.
Read more about how to use webhooks, with examples, at our documentation.
URLEvents
No data

+/*# sourceMappingURL=e867652ad65748d1.css.map*/

What is your stream about today?

What is your stream about today?
Offline

Webhooks

A webhook is a callback made to an external API in response to an event that takes place within Owncast. This can be used to build chat bots or sending automatic notifications that you've started streaming.
Read more about how to use webhooks, with examples, at our documentation.
URLEvents
No data

diff --git a/static/web/embed/chat/readonly/index.html b/static/web/embed/chat/readonly/index.html index efe4f8d6a..095d83f90 100644 --- a/static/web/embed/chat/readonly/index.html +++ b/static/web/embed/chat/readonly/index.html @@ -1,7 +1,7 @@
+/*# sourceMappingURL=561bdeeb79990bf3.css.map*/
diff --git a/static/web/embed/chat/readwrite/index.html b/static/web/embed/chat/readwrite/index.html index 9d53fb2f4..3ac8facf7 100644 --- a/static/web/embed/chat/readwrite/index.html +++ b/static/web/embed/chat/readwrite/index.html @@ -1,7 +1,7 @@
+/*# sourceMappingURL=561bdeeb79990bf3.css.map*/
diff --git a/static/web/embed/video/index.html b/static/web/embed/video/index.html index a5654f2b7..36eb4ca57 100644 --- a/static/web/embed/video/index.html +++ b/static/web/embed/video/index.html @@ -1,8 +1,8 @@
This stream is offline. Check back soon!
+/*# sourceMappingURL=726eb804d4057c2a.css.map*/
This stream is offline. Check back soon!
diff --git a/static/web/index.html b/static/web/index.html index 9fd1e181a..005242499 100644 --- a/static/web/index.html +++ b/static/web/index.html @@ -7,13 +7,13 @@ body { } {{.Name}}
+