PageSourceSearch

https://ritameet.com/1191978425?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6Ik…RqRDM43F_BV1dlb1DX0XVDWU1OEw0ha_VvtlxWKaSy4

html ritameet.com collected 2026-09-24 14:51:27 UTC 108,259 bytes, 2,549 lines download raw bytes

1<html itemscope itemtype="http://schema.org/Product" prefix="og: http://ogp.me/ns#" xmlns="http://www.w3.org/1999/html">
2  <head>
3    <style>
4    #rita-demo-banner {
5        position: fixed;
6        top: 20px;
7        left: 50%;
8        transform: translateX(-50%);
9        background:
10            linear-gradient(180deg, rgba(255, 255, 255, 0.10) 0%, rgba(255, 255, 255, 0) 55%),
11            linear-gradient(180deg, rgba(78, 91, 170, 0.55) 0%, rgba(58, 70, 140, 0.65) 100%);
12        backdrop-filter: blur(24px) saturate(1.5) brightness(0.95);
13        -webkit-backdrop-filter: blur(24px) saturate(1.5) brightness(0.95);
14        border: 1px solid rgba(255, 255, 255, 0.14);
15        color: #fff;
16        font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
17        font-size: 13px;
18        font-weight: 600;
19        letter-spacing: 0.2px;
20        padding: 6px 8px 6px 18px;
21        border-radius: 999px;
22        z-index: 10000;
23        box-shadow:
24            0 12px 32px rgba(11, 2, 19, 0.45),
25            0 0 16px rgba(124, 138, 230, 0.30),
26            0 1px 0 rgba(255, 255, 255, 0.22) inset,
27            0 0 0 1px rgba(124, 138, 230, 0.10) inset,
28            0 -1px 0 rgba(0, 0, 0, 0.30) inset;
29        white-space: nowrap;
30        display: inline-flex;
31        align-items: center;
32        gap: 10px;
33    }
34    #rita-demo-banner .rita-demo-quality {
35        flex: 0 0 auto;
36        width: 28px;
37        height: 28px;
38        display: inline-flex;
39        align-items: center;
40        justify-content: center;
41        background: rgba(255, 255, 255, 0.10);
42        border: 1px solid rgba(255, 255, 255, 0.16);
43        border-radius: 50%;
44        color: #fff;
45        cursor: pointer;
46        padding: 0;
47        transition: background .15s ease, transform .05s ease;
48    }
49    #rita-demo-banner .rita-demo-quality:hover {
50        background: rgba(255, 255, 255, 0.18);
51    }
52    #rita-demo-banner .rita-demo-quality:active {
53        transform: translateY(1px);
54    }
55    #rita-demo-banner .rita-demo-quality svg {
56        width: 18px;
57        height: 18px;
58        fill: currentColor;
59        display: block;
60    }
61    /* While the demo banner is visible, hide the upstream room-info pill so
62     * the two don't collide at the top of the conference. */
63    body:has(#rita-demo-banner) .subject-info-container {
64        display: none !important;
65    }
66    </style>
67    
67<script>
68    // Save JWT user info to localStorage
69    (function(){
70        function showDemoBanner(exp){
71            function ensureEl(){
72                var el = document.getElementById('rita-demo-banner');
73                if(el){ return el; }
74                el = document.createElement('div');
75                el.id = 'rita-demo-banner';
76                var label = document.createElement('span');
77                label.className = 'rita-demo-label';
78                el.appendChild(label);
79                var btn = document.createElement('button');
80                btn.className = 'rita-demo-quality';
81                btn.type = 'button';
82                btn.title = 'Качество и скорость';
83                btn.setAttribute('aria-label', 'Качество и скорость');
84                btn.innerHTML = '<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.75C7.06046 3.75 3 7.94581 3 13.1924C3 16.108 4.25819 18.7074 6.22705 20.4365C6.53828 20.7098 6.569 21.1837 6.29567 21.4949C6.02235 21.8061 5.54847 21.8369 5.23724 21.5635C2.94821 19.5533 1.5 16.5451 1.5 13.1924C1.5 7.18081 6.16999 2.25 12 2.25C17.83 2.25 22.5 7.18081 22.5 13.1924C22.5 16.5451 21.0518 19.5533 18.7628 21.5635C18.4515 21.8369 17.9777 21.8061 17.7043 21.4949C17.431 21.1837 17.4617 20.7098 17.773 20.4365C19.7418 18.7074 21 16.108 21 13.1924C21 7.94581 16.9395 3.75 12 3.75Z"/><path fill-rule="evenodd" clip-rule="evenodd" d="M14.9984 10.5018L11.5488 12.6057C11.3241 12.7428 11.164 12.9645 11.1047 13.221C10.9415 13.9264 11.5738 14.5587 12.2792 14.3957C12.5357 14.3364 12.7576 14.1763 12.8947 13.9515L14.9984 10.5018ZM15.5384 8.41542C16.5457 7.80104 17.699 8.95423 17.0847 9.9616L14.1754 14.7324C13.8283 15.3016 13.2665 15.707 12.617 15.8572C10.8311 16.2699 9.23022 14.6689 9.64323 12.883C9.79341 12.2337 10.1987 11.6721 10.7678 11.3251L15.5384 8.41542Z"/></svg>';
85                btn.addEventListener('click', function(){
86                    if (typeof window.ritaOpenVideoQuality === 'function') {
87                        window.ritaOpenVideoQuality();
88                    }
89                });
90                el.appendChild(btn);
91                document.body.appendChild(el);
92                return el;
93            }
94            function render(){
95                var el = ensureEl();
96                var label = el.querySelector('.rita-demo-label');
97                var remaining = Math.max(0, Math.ceil((exp*1000 - Date.now())/1000));
98                var m = Math.floor(remaining/60);
99                var s = remaining%60;
100                if (label) {
101                    label.textContent = 'Демо-версия — осталось ' + m + ':' + (s<10?'0':'') + s;
102                }
103            }
104            if(document.body){render();}
105            else{document.addEventListener('DOMContentLoaded', render);}
106            setInterval(render, 1000);
107        }
108        // 1. Try URL param (auth redirect)
109        try{var m=location.search.match(/[?&]jwt=([^&#]+)/);if(m){var p=JSON.parse(atob(m[1].split('.')[1]));if(p.context&&p.context.user&&p.context.user.id){localStorage.setItem('rita_uid',p.context.user.id);localStorage.setItem('rita_uname',p.context.user.name||'');
110            // Demo token: schedule kick at exp
111            if(String(p.context.user.id).indexOf('demo_')===0 && p.exp){
112                showDemoBanner(p.exp);
113                var demoRoom = (location.pathname.split('/').filter(Boolean)[0])||'';
114                var isMobileApp = /JitsiMeetSDK|RitaMeet/i.test(navigator.userAgent) || /com\.ritameet\.app/i.test(navigator.userAgent);
115                var appQuery = isMobileApp ? '&app=mobile' : '';
116                var limitUrl = '/auth/demo/limit?room='+encodeURIComponent(demoRoom)+appQuery;
117                var ms=(p.exp*1000)-Date.now();
118                if(ms>0){
119                    setTimeout(function(){
120                        try{if(window.APP&&window.APP.conference)window.APP.conference.hangup();}catch(e){}
121                        location.replace(limitUrl);
122                    }, ms);
123                }else{
124                    location.replace(limitUrl);
125                }
126            }
127            return}}}catch(e){}
128        // 2. Subscribe to Redux store to catch jwt.user when it briefly appears
129        var iv=setInterval(function(){try{if(window.APP&&window.APP.store){clearInterval(iv);window.APP.store.subscribe(function(){try{var s=window.APP.store.getState();var j=s['features/base/jwt'];if(j&&j.user&&j.user.id){localStorage.setItem('rita_uid',j.user.id);localStorage.setItem('rita_uname',j.user.name||'')}}catch(e){}})}}catch(e){}},200);
130    })();
131    </script>
131
132    
133    <meta charset="utf-8">
134    <meta http-equiv="content-type" content="text/html;charset=utf-8">
135    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
136    <meta name="theme-color" content="#2A3A4B">
137    <base href="/" />
138
139
140    <link rel="icon" type="image/x-icon" href="favicon.ico">
141    <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
142    <link rel="stylesheet" href="css/all.css?v=8742">
143    
144    <link rel="manifest" id="manifest-placeholder">
145
146    
146<script>
147        function contextRoot(pathname) {
148            const contextRootEndIndex = pathname.lastIndexOf('/');
149
150            return (
151                contextRootEndIndex === -1
152                ? '/'
153                : pathname.substring(0, contextRootEndIndex + 1)
154            );
155        }
156        window.EXCALIDRAW_ASSET_PATH = 'libs/';
157        // Dynamically generate the manifest location URL. It must be served from the document origin, and we may have
158        // the base pointing to the CDN. This way we can generate a full URL which will bypass the base.
159        document.querySelector('#manifest-placeholder').setAttribute('href', window.location.origin + contextRoot(window.location.pathname) + 'manifest.json');
160
161        document.addEventListener('DOMContentLoaded', () => {
162            if (!JitsiMeetJS.app) {
163                return;
164            }
165
166            JitsiMeetJS.app.renderEntryPoint({
167                Component: JitsiMeetJS.app.entryPoints.APP
168            })
169
170            const isEmbedded = () => {
171                try {
172                    return window.self !== window.top;
173                } catch (e) {
174                    return true;
175                }
176            };
177
178            const isElectron = navigator.userAgent.includes('Electron');
179            const shouldRegisterWorker = !isElectron && !isEmbedded() && 'serviceWorker' in navigator;
180
181            if (shouldRegisterWorker) {
182                navigator.serviceWorker
183                    .register(window.location.origin + contextRoot(window.location.pathname) + 'pwa-worker.js')
184                    .then(reg => {
185                        console.log('Service worker registered.', reg);
186                    })
187                    .catch(err => {
188                        console.log(err);
189                    });
190            }
191        });
192    </script>
192
193    
193<script>
194        // IE11 and earlier can be identified via their user agent and be
195        // redirected to a page that is known to have no newer js syntax.
196        if (window.navigator.userAgent.match(/(MSIE|Trident)/)) {
197            var roomName = encodeURIComponent(window.location.pathname);
198            window.location.pathname = 'static/recommendedBrowsers.html';
199        }
200
201        window.indexLoadedTime = window.performance.now();
202        console.log("(TIME) index.html loaded:\t", indexLoadedTime);
203        window.addEventListener('load', function() {
204            window.loadedEventTime = window.performance.now();
205            console.log("(TIME) window loaded event:\t", loadedEventTime);
206        });
207
208        // XXX the code below listeners for errors and displays an error message
209        // in the document body when any of the required files fails to load.
210        // The intention is to prevent from displaying broken page.
211        var criticalFiles = [
212            "config.js",
213            "utils.js",
214            "do_external_connect.js",
215            "interface_config.js",
216            "lib-jitsi-meet.min.js",
217            "app.bundle.min.js",
218            "all.css?v=8742"
219        ];
220        var loadErrHandler = function(e) {
221            var target = e.target;
222            // Error on 
222<script> and <link>(CSS)
223            // 
223<script> will have .src and <link> .href
224            var fileRef = (target.src ? target.src : target.href);
225            if (("SCRIPT" === target.tagName || "LINK" === target.tagName)
226                && criticalFiles.some(
227                    function(file) { return fileRef.indexOf(file) !== -1 })) {
228                window.onload = function() {
229                    // The whole complex part below implements page reloads with
230                    // "exponential backoff". The retry attempt is passes as
231                    // "rCounter" query parameter
232                    var href = window.location.href;
233
234                    var retryMatch = href.match(/.+(\?|&)rCounter=(\d+)/);
235                    var retryCountStr = retryMatch ? retryMatch[2] : "0";
236                    var retryCount = Number.parseInt(retryCountStr);
237
238                    if (retryMatch == null) {
239                        var separator = href.indexOf("?") === -1 ? "?" : "&";
240                        var hashIdx = href.indexOf("#");
241
242                        if (hashIdx === -1) {
243                            href += separator + "rCounter=1";
244                        } else {
245                            var hashPart = href.substr(hashIdx);
246
247                            href = href.substr(0, hashIdx)
248                                + separator + "rCounter=1" + hashPart;
249                        }
250                    } else {
251                        var separator = retryMatch[1];
252
253                        href = href.replace(
254                            /(\?|&)rCounter=(\d+)/,
255                            separator + "rCounter=" + (retryCount + 1));
256                    }
257
258                    var delay = Math.pow(2, retryCount) * 2000;
259                    if (isNaN(delay) || delay < 2000 || delay > 60000)
260                        delay = 10000;
261
262                    var showMoreText = "show more";
263                    var showLessText = "show less";
264
265                    document.body.innerHTML
266                        = "<div style='"
267                        + "position: absolute;top: 50%;left: 50%;"
268                        + "text-align: center;"
269                        + "font-size: medium;"
270                        + "font-weight: 400;"
271                        + "transform: translate(-50%, -50%)'>"
272                        + "Uh oh! We couldn't fully download everything we needed :("
273                        + "<br/> "
274                        + "We will try again shortly. In the mean time, check for problems with your Internet connection!"
275                        + "<br/><br/> "
276                        + "<div id='moreInfo' style='"
277                        + "display: none;'>" + "Missing " + fileRef
278                        + "<br/><br/></div>"
279                        + "<a id='showMore' style='"
280                        + "text-decoration: underline;"
281                        + "font-size:small;"
282                        + "cursor: pointer'>" + showMoreText + "</a>"
283                        + "&nbsp;&nbsp;&nbsp;"
284                        + "<a id ='reloadLink' style='"
285                        + "text-decoration: underline;"
286                        + "font-size:small;"
287                        + "'>reload now</a>"
288                        + "</div>";
289
290                    var reloadLink = document.getElementById('reloadLink');
291                    reloadLink.setAttribute('href', href);
292
293                    var showMoreElem = document.getElementById("showMore");
294                    showMoreElem.addEventListener('click', function () {
295                            var moreInfoElem
296                                    = document.getElementById("moreInfo");
297
298                            if (showMoreElem.innerHTML === showMoreText) {
299                                moreInfoElem.setAttribute(
300                                    "style",
301                                    "display: block;"
302                                    + "color:#FF991F;"
303                                    + "font-size:small;"
304                                    + "user-select:text;");
305                                showMoreElem.innerHTML = showLessText;
306                            }
307                            else {
308                                moreInfoElem.setAttribute(
309                                    "style", "display: none;");
310                                showMoreElem.innerHTML = showMoreText;
311                            }
312                        });
313
314                    window.setTimeout(
315                        function () { window.location.replace(href); }, delay);
316
317                    // Call extra handler if defined.
318                    if (typeof postLoadErrorHandler === "function") {
319                        postLoadErrorHandler(fileRef);
320                    }
321                };
322                window.removeEventListener(
323                    'error', loadErrHandler, true /* capture phase */);
324            }
325        };
326        window.addEventListener(
327            'error', loadErrHandler, true /* capture phase type of listener */);
328    </script>
328
329    
329<script>/* eslint-disable comma-dangle, no-unused-vars, no-var, prefer-template, vars-on-top */
330
331/*
332 * NOTE: If you add a new option please remember to document it here:
333 * https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-configuration
334 */
335
336var subdir = '';
337var subdomain = '';
338
339if (subdomain) {
340    subdomain = subdomain.substr(0, subdomain.length - 1).split('.')
341        .join('_')
342        .toLowerCase() + '.';
343}
344
345// In case of no ssi provided by the webserver, use empty strings
346if (subdir.startsWith('<!--')) {
347    subdir = '';
348}
349if (subdomain.startsWith('<!--')) {
350    subdomain = '';
351}
352
353var enableJaaS = true;
354
355var config = {
356    // Connection
357    //
358
359    hosts: {
360        // XMPP domain.
361        domain: 'bell.a4e.ar',
362
363        // When using authentication, domain for guest users.
364        // anonymousdomain: 'guest.example.com',
365
366        // Domain for authenticated users. Defaults to <domain>.
367        // authdomain: 'bell.a4e.ar',
368        anonymousdomain: 'guest.ritameet.com',
369
370        // Focus component domain. Defaults to focus.<domain>.
371        // focus: 'focus.bell.a4e.ar',
372
373        // XMPP MUC domain. FIXME: use XEP-0030 to discover it.
374        muc: 'conference.' + subdomain + 'bell.a4e.ar',
375    },
376
377    // BOSH URL. FIXME: use XEP-0156 to discover it.
378    bosh: 'https://bell.a4e.ar/' + subdir + 'http-bind',
379
380    // Websocket URL (XMPP)
381    websocket: 'wss://bell.a4e.ar/' + subdir + 'xmpp-websocket',
382
383    // websocketKeepAliveUrl: 'https://bell.a4e.ar/' + subdir + '_unlock',
384
385    // Whether BOSH should be preferred over WebSocket if both are configured.
386    // preferBosh: false,
387
388    // The real JID of focus participant - can be overridden here
389    // Do not change username - FIXME: Make focus username configurable
390    // https://github.com/jitsi/jitsi-meet/issues/7376
391    // focusUserJid: '[email protected]',
392
393    // Option to send conference requests to jicofo over http (requires nginx rule for it)
394    // conferenceRequestUrl:
395    //   'https://ritameet.com/' + subdir + 'conference-request/v1',
396
397    // Options related to the bridge (colibri) data channel
398    bridgeChannel: {
399        // If the backend advertises multiple colibri websockets, this options allows
400        // to filter some of them out based on the domain name. We use the first URL
401        // which does not match ignoreDomain, falling back to the first one that matches
402        // ignoreDomain. Has no effect if undefined.
403        // ignoreDomain: 'example.com',
404
405        // Prefer SCTP (WebRTC data channels over the media path) over a colibri websocket.
406        // If SCTP is available in the backend it will be used instead of a WS. Defaults to
407        // false (SCTP is used only if available and no WS are available).
408        // preferSctp: false
409    },
410
411    // Testing / experimental features.
412    //
413
414    testing: {
415        // Allows the setting of a custom bandwidth value from the UI.
416        // assumeBandwidth: true,
417
418        // Enables use of getDisplayMedia in electron
419        // electronUseGetDisplayMedia: false,
420
421        // Enables AV1 codec for FF. Note: By default it is disabled.
422        // enableAV1ForFF: false,
423
424        // Enables the use of the codec selection API supported by the browsers .
425        // enableCodecSelectionAPI: false,
426
427        // P2P test mode disables automatic switching to P2P when there are 2
428        // participants in the conference.
429        // p2pTestMode: false,
430
431        // Enables the test specific features consumed by jitsi-meet-torture
432        // testMode: false,
433
434        // Disables the auto-play behavior of *all* newly created video element.
435        // This is useful when the client runs on a host with limited resources.
436        // noAutoPlayVideo: false,
437
438        // Experiment: Whether to skip interim transcriptions.
439        // skipInterimTranscriptions: false,
440
441        // Dump transcripts to a <transcript> element for debugging.
442        // dumpTranscript: false,
443
444        // Log the audio levels.
445        // debugAudioLevels: true,
446
447        // Will replace ice candidates IPs with invalid ones in order to fail ice.
448        // failICE: true,
449
450        // When running on Spot TV, this controls whether to show the recording consent dialog.
451        // If false (default), Spot instances will not show the recording consent dialog.
452        // If true, Spot instances will show the recording consent dialog like regular clients.
453        // showSpotConsentDialog: false,
454    },
455
456    // Disables moderator indicators.
457    // disableModeratorIndicator: false,
458
459    // Disables the reactions feature.
460    disableReactions: true,
461
462    // Disables the reactions moderation feature.
463    // disableReactionsModeration: false,
464
465    // Disables the reactions in chat feature.
466    // disableReactionsInChat: false,
467
468    // Disables polls feature.
469    // disablePolls: false,
470
471    // Disables demote button from self-view
472    // disableSelfDemote: false,
473
474    // Disables self-view tile. (hides it from tile view and from filmstrip)
475    disableSelfView: false,
476
477    // Disables self-view settings in UI
478    disableSelfViewSettings: true,
479
480    // screenshotCapture : {
481    //      Enables the screensharing capture feature.
482    //      enabled: false,
483    //
484    //      The mode for the screenshot capture feature.
485    //      Can be either 'recording' - screensharing screenshots are taken
486    //      only when the recording is also on,
487    //      or 'always' - screensharing screenshots are always taken.
488    //      mode: 'recording',
489    // }
490
491    // Disables ICE/UDP by filtering out local and remote UDP candidates in
492    // signalling.
493    // webrtcIceUdpDisable: false,
494
495    // Disables ICE/TCP by filtering out local and remote TCP candidates in
496    // signalling.
497    // webrtcIceTcpDisable: false,
498
499
500    // Media
501    //
502
503    // Audio
504
505    // Disable measuring of audio levels.
506    // disableAudioLevels: false,
507
508    // audioLevelsInterval: 200,
509
510    // Enabling this will run the lib-jitsi-meet no audio detection module which
511    // will notify the user if the current selected microphone has no audio
512    // input and will suggest another valid device if one is present.
513    enableNoAudioDetection: true,
514
515    // Enabling this will show a "Save Logs" link in the GSM popover that can be
516    // used to collect debug information (XMPP IQs, SDP offer/answer cycles)
517    // about the call.
518    // enableSaveLogs: false,
519
520    // Enabling this will hide the "Show More" link in the GSM popover that can be
521    // used to display more statistics about the connection (IP, Port, protocol, etc).
522    // disableShowMoreStats: true,
523
524    // Enabling this will run the lib-jitsi-meet noise detection module which will
525    // notify the user if there is noise, other than voice, coming from the current
526    // selected microphone. The purpose it to let the user know that the input could
527    // be potentially unpleasant for other meeting participants.
528    enableNoisyMicDetection: true,
529
530    // Start the conference in audio only mode (no video is being received nor
531    // sent).
532    // startAudioOnly: false,
533
534    // Every participant after the Nth will start audio muted.
535    // startAudioMuted: 10,
536
537    // Start calls with audio muted. Unlike the option above, this one is only
538    // applied locally. FIXME: having these 2 options is confusing.
539    // startWithAudioMuted: false,
540
541    // Enabling it (with #params) will disable local audio output of remote
542    // participants and to enable it back a reload is needed.
543    // startSilent: false,
544
545    // Enables support for opus-red (redundancy for Opus).
546    // Rita Meet: enabled for resilience on poor networks — duplicates audio
547    // packets so voice survives high packet loss.
548    enableOpusRed: true,
549
550    // Specify audio quality stereo and opusMaxAverageBitrate values in order to enable HD audio.
551    // Beware, by doing so, you are disabling echo cancellation, noise suppression and AGC.
552    // Specify enableOpusDtx to enable support for opus-dtx where
553    // audio packets won’t be transmitted while participant is silent or muted.
554    // audioQuality: {
555    //     stereo: false,
556    //     opusMaxAverageBitrate: null, // Value to fit the 6000 to 510000 range.
557    //     enableOpusDtx: false,
558    // },
559
560    // Noise suppression configuration. By default rnnoise is used. Optionally Krisp
561    // can be used by enabling it below, but the Krisp JS SDK files must be supplied in your
562    // installation. Specifically, these files are needed:
563    //   - https://meet.example.com/libs/krisp/krisp.mjs
564    //   - https://meet.example.com/libs/krisp/models/model_8.kw
565    //   - https://meet.example.com/libs/krisp/models/model_nc.kw
566    //   - https://meet.example.com/libs/krisp/models/model_bvc.kw
567    //   - https://meet.example.com/libs/krisp/assets/bvc-allowed.txt
568    //     In case when you have known BVC supported devices and you want to extend allowed devices list
569    //   - https://meet.example.com/libs/krisp/assets/bvc-allowed-ext.txt
570    //     In case when you have known BVC supported devices and you want to extend allowed devices list
571    //   - https://meet.example.com/libs/krisp/models/model_inbound_8.kw
572    //   - https://meet.example.com/libs/krisp/models/model_inbound_16.kw
573    //     In case when you want to use inbound noise suppression models
574    // NOTE: Krisp JS SDK v2.0.0 was tested.
575    // noiseSuppression: {
576    //     krisp: {
577    //         enabled: false,
578    //         logProcessStats: false,
579    //         debugLogs: false,
580    //         useBVC: false,
581    //         bufferOverflowMS: 1000,
582    //         inboundModels: {
583    //             modelInbound8: 'model_inbound_8.kef',
584    //             modelInbound16: 'model_inbound_16.kef',
585    //         },
586    //         preloadInboundModels: {
587    //             modelInbound8: 'model_inbound_8.kef',
588    //             modelInbound16: 'model_inbound_16.kef',
589    //         },
590    //         preloadModels: {
591    //             modelBVC: 'model_bvc.kef',
592    //             model8: 'model_8.kef',
593    //             modelNC: 'model_nc_mq.kef',
594    //         },
595    //         models: {
596    //             modelBVC: 'model_bvc.kef',
597    //             model8: 'model_8.kef',
598    //             modelNV: 'model_nc_mq.kef',
599    //         },
600    //         bvc: {
601    //             allowedDevices: 'bvc-allowed.txt',
602    //             allowedDevicesExt: 'bvc-allowed-ext.txt',
603    //         }
604    //     },
605    // },
606
607    // Video
608
609    // Sets the default camera facing mode.
610    // cameraFacingMode: 'user',
611
612    // Sets the preferred resolution (height) for local video. Defaults to 720.
613    // resolution: 720,
614
615    // DEPRECATED. Please use raisedHands.disableRemoveRaisedHandOnFocus instead.
616    // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not
617    // disableRemoveRaisedHandOnFocus: false,
618
619    // Specifies which raised hand related config should be set.
620    // raisedHands: {
621    //     // Specifies whether the raised hand can be lowered by moderator.
622    //     disableLowerHandByModerator: false,
623
624    //     // Specifies whether there is a notification before hiding the raised hand
625    //     // when someone becomes the dominant speaker.
626    //     disableLowerHandNotification: true,
627
628    //     // Specifies whether there is a notification when you are the next speaker in line.
629    //     disableNextSpeakerNotification: false,
630
631    //     // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not.
632    //     disableRemoveRaisedHandOnFocus: false,
633    // },
634
635    // speakerStats: {
636    //     // Specifies whether the speaker stats is enable or not.
637    //     disabled: false,
638
639    //     // Specifies whether there will be a search field in speaker stats or not.
640    //     disableSearch: false,
641
642    //     // Specifies whether participants in speaker stats should be ordered or not, and with what priority.
643    //     // 'role', <- Moderators on top.
644    //     // 'name', <- Alphabetically by name.
645    //     // 'hasLeft', <- The ones that have left in the bottom.
646    //     order: [
647    //         'role',
648    //         'name',
649    //         'hasLeft',
650    //     ],
651    // },
652
653    // DEPRECATED. Please use speakerStats.disableSearch instead.
654    // Specifies whether there will be a search field in speaker stats or not
655    // disableSpeakerStatsSearch: false,
656
657    // DEPRECATED. Please use speakerStats.order .
658    // Specifies whether participants in speaker stats should be ordered or not, and with what priority
659    // speakerStatsOrder: [
660    //  'role', <- Moderators on top
661    //  'name', <- Alphabetically by name
662    //  'hasLeft', <- The ones that have left in the bottom
663    // ], <- the order of the array elements determines priority
664
665    // How many participants while in the tile view mode, before the receiving video quality is reduced from HD to SD.
666    // Use -1 to disable.
667    // maxFullResolutionParticipants: 2,
668
669    // w3c spec-compliant video constraints to use for video capture. Currently
670    // used by browsers that return true from lib-jitsi-meet's
671    // util#browser#usesNewGumFlow. The constraints are independent from
672    // this config's resolution value. Defaults to requesting an ideal
673    // resolution of 720p.
674    constraints: {
675        video: {
676            // exact lock — Chrome won't fall back to 4:3 native modes (e.g.
677            // 640x480, 320x240) under bandwidth pressure; it scales the
678            // 16:9 source instead.
679            aspectRatio: { exact: 16 / 9 },
680            width: {
681                ideal: 1280,
682                max: 1920,
683                min: 640,
684            },
685            height: {
686                ideal: 720,
687                max: 1080,
688                min: 360,
689            },
690        },
691    },
692
693    // Enable / disable simulcast support.
694    // disableSimulcast: false,
695
696    // Every participant after the Nth will start video muted.
697    // startVideoMuted: 10,
698
699    // Start calls with video muted. Unlike the option above, this one is only
700    // applied locally. FIXME: having these 2 options is confusing.
701    // startWithVideoMuted: false,
702
703    // Desktop sharing
704
705    // Optional desktop sharing frame rate options. Default value: min:5, max:5.
706    // desktopSharingFrameRate: {
707    //     min: 5,
708    //     max: 5,
709    // },
710
711    // Optional screenshare settings that give more control over screen capture in the browser.
712    // screenShareSettings: {
713    //      // Show users the current tab is the preferred capture source, default: false.
714    //      desktopPreferCurrentTab: false,
715    //      // Allow users to select system audio, default: include.
716    //      desktopSystemAudio: 'include',
717    //      // Allow users to seamlessly switch which tab they are sharing without having to select the tab again.
718    //      desktopSurfaceSwitching: 'include',
719    //      // Allow a user to be shown a preference for what screen is to be captured, default: unset.
720    //      desktopDisplaySurface: undefined,
721    //      // Allow users to select the current tab as a capture source, default: exclude.
722    //      desktopSelfBrowserSurface: 'exclude'
723    // },
724
725    // Recording
726
727    // Enable the dropbox integration.
728    // dropbox: {
729    //     appKey: '<APP_KEY>', // Specify your app key here.
730    //     // A URL to redirect the user to, after authenticating
731    //     // by default uses:
732    //     // 'https://bell.a4e.ar/static/oauth.html'
733    //     redirectURI:
734    //          'https://bell.a4e.ar/subfolder/static/oauth.html',
735    // },
736
737    // configuration for all things recording related. Existing settings will be migrated here in the future.
738    // recordings: {
739    //    // IF true (default) recording audio and video is selected by default in the recording dialog.
740    //    // recordAudioAndVideo: true,
741    //    // If true, shows a notification at the start of the meeting with a call to action button
742    //    // to start recording (for users who can do so).
743    //    // suggestRecording: true,
744    //    // If true, shows a warning label in the prejoin screen to point out the possibility that
745    //    // the call you're joining might be recorded.
746    //    // showPrejoinWarning: true,
747    //    // If true, the notification for recording start will display a link to download the cloud recording.
748    //    // showRecordingLink: true,
749    //    // If true, mutes audio and video when a recording begins and displays a dialog
750    //    // explaining the effect of unmuting.
751    //    // requireConsent: true,
752    //    // If true consent will be skipped for users who are already in the meeting.
753    //    // skipConsentInMeeting: true,
754    //    // Link for the recording consent dialog's "Learn more" link.
755    //    // consentLearnMoreLink: 'https://jitsi.org/meet/consent',
756    // },
757
758    // recordingService: {
759    //     // When integrations like dropbox are enabled only that will be shown,
760    //     // by enabling fileRecordingsServiceEnabled, we show both the integrations
761    //     // and the generic recording service (its configuration and storage type
762    //     // depends on jibri configuration)
763    //     enabled: false,
764
765    //     // Whether to show the possibility to share file recording with other people
766    //     // (e.g. meeting participants), based on the actual implementation
767    //     // on the backend.
768    //     sharingEnabled: false,
769
770    //     // Hide the warning that says we only store the recording for 24 hours.
771    //     hideStorageWarning: false,
772    // },
773
774    // DEPRECATED. Use recordingService.enabled instead.
775    // fileRecordingsServiceEnabled: false,
776
777    // DEPRECATED. Use recordingService.sharingEnabled instead.
778    // fileRecordingsServiceSharingEnabled: false,
779
780    // Local recording configuration.
781    // localRecording: {
782    //     // Whether to disable local recording or not.
783    //     disable: false,
784
785    //     // Whether to notify all participants when a participant is recording locally.
786    //     notifyAllParticipants: false,
787
788    //     // Whether to disable the self recording feature (only local participant streams).
789    //     disableSelfRecording: false,
790    // },
791
792    // Customize the Live Streaming dialog. Can be modified for a non-YouTube provider.
793    // liveStreaming: {
794    //    // Whether to enable live streaming or not.
795    //    enabled: false,
796    //    // Terms link
797    //    termsLink: 'https://www.youtube.com/t/terms',
798    //    // Data privacy link
799    //    dataPrivacyLink: 'https://policies.google.com/privacy',
800    //    // RegExp string that validates the stream key input field
801    //    validatorRegExpString: '^(?:[a-zA-Z0-9]{4}(?:-(?!$)|$)){4}',
802    //    // Documentation reference for the live streaming feature.
803    //    helpLink: 'https://jitsi.org/live'
804    // },
805
806    // DEPRECATED. Use liveStreaming.enabled instead.
807    // liveStreamingEnabled: false,
808
809    // DEPRECATED. Use transcription.enabled instead.
810    // transcribingEnabled: false,
811
812    // DEPRECATED. Use transcription.useAppLanguage instead.
813    // transcribeWithAppLanguage: true,
814
815    // DEPRECATED. Use transcription.preferredLanguage instead.
816    // preferredTranscribeLanguage: 'en-US',
817
818    // DEPRECATED. Use transcription.autoTranscribeOnRecord instead.
819    // autoCaptionOnRecord: false,
820
821    // Transcription options.
822    // transcription: {
823    //     // Whether the feature should be enabled or not.
824    //     enabled: false,
825
826    //     // Translation languages.
827    //     // Available languages can be found in
828    //     // ./lang/translation-languages.json.
829    //     translationLanguages: ['en', 'es', 'fr', 'ro'],
830
831    //     // Important languages to show on the top of the language list.
832    //     translationLanguagesHead: ['en'],
833
834    //     // If true transcriber will use the application language.
835    //     // The application language is either explicitly set by participants in their settings or automatically
836    //     // detected based on the environment, e.g. if the app is opened in a chrome instance which
837    //     // is using french as its default language then transcriptions for that participant will be in french.
838    //     // Defaults to true.
839    //     useAppLanguage: true,
840
841    //     // Transcriber language. This settings will only work if "useAppLanguage"
842    //     // is explicitly set to false.
843    //     // Available languages can be found in
844    //     // ./src/react/features/transcribing/transcriber-langs.json.
845    //     preferredLanguage: 'en-US',
846
847    //     // Enables automatic turning on transcribing when recording is started
848    //     autoTranscribeOnRecord: false,
849
850    //     // Enables automatic request of subtitles when transcriber is present in the meeting, uses the default
851    //     // language that is set
852    //     autoCaptionOnTranscribe: false,
853    //
854    //     // Disables everything related to closed captions - the tab in the chat area, the button in the menu,
855    //     // subtitles on stage and the "Show subtitles on stage" checkbox in the settings.
856    //     // Note: Starting transcriptions from the recording dialog will still work.
857    //     disableClosedCaptions: false,
858
859    //     // Whether to invite jigasi when backend transcriptions are enabled (asyncTranscription is true in metadata).
860    //     // By default, we invite it.
861    //     inviteJigasiOnBackendTranscribing: true,
862    // },
863
864    // Misc
865
866    // Default value for the channel "last N" attribute. -1 for unlimited.
867    channelLastN: -1,
868
869    // Connection indicators
870    // connectionIndicators: {
871    //     autoHide: true,
872    //     autoHideTimeout: 5000,
873    //     disabled: false,
874    //     disableDetails: false,
875    //     inactiveDisabled: false
876    // },
877
878    // Provides a way for the lastN value to be controlled through the UI.
879    // When startLastN is present, conference starts with a last-n value of startLastN and channelLastN
880    // value will be used when the quality level is selected using "Manage Video Quality" slider.
881    // startLastN: 1,
882
883    // Rita Meet: prefer VP9 on desktop — better quality at low bitrate on poor
884    // networks than the default VP8-first order. Mobile stays on light VP8/H264
885    // (hardware-friendly, less CPU). AV1 last (CPU-heavy, partial support).
886    videoQuality: {
887        codecPreferenceOrder: [ 'VP9', 'VP8', 'H264', 'AV1' ],
888        mobileCodecPreferenceOrder: [ 'VP8', 'H264', 'VP9', 'AV1' ],
889    },
890
891    // Specify the settings for video quality optimizations on the client.
892    // videoQuality: {
893    //
894    //    // Provides a way to set the codec preference on desktop based endpoints.
895    //    codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264' ],
896    //
897    //    // Provides a way to set the codec for screenshare.
898    //    screenshareCodec: 'AV1',
899    //    mobileScreenshareCodec: 'VP8',
900    //
901    //    // Enables the adaptive mode in the client that will make runtime adjustments to selected codecs and received
902    //    // videos for a better user experience. This mode will kick 
902in only when CPU overuse is reported in the
903    //    // WebRTC statistics for the outbound video streams.
904    //    enableAdaptiveMode: false,
905    //
906    //    // Codec specific settings for scalability modes and max bitrates.
907    //    av1: {
908    //      maxBitratesVideo: {
909    //          low: 100000,
910    //          standard: 300000,
911    //          high: 1000000,
912    //          fullHd: 2000000,
913    //          ultraHd: 4000000,
914    //          ssHigh: 2500000
915    //      },
916    //      scalabilityModeEnabled: true,
917    //      useSimulcast: false,
918    //      useKSVC: true
919    //    },
920    //    h264: {
921    //      maxBitratesVideo: {
922    //          low: 200000,
923    //          standard: 500000,
924    //          high: 1500000,
925    //          fullHd: 3000000,
926    //          ultraHd: 6000000,
927    //          ssHigh: 2500000
928    //      },
929    //      scalabilityModeEnabled: true
930    //    },
931    //    vp8: {
932    //      maxBitratesVideo: {
933    //          low: 200000,
934    //          standard: 500000,
935    //          high: 1500000,
936    //          fullHd: 3000000,
937    //          ultraHd: 6000000,
938    //          ssHigh: 2500000
939    //      },
940    //      scalabilityModeEnabled: false
941    //    },
942    //    vp9: {
943    //      maxBitratesVideo: {
944    //          low: 100000,
945    //          standard: 300000,
946    //          high: 1200000,
947    //          fullHd: 2500000,
948    //          ultraHd: 5000000,
949    //          ssHigh: 2500000
950    //      },
951    //      scalabilityModeEnabled: true,
952    //      useSimulcast: false,
953    //      useKSVC: true
954    //    },
955    //
956    //    // The options can be used to override default thresholds of video thumbnail heights corresponding to
957    //    // the video quality levels used in the application. At the time of this writing the allowed levels are:
958    //    //     'low' - for the low quality level (180p at the time of this writing)
959    //    //     'standard' - for the medium quality level (360p)
960    //    //     'high' - for the high quality level (720p)
961    //    // The keys should be positive numbers which represent the minimal thumbnail height for the quality level.
962    //    //
963    //    // With the default config value below the application will use 'low' quality until the thumbnails are
964    //    // at least 360 pixels tall. If the thumbnail height reaches 720 pixels then the application will switch to
965    //    // the high quality.
966    //    minHeightForQualityLvl: {
967    //        360: 'standard',
968    //        720: 'high',
969    //    },
970    //
971    //    // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based endpoint
972    //    mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264', 'AV1' ],
973    // },
974
975    // Notification timeouts
976    // notificationTimeouts: {
977    //     short: 2500,
978    //     medium: 5000,
979    //     long: 10000,
980    //     extraLong: 60000,
981    //     sticky: 0,
982    // },
983
984    // // Options for the recording limit notification.
985    // recordingLimit: {
986    //
987    //    // The recording limit in minutes. Note: This number appears in the notification text
988    //    // but doesn't enforce the actual recording time limit. This should be configured in
989    //    // jibri!
990    //    limit: 60,
991    //
992    //    // The name of the app with unlimited recordings.
993    //    appName: 'Unlimited recordings APP',
994    //
995    //    // The URL of the app with unlimited recordings.
996    //    appURL: 'https://unlimited.recordings.app.com/',
997    // },
998
999    // Disables or enables RTX (RFC 4588) (defaults to false).
1000    // disableRtx: false,
1001
1002    // Moves all Jitsi Meet 'beforeunload' logic (cleanup, leaving, disconnecting, etc) to the 'unload' event.
1003    // disableBeforeUnloadHandlers: true,
1004
1005    // Disables or enables TCC support in this client (default: enabled).
1006    // enableTcc: true,
1007
1008    // Disables or enables REMB support in this client (default: enabled).
1009    // enableRemb: true,
1010
1011    // Enables forced reload of the client when the call is migrated as a result of
1012    // the bridge going down.
1013    // enableForcedReload: true,
1014
1015    // Use TURN/UDP servers for the jitsi-videobridge connection (by default
1016    // we filter out TURN/UDP because it is usually not needed since the
1017    // bridge itself is reachable via UDP)
1018    // useTurnUdp: false
1019
1020    // Enable support for encoded transform in supported browsers. This allows
1021    // E2EE to work in Safari if the corresponding flag is enabled in the browser.
1022    // Experimental.
1023    // enableEncodedTransformSupport: false,
1024
1025    // UI
1026    //
1027
1028    // Disables responsive tiles.
1029    // disableResponsiveTiles: false,
1030
1031    // DEPRECATED. Please use `securityUi?.hideLobbyButton` instead.
1032    // Hides lobby button.
1033    // hideLobbyButton: false,
1034
1035    // DEPRECATED. Please use `lobby?.autoKnock` instead.
1036    // If Lobby is enabled starts knocking automatically.
1037    // autoKnockLobby: false,
1038
1039    // DEPRECATED. Please use `lobby?.enableChat` instead.
1040    // Enable lobby chat.
1041    // enableLobbyChat: true,
1042
1043    // DEPRECATED! Use `breakoutRooms.hideAddRoomButton` instead.
1044    // Hides add breakout room button
1045    // hideAddRoomButton: false,
1046
1047    // Require users to always specify a display name.
1048    // requireDisplayName: true,
1049
1050    // Enables webhid functionality for Audio.
1051    // enableWebHIDFeature: false,
1052
1053    // DEPRECATED! Use 'welcomePage.disabled' instead.
1054    // Whether to use a welcome page or not. In case it's false a random room
1055    // will be joined when no room is specified.
1056    // enableWelcomePage: true,
1057
1058    // Configs for welcome page.
1059    // welcomePage: {
1060    //     // Whether to disable welcome page. In case it's disabled a random room
1061    //     // will be joined when no room is specified.
1062    //     disabled: false,
1063    //     // If set, landing page will redirect to this URL.
1064    //     customUrl: ''
1065    // },
1066
1067    // Configs for the lobby screen.
1068    // lobby: {
1069    //     // If Lobby is enabled, it starts knocking automatically. Replaces `autoKnockLobby`.
1070    //     autoKnock: false,
1071    //     // Enables the lobby chat. Replaces `enableLobbyChat`.
1072    //     enableChat: true,
1073    // },
1074
1075    // Configs for the security related UI elements.
1076    // securityUi: {
1077    //     // Hides the lobby button. Replaces `hideLobbyButton`.
1078    //     hideLobbyButton: false,
1079    //     // Hides the possibility to set and enter a lobby password.
1080    //     disableLobbyPassword: false,
1081    // },
1082
1083    // Disable app shortcuts that are registered upon joining a conference
1084    // disableShortcuts: false,
1085
1086    // Disable initial browser getUserMedia requests.
1087    // This is useful for scenarios where users might want to start a conference for screensharing only
1088    // disableInitialGUM: false,
1089
1090    // Enabling the close page will ignore the welcome page redirection when
1091    // a call is hangup.
1092    // enableClosePage: false,
1093
1094    // Disable hiding of remote thumbnails when in a 1-on-1 conference call.
1095    // Setting this to null, will also disable showing the remote videos
1096    // when the toolbar is shown on mouse movements
1097    // disable1On1Mode: null | false | true,
1098
1099    // Default local name to be displayed
1100    // defaultLocalDisplayName: 'me',
1101
1102    // Default remote name to be displayed
1103    // defaultRemoteDisplayName: 'Fellow Jitster',
1104
1105    // Hides the display name from the participant thumbnail
1106    // hideDisplayName: false,
1107
1108    // Hides the dominant speaker name badge that hovers above the toolbox
1109    // hideDominantSpeakerBadge: false,
1110
1111    // Default language for the user interface. Cannot be overwritten.
1112    // DEPRECATED! Use the `lang` iframe option directly instead.
1113    // defaultLanguage: 'en',
1114
1115    // Disables profile and the edit of all fields from the profile settings (display name and email)
1116    // disableProfile: false,
1117
1118    // Hides the email section under profile settings.
1119    // hideEmailInSettings: false,
1120
1121    // When enabled the password used for locking a room is restricted to up to the number of digits specified
1122    // default: roomPasswordNumberOfDigits: false,
1123    // roomPasswordNumberOfDigits: 10,
1124
1125    // Message to show the users. Example: 'The service will be down for
1126    // maintenance at 01:00 AM GMT,
1127    // noticeMessage: '',
1128
1129    // Enables calendar integration, depends on googleApiApplicationClientID
1130    // and microsoftApiApplicationClientID
1131    // enableCalendarIntegration: false,
1132
1133    // Whether to notify when the conference is terminated because it was destroyed.
1134    // notifyOnConferenceDestruction: true,
1135
1136    // The client id for the google APIs used for the calendar integration, youtube livestreaming, etc.
1137    // googleApiApplicationClientID: '<client_id>',
1138
1139    // Configs for prejoin page.
1140    // prejoinConfig: {
1141    //     // When 'true', it shows an intermediate page before joining, where the user can configure their devices.
1142    //     // This replaces `prejoinPageEnabled`. Defaults to true.
1143    //     enabled: true,
1144    //     // Hides the participant name editing field in the prejoin screen.
1145    //     // If requireDisplayName is also set as true, a name should still be provided through
1146    //     // either the jwt or the userInfo from the iframe api init object in order for this to have an effect.
1147    //     hideDisplayName: false,
1148    //     // List of buttons to hide from the extra join options dropdown.
1149    //     hideExtraJoinButtons: ['no-audio', 'by-phone'],
1150    //     // Configuration for pre-call test
1151    //     // By setting preCallTestEnabled, you enable the pre-call test in the prejoin page.
1152    //     // ICE server credentials need to be provided over the preCallTestICEUrl
1153    //     preCallTestEnabled: false,
1154    //     preCallTestICEUrl: ''
1155    // },
1156
1157    // When 'true', the user cannot edit the display name.
1158    // (Mainly useful when used in conjunction with the JWT so the JWT name becomes read only.)
1159    // readOnlyName: false,
1160
1161    // If etherpad integration is enabled, setting this to true will
1162    // automatically open the etherpad when a participant joins.  This
1163    // does not affect the mobile app since opening an etherpad
1164    // obscures the conference controls -- it's better to let users
1165    // choose to open the pad on their own in that case.
1166    // openSharedDocumentOnJoin: false,
1167
1168    // If true, shows the unsafe room name warning label when a room name is
1169    // deemed unsafe (due to the simplicity in the name) and a password is not
1170    // set or the lobby is not enabled.
1171    // enableInsecureRoomNameWarning: false,
1172
1173    // Array with avatar URL prefixes that need to use CORS.
1174    // corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ],
1175
1176    // Base URL for a Gravatar-compatible service. Defaults to Gravatar.
1177    // DEPRECATED! Use `gravatar.baseUrl` instead.
1178    // gravatarBaseURL: 'https://www.gravatar.com/avatar/',
1179
1180    // Setup for Gravatar-compatible services.
1181    // gravatar: {
1182    //     // Defaults to Gravatar.
1183    //     baseUrl: 'https://www.gravatar.com/avatar/',
1184    //     // True if Gravatar should be disabled.
1185    //     disabled: false,
1186    // },
1187
1188    // App name to be displayed in the invitation email subject, as an alternative to
1189    // interfaceConfig.APP_NAME.
1190    // inviteAppName: null,
1191
1192    // Moved from interfaceConfig(TOOLBAR_BUTTONS).
1193    // The name of the toolbar buttons to display in the toolbar, including the
1194    // "More actions" menu. If present, the button will display. Exceptions are
1195    // "livestreaming" and "recording" which also require being a moderator and
1196    // some other values in config.js to be enabled. Also, the "profile" button will
1197    // not display for users with a JWT.
1198    // Notes:
1199    // - it's possible to reorder the buttons in the maintoolbar by changing the order of the mainToolbarButtons
1200    // - 'desktop' controls the "Share your screen" button
1201    // - if `toolbarButtons` is undefined, we fallback to enabling all buttons on the UI
1202    // toolbarButtons: [
1203    //    'camera',
1204    //    'chat',
1205    //    'closedcaptions',
1206    //    'desktop',
1207    //    'download',
1208    //    'embedmeeting',
1209    //    'etherpad',
1210    //    'feedback',
1211    //    'filmstrip',
1212    //    'fullscreen',
1213    //    'hangup',
1214    //    'help',
1215    //    'highlight',
1216    //    'invite',
1217    //    'linktosalesforce',
1218    //    'livestreaming',
1219    //    'microphone',
1220    //    'noisesuppression',
1221    //    'participants-pane',
1222    //    'profile',
1223    //    'raisehand',
1224    //    'recording',
1225    //    'security',
1226    //    'select-background',
1227    //    'settings',
1228    //    'shareaudio',
1229    //    'sharedvideo',
1230    //    'shortcuts',
1231    //    'stats',
1232    //    'tileview',
1233    //    'toggle-camera',
1234    //    'videoquality',
1235    //    'whiteboard',
1236    // ],
1237
1238    // Holds values related to toolbar visibility control.
1239    // toolbarConfig: {
1240    toolbarConfig: { alwaysVisible: true },
1241    //     // Moved from interfaceConfig.INITIAL_TOOLBAR_TIMEOUT
1242    //     // The initial number of milliseconds for the toolbar buttons to be visible on screen.
1243    //     initialTimeout: 20000,
1244    //     // Moved from interfaceConfig.TOOLBAR_TIMEOUT
1245    //     // Number of milliseconds for the toolbar buttons to be visible on screen.
1246    //     timeout: 4000,
1247    //     // Moved from interfaceConfig.TOOLBAR_ALWAYS_VISIBLE
1248    //     // Whether toolbar should be always visible or should hide after x milliseconds.
1249    //     alwaysVisible: false,
1250    //     // Indicates whether the toolbar should still autohide when chat is open
1251    //     autoHideWhileChatIsOpen: false,
1252    // },
1253
1254    // Overrides the buttons displayed in the main toolbar. Depending on the screen size the number of displayed
1255    // buttons varies from 2 buttons to 8 buttons. Every array in the mainToolbarButtons array will replace the
1256    // corresponding default buttons configuration matched by the number of buttons specified in the array. Arrays with
1257    // more than 8 buttons or less then 2 buttons will be ignored. When there there isn't an override for a certain
1258    // configuration (for example when 3 buttons are displayed) the default jitsi-meet configuration will be used.
1259    // The order of the buttons in the array is preserved.
1260    // mainToolbarButtons: [
1261    //     [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'reactions', 'participants-pane', 'tileview' ],
1262    //     [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane', 'tileview' ],
1263    //     [ 'microphone', 'camera', 'desktop', 'chat', 'raisehand', 'participants-pane' ],
1264    //     [ 'microphone', 'camera', 'desktop', 'chat', 'participants-pane' ],
1265    //     [ 'microphone', 'camera', 'chat', 'participants-pane' ],
1266    //     [ 'microphone', 'camera', 'chat' ],
1267    //     [ 'microphone', 'camera' ]
1268    // ],
1269
1270    // Toolbar buttons which have their click/tap event exposed through the API on
1271    // `toolbarButtonClicked`. Passing a string for the button key will
1272    // prevent execution of the click/tap routine; passing an object with `key` and
1273    // `preventExecution` flag on false will not prevent execution of the click/tap
1274    // routine. Below array with mixed mode for passing the buttons.
1275    // buttonsWithNotifyClick: [
1276    //     'camera',
1277    //     {
1278    //         key: 'chat',
1279    //         preventExecution: false
1280    //     },
1281    //     {
1282    //         key: 'closedcaptions',
1283    //         preventExecution: true
1284    //     },
1285    //     'desktop',
1286    //     'download',
1287    //     'embedmeeting',
1288    //     'end-meeting',
1289    //     'etherpad',
1290    //     'feedback',
1291    //     'filmstrip',
1292    //     'fullscreen',
1293    //     'hangup',
1294    //     'hangup-menu',
1295    //     'help',
1296    //     {
1297    //         key: 'invite',
1298    //         preventExecution: false
1299    //     },
1300    //     'livestreaming',
1301    //     'microphone',
1302    //     'mute-everyone',
1303    //     'mute-video-everyone',
1304    //     'noisesuppression',
1305    //     'participants-pane',
1306    //     'profile',
1307    //     {
1308    //         key: 'raisehand',
1309    //         preventExecution: true
1310    //     },
1311    //     'recording',
1312    //     'security',
1313    //     'select-background',
1314    //     'settings',
1315    //     'shareaudio',
1316    //     'sharedvideo',
1317    //     'shortcuts',
1318    //     'stats',
1319    //     'tileview',
1320    //     'toggle-camera',
1321    //     'videoquality',
1322    //     // The add passcode button from the security dialog.
1323    //     {
1324    //         key: 'add-passcode',
1325    //         preventExecution: false
1326    //     },
1327    //     'whiteboard',
1328    // ],
1329
1330    // Participant context menu buttons which have their click/tap event exposed through the API on
1331    // `participantMenuButtonClick`. Passing a string for the button key will
1332    // prevent execution of the click/tap routine; passing an object with `key` and
1333    // `preventExecution` flag on false will not prevent execution of the click/tap
1334    // routine. Below array with mixed mode for passing the buttons.
1335    // participantMenuButtonsWithNotifyClick: [
1336    //     'allow-video',
1337    //     {
1338    //         key: 'ask-unmute',
1339    //         preventExecution: false
1340    //     },
1341    //     'conn-status',
1342    //     'flip-local-video',
1343    //     'grant-moderator',
1344    //     {
1345    //         key: 'kick',
1346    //         preventExecution: true
1347    //     },
1348    //     {
1349    //         key: 'hide-self-view',
1350    //         preventExecution: false
1351    //     },
1352    //     'mute',
1353    //     'mute-others',
1354    //     'mute-others-video',
1355    //     'mute-video',
1356    //     'pinToStage',
1357    //     'privateMessage',
1358    //     {
1359    //         key: 'remote-control',
1360    //         preventExecution: false
1361    //     },
1362    //     'send-participant-to-room',
1363    //     'verify',
1364    // ],
1365
1366    // List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons:
1367    // 'microphone', 'camera', 'select-background', 'invite', 'settings'
1368    // hiddenPremeetingButtons: [],
1369
1370    // An array with custom option buttons for the participant context menu
1371    // type:  Array<{ icon: string; id: string; text: string; }>
1372    // customParticipantMenuButtons: [],
1373
1374    // An array with custom option buttons for the toolbar
1375    // type:  Array<{ icon: string; id: string; text: string; backgroundColor?: string; }>
1376    // customToolbarButtons: [],
1377
1378    // Stats
1379    //
1380
1381    // Whether to enable stats collection or not in the TraceablePeerConnection.
1382    // This can be useful for debugging purposes (post-processing/analysis of
1383    // the webrtc stats) as it is done in the jitsi-meet-torture bandwidth
1384    // estimation tests.
1385    // gatherStats: false,
1386
1387    // The interval at which PeerConnection.getStats() is called. Defaults to 10000
1388    // pcStatsInterval: 10000,
1389
1390    // Enables sending participants' display names to stats
1391    // enableDisplayNameInStats: false,
1392
1393    // Enables sending participants' emails (if available) to stats and other analytics
1394    // enableEmailInStats: false,
1395
1396    // faceLandmarks: {
1397    //     // Enables sharing your face coordinates. Used for centering faces within a video.
1398    //     enableFaceCentering: false,
1399
1400    //     // Enables detecting face expressions and sharing data with other participants
1401    //     enableFaceExpressionsDetection: false,
1402
1403    //     // Enables displaying face expressions in speaker stats
1404    //     enableDisplayFaceExpressions: false,
1405
1406    //     // Enable rtc stats for face landmarks
1407    //     enableRTCStats: false,
1408
1409    //     // Minimum required face movement percentage threshold for sending new face centering coordinates data.
1410    //     faceCenteringThreshold: 10,
1411
1412    //     // Milliseconds for processing a new image capture in order to detect face coordinates if they exist.
1413    //     captureInterval: 1000,
1414    // },
1415
1416    // Controls the percentage of automatic feedback shown to participants.
1417    // The default value is 100%. If set to 0, no automatic feedback will be requested
1418    // feedbackPercentage: 100,
1419
1420    // Privacy
1421    //
1422
1423    // If third party requests are disabled, no other server will be contacted.
1424    // This means avatars will be locally generated and external stats integration
1425    // will not function.
1426    // disableThirdPartyRequests: false,
1427
1428
1429    // Peer-To-Peer mode: used (if enabled) when there are just 2 participants.
1430    //
1431
1432    p2p: {
1433        // Enables peer to peer mode. When enabled the system will try to
1434        // establish a direct connection when there are exactly 2 participants
1435        // in the room. If that succeeds the conference will stop sending data
1436        // through the JVB and use the peer to peer connection instead. When a
1437        // 3rd participant joins the conference will be moved back to the JVB
1438        // connection.
1439        enabled: true,
1440
1441        // Sets the ICE transport policy for the p2p connection. At the time
1442        // of this writing the list of possible values are 'all' and 'relay',
1443        // but that is subject to change in the future. The enum is defined in
1444        // the WebRTC standard:
1445        // https://www.w3.org/TR/webrtc/#rtcicetransportpolicy-enum.
1446        // If not set, the effective value is 'all'.
1447        // iceTransportPolicy: 'all',
1448
1449        // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based
1450        // endpoints.
1451        // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9', 'AV1' ],
1452        //
1453        // Provides a way to set the codec preference on desktop based endpoints.
1454        // codecPreferenceOrder: [ 'AV1', 'VP9', 'VP8', 'H264 ],
1455
1456        // Provides a way to set the codec for screenshare.
1457        // screenshareCodec: 'AV1',
1458        // mobileScreenshareCodec: 'VP8',
1459
1460        // How long we're going to wait, before going back to P2P after the 3rd
1461        // participant has left the conference (to filter out page reload).
1462        // backToP2PDelay: 5,
1463
1464        // The STUN servers that will be used in the peer to peer connections.
1465        // Rita Meet: use our own STUN (not jitsi.net) so connection metadata
1466        // for P2P calls doesn't leak to a third party. TURN relay fallback is
1467        // provided dynamically via prosody external_services (XEP-0215).
1468        stunServers: [
1469            { urls: 'stun:bell.a4e.ar:3478' },
1470        ],
1471    },
1472
1473    analytics: {
1474        // True if the analytics should be disabled
1475        // disabled: false,
1476
1477        // Matomo configuration:
1478        // matomoEndpoint: 'https://your-matomo-endpoint/',
1479        // matomoSiteID: '42',
1480
1481        // The Amplitude APP Key:
1482        // amplitudeAPPKey: '<APP_KEY>',
1483
1484        // Obfuscates room name sent to analytics (amplitude, rtcstats)
1485        // Default value is false.
1486        // obfuscateRoomName: false,
1487
1488        // Configuration for the rtcstats server:
1489        // By enabling rtcstats server every time a conference is joined the rtcstats
1490        // module connects to the provided rtcstatsEndpoint and sends statistics regarding
1491        // PeerConnection states along with getStats metrics polled at the specified
1492        // interval.
1493        // rtcstatsEnabled: false,
1494        // rtcstatsStoreLogs: false,
1495
1496        // In order to enable rtcstats one needs to provide a endpoint url.
1497        // rtcstatsEndpoint: wss://rtcstats-server-pilot.jitsi.net/,
1498
1499        // The interval at which rtcstats will poll getStats, defaults to 10000ms.
1500        // If the value is set to 0 getStats won't be polled and the rtcstats client
1501        // will only send data related to RTCPeerConnection events.
1502        // rtcstatsPollInterval: 10000,
1503
1504        // This determines if rtcstats sends the SDP to the rtcstats server or replaces
1505        // all SDPs with an empty string instead.
1506        // rtcstatsSendSdp: false,
1507
1508        // Array of script URLs to load as lib-jitsi-meet "analytics handlers".
1509        // scriptURLs: [
1510        //      "https://example.com/my-custom-analytics.js",
1511        // ],
1512
1513        // By enabling watchRTCEnabled option you would want to use watchRTC feature
1514        // This would also require to configure watchRTCConfigParams.
1515        // Please remember to keep rtcstatsEnabled disabled for watchRTC to work.
1516        // watchRTCEnabled: false,
1517    },
1518
1519    // Logs that should go be passed through the 'log' event if a handler is defined for it
1520    // apiLogLevels: ['warn', 'log', 'error', 'info', 'debug'],
1521
1522    // Information about the jitsi-meet instance we are connecting to, including
1523    // the user region as seen by the server.
1524    // deploymentInfo: {
1525    //     shard: "shard1",
1526    //     region: "europe",
1527    //     userRegion: "asia",
1528    // },
1529
1530    // Array<string> of disabled sounds.
1531    // Possible values:
1532    // - 'ASKED_TO_UNMUTE_SOUND'
1533    // - 'E2EE_OFF_SOUND'
1534    // - 'E2EE_ON_SOUND'
1535    // - 'INCOMING_MSG_SOUND'
1536    // - 'KNOCKING_PARTICIPANT_SOUND'
1537    // - 'LIVE_STREAMING_OFF_SOUND'
1538    // - 'LIVE_STREAMING_ON_SOUND'
1539    // - 'NO_AUDIO_SIGNAL_SOUND'
1540    // - 'NOISY_AUDIO_INPUT_SOUND'
1541    // - 'OUTGOING_CALL_EXPIRED_SOUND'
1542    // - 'OUTGOING_CALL_REJECTED_SOUND'
1543    // - 'OUTGOING_CALL_RINGING_SOUND'
1544    // - 'OUTGOING_CALL_START_SOUND'
1545    // - 'PARTICIPANT_JOINED_SOUND'
1546    // - 'PARTICIPANT_LEFT_SOUND'
1547    // - 'RAISE_HAND_SOUND'
1548    // - 'REACTION_SOUND'
1549    // - 'RECORDING_OFF_SOUND'
1550    // - 'RECORDING_ON_SOUND'
1551    // - 'TALK_WHILE_MUTED_SOUND'
1552    // disabledSounds: [],
1553
1554    // DEPRECATED! Use `disabledSounds` instead.
1555    // Decides whether the start/stop recording audio notifications should play on record.
1556    // disableRecordAudioNotification: false,
1557
1558    // DEPRECATED! Use `disabledSounds` instead.
1559    // Disables the sounds that play when other participants join or leave the
1560    // conference (if set to true, these sounds will not be played).
1561    // disableJoinLeaveSounds: false,
1562
1563    // DEPRECATED! Use `disabledSounds` instead.
1564    // Disables the sounds that play when a chat message is received.
1565    // disableIncomingMessageSound: false,
1566
1567    // Information for the chrome extension banner
1568    // chromeExtensionBanner: {
1569    //     // The chrome extension to be installed address
1570    //     url: 'https://chrome.google.com/webstore/detail/jitsi-meetings/kglhbbefdnlheedjiejgomgmfplipfeb',
1571    //     edgeUrl: 'https://microsoftedge.microsoft.com/addons/detail/jitsi-meetings/eeecajlpbgjppibfledfihobcabccihn',
1572
1573    //     // Extensions info which allows checking if they are installed or not
1574    //     chromeExtensionsInfo: [
1575    //         {
1576    //             id: 'kglhbbefdnlheedjiejgomgmfplipfeb',
1577    //             path: 'jitsi-logo-48x48.png',
1578    //         },
1579    //         // Edge extension info
1580    //         {
1581    //             id: 'eeecajlpbgjppibfledfihobcabccihn',
1582    //             path: 'jitsi-logo-48x48.png',
1583    //         },
1584    //     ]
1585    // },
1586
1587    // e2ee: {
1588    //   labels: {
1589    //     description: '',
1590    //     label: '',
1591    //     tooltip: '',
1592    //     warning: '',
1593    //   },
1594    //   externallyManagedKey: false,
1595    //   disabled: false,
1596    // },
1597
1598    // Options related to end-to-end (participant to participant) ping.
1599    // e2eping: {
1600    //   // Whether ene-to-end pings should be enabled.
1601    //   enabled: false,
1602    //
1603    //   // The number of responses to wait for.
1604    //   numRequests: 5,
1605    //
1606    //   // The max conference size in which e2e pings will be sent.
1607    //   maxConferenceSize: 200,
1608    //
1609    //   // The maximum number of e2e ping messages per second for the whole conference to aim for.
1610    //   // This is used to control the pacing of messages in order to reduce the load on the backend.
1611    //   maxMessagesPerSecond: 250,
1612    // },
1613
1614    // If set, will attempt to use the provided video input device label when
1615    // triggering a screenshare, instead of proceeding through the normal flow
1616    // for obtaining a desktop stream.
1617    // NOTE: This option is experimental and is currently intended for internal
1618    // use only.
1619    // _desktopSharingSourceDevice: 'sample-id-or-label',
1620
1621    // DEPRECATED! Use deeplinking.disabled instead.
1622    // If true, any checks to handoff to another application will be prevented
1623    // and instead the app will continue to display in the current browser.
1624    // disableDeepLinking: false,
1625
1626    // The deeplinking config.
1627    // deeplinking: {
1628    //
1629    //     // The desktop deeplinking config, disabled by default.
1630    //     desktop: {
1631    //         appName: 'Jitsi Meet',
1632    //         appScheme: 'jitsi-meet,
1633    //         download: {
1634    //             linux:
1635    //               'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet-x86_64.AppImage',
1636    //             macos: 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.dmg',
1637    //             windows: 'https://github.com/jitsi/jitsi-meet-electron/releases/latest/download/jitsi-meet.exe'
1638    //         },
1639    //         enabled: false
1640    //     },
1641    //     // If true, any checks to handoff to another application will be prevented
1642    //     // and instead the app will continue to display in the current browser.
1643    //     disabled: false,
1644
1645    //     // whether to hide the logo on the deep linking pages.
1646    //     hideLogo: false,
1647
1648    //     // The ios deeplinking config.
1649    //     ios: {
1650    //         appName: 'Jitsi Meet',
1651    //         // Specify mobile app scheme for opening the app from the mobile browser.
1652    //         appScheme: 'org.jitsi.meet',
1653    //         // Custom URL for downloading ios mobile app.
1654    //         downloadLink: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905',
1655    //     },
1656
1657    //     // The android deeplinking config.
1658    //     android: {
1659    //         appName: 'Jitsi Meet',
1660    //         // Specify mobile app scheme for opening the app from the mobile browser.
1661    //         appScheme: 'org.jitsi.meet',
1662    //         // Custom URL for downloading android mobile app.
1663    //         downloadLink: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
1664    //         // Android app package name.
1665    //         appPackage: 'org.jitsi.meet',
1666    //         fDroidUrl: 'https://f-droid.org/en/packages/org.jitsi.meet/',
1667    //     }
1668    // },
1669
1670    // // The terms, privacy and help centre URL's.
1671    // legalUrls: {
1672    //     helpCentre: 'https://web-cdn.jitsi.net/faq/meet-faq.html',
1673    //     privacy: 'https://jitsi.org/meet/privacy',
1674    //     terms: 'https://jitsi.org/meet/terms'
1675    // },
1676
1677    // A property to disable the right click context menu for localVideo
1678    // the menu has option to flip the locally seen video for local presentations
1679    // disableLocalVideoFlip: false,
1680
1681    // A property used to unset the default flip state of the local video.
1682    // When it is set to 'true', the local(self) video will not be mirrored anymore.
1683    // doNotFlipLocalVideo: false,
1684
1685    // Mainly privacy related settings
1686
1687    // Disables all invite functions from the app (share, invite, dial out...etc)
1688    // disableInviteFunctions: true,
1689
1690    // Disables storing the room name to the recents list. When in an iframe this is ignored and
1691    // the room is never stored in the recents list.
1692    // doNotStoreRoom: true,
1693
1694    // Deployment specific URLs.
1695    // deploymentUrls: {
1696    //    // If specified a 'Help' button will be displayed in the overflow menu with a link to the specified URL for
1697    //    // user documentation.
1698    //    userDocumentationURL: 'https://docs.example.com/video-meetings.html',
1699    //    // If specified a 'Download our apps' button will be displayed in the overflow menu with a link
1700    //    // to the specified URL for an app download page.
1701    //    downloadAppsUrl: 'https://docs.example.com/our-apps.html',
1702    // },
1703
1704    // Options related to the remote participant menu.
1705    // remoteVideoMenu: {
1706    //     // Whether the remote video context menu to be rendered or not.
1707    //     disabled: true,
1708    //     // If set to true the 'Switch to visitor' button will be disabled.
1709    //     disableDemote: true,
1710    //     // If set to true the 'Kick out' button will be disabled.
1711    //     disableKick: true,
1712    //     // If set to true the 'Grant moderator' button will be disabled.
1713    //     disableGrantModerator: true,
1714    //     // If set to 'all' the 'Private chat' button will be disabled for all participants.
1715    //     // If set to 'allow-moderator-chat' the 'Private chat' button will be available for chats with moderators.
1716    //     disablePrivateChat: 'all' | 'allow-moderator-chat',
1717    // },
1718
1719
1720    // If set to true all muting operations of remote participants will be disabled.
1721    // disableRemoteMute: true,
1722
1723    /**
1724     External API url used to receive branding specific information.
1725     If there is no url set or there are missing fields, the defaults are applied.
1726     The config file should be in JSON.
1727     None of the fields are mandatory and the response must have the shape:
1728    {
1729        // Whether participant can only send group chat message if `send-groupchat` feature is enabled in jwt.
1730        groupChatRequiresPermission: false,
1731        // Whether participant can only create polls if `create-polls` feature is enabled in jwt.
1732        pollCreationRequiresPermission: false,
1733        // The domain url to apply (will replace the domain in the sharing conference link/embed section)
1734        inviteDomain: 'example-company.org',
1735        // The hex value for the colour used as background
1736        backgroundColor: '#fff',
1737        // The url for the image used as background
1738        backgroundImageUrl: 'https://example.com/background-img.png',
1739        // The anchor url used when clicking the logo image
1740        logoClickUrl: 'https://example-company.org',
1741        // The url used for the image used as logo
1742        logoImageUrl: 'https://example.com/logo-img.png',
1743        // Endpoint that enables support for salesforce integration with in-meeting resource linking
1744        // This is required for:
1745        // listing the most recent records - salesforceUrl/records/recents
1746        // searching records - salesforceUrl/records?text=${text}
1747        // retrieving record details - salesforceUrl/records/${id}?type=${type}
1748        // and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id}
1749        // salesforceUrl: 'https://api.example.com/',
1750        // Overwrite for pool of background images for avatars
1751        avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'],
1752        // The lobby/prejoin screen background
1753        premeetingBackground: 'url(https://example.com/premeeting-background.png)',
1754        // A list of images that can be used as video backgrounds.
1755        // When this field is present, the default images will be replaced with those provided.
1756        virtualBackgrounds: ['https://example.com/img.jpg'],
1757        // Object containing customized icons that should replace the default ones.
1758        // The keys need to be the exact same icon names used in here:
1759        // https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/icons/svg/index.ts
1760        // To avoid having the icons trimmed or displayed in an unexpected way, please provide svg
1761        // files containing svg xml icons in the size that the default icons come in.
1762        customIcons: {
1763            IconArrowUp: 'https://example.com/arrow-up.svg',
1764            IconDownload: 'https://example.com/download.svg',
1765            IconRemoteControlStart: 'https://example.com/remote-start.svg',
1766        },
1767        // Object containing a theme's properties. It also supports partial overwrites of the main theme.
1768        // For a list of all possible theme tokens and their current defaults, please check:
1769        // https://github.com/jitsi/jitsi-meet/tree/master/resources/custom-theme/custom-theme.json
1770        // For a short explanations on each of the tokens, please check:
1771        // https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/ui/Tokens.ts
1772        // IMPORTANT!: This is work in progress so many of the various tokens are not yet applied in code
1773        // or they are partially applied.
1774        customTheme: {
1775            palette: {
1776                ui01: "orange !important",
1777                ui02: "maroon",
1778                surface02: 'darkgreen',
1779                ui03: "violet",
1780                ui04: "magenta",
1781                ui05: "blueviolet",
1782                action01: 'green',
1783                action01Hover: 'lightgreen',
1784                disabled01: 'beige',
1785                success02: 'cadetblue',
1786                action02Hover: 'aliceblue',
1787            },
1788            typography: {
1789                labelRegular: {
1790                    fontSize: 25,
1791                    lineHeight: 30,
1792                    fontWeight: 500,
1793                }
1794            }
1795        }
1796    }
1797    */
1798    // dynamicBrandingUrl: '',
1799
1800    // A list of allowed URL domains for shared video.
1801    //
1802    // NOTE:
1803    // '*' is allowed value and it will allow any URL to be used for shared video. We do not recommend using '*',
1804    // use it at your own risk!
1805    // sharedVideoAllowedURLDomains: [ ],
1806
1807    // Options related to the participants pane.
1808    // participantsPane: {
1809    //     // Enables feature
1810    //     enabled: true,
1811    //     // Hides the moderator settings tab.
1812    //     hideModeratorSettingsTab: false,
1813    //     // Hides the more actions button.
1814    //     hideMoreActionsButton: false,
1815    //     // Hides the mute all button.
1816    //     hideMuteAllButton: false,
1817    // },
1818
1819    // Options related to the breakout rooms feature.
1820    // breakoutRooms: {
1821    //     // Hides the add breakout room button. This replaces `hideAddRoomButton`.
1822    //     hideAddRoomButton: false,
1823    //     // Hides the auto assign participants button.
1824    //     hideAutoAssignButton: false,
1825    //     // Hides the join breakout room button.
1826    //     hideJoinRoomButton: false,
1827    // },
1828
1829    // When true, virtual background feature will be disabled.
1830    // disableVirtualBackground: false,
1831
1832    // When true the user cannot add more images to be used as virtual background.
1833    // Only the default ones from will be available.
1834    // disableAddingBackgroundImages: false,
1835
1836    // Sets the background transparency level. '0' is fully transparent, '1' is opaque.
1837    // backgroundAlpha: 1,
1838
1839    // The URL of the moderated rooms microservice, if available. If it
1840    // is present, a link to the service will be rendered on the welcome page,
1841    // otherwise the app doesn't render it.
1842    // moderatedRoomServiceUrl: 'https://moderated.bell.a4e.ar',
1843
1844    // If true, tile view will not be enabled automatically when the participants count threshold is reached.
1845    // disableTileView: true,
1846
1847    // If true, the tiles will be displayed contained within the available space rather than enlarged to cover it,
1848    // with a 16:9 aspect ratio (old behaviour).
1849    // disableTileEnlargement: true,
1850
1851    // Controls the visibility and behavior of the top header conference info labels.
1852    // If a label's id is not in any of the 2 arrays, it will not be visible at all on the header.
1853    // conferenceInfo: {
1854    //     // those labels will not be hidden in tandem with the toolbox.
1855    //     alwaysVisible: ['recording', 'raised-hands-count'],
1856    //     // those labels will be auto-hidden in tandem with the toolbox buttons.
1857    //     autoHide: [
1858    //         'subject',
1859    //         'conference-timer',
1860    //         'participants-count',
1861    //         'e2ee',
1862    //         'video-quality',
1863    //         'insecure-room',
1864    //         'highlight-moment',
1865    //         'top-panel-toggle',
1866    //     ]
1867    // },
1868
1869    // Hides the conference subject
1870    // hideConferenceSubject: false,
1871
1872    // Hides the conference timer.
1873    // hideConferenceTimer: false,
1874
1875    // Hides the recording label
1876    // hideRecordingLabel: false,
1877
1878    // Hides the participants stats
1879    // hideParticipantsStats: true,
1880
1881    // Sets the conference subject
1882    // subject: 'Conference Subject',
1883
1884    // Sets the conference local subject
1885    // localSubject: 'Conference Local Subject',
1886
1887    // This property is related to the use case when jitsi-meet is used via the IFrame API. When the property is true
1888    // jitsi-meet will use the local storage of the host page instead of its own. This option is useful if the browser
1889    // is not persisting the local storage inside the iframe.
1890    // useHostPageLocalStorage: true,
1891
1892    // Etherpad ("shared document") integration.
1893    //
1894    // If set, add a "Open shared document" link to the bottom right menu that
1895    // will open an etherpad document.
1896    // etherpad_base: 'https://your-etherpad-installati.on/p/',
1897
1898    // To enable information about dial-in access to meetings you need to provide
1899    // dialInNumbersUrl and dialInConfCodeUrl.
1900    // dialInNumbersUrl returns a json array of numbers that can be used for dial-in.
1901    // {"countryCode":"US","tollFree":false,"formattedNumber":"+1 123-456-7890"}
1902    // dialInConfCodeUrl is the conference mapper converting a meeting id to a PIN used for dial-in
1903    // or the other way around (more info in resources/cloud-api.swagger)
1904
1905    // You can use external service for authentication that will redirect back passing a jwt token
1906    // You can use tokenAuthUrl config to point to a URL of such service.
1907    // The URL for the service supports few params which will be filled in by the code.
1908    // tokenAuthUrl:
1909    //      'https://myservice.com/auth/{room}?code_challenge_method=S256&code_challenge={code_challenge}&state={state}'
1910    // Supported parameters in tokenAuthUrl:
1911    //      {room} - will be replaced with the room name
1912    //      {code_challenge} - (A web only). A oauth 2.0 code challenge that will be sent to the service. See:
1913    //          https://datatracker.ietf.org/doc/html/rfc7636. The code verifier will be saved in the sessionStorage
1914    //          under key: 'code_verifier'.
1915    //      {state} - A json with the current state before redirecting. Keys that are included in the state:
1916    //          - room (The current room name as shown in the address bar)
1917    //          - roomSafe (the backend safe room name to use (lowercase), that is passed to the backend)
1918    //          - tenant (The tenant if any)
1919    //          - config.xxx (all config overrides)
1920    //          - interfaceConfig.xxx (all interfaceConfig overrides)
1921    //          - ios=true (in case ios mobile app is used)
1922    //          - android=true (in case android mobile app is used)
1923    //          - electron=true (when web is loaded in electron app)
1924    // If there is a logout service you can specify its URL with:
1925    // tokenLogoutUrl: 'https://myservice.com/logout'
1926    // You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before
1927    // and will automatically redirect to the token service to get the token for the meeting.
1928    // tokenAuthUrlAutoRedirect: false
1929    // An option to respect the context.tenant jwt field compared to the current tenant from the url
1930    // tokenRespectTenant: false,
1931    // An option to get for user info (name, picture, email) in the token outside the user context.
1932    // Can be used with Firebase tokens.
1933    // tokenGetUserInfoOutOfContext: false,
1934
1935    // You can put an array of values to target different entity types in the invite dialog.
1936    // Valid values are "phone", "room", "sip", "user", "videosipgw" and "email"
1937    // peopleSearchQueryTypes: ["user", "email"],
1938    // Directory endpoint which is called for invite dialog autocomplete
1939    // peopleSearchUrl: "https://myservice.com/api/people",
1940    // Endpoint which is called to send invitation requests
1941    // inviteServiceUrl: "https://myservice.com/api/invite",
1942
1943    // For external entities (e. g. email), the localStorage key holding the token value for directory authentication
1944    // peopleSearchTokenLocation: "mytoken",
1945
1946
1947    // Options related to visitors.
1948    // visitors: {
1949    //     // Starts audio/video when the participant is promoted from visitor.
1950    //     enableMediaOnPromote: {
1951    //         audio: true,
1952    //         video: true
1953    //     },
1954    // },
1955    // The default type of desktop sharing sources that will be used in the electron app.
1956    // desktopSharingSources: ['screen', 'window'],
1957
1958    // Disables the echo cancelation for local audio tracks.
1959    // disableAEC: true,
1960
1961    // Disables the auto gain control for local audio tracks.
1962    // disableAGC: true,
1963
1964    // Disables the audio processing (echo cancelation, auto gain control and noise suppression) for local audio tracks.
1965    // disableAP: true,
1966
1967    // Disables the anoise suppression for local audio tracks.
1968    // disableNS: true,
1969
1970    // Replaces the display name with the JID of the participants.
1971    // displayJids: true,
1972
1973    // Enables disables talk while muted detection.
1974    // enableTalkWhileMuted: true,
1975
1976    // Sets the peer connection ICE transport policy to "relay".
1977    // forceTurnRelay: true,
1978
1979    // List of undocumented settings used in jitsi-meet
1980    /**
1981     _immediateReloadThreshold
1982     deploymentInfo
1983     dialOutAuthUrl
1984     dialOutCodesUrl
1985     dialOutRegionUrl
1986     disableRemoteControl
1987     iAmRecorder
1988     iAmSipGateway
1989     microsoftApiApplicationClientID
1990     */
1991
1992    /**
1993     * This property can be used to alter the generated meeting invite links (in combination with a branding domain
1994     * which is retrieved internally by jitsi meet) (e.g. https://meet.jit.si/someMeeting
1995     * can become https://brandedDomain/roomAlias)
1996     */
1997    // brandingRoomAlias: null,
1998
1999    // List of undocumented settings used in lib-jitsi-meet
2000    /**
2001     _peerConnStatusOutOfLastNTimeout
2002     _peerConnStatusRtcMuteTimeout
2003     avgRtpStatsN
2004     desktopSharingSources
2005     disableLocalStats
2006     hiddenDomain
2007     hiddenFromRecorderFeatureEnabled
2008     ignoreStartMuted
2009     websocketKeepAlive
2010     websocketKeepAliveUrl
2011     */
2012
2013    /**
2014     * Default interval (milliseconds) for triggering mouseMoved iframe API event
2015     */
2016    mouseMoveCallbackInterval: 1000,
2017
2018    /**
2019        Use this array to configure which notifications will be shown to the user
2020        The items correspond to the title or description key of that notification
2021        Some of these notifications also depend on some other internal logic to be displayed or not,
2022        so adding them here will not ensure they will always be displayed
2023
2024        A falsy value for this prop will result in having all notifications enabled (e.g null, undefined, false)
2025    */
2026    // notifications: [
2027    //     'connection.CONNFAIL', // shown when the connection fails,
2028    //     'dialog.cameraConstraintFailedError', // shown when the camera failed
2029    //     'dialog.cameraNotSendingData', // shown when there's no feed from user's camera
2030    //     'dialog.kickTitle', // shown when user has been kicked
2031    //     'dialog.liveStreaming', // livestreaming notifications (pending, on, off, limits)
2032    //     'dialog.lockTitle', // shown when setting conference password fails
2033    //     'dialog.maxUsersLimitReached', // shown when maximmum users limit has been reached
2034    //     'dialog.micNotSendingData', // shown when user's mic is not sending any audio
2035    //     'dialog.passwordNotSupportedTitle', // shown when setting conference password fails due to password format
2036    //     'dialog.recording', // recording notifications (pending, on, off, limits)
2037    //     'dialog.remoteControlTitle', // remote control notifications (allowed, denied, start, stop, error)
2038    //     'dialog.reservationError',
2039    //     'dialog.screenSharingFailedTitle', // shown when the screen sharing failed
2040    //     'dialog.serviceUnavailable', // shown when server is not reachable
2041    //     'dialog.sessTerminated', // shown when there is a failed conference session
2042    //     'dialog.sessionRestarted', // show when a client reload is initiated because of bridge migration
2043    //     'dialog.tokenAuthFailed', // show when an invalid jwt is used
2044    //     'dialog.tokenAuthFailedWithReasons', // show when an invalid jwt is used with the reason behind the error
2045    //     'dialog.transcribing', // transcribing notifications (pending, off)
2046    //     'dialOut.statusMessage', // shown when dial out status is updated.
2047    //     'liveStreaming.busy', // shown when livestreaming service is busy
2048    //     'liveStreaming.failedToStart', // shown when livestreaming fails to start
2049    //     'liveStreaming.unavailableTitle', // shown when livestreaming service is not reachable
2050    //     'lobby.joinRejectedMessage', // shown when while in a lobby, user's request to join is rejected
2051    //     'lobby.notificationTitle', // shown when lobby is toggled and when join requests are allowed / denied
2052    //     'notify.audioUnmuteBlockedTitle', // shown when mic unmute blocked
2053    //     'notify.chatMessages', // shown when receiving chat messages while the chat window is closed
2054    //     'notify.connectedOneMember', // show when a participant joined
2055    //     'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously
2056    //     'notify.connectedTwoMembers', // show when two participants joined simultaneously
2057    //     'notify.dataChannelClosed', // shown when the bridge channel has been disconnected
2058    //     'notify.hostAskedUnmute', // shown to participant when host asks them to unmute
2059    //     'notify.invitedOneMember', // shown when 1 participant has been invited
2060    //     'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited
2061    //     'notify.invitedTwoMembers', // shown when 2 participants have been invited
2062    //     'notify.kickParticipant', // shown when a participant is kicked
2063    //     'notify.leftOneMember', // show when a participant left
2064    //     'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously
2065    //     'notify.leftTwoMembers', // show when two participants left simultaneously
2066    //     'notify.linkToSalesforce', // shown when joining a meeting with salesforce integration
2067    //     'notify.localRecordingStarted', // shown when the local recording has been started
2068    //     'notify.localRecordingStopped', // shown when the local recording has been stopped
2069    //     'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation
2070    //     'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation
2071    //     'notify.moderationInEffectVideoTitle', // shown when user attempts to enable video during AV moderation
2072    //     'notify.moderator', // shown when user gets moderator privilege
2073    //     'notify.mutedRemotelyTitle', // shown when user is muted by a remote party
2074    //     'notify.mutedTitle', // shown when user has been muted upon joining,
2075    //     'notify.newDeviceAudioTitle', // prompts the user to use a newly detected audio device
2076    //     'notify.newDeviceCameraTitle', // prompts the user to use a newly detected camera
2077    //     'notify.noiseSuppressionFailedTitle', // shown when failed to start noise suppression
2078    //     'notify.participantWantsToJoin', // shown when lobby is enabled and participant requests to join meeting
2079    //     'notify.participantsWantToJoin', // shown when lobby is enabled and participants request to join meeting
2080    //     'notify.passwordRemovedRemotely', // shown when a password has been removed remotely
2081    //     'notify.passwordSetRemotely', // shown when a password has been set remotely
2082    //     'notify.raisedHand', // shown when a participant used raise hand,
2083    //     'notify.screenShareNoAudio', // shown when the audio could not be shared for the selected screen
2084    //     'notify.screenSharingAudioOnlyTitle', // shown when the best performance has been affected by screen sharing
2085    //     'notify.selfViewTitle', // show "You can always un-hide the self-view from settings"
2086    //     'notify.startSilentTitle', // shown when user joined with no audio
2087    //     'notify.suboptimalExperienceTitle', // show the browser warning
2088    //     'notify.unmute', // shown to moderator when user raises hand during AV moderation
2089    //     'notify.videoMutedRemotelyTitle', // shown when user's video is muted by a remote party,
2090    //     'notify.videoUnmuteBlockedTitle', // shown when camera unmute and desktop sharing are blocked
2091    //     'prejoin.errorDialOut',
2092    //     'prejoin.errorDialOutDisconnected',
2093    //     'prejoin.errorDialOutFailed',
2094    //     'prejoin.errorDialOutStatus',
2095    //     'prejoin.errorStatusCode',
2096    //     'prejoin.errorValidation',
2097    //     'recording.busy', // shown when recording service is busy
2098    //     'recording.failedToStart', // shown when recording fails to start
2099    //     'recording.unavailableTitle', // shown when recording service is not reachable
2100    //     'toolbar.noAudioSignalTitle', // shown when a broken mic is detected
2101    //     'toolbar.noisyAudioInputTitle', // shown when noise is detected for the current microphone
2102    //     'toolbar.talkWhileMutedPopup', // shown when user tries to speak while muted
2103    //     'transcribing.failed', // shown when transcribing fails
2104    // ],
2105
2106    // List of notifications to be disabled. Works in tandem with the above setting.
2107    // disabledNotifications: [],
2108
2109    // Prevent the filmstrip from autohiding when screen width is under a certain threshold
2110    disableFilmstripAutohiding: true,
2111
2112    // filmstrip: {
2113    //     // Disable the vertical/horizontal filmstrip.
2114    //     disabled: false,
2115    //     // Disables user resizable filmstrip. Also, allows configuration of the filmstrip
2116    //     // (width, tiles aspect ratios) through the interfaceConfig options.
2117    //     disableResizable: false,
2118
2119    //     // Disables the stage filmstrip
2120    //     // (displaying multiple participants on stage besides the vertical filmstrip)
2121    //     disableStageFilmstrip: false,
2122
2123    //     // Default number of participants that can be displayed on stage.
2124    //     // The user can change this in settings. Number must be between 1 and 6.
2125    //     stageFilmstripParticipants: 1,
2126
2127    //     // Disables the top panel (only shown when a user is sharing their screen).
2128    //     disableTopPanel: false,
2129
2130    //     // The minimum number of participants that must be in the call for
2131    //     // the top panel layout to be used.
2132    //     minParticipantCountForTopPanel: 50,
2133
2134    //     // The width of the filmstrip on joining meeting. Can be resized afterwards.
2135    //     initialWidth: 400,
2136
2137    //     // Whether the draggable resize bar of the filmstrip is always visible. Setting this to true will make
2138    //     // the filmstrip always visible in case `disableResizable` is false.
2139    //     alwaysShowResizeBar: true,
2140    // },
2141
2142    // Tile view related config options.
2143    // tileView: {
2144    //     // Whether tileview should be disabled.
2145    //     disabled: false,
2146    //     // The optimal number of tiles that are going to be shown in tile view. Depending on the screen size it may
2147    //     // not be possible to show the exact number of participants specified here.
2148    //     numberOfVisibleTiles: 25,
2149    // },
2150
2151    // Specifies whether the chat emoticons are disabled or not
2152    // disableChatSmileys: false,
2153
2154    // Settings for the GIPHY integration.
2155    // giphy: {
2156    //     // Whether the feature is enabled or not.
2157    //     enabled: false,
2158    //     // SDK API Key from Giphy.
2159    //     sdkKey: '',
2160    //     // Display mode can be one of:
2161    //     // - tile: show the GIF on the tile of the participant that sent it.
2162    //     // - chat: show the GIF as a message in chat
2163    //     // - all: all of the above. This is the default option
2164    //     displayMode: 'all',
2165    //     // How long the GIF should be displayed on the tile (in milliseconds).
2166    //     tileTime: 5000,
2167    //     // Limit results by rating: g, pg, pg-13, r. Default value: g.
2168    //     rating: 'pg',
2169    // },
2170
2171    // Logging
2172    // logging: {
2173    //      // Default log level for the app and lib-jitsi-meet.
2174    //      defaultLogLevel: 'trace',
2175    //      // Option to disable LogCollector.
2176    //      //disableLogCollector: true,
2177    //      // Individual loggers are customizable.
2178    //      loggers: {
2179    //          // The following are too verbose in their logging with the default level.
2180    //          'modules/RTC/TraceablePeerConnection.js': 'info',
2181    //          'modules/xmpp/strophe.util.js': 'log',
2182    //      },
2183    // },
2184
2185    // Application logo url
2186    // defaultLogoUrl: 'images/watermark.svg',
2187
2188    // Settings for the Excalidraw whiteboard integration.
2189     whiteboard: {
2190         // Whether the feature is enabled or not.
2191         enabled: true,
2192    //     // The server used to support whiteboard collaboration.
2193    //     // https://github.com/jitsi/excalidraw-backend
2194         collabServerBaseUrl: 'https://bell.a4e.ar/excalidraw-backend',
2195    //     // The user access limit to the whiteboard, introduced as a means
2196    //     // to control the performance.
2197         userLimit: 25,
2198    //     // The url for more info about the whiteboard and its usage limitations.
2199    //     limitUrl: 'https://example.com/blog/whiteboard-limits',
2200     },
2201
2202    // The watchRTC initialize config params as described :
2203    // https://testrtc.com/docs/installing-the-watchrtc-javascript-sdk/#h-set-up-the-sdk
2204    // https://www.npmjs.com/package/@testrtc/watchrtc-sdk
2205    // watchRTCConfigParams: {
2206    //         /** Watchrtc api key */
2207    //         rtcApiKey: string;
2208    //         /** Identifier for the session */
2209    //         rtcRoomId?: string;
2210    //         /** Identifier for the current peer */
2211    //         rtcPeerId?: string;
2212    //         /**
2213    //          * ["tag1", "tag2", "tag3"]
2214    //          * @deprecated use 'keys' instead
2215    //          */
2216    //         rtcTags?: string[];
2217    //         /** { "key1": "value1", "key2": "value2"} */
2218    //         keys?: any;
2219    //         /** Enables additional logging */
2220    //         debug?: boolean;
2221    //         rtcToken?: string;
2222    //         /**
2223    //          * @deprecated No longer needed. Use "proxyUrl" instead.
2224    //          */
2225    //         wsUrl?: string;
2226    //         proxyUrl?: string;
2227    //         console?: {
2228    //             level: string;
2229    //             override: boolean;
2230    //         allowBrowserLogCollection?: boolean;
2231    //         collectionInterval?: number;
2232    //         logGetStats?: boolean;
2233    // },
2234
2235    // Hide login button on auth dialog, you may want to enable this if you are using JWT tokens to authenticate users
2236    // hideLoginButton: true,
2237
2238    // If true remove the tint foreground on focused user camera in filmstrip
2239    // disableCameraTintForeground: false,
2240
2241    // File sharign service.
2242    // fileSharing: {
2243    //     // The URL of the file sharing service API. See resources/file-sharing.yaml for more details.
2244    //     apiUrl: 'https://example.com',
2245    //     // Whether the file sharing service is enabled or not.
2246    //     enabled: true,
2247    //     // Maximum file size limit (-1 value disables any file size limit check)
2248    //     maxFileSize: 50,
2249    // },
2250    aiAssistant: {
2251        enabled: true,
2252        url: "/static/ai-assistant.html",
2253        defaultWidth: 400,
2254        enableTranscriptForwarding: true
2255    },
2256    deeplinking: {
2257        desktop: {
2258            enabled: false
2259        },
2260        disabled: true,
2261        hideLogo: false,
2262        ios: {
2263            appName: 'Rita Meet',
2264            appScheme: 'com.ritameet.app',
2265            downloadLink: '',
2266        },
2267        android: {
2268            appName: 'Rita Meet',
2269            appScheme: 'com.ritameet.app',
2270            downloadLink: '',
2271            appPackage: 'com.ritameet.app',
2272        }
2273    },
2274    defaultRemoteDisplayName: 'Guest',
2275    tokenAuthUrl: "https://ritameet.com/auth/{room}?state={state}",
2276    telegramProxyUrl: "tg://proxy?server=95.133.243.250&port=443&secret=ee1729d97cfdd08ee1219c69448ab13aaa73756e372d31362e757365726170692e636f6d",
2277};
2278
2279// Set the default values for JaaS customers
2280if (enableJaaS) {
2281    config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids';
2282    config.dialInConfCodeUrl = 'https://conference-mapper.jitsi.net/v1/access';
2283    config.roomPasswordNumberOfDigits = 10; // skip re-adding it (do not remove comment)
2284}
2285</script>
2285<!-- adapt to your needs, i.e. set hosts and bosh path -->
2286    
2286<script>/* eslint-disable no-unused-vars, no-var, max-len */
2287/* eslint sort-keys: ["error", "asc", {"caseSensitive": false}] */
2288
2289/**
2290 * !!!IMPORTANT!!!
2291 *
2292 * This file is considered deprecated. All options will eventually be moved to
2293 * config.js, and no new options should be added here.
2294 */
2295
2296var interfaceConfig = {
2297    APP_NAME: 'Rita Meet',
2298    AUDIO_LEVEL_PRIMARY_COLOR: 'rgba(255,255,255,0.4)',
2299    AUDIO_LEVEL_SECONDARY_COLOR: 'rgba(255,255,255,0.2)',
2300
2301    /**
2302     * A UX mode where the last screen share participant is automatically
2303     * pinned. Valid values are the string "remote-only" so remote participants
2304     * get pinned but not local, otherwise any truthy value for all participants,
2305     * and any falsy value to disable the feature.
2306     *
2307     * Note: this mode is experimental and subject to breakage.
2308     */
2309    AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only',
2310    BRAND_WATERMARK_LINK: '',
2311
2312    CLOSE_PAGE_GUEST_HINT: false, // A html text to be shown to guests on the close page, false disables it
2313
2314    DEFAULT_BACKGROUND: '#040404',
2315    DEFAULT_WELCOME_PAGE_LOGO_URL: 'images/watermark.svg',
2316
2317    DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
2318
2319    /**
2320     * If true, notifications regarding joining/leaving are no longer displayed.
2321     */
2322    DISABLE_JOIN_LEAVE_NOTIFICATIONS: false,
2323
2324    /**
2325     * If true, presence status: busy, calling, connected etc. is not displayed.
2326     */
2327    DISABLE_PRESENCE_STATUS: false,
2328
2329    /**
2330     * Whether the speech to text transcription subtitles panel is disabled.
2331     * If {@code undefined}, defaults to {@code false}.
2332     *
2333     * @type {boolean}
2334     */
2335    DISABLE_TRANSCRIPTION_SUBTITLES: false,
2336
2337    /**
2338     * Whether or not the blurred video background for large video should be
2339     * displayed on browsers that can support it.
2340     */
2341    DISABLE_VIDEO_BACKGROUND: false,
2342
2343    DISPLAY_WELCOME_FOOTER: true,
2344    DISPLAY_WELCOME_PAGE_ADDITIONAL_CARD: false,
2345    DISPLAY_WELCOME_PAGE_CONTENT: false,
2346    DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: false,
2347
2348    ENABLE_DIAL_OUT: true,
2349
2350    FILM_STRIP_MAX_HEIGHT: 120,
2351
2352    GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
2353
2354    /**
2355     * Hide the invite prompt in the header when alone in the meeting.
2356     */
2357    HIDE_INVITE_MORE_HEADER: false,
2358
2359    JITSI_WATERMARK_LINK: 'https://ritameet.com',
2360
2361    LANG_DETECTION: true, // Allow i18n to detect the system language
2362    LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
2363
2364    /**
2365     * Maximum coefficient of the ratio of the large video to the visible area
2366     * after the large video is scaled to fit the window.
2367     *
2368     * @type {number}
2369     */
2370    MAXIMUM_ZOOMING_COEFFICIENT: 1.3,
2371
2372    /**
2373     * Whether the mobile app Jitsi Meet is to be promoted to participants
2374     * attempting to join a conference in a mobile Web browser. If
2375     * {@code undefined}, defaults to {@code true}.
2376     *
2377     * @type {boolean}
2378     */
2379    MOBILE_APP_PROMO: true,
2380
2381    // Names of browsers which should show a warning stating the current browser
2382    // has a suboptimal experience. Browsers which are not listed as optimal or
2383    // unsupported are considered suboptimal. Valid values are:
2384    // chrome, chromium, electron, firefox , safari, webkit
2385    OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'electron', 'safari', 'webkit' ],
2386
2387    POLICY_LOGO: null,
2388    PROVIDER_NAME: 'Rita Meet',
2389
2390    /**
2391     * If true, will display recent list
2392     *
2393     * @type {boolean}
2394     */
2395    RECENT_LIST_ENABLED: true,
2396    REMOTE_THUMBNAIL_RATIO: 1, // 1:1
2397
2398    SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'sounds', 'more' ],
2399
2400    /**
2401     * Specify which sharing features should be displayed. If the value is not set
2402     * all sharing features will be shown. You can set [] to disable all.
2403     */
2404    // SHARING_FEATURES: ['email', 'url', 'dial-in', 'embed'],
2405
2406    SHOW_BRAND_WATERMARK: false,
2407
2408    /**
2409     * Decides whether the chrome extension banner should be rendered on the landing page and during the meeting.
2410     * If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s)
2411     * being already installed is done before rendering.
2412     */
2413    SHOW_CHROME_EXTENSION_BANNER: false,
2414
2415    SHOW_JITSI_WATERMARK: true,
2416    SHOW_POWERED_BY: false,
2417    SHOW_PROMOTIONAL_CLOSE_PAGE: false,
2418
2419    /*
2420     * If indicated some of the error dialogs may point to the support URL for
2421     * help.
2422     */
2423    SUPPORT_URL: 'https://t.me/rita_meet',
2424
2425    // Browsers, in addition to those which do not fully support WebRTC, that
2426    // are not supported and should show the unsupported browser page.
2427    UNSUPPORTED_BROWSERS: [],
2428
2429    /**
2430     * Whether to show thumbnails in filmstrip as a column instead of as a row.
2431     */
2432    VERTICAL_FILMSTRIP: true,
2433
2434    // Determines how the video would fit the screen. 'both' would fit the whole
2435    // screen, 'height' would fit the original video height to the height of the
2436    // screen, 'width' would fit the original video width to the width of the
2437    // screen respecting ratio, 'nocrop' would make the video as large as
2438    // possible and preserve aspect ratio without cropping.
2439    VIDEO_LAYOUT_FIT: 'both',
2440
2441    /**
2442     * If true, hides the video quality label indicating the resolution status
2443     * of the current large video.
2444     *
2445     * @type {boolean}
2446     */
2447    VIDEO_QUALITY_LABEL_DISABLED: false,
2448
2449    /**
2450     * How many columns the tile view can expand to. The respected range is
2451     * between 1 and 5.
2452     */
2453    // TILE_VIEW_MAX_COLUMNS: 5,
2454
2455    // List of undocumented settings
2456    /**
2457     INDICATOR_FONT_SIZES
2458     PHONE_NUMBER_REGEX
2459    */
2460
2461    // -----------------DEPRECATED CONFIGS BELOW THIS LINE-----------------------------
2462
2463    /**
2464     * Specify URL for downloading ios mobile app.
2465     */
2466    // MOBILE_DOWNLOAD_LINK_IOS: '',
2467
2468    MOBILE_DOWNLOAD_LINK_ANDROID: 'https://play.google.com/store/apps/details?id=com.ritameet.app', // eslint-disable-line sort-keys
2469
2470    APP_SCHEME: 'com.ritameet.app', // eslint-disable-line sort-keys
2471
2472    NATIVE_APP_NAME: 'Rita Meet',
2473
2474    // HIDE_DEEP_LINKING_LOGO: false,
2475
2476    ANDROID_APP_PACKAGE: 'com.ritameet.app', // eslint-disable-line sort-keys
2477
2478    // MOBILE_DOWNLOAD_LINK_F_DROID: '',
2479
2480    // Connection indicators (
2481    // CONNECTION_INDICATOR_AUTO_HIDE_ENABLED,
2482    // CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT,
2483    // CONNECTION_INDICATOR_DISABLED) got moved to config.js.
2484
2485    // Please use disableModeratorIndicator from config.js
2486    // DISABLE_FOCUS_INDICATOR: false,
2487
2488    // Please use defaultLocalDisplayName from config.js
2489    // DEFAULT_LOCAL_DISPLAY_NAME: 'me',
2490
2491    // Please use defaultLogoUrl from config.js
2492    // DEFAULT_LOGO_URL: 'images/watermark.svg',
2493
2494    // Please use defaultRemoteDisplayName from config.js
2495    // DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
2496
2497    // Moved to config.js as `toolbarConfig.initialTimeout`.
2498    // INITIAL_TOOLBAR_TIMEOUT: 20000,
2499
2500    // Please use `liveStreaming.helpLink` from config.js
2501    // Documentation reference for the live streaming feature.
2502    // LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live',
2503
2504    // Moved to config.js as `toolbarConfig.alwaysVisible`.
2505    // TOOLBAR_ALWAYS_VISIBLE: false,
2506
2507    // This config was moved to config.js as `toolbarButtons`.
2508    // TOOLBAR_BUTTONS: [],
2509
2510    // Moved to config.js as `toolbarConfig.timeout`.
2511    // TOOLBAR_TIMEOUT: 4000,
2512
2513    // Allow all above example options to include a trailing comma and
2514    // prevent fear when commenting out the last value.
2515    // eslint-disable-next-line sort-keys
2516    makeJsonParserHappy: 'even if last key had a trailing comma'
2517
2518    // No configuration value should follow this line.
2519};
2520
2521/* eslint-enable no-unused-vars, no-var, max-len */
2522</script>
2522
2523    
2523<script src="libs/lib-jitsi-meet.min.js?v=8742"></script>
2523
2524    
2524<script src="libs/app.bundle.min.js?v=8742"></script>
2524
2525    <title>Rita Meet</title>
2526<meta property="og:title" content="Rita Meet"/>
2527<meta property="og:image" content="images/watermark.svg"/>
2528<meta property="og:description" content="Join a video conference powered by Rita Meet"/>
2529<meta description="Join a video conference powered by Rita Meet"/>
2530<meta itemprop="name" content="Rita Meet"/>
2531<meta itemprop="description" content="Join a video conference powered by Rita Meet"/>
2532<meta itemprop="image" content="images/watermark.svg"/>
2533<link rel="icon" href="favicon.ico">
2534    
2535    <template id = "welcome-page-additional-content-template"></template>
2536
2537    <template id = "welcome-page-additional-card-template"></template>
2538
2539    <template id="settings-toolbar-additional-content-template"></template>
2540
2541  </head>
2542  <body>
2543    <noscript aria-hidden="true">
2544        <div>JavaScript is disabled. </br>For this site to work you have to enable JavaScript.</div>
2545    </noscript>
2546    
2547    <div id="react" role="main"></div>
2548  </body>
2549</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.