PageSourceSearch

https://akvorrat.at/

html akvorrat.at collected 2026-09-24 19:18:17 UTC 89,923 bytes, 2,192 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    
4    <meta charset="utf-8">
5    <meta http-equiv="content-type" content="text/html;charset=utf-8">
6    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
7    <meta name="theme-color" content="#2A3A4B">
8    <base href="/" />
9
10
11    <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
12    <link rel="stylesheet" href="css/all.css?v=9365">
13    
14    <link rel="manifest" id="manifest-placeholder">
15
16    
16<script>
17        function contextRoot(pathname) {
18            const contextRootEndIndex = pathname.lastIndexOf('/');
19
20            return (
21                contextRootEndIndex === -1
22                ? '/'
23                : pathname.substring(0, contextRootEndIndex + 1)
24            );
25        }
26        window.EXCALIDRAW_ASSET_PATH = 'libs/excalidraw/';
27        // Dynamically generate the manifest location URL. It must be served from the document origin, and we may have
28        // the base pointing to the CDN. This way we can generate a full URL which will bypass the base.
29        document.querySelector('#manifest-placeholder').setAttribute('href', window.location.origin + contextRoot(window.location.pathname) + 'manifest.json');
30
31        document.addEventListener('DOMContentLoaded', () => {
32            if (!JitsiMeetJS.app) {
33                return;
34            }
35
36            JitsiMeetJS.app.renderEntryPoint({
37                Component: JitsiMeetJS.app.entryPoints.APP
38            })
39
40            const isEmbedded = () => {
41                try {
42                    return window.self !== window.top;
43                } catch (e) {
44                    return true;
45                }
46            };
47
48            const isElectron = navigator.userAgent.includes('Electron');
49            const shouldRegisterWorker = !isElectron && !isEmbedded() && 'serviceWorker' in navigator;
50
51            if (shouldRegisterWorker) {
52                navigator.serviceWorker
53                    .register(window.location.origin + contextRoot(window.location.pathname) + 'pwa-worker.js')
54                    .then(reg => {
55                        console.log('Service worker registered.', reg);
56                    })
57                    .catch(err => {
58                        console.log(err);
59                    });
60            }
61        });
62    </script>
62
63    
63<script>
64        // IE11 and earlier can be identified via their user agent and be
65        // redirected to a page that is known to have no newer js syntax.
66        if (window.navigator.userAgent.match(/(MSIE|Trident)/)) {
67            var roomName = encodeURIComponent(window.location.pathname);
68            window.location.pathname = 'static/recommendedBrowsers.html';
69        }
70
71        window.indexLoadedTime = window.performance.now();
72        console.log("(TIME) index.html loaded:\t", indexLoadedTime);
73        window.addEventListener('load', function() {
74            window.loadedEventTime = window.performance.now();
75            console.log("(TIME) window loaded event:\t", loadedEventTime);
76        });
77
78        // XXX the code below listeners for errors and displays an error message
79        // in the document body when any of the required files fails to load.
80        // The intention is to prevent from displaying broken page.
81        var criticalFiles = [
82            "config.js",
83            "utils.js",
84            "do_external_connect.js",
85            "interface_config.js",
86            "lib-jitsi-meet.min.js",
87            "app.bundle.min.js",
88            "all.css?v=9365"
89        ];
90        var loadErrHandler = function(e) {
91            var target = e.target;
92            // Error on 
92<script> and <link>(CSS)
93            // 
93<script> will have .src and <link> .href
94            var fileRef = (target.src ? target.src : target.href);
95            if (("SCRIPT" === target.tagName || "LINK" === target.tagName)
96                && criticalFiles.some(
97                    function(file) { return fileRef.indexOf(file) !== -1 })) {
98                window.onload = function() {
99                    // The whole complex part below implements page reloads with
100                    // "exponential backoff". The retry attempt is passes as
101                    // "rCounter" query parameter
102                    var href = window.location.href;
103
104                    var retryMatch = href.match(/.+(\?|&)rCounter=(\d+)/);
105                    var retryCountStr = retryMatch ? retryMatch[2] : "0";
106                    var retryCount = Number.parseInt(retryCountStr);
107
108                    if (retryMatch == null) {
109                        var separator = href.indexOf("?") === -1 ? "?" : "&";
110                        var hashIdx = href.indexOf("#");
111
112                        if (hashIdx === -1) {
113                            href += separator + "rCounter=1";
114                        } else {
115                            var hashPart = href.substr(hashIdx);
116
117                            href = href.substr(0, hashIdx)
118                                + separator + "rCounter=1" + hashPart;
119                        }
120                    } else {
121                        var separator = retryMatch[1];
122
123                        href = href.replace(
124                            /(\?|&)rCounter=(\d+)/,
125                            separator + "rCounter=" + (retryCount + 1));
126                    }
127
128                    var delay = Math.pow(2, retryCount) * 2000;
129                    if (isNaN(delay) || delay < 2000 || delay > 60000)
130                        delay = 10000;
131
132                    var showMoreText = "show more";
133                    var showLessText = "show less";
134
135                    document.body.innerHTML
136                        = "<div style='"
137                        + "position: absolute;top: 50%;left: 50%;"
138                        + "text-align: center;"
139                        + "font-size: medium;"
140                        + "font-weight: 400;"
141                        + "transform: translate(-50%, -50%)'>"
142                        + "Uh oh! We couldn't fully download everything we needed :("
143                        + "<br/> "
144                        + "We will try again shortly. In the mean time, check for problems with your Internet connection!"
145                        + "<br/><br/> "
146                        + "<div id='moreInfo' style='"
147                        + "display: none;'>" + "Missing " + fileRef
148                        + "<br/><br/></div>"
149                        + "<a id='showMore' style='"
150                        + "text-decoration: underline;"
151                        + "font-size:small;"
152                        + "cursor: pointer'>" + showMoreText + "</a>"
153                        + "&nbsp;&nbsp;&nbsp;"
154                        + "<a id ='reloadLink' style='"
155                        + "text-decoration: underline;"
156                        + "font-size:small;"
157                        + "'>reload now</a>"
158                        + "</div>";
159
160                    var reloadLink = document.getElementById('reloadLink');
161                    reloadLink.setAttribute('href', href);
162
163                    var showMoreElem = document.getElementById("showMore");
164                    showMoreElem.addEventListener('click', function () {
165                            var moreInfoElem
166                                    = document.getElementById("moreInfo");
167
168                            if (showMoreElem.innerHTML === showMoreText) {
169                                moreInfoElem.setAttribute(
170                                    "style",
171                                    "display: block;"
172                                    + "color:#FF991F;"
173                                    + "font-size:small;"
174                                    + "user-select:text;");
175                                showMoreElem.innerHTML = showLessText;
176                            }
177                            else {
178                                moreInfoElem.setAttribute(
179                                    "style", "display: none;");
180                                showMoreElem.innerHTML = showMoreText;
181                            }
182                        });
183
184                    window.setTimeout(
185                        function () { window.location.replace(href); }, delay);
186
187                    // Call extra handler if defined.
188                    if (typeof postLoadErrorHandler === "function") {
189                        postLoadErrorHandler(fileRef);
190                    }
191                };
192                window.removeEventListener(
193                    'error', loadErrHandler, true /* capture phase */);
194            }
195        };
196        window.addEventListener(
197            'error', loadErrHandler, true /* capture phase type of listener */);
198    </script>
198
199    
199<script>/* eslint-disable comma-dangle, no-unused-vars, no-var, prefer-template, vars-on-top */
200
201/*
202 * NOTE: If you add a new option please remember to document it here:
203 * https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-configuration
204 */
205
206var subdir = '';
207var subdomain = '';
208
209if (subdomain) {
210    subdomain = subdomain.substr(0, subdomain.length - 1).split('.')
211        .join('_')
212        .toLowerCase() + '.';
213}
214
215// In case of no ssi provided by the webserver, use empty strings
216if (subdir.startsWith('<!--')) {
217    subdir = '';
218}
219if (subdomain.startsWith('<!--')) {
220    subdomain = '';
221}
222
223var enableJaaS = false;
224
225var config = {
226    // Connection
227    //
228
229    hosts: {
230        // XMPP domain.
231        domain: 'meet.epicenter.works',
232
233        // When using authentication, domain for guest users.
234        anonymousdomain: 'guest.meet.epicenter.works',
235
236        // Domain for authenticated users. Defaults to <domain>.
237        // authdomain: 'meet.epicenter.works',
238
239        // Focus component domain. Defaults to focus.<domain>.
240        // focus: 'focus.meet.epicenter.works',
241
242        // XMPP MUC domain. FIXME: use XEP-0030 to discover it.
243        muc: 'conference.' + subdomain + 'meet.epicenter.works',
244    },
245
246    // BOSH URL. FIXME: use XEP-0156 to discover it.
247    bosh: 'https://meet.epicenter.works/' + subdir + 'http-bind',
248
249    // Websocket URL (XMPP)
250    // websocket: 'wss://meet.epicenter.works/' + subdir + 'xmpp-websocket',
251
252    // The real JID of focus participant - can be overridden here
253    // Do not change username - FIXME: Make focus username configurable
254    // https://github.com/jitsi/jitsi-meet/issues/7376
255    // focusUserJid: '[email protected]',
256
257    // Options related to the bridge (colibri) data channel
258    bridgeChannel: {
259        // If the backend advertises multiple colibri websockets, this options allows
260        // to filter some of them out based on the domain name. We use the first URL
261        // which does not match ignoreDomain, falling back to the first one that matches
262        // ignoreDomain. Has no effect if undefined.
263        // ignoreDomain: 'example.com',
264
265        // Prefer SCTP (WebRTC data channels over the media path) over a colibri websocket.
266        // If SCTP is available in the backend it will be used instead of a WS. Defaults to
267        // false (SCTP is used only if available and no WS are available).
268        // preferSctp: false
269    },
270
271    // Testing / experimental features.
272    //
273
274    testing: {
275        // Allows the setting of a custom bandwidth value from the UI.
276        // assumeBandwidth: true,
277
278        // Disables the End to End Encryption feature. Useful for debugging
279        // issues related to insertable streams.
280        // disableE2EE: false,
281
282        // Enables XMPP WebSocket (as opposed to BOSH) for the given amount of users.
283        // mobileXmppWsThreshold: 10, // enable XMPP WebSockets on mobile for 10% of the users
284
285        // P2P test mode disables automatic switching to P2P when there are 2
286        // participants in the conference.
287        // p2pTestMode: false,
288
289        // Enables the test specific features consumed by jitsi-meet-torture
290        // testMode: false,
291
292        // Disables the auto-play behavior of *all* newly created video element.
293        // This is useful when the client runs on a host with limited resources.
294        // noAutoPlayVideo: false,
295
296        // Enable callstats only for a percentage of users.
297        // This takes a value between 0 and 100 which determines the probability for
298        // the callstats to be enabled.
299        // callStatsThreshold: 5, // enable callstats for 5% of the users.
300    },
301
302    // Disables moderator indicators.
303    // disableModeratorIndicator: false,
304
305    // Disables the reactions feature.
306    // disableReactions: true,
307
308    // Disables the reactions moderation feature.
309    // disableReactionsModeration: false,
310
311    // Disables polls feature.
312    // disablePolls: false,
313
314    // Disables self-view tile. (hides it from tile view and from filmstrip)
315    // disableSelfView: false,
316
317    // Disables self-view settings in UI
318    // disableSelfViewSettings: false,
319
320    // screenshotCapture : {
321    //      Enables the screensharing capture feature.
322    //      enabled: false,
323    //
324    //      The mode for the screenshot capture feature.
325    //      Can be either 'recording' - screensharing screenshots are taken
326    //      only when the recording is also on,
327    //      or 'always' - screensharing screenshots are always taken.
328    //      mode: 'recording',
329    // }
330
331    // Disables ICE/UDP by filtering out local and remote UDP candidates in
332    // signalling.
333    // webrtcIceUdpDisable: false,
334
335    // Disables ICE/TCP by filtering out local and remote TCP candidates in
336    // signalling.
337    // webrtcIceTcpDisable: false,
338
339
340    // Media
341    //
342
343    // Audio
344
345    // Disable measuring of audio levels.
346    // disableAudioLevels: false,
347
348    // audioLevelsInterval: 200,
349
350    // Enabling this will run the lib-jitsi-meet no audio detection module which
351    // will notify the user if the current selected microphone has no audio
352    // input and will suggest another valid device if one is present.
353    enableNoAudioDetection: true,
354
355    // Enabling this will show a "Save Logs" link in the GSM popover that can be
356    // used to collect debug information (XMPP IQs, SDP offer/answer cycles)
357    // about the call.
358    // enableSaveLogs: false,
359
360    // Enabling this will hide the "Show More" link in the GSM popover that can be
361    // used to display more statistics about the connection (IP, Port, protocol, etc).
362    // disableShowMoreStats: true,
363
364    // Enabling this will run the lib-jitsi-meet noise detection module which will
365    // notify the user if there is noise, other than voice, coming from the current
366    // selected microphone. The purpose it to let the user know that the input could
367    // be potentially unpleasant for other meeting participants.
368    enableNoisyMicDetection: true,
369
370    // Start the conference in audio only mode (no video is being received nor
371    // sent).
372    // startAudioOnly: false,
373
374    // Every participant after the Nth will start audio muted.
375    // startAudioMuted: 10,
376
377    // Start calls with audio muted. Unlike the option above, this one is only
378    // applied locally. FIXME: having these 2 options is confusing.
379    startWithAudioMuted: false,
380
381    // Enabling it (with #params) will disable local audio output of remote
382    // participants and to enable it back a reload is needed.
383    // startSilent: false,
384
385    // Enables support for opus-red (redundancy for Opus).
386    // enableOpusRed: false,
387
388    // Specify audio quality stereo and opusMaxAverageBitrate values in order to enable HD audio.
389    // Beware, by doing so, you are disabling echo cancellation, noise suppression and AGC.
390    // Specify enableOpusDtx to enable support for opus-dtx where
391    // audio packets won’t be transmitted while participant is silent or muted.
392    // audioQuality: {
393    //     stereo: false,
394    //     opusMaxAverageBitrate: null, // Value to fit the 6000 to 510000 range.
395    //     enableOpusDtx: false,
396    // },
397
398    // Noise suppression configuration. By default rnnoise is used. Optionally Krisp
399    // can be used by enabling it below, but the Krisp JS SDK files must be supplied in your
400    // installation. Specifically, these files are needed:
401    //   - https://meet.example.com/libs/krisp/krisp.mjs
402    //   - https://meet.example.com/libs/krisp/models/model_8.kw
403    //   - https://meet.example.com/libs/krisp/models/model_16.kw
404    //   - https://meet.example.com/libs/krisp/models/model_32.kw
405    // NOTE: Krisp JS SDK v1.0.9 was tested.
406    // noiseSuppression: {
407    //     krisp: {
408    //         enabled: false,
409    //         logProcessStats: false,
410    //         debugLogs: false,
411    //     },
412    // },
413
414    // Video
415
416    // Sets the preferred resolution (height) for local video. Defaults to 720.
417    // resolution: 720,
418
419    // Specifies whether the raised hand will hide when someone becomes a dominant speaker or not
420    // disableRemoveRaisedHandOnFocus: false,
421
422    // speakerStats: {
423    //     // Specifies whether the speaker stats is enable or not.
424    //     disabled: false,
425
426    //     // Specifies whether there will be a search field in speaker stats or not.
427    //     disableSearch: false,
428
429    //     // Specifies whether participants in speaker stats should be ordered or not, and with what priority.
430    //     // 'role', <- Moderators on top.
431    //     // 'name', <- Alphabetically by name.
432    //     // 'hasLeft', <- The ones that have left in the bottom.
433    //     order: [
434    //         'role',
435    //         'name',
436    //         'hasLeft',
437    //     ],
438    // },
439
440    // DEPRECATED. Please use speakerStats.disableSearch instead.
441    // Specifies whether there will be a search field in speaker stats or not
442    // disableSpeakerStatsSearch: false,
443
444    // DEPRECATED. Please use speakerStats.order .
445    // Specifies whether participants in speaker stats should be ordered or not, and with what priority
446    // speakerStatsOrder: [
447    //  'role', <- Moderators on top
448    //  'name', <- Alphabetically by name
449    //  'hasLeft', <- The ones that have left in the bottom
450    // ], <- the order of the array elements determines priority
451
452    // How many participants while in the tile view mode, before the receiving video quality is reduced from HD to SD.
453    // Use -1 to disable.
454    // maxFullResolutionParticipants: 2,
455
456    // w3c spec-compliant video constraints to use for video capture. Currently
457    // used by browsers that return true from lib-jitsi-meet's
458    // util#browser#usesNewGumFlow. The constraints are independent from
459    // this config's resolution value. Defaults to requesting an ideal
460    // resolution of 720p.
461    // constraints: {
462    //     video: {
463    //         height: {
464    //             ideal: 720,
465    //             max: 720,
466    //             min: 240,
467    //         },
468    //     },
469    // },
470
471    // Enable / disable simulcast support.
472    disableSimulcast: true,
473
474    // Every participant after the Nth will start video muted.
475    // startVideoMuted: 10,
476
477    // Start calls with video muted. Unlike the option above, this one is only
478    // applied locally. FIXME: having these 2 options is confusing.
479    startWithVideoMuted: false,
480
481    // Desktop sharing
482
483    // Optional desktop sharing frame rate options. Default value: min:5, max:5.
484    // desktopSharingFrameRate: {
485    //     min: 5,
486    //     max: 5,
487    // },
488
489    // This option has been deprecated since it is no longer supported as per the w3c spec.
490    // https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia. If the user has not
491    // interacted with the webpage before the getDisplayMedia call, the promise will be rejected by the browser. This
492    // has already been implemented in Firefox and Safari and will be implemented in Chrome soon.
493    // https://bugs.chromium.org/p/chromium/issues/detail?id=1198918
494    // startScreenSharing: false,
495
496    // Recording
497
498    // DEPRECATED. Use recordingService.enabled instead.
499    // fileRecordingsEnabled: false,
500
501    // Enable the dropbox integration.
502    // dropbox: {
503    //     appKey: '<APP_KEY>', // Specify your app key here.
504    //     // A URL to redirect the user to, after authenticating
505    //     // by default uses:
506    //     // 'https://meet.epicenter.works/static/oauth.html'
507    //     redirectURI:
508    //          'https://meet.epicenter.works/subfolder/static/oauth.html',
509    // },
510
511    recordingService: {
512         // When integrations like dropbox are enabled only that will be shown,
513         // by enabling fileRecordingsServiceEnabled, we show both the integrations
514         // and the generic recording service (its configuration and storage type
515         // depends on jibri configuration)
516         enabled: false,
517
518         // Whether to show the possibility to share file recording with other people
519         // (e.g. meeting participants), based on the actual implementation
520         // on the backend.
521         sharingEnabled: false,
522
523         // Hide the warning that says we only store the recording for 24 hours.
524         hideStorageWarning: false,
525     },
526
527    // DEPRECATED. Use recordingService.enabled instead.
528    // fileRecordingsServiceEnabled: false,
529
530    // DEPRECATED. Use recordingService.sharingEnabled instead.
531    // fileRecordingsServiceSharingEnabled: false,
532
533    // Local recording configuration.
534    localRecording: {
535         // Whether to disable local recording or not.
536         disable: true,
537
538         // Whether to notify all participants when a participant is recording locally.
539         notifyAllParticipants: false,
540
541         // Whether to disable the self recording feature (only local participant streams).
542         disableSelfRecording: true,
543     },
544
545    // Customize the Live Streaming dialog. Can be modified for a non-YouTube provider.
546    // liveStreaming: {
547    //    // Whether to enable live streaming or not.
548    //    enabled: false,
549    //    // Terms link
550    //    termsLink: 'https://www.youtube.com/t/terms',
551    //    // Data privacy link
552    //    dataPrivacyLink: 'https://policies.google.com/privacy',
553    //    // RegExp string that validates the stream key input field
554    //    validatorRegExpString: '^(?:[a-zA-Z0-9]{4}(?:-(?!$)|$)){4}',
555    //    // Documentation reference for the live streaming feature.
556    //    helpLink: 'https://jitsi.org/live'
557    // },
558
559    // DEPRECATED. Use liveStreaming.enabled instead.
560    // liveStreamingEnabled: false,
561
562    // DEPRECATED. Use transcription.enabled instead.
563    // transcribingEnabled: false,
564
565    // DEPRECATED. Use transcription.useAppLanguage instead.
566    // transcribeWithAppLanguage: true,
567
568    // DEPRECATED. Use transcription.preferredLanguage instead.
569    // preferredTranscribeLanguage: 'en-US',
570
571    // DEPRECATED. Use transcription.autoCaptionOnRecord instead.
572    // autoCaptionOnRecord: false,
573
574    // Transcription options.
575    // transcription: {
576    //     // Whether the feature should be enabled or not.
577    //     enabled: false,
578
579    //     // Translation languages.
580    //     // Available languages can be found in
581    //     // ./src/react/features/transcribing/translation-languages.json.
582    //     translationLanguages: ['en', 'es', 'fr', 'ro'],
583
584    //     // Important languages to show on the top of the language list.
585    //     translationLanguagesHead: ['en'],
586
587    //     // If true transcriber will use the application language.
588    //     // The plication language is either explicitly set by participants in their settings or automatically
589    //     // detected based on the environment, e.g. if the app is opened in a chrome instance which
590    //     // is using french as its default language then transcriptions for that participant will be in french.
591    //     // Defaults to true.
592    //     useAppLanguage: true,
593
594    //     // Transcriber language. This settings will only work if "useAppLanguage"
595    //     // is explicitly set to false.
596    //     // Available languages can be found in
597    //     // ./src/react/features/transcribing/transcriber-langs.json.
598    //     preferredLanguage: 'en-US',
599
600    //     // Disable start transcription for all participants.
601    //     disableStartForAll: false,
602
603    //     // Enables automatic turning on captions when recording is started
604    //     autoCaptionOnRecord: false,
605    // },
606
607    // Misc
608
609    // Default value for the channel "last N" attribute. -1 for unlimited.
610    channelLastN: -1,
611
612    // Connection indicators
613    // connectionIndicators: {
614    //     autoHide: true,
615    //     autoHideTimeout: 5000,
616    //     disabled: false,
617    //     disableDetails: false,
618    //     inactiveDisabled: false
619    // },
620
621    // Provides a way for the lastN value to be controlled through the UI.
622    // When startLastN is present, conference starts with a last-n value of startLastN and channelLastN
623    // value will be used when the quality level is selected using "Manage Video Quality" slider.
624    // startLastN: 1,
625
626    // Specify the settings for video quality optimizations on the client.
627    videoQuality: {
628    //
629    //    // Provides a way to set the codec preference on desktop based endpoints.
630        codecPreferenceOrder: [ 'VP9', 'VP8', 'H264' ],
631    //
632    //    // Provides a way to configure the maximum bitrates that will be enforced on the simulcast streams for
633    //    // video tracks. The keys in the object represent the type of the stream (LD, SD or HD) and the values
634    //    // are the max.bitrates to be set on that particular type of stream. The actual send may vary based on
635    //    // the available bandwidth calculated by the browser, but it will be capped by the values specified here.
636    //    // This is currently not implemented on app based clients on mobile.
637    //    maxBitratesVideo: {
638    //          H264: {
639    //              low: 200000,
640    //              standard: 500000,
641    //              high: 1500000,
642    //          },
643    //          VP8 : {
644    //              low: 200000,
645    //              standard: 500000,
646    //              high: 1500000,
647    //          },
648    //          VP9: {
649    //              low: 100000,
650    //              standard: 300000,
651    //              high: 1200000,
652    //          },
653    //    },
654    //
655    //    // The options can be used to override default thresholds of video thumbnail heights corresponding to
656    //    // the video quality levels used in the application. At the time of this writing the allowed levels are:
657    //    //     'low' - for the low quality level (180p at the time of this writing)
658    //    //     'standard' - for the medium quality level (360p)
659    //    //     'high' - for the high quality level (720p)
660    //    // The keys should be positive numbers which represent the minimal thumbnail height for the quality level.
661    //    //
662    //    // With the default config value below the application will use 'low' quality until the thumbnails are
663    //    // at least 360 pixels tall. If the thumbnail height reaches 720 pixels then the application will switch to
664    //    // the high quality.
665    //    minHeightForQualityLvl: {
666    //        360: 'standard',
667    //        720: 'high',
668    //    },
669    //
670    //    // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based endpoint
671    //    mobileCodecPreferenceOrder: [ 'VP8', 'VP9', 'H264' ],
672    //
673    //    // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead.
674    //    // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified
675    //    // here will be removed from the list of codecs present in the SDP answer generated by the client. If the
676    //    // same codec is specified for both the disabled and preferred option, the disable settings will prevail.
677    //    // Note that 'VP8' cannot be disabled since it's a mandatory codec, the setting will be ignored in this case.
678    //    disabledCodec: 'H264',
679    //
680    //    // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead.
681    //    // Provides a way to set a preferred video codec for the JVB connection. If 'H264' is specified here,
682    //    // simulcast will be automatically disabled since JVB doesn't support H264 simulcast yet. This will only
683    //    // rearrange the the preference order of the codecs in the SDP answer generated by the browser only if the
684    //    // preferred codec specified here is present. Please ensure that the JVB offers the specified codec for this
685    //    // to take effect.
686    //    preferredCodec: 'VP8',
687    //
688    },
689
690    // Notification timeouts
691    // notificationTimeouts: {
692    //     short: 2500,
693    //     medium: 5000,
694    //     long: 10000,
695    // },
696
697    // // Options for the recording limit notification.
698    // recordingLimit: {
699    //
700    //    // The recording limit in minutes. Note: This number appears in the notification text
701    //    // but doesn't enforce the actual recording time limit. This should be configured in
702    //    // jibri!
703    //    limit: 60,
704    //
705    //    // The name of the app with unlimited recordings.
706    //    appName: 'Unlimited recordings APP',
707    //
708    //    // The URL of the app with unlimited recordings.
709    //    appURL: 'https://unlimited.recordings.app.com/',
710    // },
711
712    // Disables or enables RTX (RFC 4588) (defaults to false).
713    // disableRtx: false,
714
715    // Moves all Jitsi Meet 'beforeunload' logic (cleanup, leaving, disconnecting, etc) to the 'unload' event.
716    // disableBeforeUnloadHandlers: true,
717
718    // Disables or enables TCC support in this client (default: enabled).
719    // enableTcc: true,
720
721    // Disables or enables REMB support in this client (default: enabled).
722    // enableRemb: true,
723
724    // Enables ICE restart logic in LJM and displays the page reload overlay on
725    // ICE failure. Current disabled by default because it's causing issues with
726    // signaling when Octo is enabled. Also when we do an "ICE restart"(which is
727    // not a real ICE restart), the client maintains the TCC sequence number
728    // counter, but the bridge resets it. The bridge sends media packets with
729    // TCC sequence numbers starting from 0.
730    // enableIceRestart: false,
731
732    // Enables forced reload of the client when the call is migrated as a result of
733    // the bridge going down.
734    // enableForcedReload: true,
735
736    // Use TURN/UDP servers for the jitsi-videobridge connection (by default
737    // we filter out TURN/UDP because it is usually not needed since the
738    // bridge itself is reachable via UDP)
739    // useTurnUdp: false
740
741    // Enable support for encoded transform in supported browsers. This allows
742    // E2EE to work in Safari if the corresponding flag is enabled in the browser.
743    // Experimental.
744    // enableEncodedTransformSupport: false,
745
746    // UI
747    //
748
749    // Disables responsive tiles.
750    // disableResponsiveTiles: false,
751
752    // DEPRECATED. Please use `securityUi?.hideLobbyButton` instead.
753    // Hides lobby button.
754    // hideLobbyButton: false,
755
756    // DEPRECATED. Please use `lobby?.autoKnock` instead.
757    // If Lobby is enabled starts knocking automatically.
758    // autoKnockLobby: false,
759
760    // DEPRECATED. Please use `lobby?.enableChat` instead.
761    // Enable lobby chat.
762    // enableLobbyChat: true,
763
764    // DEPRECATED! Use `breakoutRooms.hideAddRoomButton` instead.
765    // Hides add breakout room button
766    // hideAddRoomButton: false,
767
768    // Require users to always specify a display name.
769    requireDisplayName: true,
770
771    // Enables webhid functionality for Audio.
772    // enableWebHIDFeature: false,
773
774    // DEPRECATED! Use 'welcomePage.disabled' instead.
775    // Whether to use a welcome page or not. In case it's false a random room
776    // will be joined when no room is specified.
777    enableWelcomePage: true,
778
779    // Configs for welcome page.
780    // welcomePage: {
781    //     // Whether to disable welcome page. In case it's disabled a random room
782    //     // will be joined when no room is specified.
783    //     disabled: false,
784    //     // If set,landing page will redirect to this URL.
785    //     customUrl: ''
786    // },
787
788    // Configs for the lobby screen.
789    // lobby: {
790    //     // If Lobby is enabled, it starts knocking automatically. Replaces `autoKnockLobby`.
791    //     autoKnock: false,
792    //     // Enables the lobby chat. Replaces `enableLobbyChat`.
793    //     enableChat: true,
794    // },
795
796    // Configs for the security related UI elements.
797    // securityUi: {
798    //     // Hides the lobby button. Replaces `hideLobbyButton`.
799    //     hideLobbyButton: false,
800    //     // Hides the possibility to set and enter a lobby password.
801    //     disableLobbyPassword: false,
802    // },
803
804    // Disable app shortcuts that are registered upon joining a conference
805    // disableShortcuts: false,
806
807    // Disable initial browser getUserMedia requests.
808    // This is useful for scenarios where users might want to start a conference for screensharing only
809    // disableInitialGUM: false,
810
811    // Enabling the close page will ignore the welcome page redirection when
812    // a call is hangup.
813    enableClosePage: true,
814
815    // Disable hiding of remote thumbnails when in a 1-on-1 conference call.
816    // Setting this to null, will also disable showing the remote videos
817    // when the toolbar is shown on mouse movements
818    // disable1On1Mode: null | false | true,
819
820    // Default local name to be displayed
821    // defaultLocalDisplayName: 'me',
822
823    // Default remote name to be displayed
824    // defaultRemoteDisplayName: 'Fellow Jitster',
825
826    // Hides the display name from the participant thumbnail
827    // hideDisplayName: false,
828
829    // Hides the dominant speaker name badge that hovers above the toolbox
830    // hideDominantSpeakerBadge: false,
831
832    // Default language for the user interface. Cannot be overwritten.
833    defaultLanguage: 'en',
834
835    // Disables profile and the edit of all fields from the profile settings (display name and email)
836    // disableProfile: false,
837
838    // Hides the email section under profile settings.
839    hideEmailInSettings: true,
840
841    // When enabled the password used for locking a room is restricted to up to the number of digits specified
842    // default: roomPasswordNumberOfDigits: false,
843    // roomPasswordNumberOfDigits: 10,
844
845    // Message to show the users. Example: 'The service will be down for
846    // maintenance at 01:00 AM GMT,
847    // noticeMessage: '',
848
849    // Enables calendar integration, depends on googleApiApplicationClientID
850    // and microsoftApiApplicationClientID
851    // enableCalendarIntegration: false,
852
853    // Configs for prejoin page.
854    prejoinConfig: {
855    //     // When 'true', it shows an intermediate page before joining, where the user can configure their devices.
856    //     // This replaces `prejoinPageEnabled`.
857         enabled: true,
858    //     // Hides the participant name editing field in the prejoin screen.
859    //     // If requireDisplayName is also set as true, a name should still be provided through
860    //     // either the jwt or the userInfo from the iframe api init object in order for this to have an effect.
861         hideDisplayName: false,
862    //     // List of buttons to hide from the extra join options dropdown.
863    //     hideExtraJoinButtons: ['no-audio', 'by-phone'],
864    },
865
866    // When 'true', the user cannot edit the display name.
867    // (Mainly useful when used in conjunction with the JWT so the JWT name becomes read only.)
868    // readOnlyName: false,
869
870    // If etherpad integration is enabled, setting this to true will
871    // automatically open the etherpad when a participant joins.  This
872    // does not affect the mobile app since opening an etherpad
873    // obscures the conference controls -- it's better to let users
874    // choose to open the pad on their own in that case.
875    // openSharedDocumentOnJoin: false,
876
877    // If true, shows the unsafe room name warning label when a room name is
878    // deemed unsafe (due to the simplicity in the name) and a password is not
879    // set or the lobby is not enabled.
880    // enableInsecureRoomNameWarning: false,
881
882    // Whether to automatically copy invitation URL after creating a room.
883    // Document should be focused for this option to work
884    // enableAutomaticUrlCopy: false,
885
886    // Array with avatar URL prefixes that need to use CORS.
887    // corsAvatarURLs: [ 'https://www.gravatar.com/avatar/' ],
888
889    // Base URL for a Gravatar-compatible service. Defaults to Gravatar.
890    // DEPRECATED! Use `gravatar.baseUrl` instead.
891    // gravatarBaseURL: 'https://www.gravatar.com/avatar/',
892
893    // Setup for Gravatar-compatible services.
894    gravatar: {
895    //     // Defaults to Gravatar.
896    //     baseUrl: 'https://www.gravatar.com/avatar/',
897    //     // True if Gravatar should be disabled.
898         disabled: true,
899    },
900
901    // App name to be displayed in the invitation email subject, as an alternative to
902    // interfaceConfig.APP_NAME.
903    // inviteAppName: null,
904
905    // Moved from interfaceConfig(TOOLBAR_BUTTONS).
906    // The name of the toolbar buttons to display in the toolbar, including the
907    // "More actions" menu. If present, the button will display. Exceptions are
908    // "livestreaming" and "recording" which also require being a moderator and
909    // some other values in config.js to be enabled. Also, the "profile" button will
910    // not display for users with a JWT.
911    // Notes:
912    // - it's impossible to choose which buttons go in the "More actions" menu
913    // - it's impossible to control the placement of buttons
914    // - 'desktop' controls the "Share your screen" button
915    // - if `toolbarButtons` is undefined, we fallback to enabling all buttons on the UI
916    toolbarButtons: [
917        'camera',
918        'chat',
919        'closedcaptions',
920        'desktop',
921    //    'download',
922    //    'embedmeeting',
923        'etherpad',
924        'feedback',
925        'filmstrip',
926        'fullscreen',
927        'hangup',
928    //    'help',
929        'highlight',
930        'invite',
931    //    'linktosalesforce',
932        'livestreaming',
933        'microphone',
934        'noisesuppression',
935        'participants-pane',
936        'profile',
937        'raisehand',
938    //    'recording',
939        'security',
940        'select-background',
941        'settings',
942    //    'shareaudio',
943    //    'sharedvideo',
944        'shortcuts',
945    //    'stats',
946        'tileview',
947        'toggle-camera',
948        'videoquality',
949        'whiteboard',
950     ],
951
952    // Holds values related to toolbar visibility control.
953    // toolbarConfig: {
954    //     // Moved from interfaceConfig.INITIAL_TOOLBAR_TIMEOUT
955    //     // The initial number of milliseconds for the toolbar buttons to be visible on screen.
956    //     initialTimeout: 20000,
957    //     // Moved from interfaceConfig.TOOLBAR_TIMEOUT
958    //     // Number of milliseconds for the toolbar buttons to be visible on screen.
959    //     timeout: 4000,
960    //     // Moved from interfaceConfig.TOOLBAR_ALWAYS_VISIBLE
961    //     // Whether toolbar should be always visible or should hide after x milliseconds.
962    //     alwaysVisible: false,
963    //     // Indicates whether the toolbar should still autohide when chat is open
964    //     autoHideWhileChatIsOpen: false,
965    // },
966
967    // Toolbar buttons which have their click/tap event exposed through the API on
968    // `toolbarButtonClicked`. Passing a string for the button key will
969    // prevent execution of the click/tap routine; passing an object with `key` and
970    // `preventExecution` flag on false will not prevent execution of the click/tap
971    // routine. Below array with mixed mode for passing the buttons.
972    // buttonsWithNotifyClick: [
973    //     'camera',
974    //     {
975    //         key: 'chat',
976    //         preventExecution: false
977    //     },
978    //     {
979    //         key: 'closedcaptions',
980    //         preventExecution: true
981    //     },
982    //     'desktop',
983    //     'download',
984    //     'embedmeeting',
985    //     'end-meeting',
986    //     'etherpad',
987    //     'feedback',
988    //     'filmstrip',
989    //     'fullscreen',
990    //     'hangup',
991    //     'hangup-menu',
992    //     'help',
993    //     {
994    //         key: 'invite',
995    //         preventExecution: false
996    //     },
997    //     'livestreaming',
998    //     'microphone',
999    //     'mute-everyone',
1000    //     'mute-video-everyone',
1001    //     'noisesuppression',
1002    //     'participants-pane',
1003    //     'profile',
1004    //     {
1005    //         key: 'raisehand',
1006    //         preventExecution: true
1007    //     },
1008    //     'recording',
1009    //     'security',
1010    //     'select-background',
1011    //     'settings',
1012    //     'shareaudio',
1013    //     'sharedvideo',
1014    //     'shortcuts',
1015    //     'stats',
1016    //     'tileview',
1017    //     'toggle-camera',
1018    //     'videoquality',
1019    //     // The add passcode button from the security dialog.
1020    //     {
1021    //         key: 'add-passcode',
1022    //         preventExecution: false
1023    //     },
1024    //     'whiteboard',
1025    // ],
1026
1027    // Participant context menu buttons which have their click/tap event exposed through the API on
1028    // `participantMenuButtonClick`. Passing a string for the button key will
1029    // prevent execution of the click/tap routine; passing an object with `key` and
1030    // `preventExecution` flag on false will not prevent execution of the click/tap
1031    // routine. Below array with mixed mode for passing the buttons.
1032    // participantMenuButtonsWithNotifyClick: [
1033    //     'allow-video',
1034    //     {
1035    //         key: 'ask-unmute',
1036    //         preventExecution: false
1037    //     },
1038    //     'conn-status',
1039    //     'flip-local-video',
1040    //     'grant-moderator',
1041    //     {
1042    //         key: 'kick',
1043    //         preventExecution: true
1044    //     },
1045    //     {
1046    //         key: 'hide-self-view',
1047    //         preventExecution: false
1048    //     },
1049    //     'mute',
1050    //     'mute-others',
1051    //     'mute-others-video',
1052    //     'mute-video',
1053    //     'pinToStage',
1054    //     'privateMessage',
1055    //     {
1056    //         key: 'remote-control',
1057    //         preventExecution: false
1058    //     },
1059    //     'send-participant-to-room',
1060    //     'verify',
1061    // ],
1062
1063    // List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons:
1064    // 'microphone', 'camera', 'select-background', 'invite', 'settings'
1065    // hiddenPremeetingButtons: [],
1066
1067    // An array with custom option buttons for the participant context menu
1068    // type:  Array<{ icon: string; id: string; text: string; }>
1069    // customParticipantMenuButtons: [],
1070
1071    // An array with custom option buttons for the toolbar
1072    // type:  Array<{ icon: string; id: string; text: string; backgroundColor?: string; }>
1073    // customToolbarButtons: [],
1074
1075    // Stats
1076    //
1077
1078    // Whether to enable stats collection or not in the TraceablePeerConnection.
1079    // This can be useful for debugging purposes (post-processing/analysis of
1080    // the webrtc stats) as it is done in the jitsi-meet-torture bandwidth
1081    // estimation tests.
1082    gatherStats: false,
1083
1084    // The interval at which PeerConnection.getStats() is called. Defaults to 10000
1085    // pcStatsInterval: 10000,
1086
1087    // To enable sending statistics to callstats.io you must provide the
1088    // Application ID and Secret.
1089    // callStatsID: '',
1090    // callStatsSecret: '',
1091    // callStatsApplicationLogsDisabled: false,
1092
1093    // The callstats initialize config params as described in the API:
1094    // https://docs.callstats.io/docs/javascript#callstatsinitialize-with-app-secret
1095    // callStatsConfigParams: {
1096    //     disableBeforeUnloadHandler: true, // disables callstats.js's window.onbeforeunload parameter.
1097    //     applicationVersion: "app_version", // Application version specified by the developer.
1098    //     disablePrecalltest: true, // disables the pre-call test, it is enabled by default.
1099    //     siteID: "siteID", // The name/ID of the site/campus from where the call/pre-call test is made.
1100    //     additionalIDs: { // additionalIDs object, contains application related IDs.
1101    //         customerID: "Customer Identifier. Example, walmart.",
1102    //         tenantID: "Tenant Identifier. Example, monster.",
1103    //         productName: "Product Name. Example, Jitsi.",
1104    //         meetingsName: "Meeting Name. Example, Jitsi loves callstats.",
1105    //         serverName: "Server/MiddleBox Name. Example, jvb-prod-us-east-mlkncws12.",
1106    //         pbxID: "PBX Identifier. Example, walmart.",
1107    //         pbxExtensionID: "PBX Extension Identifier. Example, 5625.",
1108    //         fqExtensionID: "Fully qualified Extension Identifier. Example, +71 (US) +5625.",
1109    //         sessionID: "Session Identifier. Example, session-12-34",
1110    //     },
1111    //     collectLegacyStats: true, //enables the collection of legacy stats in chrome browser
1112    //     collectIP: true, //enables the collection localIP address
1113    // },
1114
1115    // Enables sending participants' display names to callstats
1116    // enableDisplayNameInStats: false,
1117
1118    // Enables sending participants' emails (if available) to callstats and other analytics
1119    // enableEmailInStats: false,
1120
1121    faceLandmarks: {
1122    //     // Enables sharing your face coordinates. Used for centering faces within a video.
1123    //     enableFaceCentering: false,
1124
1125    //     // Enables detecting face expressions and sharing data with other participants
1126    //     enableFaceExpressionsDetection: false,
1127
1128    //     // Enables displaying face expressions in speaker stats
1129    //     enableDisplayFaceExpressions: false,
1130
1131    //     // Enable rtc stats for face landmarks
1132         enableRTCStats: false,
1133
1134    //     // Minimum required face movement percentage threshold for sending new face centering coordinates data.
1135    //     faceCenteringThreshold: 10,
1136
1137    //     // Milliseconds for processing a new image capture in order to detect face coordinates if they exist.
1138    //     captureInterval: 1000,
1139    },
1140
1141    // Controls the percentage of automatic feedback shown to participants when callstats is enabled.
1142    // The default value is 100%. If set to 0, no automatic feedback will be requested
1143    // feedbackPercentage: 100,
1144
1145    // Privacy
1146    //
1147
1148    // If third party requests are disabled, no other server will be contacted.
1149    // This means avatars will be locally generated and callstats integration
1150    // will not function.
1151    disableThirdPartyRequests: true,
1152
1153
1154    // Peer-To-Peer mode: used (if enabled) when there are just 2 participants.
1155    //
1156
1157    p2p: {
1158        // Enables peer to peer mode. When enabled the system will try to
1159        // establish a direct connection when there are exactly 2 participants
1160        // in the room. If that succeeds the conference will stop sending data
1161        // through the JVB and use the peer to peer connection instead. When a
1162        // 3rd participant joins the conference will be moved back to the JVB
1163        // connection.
1164        enabled: false,
1165
1166        // Sets the ICE transport policy for the p2p connection. At the time
1167        // of this writing the list of possible values are 'all' and 'relay',
1168        // but that is subject to change in the future. The enum is defined in
1169        // the WebRTC standard:
1170        // https://www.w3.org/TR/webrtc/#rtcicetransportpolicy-enum.
1171        // If not set, the effective value is 'all'.
1172        // iceTransportPolicy: 'all',
1173
1174        // Provides a way to set the codec preference on mobile devices, both on RN and mobile browser based
1175        // endpoints.
1176        // mobileCodecPreferenceOrder: [ 'H264', 'VP8', 'VP9' ],
1177        //
1178        // Provides a way to set the codec preference on desktop based endpoints.
1179        // codecPreferenceOrder: [ 'VP9', 'VP8', 'H264 ],
1180
1181        // How long we're going to wait, before going back to P2P after the 3rd
1182        // participant has left the conference (to filter out page reload).
1183        // backToP2PDelay: 5,
1184
1185        // The STUN servers that will be used in the peer to peer connections
1186        stunServers: [
1187
1188            // { urls: 'stun:meet.epicenter.works:3478' },
1189            { urls: 'stun:meet.epicenter.works:5349' },
1190        ],
1191
1192        // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead.
1193        // Provides a way to set the video codec preference on the p2p connection. Acceptable
1194        // codec values are 'VP8', 'VP9' and 'H264'.
1195        // preferredCodec: 'H264',
1196
1197        // DEPRECATED! Use `codecPreferenceOrder/mobileCodecPreferenceOrder` instead.
1198        // Provides a way to prevent a video codec from being negotiated on the p2p connection.
1199        // disabledCodec: '',
1200    },
1201
1202    analytics: {
1203        // True if the analytics should be disabled
1204        disabled: true,
1205
1206        // The Google Analytics Tracking ID:
1207        // googleAnalyticsTrackingId: 'your-tracking-id-UA-123456-1',
1208
1209        // Matomo configuration:
1210        // matomoEndpoint: 'https://your-matomo-endpoint/',
1211        // matomoSiteID: '42',
1212
1213        // The Amplitude APP Key:
1214        // amplitudeAPPKey: '<APP_KEY>',
1215
1216        // Enables Amplitude UTM tracking:
1217        // Default value is false.
1218        // amplitudeIncludeUTM: false,
1219
1220        // Obfuscates room name sent to analytics (amplitude, rtcstats)
1221        // Default value is false.
1222        // obfuscateRoomName: false,
1223
1224        // Configuration for the rtcstats server:
1225        // By enabling rtcstats server every time a conference is joined the rtcstats
1226        // module connects to the provided rtcstatsEndpoint and sends statistics regarding
1227        // PeerConnection states along with getStats metrics polled at the specified
1228        // interval.
1229        // rtcstatsEnabled: false,
1230        // rtcstatsStoreLogs: false,
1231
1232        // In order to enable rtcstats one needs to provide a endpoint url.
1233        // rtcstatsEndpoint: wss://rtcstats-server-pilot.jitsi.net/,
1234
1235        // The interval at which rtcstats will poll getStats, defaults to 10000ms.
1236        // If the value is set to 0 getStats won't be polled and the rtcstats client
1237        // will only send data related to RTCPeerConnection events.
1238        // rtcstatsPollInterval: 10000,
1239
1240        // This determines if rtcstats sends the SDP to the rtcstats server or replaces
1241        // all SDPs with an empty string instead.
1242        // rtcstatsSendSdp: false,
1243
1244        // Array of script URLs to load as lib-jitsi-meet "analytics handlers".
1245        // scriptURLs: [
1246        //      "libs/analytics-ga.min.js", // google-analytics
1247        //      "https://example.com/my-custom-analytics.js",
1248        // ],
1249
1250        // By enabling watchRTCEnabled option you would want to use watchRTC feature
1251        // This would also require to configure watchRTCConfigParams.
1252        // Please remember to keep rtcstatsEnabled disabled for watchRTC to work.
1253        // watchRTCEnabled: false,
1254    },
1255
1256    // Logs that should go be passed through the 'log' event if a handler is defined for it
1257    // apiLogLevels: ['warn', 'log', 'error', 'info', 'debug'],
1258
1259    // Information about the jitsi-meet instance we are connecting to, including
1260    // the user region as seen by the server.
1261    // deploymentInfo: {
1262    //     shard: "shard1",
1263    //     region: "europe",
1264    //     userRegion: "asia",
1265    // },
1266
1267    // Array<string> of disabled sounds.
1268    // Possible values:
1269    // - 'ASKED_TO_UNMUTE_SOUND'
1270    // - 'E2EE_OFF_SOUND'
1271    // - 'E2EE_ON_SOUND'
1272    // - 'INCOMING_MSG_SOUND'
1273    // - 'KNOCKING_PARTICIPANT_SOUND'
1274    // - 'LIVE_STREAMING_OFF_SOUND'
1275    // - 'LIVE_STREAMING_ON_SOUND'
1276    // - 'NO_AUDIO_SIGNAL_SOUND'
1277    // - 'NOISY_AUDIO_INPUT_SOUND'
1278    // - 'OUTGOING_CALL_EXPIRED_SOUND'
1279    // - 'OUTGOING_CALL_REJECTED_SOUND'
1280    // - 'OUTGOING_CALL_RINGING_SOUND'
1281    // - 'OUTGOING_CALL_START_SOUND'
1282    // - 'PARTICIPANT_JOINED_SOUND'
1283    // - 'PARTICIPANT_LEFT_SOUND'
1284    // - 'RAISE_HAND_SOUND'
1285    // - 'REACTION_SOUND'
1286    // - 'RECORDING_OFF_SOUND'
1287    // - 'RECORDING_ON_SOUND'
1288    // - 'TALK_WHILE_MUTED_SOUND'
1289    // disabledSounds: [],
1290
1291    // DEPRECATED! Use `disabledSounds` instead.
1292    // Decides whether the start/stop recording audio notifications should play on record.
1293    // disableRecordAudioNotification: false,
1294
1295    // DEPRECATED! Use `disabledSounds` instead.
1296    // Disables the sounds that play when other participants join or leave the
1297    // conference (if set to true, these sounds will not be played).
1298    // disableJoinLeaveSounds: false,
1299
1300    // DEPRECATED! Use `disabledSounds` instead.
1301    // Disables the sounds that play when a chat message is received.
1302    // disableIncomingMessageSound: false,
1303
1304    // Information for the chrome extension banner
1305    // chromeExtensionBanner: {
1306    //     // The chrome extension to be installed address
1307    //     url: 'https://chrome.google.com/webstore/detail/jitsi-meetings/kglhbbefdnlheedjiejgomgmfplipfeb',
1308    //     edgeUrl: 'https://microsoftedge.microsoft.com/addons/detail/jitsi-meetings/eeecajlpbgjppibfledfihobcabccihn',
1309
1310    //     // Extensions info which allows checking if they are installed or not
1311    //     chromeExtensionsInfo: [
1312    //         {
1313    //             id: 'kglhbbefdnlheedjiejgomgmfplipfeb',
1314    //             path: 'jitsi-logo-48x48.png',
1315    //         },
1316    //         // Edge extension info
1317    //         {
1318    //             id: 'eeecajlpbgjppibfledfihobcabccihn',
1319    //             path: 'jitsi-logo-48x48.png',
1320    //         },
1321    //     ]
1322    // },
1323
1324    // e2ee: {
1325    //   labels: {
1326    //     description: '',
1327    //     label: '',
1328    //     tooltip: '',
1329    //     warning: '',
1330    //   },
1331    //   externallyManagedKey: false,
1332    // },
1333
1334    // Options related to end-to-end (participant to participant) ping.
1335    // e2eping: {
1336    //   // Whether ene-to-end pings should be enabled.
1337    //   enabled: false,
1338    //
1339    //   // The number of responses to wait for.
1340    //   numRequests: 5,
1341    //
1342    //   // The max conference size in which e2e pings will be sent.
1343    //   maxConferenceSize: 200,
1344    //
1345    //   // The maximum number of e2e ping messages per second for the whole conference to aim for.
1346    //   // This is used to control the pacing of messages in order to reduce the load on the backend.
1347    //   maxMessagesPerSecond: 250,
1348    // },
1349
1350    // If set, will attempt to use the provided video input device label when
1351    // triggering a screenshare, instead of proceeding through the normal flow
1352    // for obtaining a desktop stream.
1353    // NOTE: This option is experimental and is currently intended for internal
1354    // use only.
1355    // _desktopSharingSourceDevice: 'sample-id-or-label',
1356
1357    // DEPRECATED! Use deeplinking.disabled instead.
1358    // If true, any checks to handoff to another application will be prevented
1359    // and instead the app will continue to display in the current browser.
1360    // disableDeepLinking: false,
1361
1362    // The deeplinking config.
1363    // For information about the properties of
1364    // deeplinking.[ios/android].dynamicLink check:
1365    // https://firebase.google.com/docs/dynamic-links/create-manually
1366    // deeplinking: {
1367    //
1368    //     // The desktop deeplinking config.
1369    //     desktop: {
1370    //         appName: 'Jitsi Meet'
1371    //     },
1372    //     // If true, any checks to handoff to another application will be prevented
1373    //     // and instead the app will continue to display in the current browser.
1374    //     disabled: false,
1375
1376    //     // whether to hide the logo on the deep linking pages.
1377    //     hideLogo: false,
1378
1379    //     // The ios deeplinking config.
1380    //     ios: {
1381    //         appName: 'Jitsi Meet',
1382    //         // Specify mobile app scheme for opening the app from the mobile browser.
1383    //         appScheme: 'org.jitsi.meet',
1384    //         // Custom URL for downloading ios mobile app.
1385    //         downloadLink: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905',
1386    //         dynamicLink: {
1387    //             apn: 'org.jitsi.meet',
1388    //             appCode: 'w2atb',
1389    //             customDomain: undefined,
1390    //             ibi: 'com.atlassian.JitsiMeet.ios',
1391    //             isi: '1165103905'
1392    //         }
1393    //     },
1394
1395    //     // The android deeplinking config.
1396    //     android: {
1397    //         appName: 'Jitsi Meet',
1398    //         // Specify mobile app scheme for opening the app from the mobile browser.
1399    //         appScheme: 'org.jitsi.meet',
1400    //         // Custom URL for downloading android mobile app.
1401    //         downloadLink: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
1402    //         // Android app package name.
1403    //         appPackage: 'org.jitsi.meet',
1404    //         fDroidUrl: 'https://f-droid.org/en/packages/org.jitsi.meet/',
1405    //         dynamicLink: {
1406    //             apn: 'org.jitsi.meet',
1407    //             appCode: 'w2atb',
1408    //             customDomain: undefined,
1409    //             ibi: 'com.atlassian.JitsiMeet.ios',
1410    //             isi: '1165103905'
1411    //         }
1412    //     }
1413    // },
1414
1415    // // The terms, privacy and help centre URL's.
1416    // legalUrls: {
1417    //     helpCentre: 'https://web-cdn.jitsi.net/faq/meet-faq.html',
1418    //     privacy: 'https://jitsi.org/meet/privacy',
1419    //     terms: 'https://jitsi.org/meet/terms'
1420    // },
1421
1422    // A property to disable the right click context menu for localVideo
1423    // the menu has option to flip the locally seen video for local presentations
1424    // disableLocalVideoFlip: false,
1425
1426    // A property used to unset the default flip state of the local video.
1427    // When it is set to 'true', the local(self) video will not be mirrored anymore.
1428    // doNotFlipLocalVideo: false,
1429
1430    // Mainly privacy related settings
1431
1432    // Disables all invite functions from the app (share, invite, dial out...etc)
1433    // disableInviteFunctions: true,
1434
1435    // Disables storing the room name to the recents list. When in an iframe this is ignored and
1436    // the room is never stored in the recents list.
1437    doNotStoreRoom: true,
1438
1439    // Deployment specific URLs.
1440    // deploymentUrls: {
1441    //    // If specified a 'Help' button will be displayed in the overflow menu with a link to the specified URL for
1442    //    // user documentation.
1443    //    userDocumentationURL: 'https://docs.example.com/video-meetings.html',
1444    //    // If specified a 'Download our apps' button will be displayed in the overflow menu with a link
1445    //    // to the specified URL for an app download page.
1446    //    downloadAppsUrl: 'https://docs.example.com/our-apps.html',
1447    // },
1448
1449    // Options related to the remote participant menu.
1450    // remoteVideoMenu: {
1451    //     // Whether the remote video context menu to be rendered or not.
1452    //     disabled: true,
1453    //     // If set to true the 'Kick out' button will be disabled.
1454    //     disableKick: true,
1455    //     // If set to true the 'Grant moderator' button will be disabled.
1456    //     disableGrantModerator: true,
1457    //     // If set to true the 'Send private message' button will be disabled.
1458    //     disablePrivateChat: true,
1459    // },
1460
1461    // Endpoint that enables support for salesforce integration with in-meeting resource linking
1462    // This is required for:
1463    // listing the most recent records - salesforceUrl/records/recents
1464    // searching records - salesforceUrl/records?text=${text}
1465    // retrieving record details - salesforceUrl/records/${id}?type=${type}
1466    // and linking the meeting - salesforceUrl/sessions/${sessionId}/records/${id}
1467    //
1468    // salesforceUrl: 'https://api.example.com/',
1469
1470    // If set to true all muting operations of remote participants will be disabled.
1471    // disableRemoteMute: true,
1472
1473    // Enables support for lip-sync for this client (if the browser supports it).
1474    // enableLipSync: false,
1475
1476    /**
1477     External API url used to receive branding specific information.
1478     If there is no url set or there are missing fields, the defaults are applied.
1479     The config file should be in JSON.
1480     None of the fields are mandatory and the response must have the shape:
1481    {
1482        // The domain url to apply (will replace the domain in the sharing conference link/embed section)
1483        inviteDomain: 'example-company.org,
1484        // The hex value for the colour used as background
1485        backgroundColor: '#fff',
1486        // The url for the image used as background
1487        backgroundImageUrl: 'https://example.com/background-img.png',
1488        // The anchor url used when clicking the logo image
1489        logoClickUrl: 'https://example-company.org',
1490        // The url used for the image used as logo
1491        logoImageUrl: 'https://example.com/logo-img.png',
1492        // Overwrite for pool of background images for avatars
1493        avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'],
1494        // The lobby/prejoin screen background
1495        premeetingBackground: 'url(https://example.com/premeeting-background.png)',
1496        // A list of images that can be used as video backgrounds.
1497        // When this field is present, the default images will be replaced with those provided.
1498        virtualBackgrounds: ['https://example.com/img.jpg'],
1499        // Object containing customized icons that should replace the default ones.
1500        // The keys need to be the exact same icon names used in here:
1501        // https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/icons/svg/index.ts
1502        // To avoid having the icons trimmed or displayed in an unexpected way, please provide svg
1503        // files containing svg xml icons in the size that the default icons come in.
1504        customIcons: {
1505            IconArrowUp: 'https://example.com/arrow-up.svg',
1506            IconDownload: 'https://example.com/download.svg',
1507            IconRemoteControlStart: 'https://example.com/remote-start.svg',
1508        },
1509        // Object containing a theme's properties. It also supports partial overwrites of the main theme.
1510        // For a list of all possible theme tokens and their current defaults, please check:
1511        // https://github.com/jitsi/jitsi-meet/tree/master/resources/custom-theme/custom-theme.json
1512        // For a short explanations on each of the tokens, please check:
1513        // https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/ui/Tokens.ts
1514        // IMPORTANT!: This is work in progress so many of the various tokens are not yet applied in code
1515        // or they are partially applied.
1516        customTheme: {
1517            palette: {
1518                ui01: "orange !important",
1519                ui02: "maroon",
1520                surface02: 'darkgreen',
1521                ui03: "violet",
1522                ui04: "magenta",
1523                ui05: "blueviolet",
1524                action01: 'green',
1525                action01Hover: 'lightgreen',
1526                disabled01: 'beige',
1527                success02: 'cadetblue',
1528                action02Hover: 'aliceblue',
1529            },
1530            typography: {
1531                labelRegular: {
1532                    fontSize: 25,
1533                    lineHeight: 30,
1534                    fontWeight: 500,
1535                }
1536            }
1537        }
1538    }
1539    */
1540    // dynamicBrandingUrl: '',
1541
1542    // Options related to the participants pane.
1543    // participantsPane: {
1544    //     // Hides the moderator settings tab.
1545    //     hideModeratorSettingsTab: false,
1546    //     // Hides the more actions button.
1547    //     hideMoreActionsButton: false,
1548    //     // Hides the mute all button.
1549    //     hideMuteAllButton: false,
1550    // },
1551
1552    // Options related to the breakout rooms feature.
1553    // breakoutRooms: {
1554    //     // Hides the add breakout room button. This replaces `hideAddRoomButton`.
1555    //     hideAddRoomButton: false,
1556    //     // Hides the auto assign participants button.
1557    //     hideAutoAssignButton: false,
1558    //     // Hides the join breakout room button.
1559    //     hideJoinRoomButton: false,
1560    // },
1561
1562    // When true, virtual background feature will be disabled.
1563    // disableVirtualBackground: false,
1564
1565    // When true the user cannot add more images to be used as virtual background.
1566    // Only the default ones from will be available.
1567    // disableAddingBackgroundImages: false,
1568
1569    // Disables using screensharing as virtual background.
1570    // disableScreensharingVirtualBackground: false,
1571
1572    // Sets the background transparency level. '0' is fully transparent, '1' is opaque.
1573    // backgroundAlpha: 1,
1574
1575    // The URL of the moderated rooms microservice, if available. If it
1576    // is present, a link to the service will be rendered on the welcome page,
1577    // otherwise the app doesn't render it.
1578    // moderatedRoomServiceUrl: 'https://moderated.meet.epicenter.works',
1579
1580    // If true, tile view will not be enabled automatically when the participants count threshold is reached.
1581    // disableTileView: true,
1582
1583    // If true, the tiles will be displayed contained within the available space rather than enlarged to cover it,
1584    // with a 16:9 aspect ratio (old behaviour).
1585    // disableTileEnlargement: true,
1586
1587    // Controls the visibility and behavior of the top header conference info labels.
1588    // If a label's id is not in any of the 2 arrays, it will not be visible at all on the header.
1589    // conferenceInfo: {
1590    //     // those labels will not be hidden in tandem with the toolbox.
1591    //     alwaysVisible: ['recording', 'raised-hands-count'],
1592    //     // those labels will be auto-hidden in tandem with the toolbox buttons.
1593    //     autoHide: [
1594    //         'subject',
1595    //         'conference-timer',
1596    //         'participants-count',
1597    //         'e2ee',
1598    //         'transcribing',
1599    //         'video-quality',
1600    //         'insecure-room',
1601    //         'highlight-moment',
1602    //         'top-panel-toggle',
1603    //     ]
1604    // },
1605
1606    // Hides the conference subject
1607    // hideConferenceSubject: false,
1608
1609    // Hides the conference timer.
1610    // hideConferenceTimer: false,
1611
1612    // Hides the recording label
1613    // hideRecordingLabel: false,
1614
1615    // Hides the participants stats
1616    hideParticipantsStats: true,
1617
1618    // Sets the conference subject
1619    // subject: 'Conference Subject',
1620
1621    // Sets the conference local subject
1622    // localSubject: 'Conference Local Subject',
1623
1624    // This property is related to the use case when jitsi-meet is used via the IFrame API. When the property is true
1625    // jitsi-meet will use the local storage of the host page instead of its own. This option is useful if the browser
1626    // is not persisting the local storage inside the iframe.
1627    // useHostPageLocalStorage: true,
1628
1629    // Etherpad ("shared document") integration.
1630    //
1631    // If set, add a "Open shared document" link to the bottom right menu that
1632    // will open an etherpad document.
1633    // etherpad_base: 'https://your-etherpad-installati.on/p/',
1634
1635    // To enable information about dial-in access to meetings you need to provide
1636    // dialInNumbersUrl and dialInConfCodeUrl.
1637    // dialInNumbersUrl returns a json array of numbers that can be used for dial-in.
1638    // {"countryCode":"US","tollFree":false,"formattedNumber":"+1 123-456-7890"}
1639    // dialInConfCodeUrl is the conference mapper converting a meeting id to a PIN used for dial-in
1640    // or the other way around (more info in resources/cloud-api.swagger)
1641
1642    // List of undocumented settings used in jitsi-meet
1643    /**
1644     _immediateReloadThreshold
1645     debug
1646     debugAudioLevels
1647     deploymentInfo
1648     dialOutAuthUrl
1649     dialOutCodesUrl
1650     dialOutRegionUrl
1651     disableRemoteControl
1652     displayJids
1653     firefox_fake_device
1654     googleApiApplicationClientID
1655     iAmRecorder
1656     iAmSipGateway
1657     microsoftApiApplicationClientID
1658     peopleSearchQueryTypes
1659     peopleSearchUrl
1660     requireDisplayName
1661     tokenAuthUrl
1662     tokenAuthUrlAutoRedirect
1663     tokenLogoutUrl
1664     */
1665
1666    /**
1667     * This property can be used to alter the generated meeting invite links (in combination with a branding domain
1668     * which is retrieved internally by jitsi meet) (e.g. https://meet.jit.si/someMeeting
1669     * can become https://brandedDomain/roomAlias)
1670     */
1671    // brandingRoomAlias: null,
1672
1673    // List of undocumented settings used in lib-jitsi-meet
1674    /**
1675     _peerConnStatusOutOfLastNTimeout
1676     _peerConnStatusRtcMuteTimeout
1677     avgRtpStatsN
1678     callStatsConfIDNamespace
1679     callStatsCustomScriptUrl
1680     desktopSharingSources
1681     disableAEC
1682     disableAGC
1683     disableAP
1684     disableHPF
1685     disableLocalStats
1686     disableNS
1687     enableTalkWhileMuted
1688     forceJVB121Ratio
1689     forceTurnRelay
1690     hiddenDomain
1691     hiddenFromRecorderFeatureEnabled
1692     ignoreStartMuted
1693     websocketKeepAlive
1694     websocketKeepAliveUrl
1695     */
1696
1697    /**
1698     * Default interval (milliseconds) for triggering mouseMoved iframe API event
1699     */
1700    mouseMoveCallbackInterval: 1000,
1701
1702    /**
1703        Use this array to configure which notifications will be shown to the user
1704        The items correspond to the title or description key of that notification
1705        Some of these notifications also depend on some other internal logic to be displayed or not,
1706        so adding them here will not ensure they will always be displayed
1707
1708        A falsy value for this prop will result in having all notifications enabled (e.g null, undefined, false)
1709    */
1710    // notifications: [
1711    //     'connection.CONNFAIL', // shown when the connection fails,
1712    //     'dialog.cameraNotSendingData', // shown when there's no feed from user's camera
1713    //     'dialog.kickTitle', // shown when user has been kicked
1714    //     'dialog.liveStreaming', // livestreaming notifications (pending, on, off, limits)
1715    //     'dialog.lockTitle', // shown when setting conference password fails
1716    //     'dialog.maxUsersLimitReached', // shown when maximmum users limit has been reached
1717    //     'dialog.micNotSendingData', // shown when user's mic is not sending any audio
1718    //     'dialog.passwordNotSupportedTitle', // shown when setting conference password fails due to password format
1719    //     'dialog.recording', // recording notifications (pending, on, off, limits)
1720    //     'dialog.remoteControlTitle', // remote control notifications (allowed, denied, start, stop, error)
1721    //     'dialog.reservationError',
1722    //     'dialog.serviceUnavailable', // shown when server is not reachable
1723    //     'dialog.sessTerminated', // shown when there is a failed conference session
1724    //     'dialog.sessionRestarted', // show when a client reload is initiated because of bridge migration
1725    //     'dialog.tokenAuthFailed', // show when an invalid jwt is used
1726    //     'dialog.tokenAuthFailedWithReasons', // show when an invalid jwt is used with the reason behind the error
1727    //     'dialog.transcribing', // transcribing notifications (pending, off)
1728    //     'dialOut.statusMessage', // shown when dial out status is updated.
1729    //     'liveStreaming.busy', // shown when livestreaming service is busy
1730    //     'liveStreaming.failedToStart', // shown when livestreaming fails to start
1731    //     'liveStreaming.unavailableTitle', // shown when livestreaming service is not reachable
1732    //     'lobby.joinRejectedMessage', // shown when while in a lobby, user's request to join is rejected
1733    //     'lobby.notificationTitle', // shown when lobby is toggled and when join requests are allowed / denied
1734    //     'notify.chatMessages', // shown when receiving chat messages while the chat window is closed
1735    //     'notify.disconnected', // shown when a participant has left
1736    //     'notify.connectedOneMember', // show when a participant joined
1737    //     'notify.connectedTwoMembers', // show when two participants joined simultaneously
1738    //     'notify.connectedThreePlusMembers', // show when more than 2 participants joined simultaneously
1739    //     'notify.leftOneMember', // show when a participant left
1740    //     'notify.leftTwoMembers', // show when two participants left simultaneously
1741    //     'notify.leftThreePlusMembers', // show when more than 2 participants left simultaneously
1742    //     'notify.grantedTo', // shown when moderator rights were granted to a participant
1743    //     'notify.hostAskedUnmute', // shown to participant when host asks them to unmute
1744    //     'notify.invitedOneMember', // shown when 1 participant has been invited
1745    //     'notify.invitedThreePlusMembers', // shown when 3+ participants have been invited
1746    //     'notify.invitedTwoMembers', // shown when 2 participants have been invited
1747    //     'notify.kickParticipant', // shown when a participant is kicked
1748    //     'notify.linkToSalesforce', // shown when joining a meeting with salesforce integration
1749    //     'notify.moderationStartedTitle', // shown when AV moderation is activated
1750    //     'notify.moderationStoppedTitle', // shown when AV moderation is deactivated
1751    //     'notify.moderationInEffectTitle', // shown when user attempts to unmute audio during AV moderation
1752    //     'notify.moderationInEffectVideoTitle', // shown when user attempts to enable video during AV moderation
1753    //     'notify.moderationInEffectCSTitle', // shown when user attempts to share content during AV moderation
1754    //     'notify.mutedRemotelyTitle', // shown when user is muted by a remote party
1755    //     'notify.mutedTitle', // shown when user has been muted upon joining,
1756    //     'notify.newDeviceAudioTitle', // prompts the user to use a newly detected audio device
1757    //     'notify.newDeviceCameraTitle', // prompts the user to use a newly detected camera
1758    //     'notify.participantWantsToJoin', // shown when lobby is enabled and participant requests to join meeting
1759    //     'notify.passwordRemovedRemotely', // shown when a password has been removed remotely
1760    //     'notify.passwordSetRemotely', // shown when a password has been set remotely
1761    //     'notify.raisedHand', // shown when a partcipant used raise hand,
1762    //     'notify.startSilentTitle', // shown when user joined with 
1762no audio
1763    //     'notify.unmute', // shown to moderator when user raises hand during AV moderation
1764    //     'notify.videoMutedRemotelyTitle', // shown when user's video is muted by a remote party,
1765    //     'prejoin.errorDialOut',
1766    //     'prejoin.errorDialOutDisconnected',
1767    //     'prejoin.errorDialOutFailed',
1768    //     'prejoin.errorDialOutStatus',
1769    //     'prejoin.errorStatusCode',
1770    //     'prejoin.errorValidation',
1771    //     'recording.busy', // shown when recording service is busy
1772    //     'recording.failedToStart', // shown when recording fails to start
1773    //     'recording.unavailableTitle', // shown when recording service is not reachable
1774    //     'toolbar.noAudioSignalTitle', // shown when a broken mic is detected
1775    //     'toolbar.noisyAudioInputTitle', // shown when noise is detected for the current microphone
1776    //     'toolbar.talkWhileMutedPopup', // shown when user tries to speak while muted
1777    //     'transcribing.failedToStart', // shown when transcribing fails to start
1778    // ],
1779
1780    // List of notifications to be disabled. Works in tandem with the above setting.
1781    // disabledNotifications: [],
1782
1783    // Prevent the filmstrip from autohiding when screen width is under a certain threshold
1784    // disableFilmstripAutohiding: false,
1785
1786    // filmstrip: {
1787    //     // Disable the vertical/horizonal filmstrip.
1788    //     disabled: false,
1789    //     // Disables user resizable filmstrip. Also, allows configuration of the filmstrip
1790    //     // (width, tiles aspect ratios) through the interfaceConfig options.
1791    //     disableResizable: false,
1792
1793    //     // Disables the stage filmstrip
1794    //     // (displaying multiple participants on stage besides the vertical filmstrip)
1795    //     disableStageFilmstrip: false,
1796
1797    //     // Default number of participants that can be displayed on stage.
1798    //     // The user can change this in settings. Number must be between 1 and 6.
1799    //     stageFilmstripParticipants: 1,
1800
1801    //     // Disables the top panel (only shown when a user is sharing their screen).
1802    //     disableTopPanel: false,
1803
1804    //     // The minimum number of participants that must be in the call for
1805    //     // the top panel layout to be used.
1806    //     minParticipantCountForTopPanel: 50,
1807    // },
1808
1809    // Tile view related config options.
1810    // tileView: {
1811    //     // Whether tileview should be disabled.
1812    //     disabled: false,
1813    //     // The optimal number of tiles that are going to be shown in tile view. Depending on the screen size it may
1814    //     // not be possible to show the exact number of participants specified here.
1815    //     numberOfVisibleTiles: 25,
1816    // },
1817
1818    // Specifies whether the chat emoticons are disabled or not
1819    // disableChatSmileys: false,
1820
1821    // Settings for the GIPHY integration.
1822    // giphy: {
1823    //     // Whether the feature is enabled or not.
1824    //     enabled: false,
1825    //     // SDK API Key from Giphy.
1826    //     sdkKey: '',
1827    //     // Display mode can be one of:
1828    //     // - tile: show the GIF on the tile of the participant that sent it.
1829    //     // - chat: show the GIF as a message in chat
1830    //     // - all: all of the above. This is the default option
1831    //     displayMode: 'all',
1832    //     // How long the GIF should be displayed on the tile (in milliseconds).
1833    //     tileTime: 5000,
1834    //     // Limit results by rating: g, pg, pg-13, r. Default value: g.
1835    //     rating: 'pg',
1836    //     // The proxy server url for giphy requests in the web app.
1837    //     proxyUrl: 'https://giphy-proxy.example.com',
1838    // },
1839
1840    // Logging
1841    // logging: {
1842    //      // Default log level for the app and lib-jitsi-meet.
1843    //      defaultLogLevel: 'trace',
1844    //      // Option to disable LogCollector (which stores the logs on CallStats).
1845    //      //disableLogCollector: true,
1846    //      // Individual loggers are customizable.
1847    //      loggers: {
1848    //      // The following are too verbose in their logging with the default level.
1849    //      'modules/RTC/TraceablePeerConnection.js': 'info',
1850    //      'modules/statistics/CallStats.js': 'info',
1851    //      'modules/xmpp/strophe.util.js': 'log',
1852    // },
1853
1854    // Application logo url
1855    // defaultLogoUrl: 'images/watermark.svg',
1856
1857    // Settings for the Excalidraw whiteboard integration.
1858    // whiteboard: {
1859    //     // Whether the feature is enabled or not.
1860    //     enabled: true,
1861    //     // The server used to support whiteboard collaboration.
1862    //     // https://github.com/jitsi/excalidraw-backend
1863    //     collabServerBaseUrl: 'https://excalidraw-backend.example.com',
1864    // },
1865
1866    // The watchRTC initialize config params as described :
1867    // https://testrtc.com/docs/installing-the-watchrtc-javascript-sdk/#h-set-up-the-sdk
1868    // https://www.npmjs.com/package/@testrtc/watchrtc-sdk
1869    // watchRTCConfigParams: {
1870    //         /** Watchrtc api key */
1871    //         rtcApiKey: string;
1872    //         /** Identifier for the session */
1873    //         rtcRoomId?: string;
1874    //         /** Identifier for the current peer */
1875    //         rtcPeerId?: string;
1876    //         /**
1877    //          * ["tag1", "tag2", "tag3"]
1878    //          * @deprecated use 'keys' instead
1879    //          */
1880    //         rtcTags?: string[];
1881    //         /** { "key1": "value1", "key2": "value2"} */
1882    //         keys?: any;
1883    //         /** Enables additional logging */
1884    //         debug?: boolean;
1885    //         rtcToken?: string;
1886    //         /**
1887    //          * @deprecated No longer needed. Use "proxyUrl" instead.
1888    //          */
1889    //         wsUrl?: string;
1890    //         proxyUrl?: string;
1891    //         console?: {
1892    //             level: string;
1893    //             override: boolean;
1894    //         };
1895    //         allowBrowserLogCollection?: boolean;
1896    //         collectionInterval?: number;
1897    //         logGetStats?: boolean;
1898    // },
1899};
1900
1901// Temporary backwards compatibility with old mobile clients.
1902config.flags = config.flags || {};
1903config.flags.sourceNameSignaling = true;
1904config.flags.sendMultipleVideoStreams = true;
1905config.flags.receiveMultipleVideoStreams = true;
1906
1907// Set the default values for JaaS customers
1908if (enableJaaS) {
1909    config.dialInNumbersUrl = 'https://conference-mapper.jitsi.net/v1/access/dids';
1910    config.dialInConfCodeUrl = 'https://conference-mapper.jitsi.net/v1/access';
1911    config.roomPasswordNumberOfDigits = 10; // skip re-adding it (do not remove comment)
1912}
1913</script>
1913<!-- adapt to your needs, i.e. set hosts and bosh path -->
1914    
1914<script>/* eslint-disable no-unused-vars, no-var, max-len */
1915/* eslint sort-keys: ["error", "asc", {"caseSensitive": false}] */
1916
1917/**
1918 * !!!IMPORTANT!!!
1919 *
1920 * This file is considered deprecated. All options will eventually be moved to
1921 * config.js, and no new options should be added here.
1922 */
1923
1924var interfaceConfig = {
1925    APP_NAME: 'Jitsi Meet',
1926    AUDIO_LEVEL_PRIMARY_COLOR: 'rgba(255,255,255,0.4)',
1927    AUDIO_LEVEL_SECONDARY_COLOR: 'rgba(255,255,255,0.2)',
1928
1929    /**
1930     * A UX mode where the last screen share participant is automatically
1931     * pinned. Valid values are the string "remote-only" so remote participants
1932     * get pinned but not local, otherwise any truthy value for all participants,
1933     * and any falsy value to disable the feature.
1934     *
1935     * Note: this mode is experimental and subject to breakage.
1936     */
1937    AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only',
1938    BRAND_WATERMARK_LINK: '',
1939
1940    CLOSE_PAGE_GUEST_HINT: false, // A html text to be shown to guests on the close page, false disables it
1941
1942    DEFAULT_BACKGROUND: '#040404',
1943    DEFAULT_WELCOME_PAGE_LOGO_URL: 'images/watermark.svg',
1944
1945    DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
1946
1947    /**
1948     * If true, notifications regarding joining/leaving are no longer displayed.
1949     */
1950    DISABLE_JOIN_LEAVE_NOTIFICATIONS: false,
1951
1952    /**
1953     * If true, presence status: busy, calling, connected etc. is not displayed.
1954     */
1955    DISABLE_PRESENCE_STATUS: false,
1956
1957    /**
1958     * Whether the speech to text transcription subtitles panel is disabled.
1959     * If {@code undefined}, defaults to {@code false}.
1960     *
1961     * @type {boolean}
1962     */
1963    DISABLE_TRANSCRIPTION_SUBTITLES: false,
1964
1965    /**
1966     * Whether or not the blurred video background for large video should be
1967     * displayed on browsers that can support it.
1968     */
1969    DISABLE_VIDEO_BACKGROUND: false,
1970
1971    DISPLAY_WELCOME_FOOTER: true,
1972    DISPLAY_WELCOME_PAGE_ADDITIONAL_CARD: false,
1973    DISPLAY_WELCOME_PAGE_CONTENT: false,
1974    DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: false,
1975
1976    ENABLE_DIAL_OUT: true,
1977
1978    FILM_STRIP_MAX_HEIGHT: 120,
1979
1980    GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
1981
1982    /**
1983     * Hide the invite prompt in the header when alone in the meeting.
1984     */
1985    HIDE_INVITE_MORE_HEADER: false,
1986
1987    JITSI_WATERMARK_LINK: 'https://jitsi.org',
1988
1989    LANG_DETECTION: true, // Allow i18n to detect the system language
1990    LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
1991
1992    /**
1993     * Maximum coefficient of the ratio of the large video to the visible area
1994     * after the large video is scaled to fit the window.
1995     *
1996     * @type {number}
1997     */
1998    MAXIMUM_ZOOMING_COEFFICIENT: 1.3,
1999
2000    /**
2001     * Whether the mobile app Jitsi Meet is to be promoted to participants
2002     * attempting to join a conference in a mobile Web browser. If
2003     * {@code undefined}, defaults to {@code true}.
2004     *
2005     * @type {boolean}
2006     */
2007    MOBILE_APP_PROMO: true,
2008
2009    // Names of browsers which should show a warning stating the current browser
2010    // has a suboptimal experience. Browsers which are not listed as optimal or
2011    // unsupported are considered suboptimal. Valid values are:
2012    // chrome, chromium, electron, firefox , safari, webkit
2013    OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'electron', 'safari', 'webkit' ],
2014
2015    POLICY_LOGO: null,
2016    PROVIDER_NAME: 'Jitsi',
2017
2018    /**
2019     * If true, will display recent list
2020     *
2021     * @type {boolean}
2022     */
2023    RECENT_LIST_ENABLED: true,
2024    REMOTE_THUMBNAIL_RATIO: 1, // 1:1
2025
2026    SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar', 'shortcuts', 'sounds', 'more' ],
2027
2028    /**
2029     * Specify which sharing features should be displayed. If the value is not set
2030     * all sharing features will be shown. You can set [] to disable all.
2031     */
2032    // SHARING_FEATURES: ['email', 'url', 'dial-in', 'embed'],
2033
2034    SHOW_BRAND_WATERMARK: false,
2035
2036    /**
2037     * Decides whether the chrome extension banner should be rendered on the landing page and during the meeting.
2038     * If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s)
2039     * being already installed is done before rendering.
2040     */
2041    SHOW_CHROME_EXTENSION_BANNER: false,
2042
2043    SHOW_JITSI_WATERMARK: true,
2044    SHOW_POWERED_BY: false,
2045    SHOW_PROMOTIONAL_CLOSE_PAGE: false,
2046
2047    /*
2048     * If indicated some of the error dialogs may point to the support URL for
2049     * help.
2050     */
2051    SUPPORT_URL: 'https://community.jitsi.org/',
2052
2053    // Browsers, in addition to those which do not fully support WebRTC, that
2054    // are not supported and should show the unsupported browser page.
2055    UNSUPPORTED_BROWSERS: [],
2056
2057    /**
2058     * Whether to show thumbnails in filmstrip as a column instead of as a row.
2059     */
2060    VERTICAL_FILMSTRIP: true,
2061
2062    // Determines how the video would fit the screen. 'both' would fit the whole
2063    // screen, 'height' would fit the original video height to the height of the
2064    // screen, 'width' would fit the original video width to the width of the
2065    // screen respecting ratio, 'nocrop' would make the video as large as
2066    // possible and preserve aspect ratio without cropping.
2067    VIDEO_LAYOUT_FIT: 'both',
2068
2069    /**
2070     * If true, hides the video quality label indicating the resolution status
2071     * of the current large video.
2072     *
2073     * @type {boolean}
2074     */
2075    VIDEO_QUALITY_LABEL_DISABLED: false,
2076
2077    /**
2078     * How many columns the tile view can expand to. The respected range is
2079     * between 1 and 5.
2080     */
2081    // TILE_VIEW_MAX_COLUMNS: 5,
2082
2083    // List of undocumented settings
2084    /**
2085     INDICATOR_FONT_SIZES
2086     PHONE_NUMBER_REGEX
2087    */
2088
2089    // -----------------DEPRECATED CONFIGS BELOW THIS LINE-----------------------------
2090
2091    /**
2092     * Specify URL for downloading ios mobile app.
2093     */
2094    // MOBILE_DOWNLOAD_LINK_IOS: 'https://itunes.apple.com/us/app/jitsi-meet/id1165103905',
2095
2096    /**
2097     * Specify custom URL for downloading android mobile app.
2098     */
2099    // MOBILE_DOWNLOAD_LINK_ANDROID: 'https://play.google.com/store/apps/details?id=org.jitsi.meet',
2100
2101    /**
2102     * Specify mobile app scheme for opening the app from the mobile browser.
2103     */
2104    // APP_SCHEME: 'org.jitsi.meet',
2105
2106    // NATIVE_APP_NAME: 'Jitsi Meet',
2107
2108    /**
2109     * Hide the logo on the deep linking pages.
2110     */
2111    // HIDE_DEEP_LINKING_LOGO: false,
2112
2113    /**
2114     * Specify the Android app package name.
2115     */
2116    // ANDROID_APP_PACKAGE: 'org.jitsi.meet',
2117
2118    /**
2119     * Specify custom URL for downloading f droid app.
2120     */
2121    // MOBILE_DOWNLOAD_LINK_F_DROID: 'https://f-droid.org/packages/org.jitsi.meet/',
2122
2123    // Connection indicators (
2124    // CONNECTION_INDICATOR_AUTO_HIDE_ENABLED,
2125    // CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT,
2126    // CONNECTION_INDICATOR_DISABLED) got moved to config.js.
2127
2128    // Please use disableModeratorIndicator from config.js
2129    // DISABLE_FOCUS_INDICATOR: false,
2130
2131    // Please use defaultLocalDisplayName from config.js
2132    // DEFAULT_LOCAL_DISPLAY_NAME: 'me',
2133
2134    // Please use defaultLogoUrl from config.js
2135    // DEFAULT_LOGO_URL: 'images/watermark.svg',
2136
2137    // Please use defaultRemoteDisplayName from config.js
2138    // DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
2139
2140    // Moved to config.js as `toolbarConfig.initialTimeout`.
2141    // INITIAL_TOOLBAR_TIMEOUT: 20000,
2142
2143    // Please use `liveStreaming.helpLink` from config.js
2144    // Documentation reference for the live streaming feature.
2145    // LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live',
2146
2147    // Moved to config.js as `toolbarConfig.alwaysVisible`.
2148    // TOOLBAR_ALWAYS_VISIBLE: false,
2149
2150    // This config was moved to config.js as `toolbarButtons`.
2151    // TOOLBAR_BUTTONS: [],
2152
2153    // Moved to config.js as `toolbarConfig.timeout`.
2154    // TOOLBAR_TIMEOUT: 4000,
2155
2156    // Allow all above example options to include a trailing comma and
2157    // prevent fear when commenting out the last value.
2158    // eslint-disable-next-line sort-keys
2159    makeJsonParserHappy: 'even if last key had a trailing comma'
2160
2161    // No configuration value should follow this line.
2162};
2163
2164/* eslint-enable no-unused-vars, no-var, max-len */
2165</script>
2165
2166    
2166<script src="libs/lib-jitsi-meet.min.js?v=9365"></script>
2166
2167    
2167<script src="libs/app.bundle.min.js?v=9365"></script>
2167
2168    <title>Jitsi Meet</title>
2169<meta property="og:title" content="Jitsi Meet"/>
2170<meta property="og:image" content="images/jitsilogo.png?v=1"/>
2171<meta property="og:description" content="Join a WebRTC video conference powered by the Jitsi Videobridge"/>
2172<meta description="Join a WebRTC video conference powered by the Jitsi Videobridge"/>
2173<meta itemprop="name" content="Jitsi Meet"/>
2174<meta itemprop="description" content="Join a WebRTC video conference powered by the Jitsi Videobridge"/>
2175<meta itemprop="image" content="images/jitsilogo.png?v=1"/>
2176<link rel="icon" href="images/favicon.svg?v=1">
2177    
2178    <template id = "welcome-page-additional-content-template"></template>
2179
2180    <template id = "welcome-page-additional-card-template"></template>
2181
2182    <template id="settings-toolbar-additional-content-template"></template>
2183
2184  </head>
2185  <body>
2186    <noscript aria-hidden="true">
2187        <div>JavaScript is disabled. </br>For this site to work you have to enable JavaScript.</div>
2188    </noscript>
2189    
2190    <div id="react" role="main"></div>
2191  </body>
2192</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.