From 9fa3794d0eb5c9c2314c27b821e51146923fe1ba Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 08:15:52 -0700 Subject: [PATCH 01/38] calls-deploy-rewritev6 --- .../configure/calls-deployment.md | 1192 +++++++++++++---- 1 file changed, 962 insertions(+), 230 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 154e6afa6f3..39aaf7f64bb 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -3,332 +3,1064 @@ ```{include} ../../_static/badges/all-commercial.md ``` -This document provides an overview of Mattermost Calls deployment options for self-hosted environments, including [air-gapped environments](https://docs.mattermost.com/configure/calls-deployment.html#air-gapped-deployments), ensuring private communication without reliance on public internet connectivity with flexible configuration options for complex network requirements. +This guide is designed to walk System Administrators step-by-step through the process of deploying Mattermost Calls, from initial preparation and confirming network readiness, to validating core calling functions with test users, and scaling up to full production deployment. You’ll find detailed instructions, decision points, verification gates, and troubleshooting tips to help ensure a reliable Calls deployment, whether you’re enabling basic audio and screen sharing or advanced features like recording and transcription. +No prior experience with Mattermost Calls is required — this guide assumes you’re starting fresh and will introduce essential concepts and best practices. -## Quick Links -For detailed information on specific topics, please refer to these specialized guides: +## Calls Overview -- {doc}`RTCD Setup and Configuration `: Comprehensive guide for setting up the dedicated RTCD service -- {doc}`Calls Offloader Setup and Configuration `: Comprehensive guide for setting up the calls-offloader service for recording and transcription -- {doc}`Calls Troubleshooting `: Detailed troubleshooting steps and debugging techniques -- {doc}`Calls Metrics and Monitoring `: Guide to monitoring Calls performance using metrics and observability -- {doc}`Calls Deployment on Kubernetes `: Detailed guide for deploying Calls in Kubernetes environments +Mattermost Calls offers self-hosted audio calling and screen sharing, enabling sovereign real-time collaboration fully contained within your infrastructure. This means no audio, video, or metadata traverses third-party systems. -## About Mattermost Calls +Calls is uniquely suited for mission-critical operations across defense, intelligence, security and critical infrastructure — where data sovereignty, control, and compliance are non-negotiable. It is designed to function in isolated networks without internet access, supporting deployments that demand full airgap compliance. -Mattermost Calls provides integrated audio calling and screen sharing capabilities within Mattermost channels. It's built on WebRTC technology and can be deployed either: +Functionality includes: +- **1:1 and Group Calling**: Initiate real-time voice communication between two or more participants. +- **Screen Sharing**: Share your screen during calls to collaborate visually on tasks, review documents, or troubleshoot live issues. +- **Call Recording and Transcription**: Record voice sessions for review, compliance, or distribution. *(Enterprise, Enterprise Advanced)* +- **Live Captioning**: Provide real-time subtitles for inclusivity, accessibility, and support in noisy or multilingual environments. *(Enterprise, Enterprise Advanced)* -1. **Integrated mode**: Built into the Calls plugin (simpler, suitable for smaller deployments) -2. **RTCD mode**: Using a dedicated service for improved performance and scalability (recommended for production environments) +## Deployment Overview -## Terminology +This guide is organized into sequential deployment phases with heirarchical numbered steps. Each phase begins with prerequisits and ends with verification checks. Before you begin any phase, make sure all the listed prerequisites are fully met, then only proceed to the next phase when you have successfully completed the verification checks for the current phase. This step-by-step approach helps you catch and resolve issues early, ensuring a smooth and reliable Calls deployment. -- [WebRTC](https://bloggeek.me/webrtcglossary/webrtc-2/): The set of protocols on which calls are built -- **RTC**: Real-Time Connection channel used for media (audio/video/screen) -- **WS**: WebSocket connection used for signaling and connection setup -- **SFU**: Selective Forwarding Unit, routes media between participants -- [NAT](https://bloggeek.me/webrtcglossary/nat/): Network Address Translation for mapping IP addresses -- [STUN](https://bloggeek.me/webrtcglossary/stun/): Protocol used by WebRTC clients to help traverse NATs -- [TURN](https://bloggeek.me/webrtcglossary/turn/): Protocol to relay media for clients behind strict firewalls +**Deployment Phases:** -## Key Components +1. [**Preparation and Networking**](#phase-1-preparation-and-networking) + Plan your deployment architecture, gather prerequisites, provision any required servers, and confirm the required network ports and paths are open before deployment. -- **Calls plugin**: The main plugin that enables calls functionality. Installed by default in Mattermost self-hosted deployments. -- **RTCD service**: Optional dedicated service for offloading media processing (Enterprise feature). Typically deployed to dedicated servers or containers. See [RTCD Setup and Configuration](calls-rtcd-setup.md) for details. -- **calls-offloader**: Service for call recording and transcription (if enabled). Typically deployed to dedicated servers. See [Calls Offloader Setup and Configuration](calls-offloader-setup.md) for setup and troubleshooting details. +2. [**Configure Integrated Calls**](#phase-2-integrated-calls-plugin-configuration) + Regardless of the deployment architecture you choose, you'll start with simplest calls deployment (integrated mode) to verify connectivity and core audio and screen sharing functionality. -## Network Requirements +3. [**Install and Configure RTCD**](#phase-3-add-rtcd) (Optional) + RTCD (real-time communication daemon) is a service built to offload media processing tasks from the Mattermost server. This optional phase is where you'll deploy the RTCD service and verify that the Mattermost server and clients can reach it correctly. -- Run Mattermost server on a secure (HTTPs) connection. This is a necessary requirement on the client to allow capturing devices (e.g., microphone, screen). See the [config TLS](https://docs.mattermost.com/deploy/server/setup-tls.html) section for more info. -- See [network requirements](#network) below. +4. [**Install and Configure Recording**](#phase-4-add-calls-offloader) (Optional) + Calls Offloader is a service required to deliver recording, transcription and live captions. This optional phase is where you'll deploy the `calls-offloader` service and confirm that recording, transcription, and live captions work as expected. -### Client +5. [**Pilot Rollout**](#phase-5-pilot-rollout) + Expand testing to a small group of pilot users to watch for client, network, and environment-specific issues under real usage. -- Clients need to be able to connect (send and receive data) to the instance hosting the calls through the UDP port configured as `RTC Server Port`. If this is not possible a TURN server should be used to achieve connectivity. -- Depending on the platform or operating system, clients may need to grant additional permissions to the application (e.g., browser, desktop app) to allow them to capture audio inputs or share the screen. +6. [**Production Rollout**](#phase-6-production-rollout) + Rollout to all users in controlled waves with appropriate communication and monitoring, and be ready to pause or roll back if needed. -### Network - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ServicePortsProtocolsSourceTargetPurpose
API (Calls plugin)80,443TCP (incoming)Mattermost clients (web/desktop/mobile)Mattermost instance (Calls plugin)To allow for HTTP and WebSocket connectivity from clients to Calls plugin. This API is exposed on the same connection as Mattermost, so there's likely no need to change anything.
RTC (Calls plugin or rtcd)8443UDP (incoming)Mattermost clients (Web/Desktop/Mobile) and jobs spawned by Calls Offloader (Recorder, Transcriber)Mattermost instance or rtcd serviceTo allow clients to establish connections that transport calls related media (e.g. audio, video). This should be open on any network component (e.g. NAT, firewalls) in between the instance running the plugin (or rtcd) and the clients joining calls so that UDP traffic is correctly routed both ways (from/to clients).
RTC (Calls plugin or rtcd)8443TCP (incoming)Mattermost clients (Web/Desktop/Mobile) and jobs spawned by Calls Offloader (Recorder, Transcriber)Mattermost instance or rtcd serviceTo allow clients to establish connections that transport calls related media (e.g. audio, video). This should be open on any network component (e.g. NAT, firewalls) in between the instance running the plugin (or rtcd) and the clients joining calls so that TCP traffic is correctly routed both ways (from/to clients). This can be used as a backup channel in case clients are unable to connect using UDP. It requires rtcd version >= v0.11 and Calls version >= v0.17.
API (rtcd)8045TCP (incoming)Mattermost instance(s) (Calls plugin)rtcd serviceTo allow for HTTP/WebSocket connectivity from Calls plugin to rtcd service. Can be expose internally as the service only needs to be reachable by the instance(s) running the Mattermost server.
STUN (Calls plugin or rtcd)3478UDP (outgoing)Mattermost Instance(s) (Calls plugin) or rtcd serviceConfigured STUN servers(Optional) To allow for either Calls plugin or rtcd service to discover their instance public IP. Only needed if configuring STUN/TURN servers. This requirement does not apply when manually setting an IP or hostname through the ICE Host Override config option.
- -For complete network requirements, see the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide. - -### RHEL deployments with firewalld and fapolicyd - -When deploying Mattermost Calls or the rtcd service on RHEL systems with firewalld or fapolicyd enabled, additional firewall and security configuration is required. - -**Required ports:** -- **Calls plugin (integrated)**: Port 8443 UDP/TCP for RTC media traffic -- **rtcd service (standalone)**: Ports 8443 UDP/TCP for RTC media traffic + Port 8045 TCP for API communication with Mattermost - -**Configuration steps:** - -For complete firewalld and fapolicyd configuration instructions, including troubleshooting steps and example rules, see the [RHEL deployment guide](https://docs.mattermost.com/deployment-guide/server/deploy-linux.html#itab--RHEL-CentOS--0_1-RHEL-CentOS). The guide includes: -- firewalld port configuration for Mattermost, Calls plugin, and rtcd service -- fapolicyd rules for Mattermost server and Calls plugin -- Separate fapolicyd configuration for standalone rtcd service -- Troubleshooting guidance for "operation not permitted" errors ```{note} -The Calls plugin runs as part of Mattermost and is covered by the standard Mattermost fapolicyd rules. Only the standalone rtcd service requires separate fapolicyd configuration. +If you need expert help deploying Calls, contact your Account Manager or [talk to a Mattermost expert](https://mattermost.com/contact-sales/) to learn about professional service offerings. ``` -## Limitations +### Contacting Support + +If you encounter issues and need to open a [support case](https://support.mattermost.com), please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and Calls logs (see [Calls Log Collection](calls-log-collection.md) for how to gather them.) + +--- -- All Mattermost customers can start, join, and participate in 1:1 audio calls with optional screen sharing. -- For group calls up to 50 concurrent users, Mattermost Enterprise, Professional, or Mattermost Cloud is required. -- Enterprise customers can also [record calls](https://docs.mattermost.com/collaborate/make-calls.html#record-a-call), enable [live text captions](https://docs.mattermost.com/collaborate/make-calls.html#live-captions-during-calls) during calls, and [transcribe recorded calls](https://docs.mattermost.com/collaborate/make-calls.html#transcribe-recorded-calls). We recommend that Enterprise self-hosted customers looking for group calls beyond 50 concurrent users consider using the [dedicated RTCD service](#when-to-use-rtcd). -- For Mattermost self-hosted deployments, System admins need to enable and configure the plugin [using the System Console](https://docs.mattermost.com/configure/plugins-configuration-settings.html#calls). The default maximum number of participants is unlimited; however, we recommend a maximum of 50 participants per call. Maximum call participants is configurable by going to **System Console > Plugin Management > Calls > Max call participants**. Call participant limits greatly depends on instance resources. For more details, refer to the [Performance Considerations](#performance-considerations) section below. +## Phase 1: Preparation and Networking -## Configuration +### 1.1 Prerequisites -For Mattermost self-hosted customers, the calls plugin is pre-packaged, installed, and enabled. Configuration to allow end-users to use it can be found in ``System Console > Plugins > Calls``. +Before you start, confirm the following: -## Modes of operation +- [x] You have a running Mattermost server on v10.0+ +- [x] Mattermost server is configured to use secure HTTPS. + _Browsers will block microphone and screen sharing on unsecure HTTP connections. To enable voice calls and screen sharing, you must run Mattermost over HTTPS. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ +- [x] You have System Admin access to your Mattermost server. +- [x] You can open inbound and outbound network ports on the servers involved in the deployment. If a network or security team manages your firewalls, you'll need to involve them before continuing. +- [x]You can provision additional servers if your chosen architecture requires RTCD or Calls Offloader services. -Depending on how the Mattermost server is running, there are several modes under which the Calls plugin can operate. Please refer to the section below on [the RTCD service](#when-to-use-rtcd) to learn about the `rtcd` and the Selective Forwarding Unit (SFU). +### 1.2 Deployment Infrastructure -| Mattermost deployment | SFU | SFU deployment | -|-----------------------|-----|----------------| -| Single instance | integrated | | -| Single instance | rtcd | | -| High availability cluster-based | integrated | clustered | -| High availability cluster-based | rtcd | | +To determine your deployment instrastructure, answer the following questions: -### Single instance +- **How many users will use Calls?** + - **Up to 50 users:** You can use the **Integrated** deployment mode. + - **More than 50 users:** You'll need to deploy an additional component called **RTCD** (Real-Time Communication Daemon) for handling media processing at scale. -#### Integrated +- **Do you require call recording, transcription, or live captions?** + - **Yes:** You'll need to deploy an additional component for the **Recording** service called Calls Offloader. + - **No:** You do not need the recording service. -This is the default mode when first installing the plugin on a single Mattermost instance setup. The WebRTC service is integrated in the plugin itself and runs alongside the Mattermost server. +Based on your answers, you can explore the associated deployment infrastructure you'll need in the tabs below: -![A diagram of the integrated configuration model of a single instance.](../../images/calls-deployment-image3.png) +````{tab} Integrated -#### rtcd +In Integrated mode, the Calls plugin runs its built-in media service directly on the Mattermost server. This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. -```{include} ../../_static/badges/ent-plus.md +```{mermaid} +flowchart TD + clients["Clients\nWeb, Desktop, Mobile"] + mm["Mattermost Server\nCalls plugin + integrated media service"] + + clients -->|TCP 443 signaling| mm + clients -->|UDP/TCP 8443 media| mm ``` -An external, dedicated and scalable WebRTC service (`rtcd`) is used to handle all calls media routing. +**When to use it** + +- You are evaluating Calls for the first time. +- You expect fewer than 50 people to use Calls. +- You want the simplest possible deployment. -![A diagram of a Web RTC deployment configuration.](../../images/calls-deployment-image7.png) +**Components** -### High availability cluster-based +- **Mattermost server**: Calls plugin is pre-installed. -```{include} ../../_static/badges/ent-plus.md +**License** + +- Mattermost Entry: 1:1 Calls + Screen Sharing +- Mattermost Professional, Enterprise, or Enterprise-Advanced: Group Calls + Screen Sharing up to 50 participants +```` + +````{tab} RTCD + +The RTCD can be added as a dedicated media service that processes all call audio and screen sharing media. The Mattermost server is still responsible for signaling (setting up, managing, and ending calls) and channel state (who is joining or leaving, who has muted, and overall call status), but the call media itself flows directly between clients and the RTCD server, completely bypassing the Mattermost server. + +Deploying RTCD is **highly recommended in production deployments** for performance, scalability, and stability of Mattermost Calls. + +```{mermaid} +flowchart TD + clients["Clients\nWeb, Desktop, Mobile"] + mm["Mattermost Server\nCalls plugin"] + rtcd["RTCD Server"] + + clients -->|TCP 443 signaling| mm + mm -->|TCP 8045 internal API| rtcd + clients -->|UDP 8443 media| rtcd + rtcd -->|UDP 8443 media| clients + clients -->|TCP 8443 media fallback| rtcd + rtcd -->|TCP 8443 media fallback| clients ``` -#### Clustered +**When to use it** + +Use RTCD if you need optimized performance, scalability, and the best possible user experience for Mattermost Calls. Specifically: + +- You want to keep call media traffic off your main Mattermost server to improve overall server performance and reduce CPU usage spikes. +- You need your deployment to easily scale as call volume increases; additional RTCD servers can be added for load balancing. +- You require ongoing calls to remain active even if the Mattermost server needs to be restarted (some features like reactions and muting may be temporarily unavailable during the restart). +- You want the lowest possible audio/video latency and highest reliability for Calls. +- You are deploying Mattermost on Kubernetes (RTCD is required for all Kubernetes deployments). + +**Components** + +- **Mattermost server**: Calls plugin is pre-installed. +- **RTCD Server**: Dedicated media service. Clients connect to it directly for media traffic. -This is the default mode when running the plugin in a high availability cluster-based deployment. Every Mattermost node will run an instance of the plugin that includes a WebRTC service. Calls are distributed across all available nodes through the existing load-balancer: a call is hosted on the instance where the initiating websocket connection (first client to join) is made. A single call will be hosted on a single cluster node. +**License** -![A diagram of a clustered calls deployment.](../../images/calls-deployment-image5.png) +- Mattermost Enterprise or Enterprise-Advanced: Required for RTCD. +```` -#### rtcd (High Availability) +````{tab} RTCD + Recording -![A diagram of an rtcd deployment.](../../images/calls-deployment-image2.png) +The `calls-offloader` service can be added to a Calls deployment to enable recording, transcription, and live captions. -### Kubernetes Deployments +```{mermaid} +flowchart TD + clients["Clients\nWeb, Desktop, Mobile"] + mm["Mattermost Server\nCalls plugin"] + rtcd["RTCD Server"] + offloader["calls-offloader Server"] + jobs["Recorder and transcriber jobs"] -```{include} ../../_static/badges/ent-plus.md + clients -->|TCP 443 signaling| mm + mm -->|TCP 8045 internal API| rtcd + mm -->|TCP 4545 internal API| offloader + clients -->|UDP or TCP 8443 media| rtcd + rtcd -->|UDP or TCP 8443 media| clients + offloader -->|launches| jobs + jobs -->|UDP or TCP 8443 media| rtcd + rtcd -->|UDP or TCP 8443 media| jobs ``` -RTCD is the only officially supported approach for Kubernetes deployments. For detailed information on deploying Mattermost Calls in Kubernetes environments, including Helm chart configurations, resource requirements, and scaling considerations, see the [Calls Deployment on Kubernetes](calls-kubernetes.md) guide. +**When to use it** -## When to Use RTCD +- You need call recording, transcription, or live captions. -This section will help you understand when and why your organization would want to use the dedicated RTCD service. +**Components** + +- **Mattermost server**: Calls plugin is pre-installed. +- **RTCD Server**: Dedicated media service. Clients connect to it directly for media traffic. +- **Calls Offloader**: Job service that manages recording and transcription. Spawns recorder and transcriber Docker containers that join calls as participants to capture media. ```{note} -RTCD is a standalone service, which adds operational complexity, maintenance costs, and requires an Enterprise license. For those who are evaluating Calls, and for many small instances of Mattermost, the integrated SFU (the one included in the Calls plugin) may be sufficient initially. +`calls-offloader` can also be added to an integrated Calls deployment without RTCD. This guide uses RTCD as the base because it is the recommended production path for most deployments. +``` + +**License** + +- Mattermost Enterprise or Enterprise Advanced: Required for `calls-offloader` service. + + +```` + +### 1.3 Networking Decisions + +Do this before you install anything new. + +#### 1.3.1 STUN for Public IP Discovery + +STUN is a protocol used to automatically discover the public IP address of your media server so clients can connect to Calls. + +```{note} +Your media server is the Mattermost server in the case of an **Integrated** Calls deployment, or it's the **RTCD server** in the case of an RTCD Calls deployment. +``` + +Mattermost provides a default STUN server (`stun.global.calls.mattermost.com`) for public IP discovery. No user information, call metadata, or media traffic is sent to or shared with this STUN service; its sole purpose is to help media servers discover their public IP address. Use this decision tree to determine if you need to allow outbound access from your media server to the Mattermost global STUN service: + +**STUN Decision Tree** + +1. **Are all users and your media server (Mattermost server or RTCD) in the same private network, VPN, or air-gapped environment (no outside clients)?** + - **Yes**: You do not need STUN. You will use the private address of your media server for configuration in Phase 2. + - **No**: Continue to the next question. + +2. **Does your media server (Mattermost server or RTCD) have a stable public IP address or DNS name that clients on the public internet can reach?** + - **Yes**: You do not need STUN. You will use the public address of your media server for configuration in Phase 2. + - **No**: You will need STUN. You must open outbound UDP 3478 from your media server to `stun.global.calls.mattermost.com`. + +If your deployment requires STUN, note this requirement as you work through the exrcise of opening all necessary ports in Step 1.5. + + +#### 1.3.2 TURN Server + +TURN is a protocol that relays media when users cannot reach the Calls media service directly. + +Provisioning a TURN server is only necessary if both of these conditions are true: + +- Clients connect from networks that cannot reliably use UDP on port `8443` for media traffic (preferred path). +- Clients connect from networks that cannot reliably use TCP on port `8443` (fallback). + +Only plan to deploy TURN if your answers indicate that you cannot rely on UDP or TCP for media, and users need an alternative route. TURN is typically a last resort as it adds additional networking and infrastructure complexity. + + +### 1.4 Infrastructure Provisioning + +This step answers a simple question: **What infrastructure do I need to create before I start installing software?** + +In this step, **provision** means creating the server or VM, assigning its IP address or DNS name, confirming you can administer it, and recording what that server will be used for. You are only preparing infrastructure here; software installation and service configuration happen in later phases. + +If you're unsure where to start, use these defaults: + +- **Integrated only**: No additional server. +- **RTCD**: Start with **1 RTCD server**. +- **Recording, transcription, or live captions**: Start with **1 `calls-offloader` server**. +- **TURN**: Start with **1 TURN server** only if Section 1.3.2 indicated that you need TURN. + +| Component | Provision it when | How many to start with | Starter sizing guidance | Extra prerequisites | +|---|---|---|---|---| +| Integrated media service | You are using **Integrated** Calls only | No additional server | Use your existing Mattermost server. Validate capacity during Phase 2 and the pilot in Phase 5. | None | +| RTCD | You selected **RTCD** because you expect more than 50 participants, want media off the Mattermost server, or are deploying on Kubernetes | 1 RTCD server | See **Appendix B.1** for benchmark examples. Start with one server, then scale out only if your pilot or expected workload requires it. | Plan the IP address or DNS name clients and Mattermost will use to reach RTCD | +| `calls-offloader` | You need **recording, transcription, or live captions** | 1 `calls-offloader` server | Start with **8 vCPU / 16 GB RAM**. Use **Appendix B.2** and **B.3** to estimate recording capacity, transcription load, and starting `max_concurrent_jobs`. | Docker is required on the offloader host | +| TURN | Section **1.3.2 TURN Server** indicated direct media is not reliable enough | 1 TURN server | Size TURN primarily for **relay bandwidth**, not CPU. See **Appendix B.4**. | Mattermost recommends [coturn](https://github.com/coturn/coturn) | + +Use these common combinations as a quick check: + +- **Integrated only**: No additional servers. +- **RTCD only**: 1 RTCD server. +- **Integrated + Recording**: 1 `calls-offloader` server. +- **RTCD + Recording**: 1 RTCD server and 1 `calls-offloader` server. +- **Any of the above + TURN**: Add 1 TURN server. + +Before moving to Step 1.5, confirm the following: + +- [ ] Every required server or VM has been created. +- [ ] Every required server has the IP address or DNS name you plan to use later in configuration. +- [ ] You have administrative access to every required server. +- [ ] You have written down which server will be used for Mattermost, RTCD, `calls-offloader`, and TURN. +- [ ] If you plan to use `calls-offloader`, Docker is available on that host before Phase 4. +- [ ] You have chosen a starting size for each optional server based on Appendix B, even if you expect to adjust it after pilot testing. + +### 1.5 Open the required ports + +Open the following ports before continuing. + +```{important} +NGINX does not proxy UDP. The media port must be exposed directly on the server running the integrated Calls service or RTCD. ``` -The RTCD service is the recommended way to host Calls for the following reasons: +#### Mattermost server ports + +| Port | Protocol | Direction | Source | Purpose | +|---|---|---|---|---| +| 80, 443 | TCP | Inbound | Mattermost clients | HTTPS and WebSocket signaling | +| 8443 | UDP | Inbound | Mattermost clients | Media traffic when using integrated Calls | +| 8443 | TCP | Inbound | Mattermost clients | Media fallback when using integrated Calls | +| 3478 | UDP | Outbound | STUN server | Public address discovery when using integrated Calls with STUN | -- **Performance of the main Mattermost server(s)**: When the Calls plugin runs the SFU, calls traffic is added to the processing load of the server running the rest of your Mattermost services. If Calls traffic spikes, it can negatively affect the responsiveness of these services. Using an RTCD service isolates the calls traffic processing to those RTCD instances, and also reduces costs by minimizing CPU usage spikes. +#### RTCD server ports -- **Performance, scalability, and stability of the Calls product**: If Calls traffic spikes, or more overall capacity is needed, RTCD servers can be added to balance the load. As an added benefit, if the Mattermost traffic spikes, or if a Mattermost instance needs to be restarted, those people in a current call will not be affected - current calls won't be dropped. +| Port | Protocol | Direction | Source | Purpose | +|---|---|---|---|---| +| 8443 | UDP | Inbound | Mattermost clients and offloader jobs | Media traffic | +| 8443 | TCP | Inbound | Mattermost clients and offloader jobs | Media fallback | +| 8045 | TCP | Inbound | Mattermost server only | RTCD API; keep internal | +| 3478 | UDP | Outbound | STUN server | Public address discovery when using STUN | - Some caveats apply here. While the main Mattermost server is down, things will quickly start to go awry: WebSocket events (for example: emoji reactions, hand raising, muting/unmuting) will not be transmitted, and new media track negotiations will fail. While existing media streams will continue initially, if the main server does not come back up within a reasonable timeframe (e.g., 1 minute), clients will begin to drop from the call entirely as their WebSocket re-connect attempts will hit the maximum allowed. +#### calls-offloader server ports -- **Kubernetes deployments**: In a Kubernetes deployment, RTCD is strongly recommended; it is currently the only officially supported way to run Calls. +| Port | Protocol | Direction | Source | Purpose | +|---|---|---|---|---| +| 4545 | TCP | Inbound | Mattermost server only | Job service API; keep internal | +| 8443 | UDP and TCP | Outbound | Media service (Mattermost integrated or RTCD) | Recorder and transcriber job media connectivity | +| 443 or internal Mattermost app port | TCP | Outbound | Mattermost Site URL or `MM_CALLS_*_SITE_URL` target | Recorder and transcriber job access back to Mattermost | -- **Technical benefits**: The dedicated RTCD service has been optimized and tuned at the system/network level for real-time audio/video traffic, where latency is generally more important than throughput. +#### TURN server ports -In general, RTCD is the preferred solution for a performant and scalable deployment. With RTCD, the Mattermost server will be minimally impacted when hosting a high number of calls. +If you deploy `coturn`, open the ports required by your coturn configuration. Common defaults are: -For detailed RTCD setup instructions, see the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide. +| Port | Protocol | Direction | Source | Purpose | +|---|---|---|---|---| +| 3478 | UDP and TCP | Inbound | Mattermost clients | TURN relay | +| 5349 | TCP | Inbound | Mattermost clients | TURN over TLS, if you deploy it | -## Call Recording and Transcription +### 1.6 Verification gate -```{include} ../../_static/badges/ent-plus.md +Do not proceed to Phase 2 until all of the following are true. + +#### 1.6.1 Confirm architecture and prerequisites + +- [ ] The Calls architecture is chosen. +- [ ] The recording, transcription, and live captions decision is made. +- [ ] The required servers are provisioned. +- [ ] The required license is confirmed. +- [ ] HTTPS is already working for Mattermost. + +#### 1.6.2 Confirm TCP connectivity + +Install `nc` if needed: + +- Ubuntu or Debian: `sudo apt install netcat-openbsd` +- RHEL or CentOS: `sudo dnf install nmap-ncat` + +Run the TCP test from the source server: + +```bash +nc -zv TARGET_IP PORT ``` -Mattermost Calls supports recording, transcription, and live captioning features. These processes are resource-intensive and MUST be offloaded from the Mattermost application server to maintain performance. +Examples: + +```bash +# Mattermost server to RTCD API +nc -zv YOUR_RTCD_SERVER 8045 + +# Mattermost server to calls-offloader API +nc -zv YOUR_OFFLOADER_SERVER 4545 +``` -For call recording and transcription, you need to: +Pass: -1. Deploy the `calls-offloader` service -2. Configure the service URL in the System Console -3. Enable call recordings and/or transcriptions in the plugin settings +- `Connection to ... succeeded` -For detailed setup instructions, see the [Calls Offloader Setup and Configuration](calls-offloader-setup.md) guide. +Fail: -## Air-Gapped Deployments +- `Connection refused` or timeout. Stop here and fix firewall, routing, or service exposure before proceeding. -Mattermost Calls can function in air-gapped environments. Exposing Calls to the public internet is only necessary when users need to connect from outside the local network, and no existing method supports that connection. In such setups: +#### 1.6.3 Confirm UDP connectivity + +On the target server, stop the service if it already owns port `8443`, then start a UDP listener: + +```bash +nc -l -u -p 8443 +``` + +If your `nc` version does not accept `-p`, try: + +```bash +nc -lu 8443 +``` + +On the source machine: + +```bash +nc -u TARGET_IP 8443 +``` -- Users should connect from within the private/local network. This can be done on-premises, through a VPN, or via virtual machines. -- Configuring a STUN server is unnecessary, as all connections occur within the local network. -- The [ICE Host Override](https://docs.mattermost.com/configure/plugins-configuration-settings.html#ice-host-override) configuration setting can be optionally set with a local IP address (e.g., 192.168.1.45), depending on the specific network configuration and topology. -- For call recording and transcription in air-gapped environments, see the [Air-Gapped Deployments](calls-offloader-setup.md#air-gapped-deployments) section in the Calls Offloader Setup documentation. +Type a short message and press Enter. If the message appears on the target server, UDP is working. + +#### 1.6.4 Final checklist + +- [ ] Clients can reach Mattermost on TCP `443`. +- [ ] Clients can reach the media service on UDP `8443`. +- [ ] Clients can reach the media service on TCP `8443` if you plan to rely on TCP fallback. +- [ ] Mattermost can reach RTCD on TCP `8045` if using RTCD. +- [ ] Mattermost can reach calls-offloader on TCP `4545` if using calls-offloader. +- [ ] The media service can reach UDP `3478` if using STUN. + +Before you leave Phase 1, plan at least one **real client-side test** in Phase 2 or Phase 5 from the same type of network your users will actually use, such as office LAN, home internet, VPN, or mobile data. + +--- + +## Phase 2: Configure and validate integrated Calls + +### 2.1 Overview + +Start here even if you know you want RTCD later. + +That gives you a clean baseline: if Calls does not work in integrated mode, the problem is usually networking, NAT, firewall rules, or plugin configuration. It is much easier to isolate those problems before you add RTCD or calls-offloader. + +### 2.2 Prerequisites + +- [ ] Phase 1 passed +- [ ] You have at least two Mattermost test accounts +- [ ] You have System Admin access + +### 2.3 Configure the Calls plugin + +The Calls plugin is prepackaged with Mattermost self-hosted deployments. + +#### 2.3.1 Enable the plugin + +Go to **System Console > Plugins > Calls** and confirm the plugin is enabled. + +If it is disabled, go to **System Console > Plugins > Plugin Management**, find **Calls**, and enable it. + +#### 2.3.2 Put the deployment in test mode + +Use the **Test mode** setting in **Plugins > Calls** so you can validate Calls before switching to live mode for all users. + +When the deployment is in test mode: + +- system admins can validate Calls first +- users are prompted to contact a system admin instead of starting calls broadly + +#### 2.3.3 Set the participant limit for testing + +Set **Max call participants** to `50`. + +Why this matters: + +- the default is `0`, which means unlimited +- the recommended maximum is `50` +- setting it now prevents accidental oversized tests while you validate the deployment + +#### 2.3.4 Configure the advertised media address + +If you are using integrated Calls, use the Calls plugin settings below to tell clients how to reach the media service. + +**ICE** is the part of WebRTC that helps clients discover which address and port to use for media traffic. + +- **ICE Host Override**: Use this when you want to advertise a specific IP address or hostname to clients instead of relying on automatic discovery through STUN. +- **ICE Host Port Override**: Use this if clients must connect on a different external port than the one the service listens on locally. +- **ICE server configurations**: Use this for STUN and TURN configuration. + +Use the following rules: + +- If your Mattermost server has a stable public IP that clients can reach, set **ICE Host Override** to that IP. +- If your users are all on a private network or VPN, set **ICE Host Override** to the private address they can actually reach. +- If you want the service to discover its own public address, leave **ICE Host Override** empty and use STUN. +- If you use a hostname instead of an IP, verify that DNS resolution on the Mattermost host matches what clients will actually reach. When in doubt, use an IP address directly. ```{note} -For RHEL deployments with firewalld or fapolicyd, see the [RHEL deployments with firewalld and fapolicyd](#rhel-deployments-with-firewalld-and-fapolicyd) section above. +`ICE Host Override` only applies when you are hosting media through the plugin itself. Once you move Calls media to RTCD in Phase 3, RTCD handles its own media address configuration. ``` -## Performance Considerations +#### 2.3.5 Configure STUN or TURN + +The default **ICE server configurations** value is: + +```json +[{"urls":["stun:stun.global.calls.mattermost.com:3478"]}] +``` + +If you need TURN, use a JSON array such as: + +```json +[ + { + "urls": ["turn:turn.example.com:3478"], + "username": "REPLACE_ME_USERNAME", + "credential": "REPLACE_ME_PASSWORD" + } +] +``` + +Use `credential` (singular) in the JSON. Replace the example values with your real TURN credentials. + +If your TURN deployment uses generated short-lived credentials, also configure: + +- **TURN Static Auth Secret** +- **TURN Credentials Expiration** -Calls performance primarily depends on: +#### 2.3.6 Save and restart the plugin if needed -- **CPU resources**: More participants require more processing power -- **Network bandwidth**: Both incoming and outgoing traffic increases with participant count. Due to the nature of the service, the bottleneck is always going to be the outgoing/egress path -- **Active speakers**: Unmuted participants require significantly more resources -- **Presenters**: Screen sharing participants require even more resources than active speakers +Some network-facing Calls settings require a plugin restart to take effect. After changing **ICE Host Override**, **ICE Host Port Override**, or similar media settings: -For detailed performance metrics, benchmarks, and monitoring guidance, see the [Calls Metrics and Monitoring](calls-metrics-monitoring.md) guide. +1. Go to **System Console > Plugins > Plugin Management**. +2. Disable **Calls**. +3. Wait a few seconds. +4. Enable **Calls** again. -## Frequently Asked Questions +### 2.4 Create a small test channel -### Is calls traffic encrypted? -Media (audio/video) is encrypted using security standards as part of WebRTC. It's mainly a combination of DTLS and SRTP. It's not e2e encrypted in the sense that in the current design all media needs to go through Mattermost which acts as a media router and has complete access to it. Media is then encrypted back to the clients so it's secured during transit. In short: only the participant clients and the Mattermost server have access to unencrypted call data. +#### 2.4.1 Create the channel -### Are there any third-party services involved? -Only a Mattermost STUN server (`stun.global.calls.mattermost.com`) is used by default. No user information, call metadata, or media traffic is ever sent to or shared with this STUN service; its sole purpose is to help WebRTC clients discover their public IP address and port mapping. Furthermore, this dependency can be entirely removed if you manually configure the ICE Host Override setting. +Create a test channel such as `calls-test`. -### Is using UDP a requirement? -UDP is the recommended protocol to serve real-time media as it allows for the lowest latency between peers, but TCP fallback is supported since plugin version 0.17 and RTCD version 0.11. +#### 2.4.2 Enable Calls in that channel -If clients are unable to connect using UDP (due to limitations or strict firewalls), you have a few options: +From the channel header: -- Since plugin version 0.17 and `rtcd` version 0.11 the RTC service will listen for TCP connections in addition to UDP ones. If configured correctly (e.g. using commonly allowed ports such as 80 or 443) it's possible to have clients connect directly through TCP when unable to do it through the preferred UDP channel. +1. Open the channel menu. +2. Select **Enable calls**. -- Run calls through an external TURN server that listens on TCP and relays all media traffic between peers. However, this is a sub-optimal solution that should be avoided if possible as it will introduce extra latency along with added infrastructural cost. +#### 2.4.3 Add your test users -### Do I need a TURN server? -Only if clients are behind restrictive firewalls that block UDP. We recommend (and officially support) [coturn](https://github.com/coturn/coturn) if needed. +Add at least two users so you can validate a real call. -### Can the traffic between Mattermost and `rtcd` be kept internal or should it be opened to the public? +### 2.5 Verification gate -Yes, the `rtcd` <-> Mattermost communication (HTTP/WebSocket API over TCP port 8045) should remain internal in almost all cases. When possible, it's highly recommended to keep communication between the Mattermost cluster and the dedicated `rtcd` service under the same private network as this minimizes latency and greatly simplifies deployment and security. There is no requirement to expose `rtcd`'s HTTP API to the public internet. Only the media ports (UDP/TCP 8443) need to be accessible to end-users. +Do not continue until all of the following pass. -### Can Calls be rolled out on a per-channel basis? +- [ ] **2.V1** Start a call from the test channel and confirm that a second user can join. +- [ ] **2.V2** Confirm both users can hear each other clearly. +- [ ] **2.V3** Confirm screen sharing works from a desktop app or supported browser. +- [ ] **2.V4** End the call cleanly and confirm the call indicator disappears. +- [ ] **2.V5** Run `/call stats` immediately after the test call and save the output for your deployment notes. -Yes. Mattermost system admins running self-hosted deployments can enable or disable call functionality per channel. Once [test mode](https://docs.mattermost.com/configure/plugins-configuration-settings.html#test-mode) is enabled for Mattermost Calls: +If any of these checks fail, stop here and go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting). -1. **Navigate to the channel** where you want to enable or disable Calls -2. **Access the channel menu** by clicking the channel name at the top of the channel -3. **Select the Calls option** from the dropdown menu: - - Select **Enable calls** for each channel where you want Calls enabled - - Select **Disable calls** for all channels where you want Calls disabled +--- -![Channel menu showing Enable/Disable calls options](../../images/calls-channel-enable-disable.png) +## Phase 3: Add RTCD -Once Calls is enabled for specific channels, users can start making calls in those channels. +### 3.1 Overview + +RTCD moves media handling off the Mattermost server. That improves isolation and gives you a better path for production scaling. + +Skip this phase if you are staying with integrated Calls. + +### 3.2 Prerequisites + +- [ ] Phase 2 passed +- [ ] Mattermost Enterprise license is active +- [ ] RTCD server is provisioned +- [ ] Mattermost can reach RTCD on TCP `8045` +- [ ] Clients can reach the RTCD media ports on `8443` + +### 3.3 Install and configure RTCD + +Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. + +That guide covers: + +- binary or Docker installation +- `rtcd.toml` configuration +- service setup +- TURN configuration +- validation with `curl http://HOST:8045/version` (or `https://` if you enabled TLS) +- horizontal scaling + +If RTCD is behind NAT or a load balancer, configure its advertised media address in `rtcd.toml` before continuing. + +When you move media handling to RTCD, configure the **media-plane** address and TURN/STUN settings in `rtcd.toml`. The plugin's client-facing ICE settings still matter for what gets sent to clients, so keep the plugin and RTCD settings aligned. + +### 3.4 Connect Mattermost to RTCD + +From the Mattermost server, verify the RTCD API first. If you enabled TLS on the RTCD API, use `https://` instead of `http://`: + +```bash +curl http://YOUR_RTCD_SERVER:8045/version +``` + +Pass: + +- you receive JSON version information + +Then configure Mattermost: + +1. Go to **System Console > Plugins > Calls**. +2. Set **RTCD Service URL** to your RTCD address, for example `http://rtcd.internal:8045`. +3. If RTCD credentials were generated during setup, include them in the URL or use `MM_CALLS_RTCD_CLIENT_ID` and `MM_CALLS_RTCD_AUTH_KEY` on the Mattermost server. +4. Save the setting. +5. Restart the Calls plugin so the change takes effect. + +```{note} +The `RTCD Service URL` setting supports credentials in the form `http://clientID:authKey@hostname`. The first connection self-registers the client and stores the authentication key in the database. +``` + +### 3.5 Set up monitoring before the pilot + +Before your pilot, set up Calls monitoring so you can see sessions, errors, CPU, and memory while real users are testing. + +See [Calls Metrics and Monitoring](calls-metrics-monitoring.md) for: + +- Prometheus scrape configuration +- RTCD metrics on `http://RTCD_SERVER:8045/metrics` +- Calls plugin metrics on `http://MATTERMOST_SERVER:8067/plugins/com.mattermost.calls/metrics` +- Grafana dashboard ID `23225` ```{note} -When [test mode](https://docs.mattermost.com/configure/plugins-configuration-settings.html#test-mode) is disabled for Mattermost Calls, users in any Mattermost channel can make a call. +The Calls plugin metrics endpoint depends on Mattermost performance monitoring being enabled. Port `8067` is the default performance listener and may be different in your environment. ``` -## Troubleshooting +### 3.6 Verification gate + +- [ ] **3.V1** `curl http://YOUR_RTCD_SERVER:8045/version` works from the Mattermost server (or `https://` if you enabled TLS). +- [ ] **3.V2** Two users can complete an audio call after `RTCD Service URL` is set. +- [ ] **3.V3** Screen sharing works after `RTCD Service URL` is set. +- [ ] **3.V4** `/call stats` after the test call shows a healthy negotiated connection. +- [ ] **3.V5** RTCD logs or metrics show activity during the test call. + +If these checks fail: + +- confirm TCP `8045` from Mattermost to RTCD +- confirm UDP and TCP `8443` from clients to RTCD +- confirm the Calls plugin was restarted after the URL change + +--- + +## Phase 4: Add calls-offloader for recording, transcription, and live captions + +### 4.1 Overview + +`calls-offloader` is the job service used for: + +- call recording +- call transcription +- live captions (experimental) + +You can add it after Phase 2 on integrated Calls or after Phase 3 on RTCD. For most production environments, pair it with RTCD. + +### 4.2 Prerequisites + +- [ ] Phase 2 passed +- [ ] If you are using RTCD, Phase 3 also passed +- [ ] Mattermost Enterprise license is active +- [ ] calls-offloader server is provisioned +- [ ] Docker is installed and running on the calls-offloader server +- [ ] The calls-offloader service account can use Docker +- [ ] Mattermost can reach the job service on TCP `4545` +- [ ] You have planned storage for recordings + +Storage estimates from the offloader guide: + +| Recording quality | Approximate storage per hour | Approximate storage per minute | +|---|---|---| +| Low | 0.5 GB | 8 MB | +| Medium | 0.7 GB | 12 MB | +| High | 1.2 GB | 20 MB | + +Audio-only recordings consume approximately `1 MB` per minute per participant. + +```{note} +Live captions require both recording and transcription to be enabled. +``` + +### 4.3 Install and configure calls-offloader + +Follow the [Calls Offloader Setup and Configuration](calls-offloader-setup.md) guide for installation. + +That guide covers: + +- binary installation +- `config.toml` +- systemd service setup +- Docker-backed jobs +- private network overrides +- air-gapped installation + +### 4.4 Connect calls-offloader to Mattermost + +From the Mattermost server, verify the API first. If you enabled TLS on the offloader API, use `https://` instead of `http://`: + +```bash +curl http://YOUR_OFFLOADER_SERVER:4545/version +``` + +Then configure Mattermost: + +1. Go to **System Console > Plugins > Calls**. +2. Set **Job Service URL** to the calls-offloader address, for example `http://calls-offloader.internal:4545`. +3. Enable **Call Recordings** if needed. +4. Enable **Call Transcriptions** if needed. Transcriptions require recordings. +5. Enable **Live Captions** if needed. Live captions require both recordings and transcriptions. +6. Save the settings. +7. Restart the Calls plugin. This is required for `Job Service URL` and recording-related changes to take effect cleanly. + +If your recorder or transcriber jobs must reach Mattermost on a different internal address than users do, configure these on the **Mattermost server**: + +- `MM_CALLS_RECORDER_SITE_URL` +- `MM_CALLS_TRANSCRIBER_SITE_URL` + +See the offloader guide for that private network setup. + +### 4.5 AI meeting summaries + +If you want AI-generated meeting summaries from call transcripts, configure Mattermost AI separately. See [Enable Copilot](https://docs.mattermost.com/configure/enable-copilot.html). + +### 4.6 Verification gate + +- [ ] **4.V1** `curl http://YOUR_OFFLOADER_SERVER:4545/version` works from the Mattermost server (or `https://` if you enabled TLS). +- [ ] **4.V2** A test call still works normally after the job service is configured. +- [ ] **4.V3** A host can start a recording. +- [ ] **4.V4** The MP4 recording appears in the call thread after recording stops. +- [ ] **4.V5** If transcription is enabled, the transcript file appears after the recording finishes. +- [ ] **4.V6** If live captions are enabled, captions appear during a recorded call. + +If these checks fail, go to [A.5 Recording, transcription, or captions are failing](#a5-recording-transcription-or-captions-are-failing). + +--- + +## Phase 5: Pilot rollout + +### 5.1 Overview + +Now that the technical configuration is validated, run a small pilot with real users before broad rollout. + +The goal of the pilot is to answer three questions: + +1. Does Calls work reliably for real users? +2. Does it work across the clients and locations your organization uses? +3. Do your servers and network stay healthy under normal usage? + +### 5.2 Prerequisites + +- [ ] Phase 2 passed +- [ ] Phase 3 passed if using RTCD +- [ ] Phase 4 passed if using calls-offloader +- [ ] You have 5 to 10 pilot users from different locations and client types +- [ ] Pilot users have current Mattermost desktop or mobile apps + +### 5.3 Prepare the pilot channel and message + +Create a pilot channel such as `calls-pilot`, enable Calls in that channel, and post the following message. + +If test mode is still enabled, have a **system admin** start each pilot call. + +
+Click to expand the pilot message template + +```markdown +## Mattermost Calls pilot + +We are testing Mattermost Calls before wider rollout. + +**What you are testing** + +- starting and joining an audio call +- hearing other participants clearly +- screen sharing from desktop or browser +- joining from different clients or networks if possible + +**How to start** + +Select **Start call** in the channel header. Anyone in this channel can join. + +**Please try the following** + +- [ ] Join a 1:1 test call +- [ ] Join a group call with at least 3 participants +- [ ] Share your screen from desktop or browser +- [ ] Join from a second client if possible +- [ ] Join from home, VPN, or mobile data if possible + +**If something fails** + +Reply in this channel with: + +- what step failed +- what you expected to happen +- what actually happened +- your client type (desktop, browser, or mobile) +``` + +
+ +### 5.4 What to watch during the pilot + +Use your monitoring and logs to watch the following: + +- **Active sessions and participants**: The Calls metrics guide exposes session and participant data so you can confirm calls are being counted. +- **RTC errors**: Watch `rtcd_rtc_errors_total` or the equivalent Calls plugin metrics if you are using integrated mode. +- **CPU and memory**: Use RTCD process metrics such as `rtcd_process_cpu_seconds_total` and `rtcd_process_resident_memory_bytes`, or the equivalent plugin metrics in integrated mode. +- **Service logs**: Watch Mattermost, RTCD, and calls-offloader for recurring `ERROR` or `WARN` lines during pilot sessions. + +If you do not have Prometheus and Grafana set up yet, monitor Mattermost, RTCD, and calls-offloader logs during the pilot instead. + +### 5.5 Verification gate + +- [ ] **5.V1** Two users complete a 1:1 audio call successfully. +- [ ] **5.V2** At least one group call with 3 or more users completes successfully. +- [ ] **5.V3** At least one pilot call lasts 15 minutes or longer without unexpected drops. +- [ ] **5.V4** Screen sharing works from a desktop app or browser. +- [ ] **5.V5** At least one user joins from outside the main office network, if that matches your deployment. +- [ ] **5.V6** At least one user joins on mobile. +- [ ] **5.V7** If recording is enabled, recording works during the pilot. +- [ ] **5.V8** If transcription is enabled, transcription works during the pilot. +- [ ] **5.V9** If live captions are enabled, captions work during the pilot. +- [ ] **5.V10** The admin has saved at least one `/call stats` sample from a successful pilot call. + +--- + +## Phase 6: Production rollout + +### 6.1 Overview + +Roll Calls out in waves instead of enabling it everywhere at once. + +That lets you watch real usage, catch problems early, and stop the rollout cleanly if needed. + +### 6.2 Prepare user communication + +Create a support channel such as `calls-help` first, then send a short announcement. + +
+Click to expand the user announcement template + +```markdown +## Mattermost Calls is available + +You can now start audio calls directly from Mattermost and share your screen without leaving the platform. + +**How to start a call** + +Select **Start call** in the channel header. Anyone in that channel can join. + +**What is available** + +- audio calls +- screen sharing +- group calls, if enabled for your deployment +- recording, transcription, and live captions, if enabled for your deployment + +**Things to know** + +- the first time you join, your browser or desktop app may ask for microphone permission +- screen sharing may also require screen capture permission +- if you need help, post in `#calls-help` +``` + +
+ +### 6.3 Roll out in waves + +#### 6.3.1 Wave 1 + +Enable Calls in IT or admin channels first. + +Use this wave to confirm: + +- support staff know how Calls works +- internal admins know where to look when users report problems + +#### 6.3.2 Wave 2 + +If the admin-only validation is stable, switch the deployment from **test mode** to **live mode**, then enable Calls in engineering or power-user channels. + +Use this wave to gather broader feedback from users who are likely to try more edge cases. + +#### 6.3.3 Wave 3 + +When the earlier waves are stable, expand rollout to the rest of the organization. + +### 6.4 Watch the rollout + +During each wave, watch: + +- call volume +- repeated user complaints about joining or audio quality +- recurring RTC errors +- CPU and memory on the media service +- recording and transcription job failures, if enabled + +If you stay on integrated Calls and see sustained media load during rollout, plan a move to RTCD before you expand usage further. + +Do not move to the next wave until the current one is stable. + +### 6.5 Rollback plan + +If something goes wrong, choose the smallest rollback that solves the problem. + +**Per-channel rollback** + +1. Open the affected channel menu. +2. Select **Disable calls**. + +**Return to test mode** + +1. Go to **System Console > Plugins > Calls**. +2. Switch the deployment back to test mode. + +**Full rollback** + +1. Go to **System Console > Plugins > Plugin Management**. +2. Disable the Calls plugin. + +Keep your existing conferencing option available until Calls is stable in production for your environment. + +--- + +## Appendix A: Troubleshooting + +For log collection details, see [Calls Troubleshooting](calls-troubleshooting.md). + +### A.1 Collect the right evidence before asking for help + +Before opening a support case, capture as many of these as you can: + +- the phase and step where the failure happened +- `/call stats` output from a recent failed or successful test +- `/call logs` output from the most recent call +- `curl` output from `RTCD` or `calls-offloader` version checks +- relevant Mattermost, RTCD, or calls-offloader logs + +### A.2 The call button is missing + +Common causes: + +- the Calls plugin is disabled +- the deployment is still in test mode and the channel is not configured the way you expect +- the user is on an older client + +What to check: + +1. **System Console > Plugins > Plugin Management** to confirm Calls is enabled. +2. **System Console > Plugins > Calls** to confirm the deployment state. +3. The channel menu to confirm Calls is enabled for that channel. + +### A.3 A call starts, but audio does not work + +Common causes: + +- UDP `8443` is blocked +- clients are falling back poorly because TCP `8443` is also blocked +- the wrong media address is being advertised +- browser or desktop microphone permissions were denied + +What to do: + +1. Repeat the UDP and TCP connectivity checks from Phase 1. +2. Re-check the integrated media address configuration in Phase 2, or RTCD address configuration in Phase 3. +3. Run `/call stats` after the failed test and compare the negotiated connection details. + +### A.4 Remote users cannot join from outside the office + +Common causes: + +- external firewall rules do not allow media traffic to reach the media service +- the advertised media address is private instead of public +- the deployment needs TURN for restrictive client networks + +What to do: + +1. Confirm external reachability to UDP `8443`. +2. Confirm the address being advertised to clients is the correct reachable address. +3. If direct connectivity still fails for restrictive networks, add TURN. + +### A.5 Recording, transcription, or captions are failing + +Common causes: + +- calls-offloader is not running +- Mattermost cannot reach `Job Service URL` +- the offloader service account cannot use Docker +- recorder or transcriber jobs cannot reach Mattermost on the expected internal URL + +What to do: + +1. Run `curl http://YOUR_OFFLOADER_SERVER:4545/version` from the Mattermost server. +2. Confirm the calls-offloader service is running. +3. Confirm the calls-offloader service account can access Docker. +4. If using private network overrides, re-check `MM_CALLS_RECORDER_SITE_URL` and `MM_CALLS_TRANSCRIBER_SITE_URL`. + +### A.6 Calls work briefly, then drop + +Common causes: + +- unstable WebSocket connectivity between clients and Mattermost +- Mattermost restarted during the call +- a load balancer or network device is timing out long-lived connections + +What to do: + +1. Confirm the Mattermost server is stable and reachable. +2. Review load balancer settings for WebSocket support and idle timeout behavior. +3. Compare Mattermost logs with the call failure time. + +### A.7 RHEL deployments using firewalld or fapolicyd + +If you deploy on RHEL with `firewalld` or `fapolicyd` enabled, see the [RHEL deployment guide](https://docs.mattermost.com/deployment-guide/server/deploy-linux.html#itab--RHEL-CentOS--0_1-RHEL-CentOS). + +Key points: + +- the Calls plugin is covered by standard Mattermost `fapolicyd` rules +- standalone `rtcd` requires its own `fapolicyd` configuration +- you still need to open the required Calls and RTCD ports + +--- + +## Appendix B: Server sizing benchmarks + +Use this appendix as a starting point, then validate against your own traffic during Phase 5. + +### B.1 RTCD benchmark examples + +The [Calls Metrics and Monitoring](calls-metrics-monitoring.md) guide includes internal RTCD benchmark data. The examples below are taken directly from that guide and show why screen sharing and total egress bandwidth matter so much for sizing. + +| Workload example | RTCD instance | Average CPU | Average memory | Bandwidth in / out | +|---|---|---|---|---| +| 1 call, 1000 participants, 2 unmuted, no screen sharing | `c7i.xlarge` | 47% | 1.46 GB | 1 Mbps / 194 Mbps | +| 1 call, 1000 participants, 1 unmuted, screen sharing enabled | `c7i.xlarge` | 79% | 1.54 GB | 2.9 Mbps / 1.68 Gbps | +| 2 calls, 1000 participants each, screen sharing enabled | `c7i.2xlarge` | 73% | 2.38 GB | 5.7 Mbps / 3.06 Gbps | +| 4 calls, 1000 participants each, screen sharing enabled | `c7i.4xlarge` | 83% | 4.40 GB | 14.5 Mbps / 7.17 Gbps | + +How to use this table: + +- If you expect large calls with screen sharing, plan around **egress bandwidth** first. +- If you expect many medium-sized calls, use the metrics guide to compare similar benchmark patterns. +- Validate your assumptions during the pilot instead of sizing only from theory. + +### B.2 calls-offloader sizing inputs + +The published `calls-offloader` performance guide uses an AWS `c6i.2xlarge` host (`8 vCPU / 16 GB RAM`) as the recommended starting point for recordings. + +| Recording quality | Recommended `max_concurrent_jobs` | Average CPU | Average memory | Average recording size | +|---|---|---|---|---| +| Low | 8 | 66% | 4 GB | 0.5 GB/hour | +| Medium | 6 | 66% | 4 GB | 0.7 GB/hour | +| High | 4 | 72% | 4 GB | 1.2 GB/hour | + +Audio-only recordings consume approximately `1 MB` per minute per participant. + +Use those numbers to estimate: + +- total storage needed +- how many recordings can run at the same time +- the `max_concurrent_jobs` setting you should start with +- how aggressively you need retention and cleanup policies + +If recordings are large or long-lived, also review Mattermost `FileSettings.MaxFileSize` and any proxy upload/body-size limits in front of Mattermost. + +### B.3 Transcriptions and live captions + +Transcriptions and live captions increase load on the offloader host. + +Published offloader guidance highlights these planning points: + +- The `small` model is not recommended for live captions. +- `base` live captions need at least `2` threads for real-time performance and work best with `3` or `4`. +- If you expect more than 3 simultaneous live-captioned calls on one host, plan for horizontal scaling. + +For additional offloader performance guidance, see the [calls-offloader performance documentation](https://github.com/mattermost/calls-offloader/blob/master/docs/performance.md). + +### B.4 TURN server planning + +TURN planning is mostly a bandwidth question. + +If you must use TURN: + +- estimate how many users are likely to need relay traffic +- remember TURN relays all media for those users +- place TURN where it is network-close to the users who need it -For comprehensive troubleshooting steps and debugging techniques, please refer to the [Calls Troubleshooting](calls-troubleshooting.md) guide. +--- -## Next Steps +## Related Documentation -1. For detailed setup instructions, see [RTCD Setup and Configuration](calls-rtcd-setup.md) -2. For monitoring guidance, see [Calls Metrics and Monitoring](calls-metrics-monitoring.md) -3. If you encounter issues, see [Calls Troubleshooting](calls-troubleshooting.md) -4. For Kubernetes deployments, see [Calls Deployment on Kubernetes](calls-kubernetes.md) +- [RTCD Setup and Configuration](calls-rtcd-setup.md) +- [Calls Offloader Setup and Configuration](calls-offloader-setup.md) +- [Calls Metrics and Monitoring](calls-metrics-monitoring.md) +- [Calls Deployment on Kubernetes](calls-kubernetes.md) +- [Calls Troubleshooting](calls-troubleshooting.md) +- [Calls plugin configuration settings](https://docs.mattermost.com/configure/plugins-configuration-settings.html#calls) From 9a2ed5731096335f257773e393039ba793689dc8 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 08:24:38 -0700 Subject: [PATCH 02/38] mermaid tweaks --- .../configure/calls-deployment.md | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 39aaf7f64bb..ac1be38bf4a 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -1,4 +1,4 @@ -# Deploy Mattermost Calls +# Mattermost Calls Deployment Guide ```{include} ../../_static/badges/all-commercial.md ``` @@ -131,6 +131,25 @@ flowchart TD rtcd -->|TCP 8443 media fallback| clients ``` +```{mermaid} +flowchart TB + clients["Clients + (Web / Desktop / Mobile)"] -->|"443 TCP - signaling and API"| mmServer["MM Server + Calls Plugin + (required)"] + clients -->|"8443 UDP/TCP - media"| mmServer + clients -.->|"8443 UDP/TCP - media"| rtcdSvc + mmServer -->|"8045 TCP - internal only"| rtcdSvc + mmServer -->|"4545 TCP - internal only"| offloaderSvc + + rtcdSvc["rtcd Service + (optional - Enterprise)"] + offloaderSvc["calls-offloader + (optional - Enterprise)"] + + style rtcdSvc stroke-dasharray: 5 5 + style offloaderSvc stroke-dasharray: 5 5 +``` + **When to use it** Use RTCD if you need optimized performance, scalability, and the best possible user experience for Mattermost Calls. Specifically: From 0d96b59c36a3eafe59493f349cc9ce89cdbe93a5 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 08:47:06 -0700 Subject: [PATCH 03/38] mermaid-test --- .../configure/calls-deployment.md | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index ac1be38bf4a..f3d869fbd6c 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -95,6 +95,20 @@ flowchart TD clients -->|UDP/TCP 8443 media| mm ``` +```{mermaid} +flowchart TD + clients["Clients\nWeb, Desktop, Mobile"] + mm["Mattermost Server\nCalls plugin"] + rtcd["RTCD Server"] + + clients -->|TCP 443 signaling| mm + mm -->|TCP 8045 internal API| rtcd + clients -->|UDP 8443 media| rtcd + rtcd -->|UDP 8443 media| clients + clients -->|TCP 8443 media fallback| rtcd + rtcd -->|TCP 8443 media fallback| clients +``` + **When to use it** - You are evaluating Calls for the first time. @@ -221,12 +235,12 @@ Do this before you install anything new. STUN is a protocol used to automatically discover the public IP address of your media server so clients can connect to Calls. +Mattermost provides a default STUN server (`stun.global.calls.mattermost.com`) for public IP discovery. No user information, call metadata, or media traffic is sent to or shared with this STUN service; its sole purpose is to help media servers discover their public IP address. Use this decision tree to determine if you need to allow outbound access from your media server to the Mattermost global STUN service. + ```{note} Your media server is the Mattermost server in the case of an **Integrated** Calls deployment, or it's the **RTCD server** in the case of an RTCD Calls deployment. ``` -Mattermost provides a default STUN server (`stun.global.calls.mattermost.com`) for public IP discovery. No user information, call metadata, or media traffic is sent to or shared with this STUN service; its sole purpose is to help media servers discover their public IP address. Use this decision tree to determine if you need to allow outbound access from your media server to the Mattermost global STUN service: - **STUN Decision Tree** 1. **Are all users and your media server (Mattermost server or RTCD) in the same private network, VPN, or air-gapped environment (no outside clients)?** @@ -244,19 +258,37 @@ If your deployment requires STUN, note this requirement as you work through the TURN is a protocol that relays media when users cannot reach the Calls media service directly. -Provisioning a TURN server is only necessary if both of these conditions are true: +Provisioning a TURN server is necessary if both of these conditions are true: - Clients connect from networks that cannot reliably use UDP on port `8443` for media traffic (preferred path). - Clients connect from networks that cannot reliably use TCP on port `8443` (fallback). -Only plan to deploy TURN if your answers indicate that you cannot rely on UDP or TCP for media, and users need an alternative route. TURN is typically a last resort as it adds additional networking and infrastructure complexity. +TURN is typically a last resort as it adds additional networking and infrastructure complexity. Only plan to deploy TURN if your answers indicate that you cannot rely on UDP or TCP for media, and users need an alternative route. + + +### 1.4 Provision Infrastructure + +Now you will provision the servers or VMs you'll need to support your Calls Deployment. You are only preparing infrastructure here; software installation and service configuration happen in later phases. This step is important because you'll need the IP addresses of these servers in order to configure networking in the next step. + +If you are operating in Integrated mode (Step 1.2) and you do not require a TURN server (Step 1.3.2), you can skip this step and proceed to network configuration. Otherwise, you will need to provision additional infrastructure: + +**RTCD Server** + + + + + +**Calls Offloader Server** + + + + +**TURN Server** + -### 1.4 Infrastructure Provisioning -This step answers a simple question: **What infrastructure do I need to create before I start installing software?** -In this step, **provision** means creating the server or VM, assigning its IP address or DNS name, confirming you can administer it, and recording what that server will be used for. You are only preparing infrastructure here; software installation and service configuration happen in later phases. If you're unsure where to start, use these defaults: @@ -289,7 +321,7 @@ Before moving to Step 1.5, confirm the following: - [ ] If you plan to use `calls-offloader`, Docker is available on that host before Phase 4. - [ ] You have chosen a starting size for each optional server based on Appendix B, even if you expect to adjust it after pilot testing. -### 1.5 Open the required ports +### 1.5 Network Configuration Open the following ports before continuing. From 4835b648a6907ca5430d32ae7dbc93ddfe6da561 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 10:51:38 -0700 Subject: [PATCH 04/38] 1.6 checks --- .../configure/calls-deployment.md | 276 +++++++++--------- 1 file changed, 135 insertions(+), 141 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index f3d869fbd6c..286533823de 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -95,20 +95,6 @@ flowchart TD clients -->|UDP/TCP 8443 media| mm ``` -```{mermaid} -flowchart TD - clients["Clients\nWeb, Desktop, Mobile"] - mm["Mattermost Server\nCalls plugin"] - rtcd["RTCD Server"] - - clients -->|TCP 443 signaling| mm - mm -->|TCP 8045 internal API| rtcd - clients -->|UDP 8443 media| rtcd - rtcd -->|UDP 8443 media| clients - clients -->|TCP 8443 media fallback| rtcd - rtcd -->|TCP 8443 media fallback| clients -``` - **When to use it** - You are evaluating Calls for the first time. @@ -145,25 +131,6 @@ flowchart TD rtcd -->|TCP 8443 media fallback| clients ``` -```{mermaid} -flowchart TB - clients["Clients - (Web / Desktop / Mobile)"] -->|"443 TCP - signaling and API"| mmServer["MM Server + Calls Plugin - (required)"] - clients -->|"8443 UDP/TCP - media"| mmServer - clients -.->|"8443 UDP/TCP - media"| rtcdSvc - mmServer -->|"8045 TCP - internal only"| rtcdSvc - mmServer -->|"4545 TCP - internal only"| offloaderSvc - - rtcdSvc["rtcd Service - (optional - Enterprise)"] - offloaderSvc["calls-offloader - (optional - Enterprise)"] - - style rtcdSvc stroke-dasharray: 5 5 - style offloaderSvc stroke-dasharray: 5 5 -``` - **When to use it** Use RTCD if you need optimized performance, scalability, and the best possible user experience for Mattermost Calls. Specifically: @@ -214,7 +181,7 @@ flowchart TD - **Mattermost server**: Calls plugin is pre-installed. - **RTCD Server**: Dedicated media service. Clients connect to it directly for media traffic. -- **Calls Offloader**: Job service that manages recording and transcription. Spawns recorder and transcriber Docker containers that join calls as participants to capture media. +- **Calls Offloader**: Job service that manages recording and transcription. ```{note} `calls-offloader` can also be added to an integrated Calls deployment without RTCD. This guide uses RTCD as the base because it is the recommended production path for most deployments. @@ -270,175 +237,178 @@ TURN is typically a last resort as it adds additional networking and infrastruct Now you will provision the servers or VMs you'll need to support your Calls Deployment. You are only preparing infrastructure here; software installation and service configuration happen in later phases. This step is important because you'll need the IP addresses of these servers in order to configure networking in the next step. -If you are operating in Integrated mode (Step 1.2) and you do not require a TURN server (Step 1.3.2), you can skip this step and proceed to network configuration. Otherwise, you will need to provision additional infrastructure: +Infrastructure requirements are based on your deployment architecture chosen in Step 1.2. If you need to provision additional hardware, you should note the IP addresses of these servers for networking configuration in the next step: -**RTCD Server** +**Integrated** +Since the Mattermost server is handling all media processing, you can skip this step and proceed to network configuration in Step 1.5. +**RTCD** +You will need to provision a new server for RTCD. Use **Appendix B.1** for benchmark examples of hardware sizing. The RTCD service supports [horizontal scaling](https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html#horizontal-scaling), but we recommend starting with one server, and then scaling out if your pilot or expected workload requires it. +**Recording** +You will need to provision a new server for the `calls-offloader` service. The recommended starting point is **8 vCPU / 16 GB RAM**, or you can use **Appendix B.2** to estimate recording capacity and transcription load. +**TURN Server** +If you've determined in Step 1.3.2 that your users cannot reliably reach the media server over UDP or TCP `8443`, you will need to provision your TURN server now. +Mattermost recommends installing [coturn](https://github.com/coturn/coturn). -**Calls Offloader Server** +Before moving to Step 1.5, confirm the following: +- [ ] Every required server or VM has been created. +- [ ] Every required server has the IP address or DNS name you plan to use later in configuration. +- [ ] You have administrative access to every required server. (test with `ssh @`) +### 1.5 Network Configuration -**TURN Server** +Here you'll find which network ports need to be opened for each server involved in your Calls deployment. Open the ports in the tables below on each server in your deployment. Work through one server at a time — open every port listed for that server before moving to the next. +**How you open ports depends on your environment:** +- **Cloud deployments (AWS, Azure, GCP):** Configure inbound and outbound rules in your cloud provider's security group or network ACL for each instance. This is done in the cloud console, not on the server itself. The instance must exist before you can configure its rules, which is why provisioning in Step 1.4 comes first. +- **On-premises or self-managed VMs:** Use `firewalld` (RHEL/CentOS) or `ufw` (Ubuntu/Debian) commands directly on each server. Examples: + - `sudo firewall-cmd --permanent --add-port=8443/udp && sudo firewall-cmd --reload` + - `sudo ufw allow 8443/udp` +- **Centrally managed firewall:** If a network team manages your firewall, share the tables below with them and request the rules before proceeding. +#### Mattermost server ports +| Port | Protocol | Direction | Source | Destination | Notes | +|---|---|---|---|---|---| +| 443 | TCP | Inbound | Mattermost clients | Mattermost server | HTTPS and WebSocket signaling. | +| 8443 | UDP | Inbound | Mattermost clients | Mattermost server | Media traffic in Integrated mode. | +| 8443 | TCP | Inbound | Mattermost clients | Mattermost server | Media traffic in Integrated mode. | +| 3478 | UDP | Outbound | Mattermost server | `stun.global.calls.mattermost.com` | (Optional - Step 1.3.1) Public IP discovery using STUN. | +#### RTCD server ports -If you're unsure where to start, use these defaults: +If you deployed an RTCD server in Step 1.4, open these ports: -- **Integrated only**: No additional server. -- **RTCD**: Start with **1 RTCD server**. -- **Recording, transcription, or live captions**: Start with **1 `calls-offloader` server**. -- **TURN**: Start with **1 TURN server** only if Section 1.3.2 indicated that you need TURN. +| Port | Protocol | Direction | Source | Destination | Notes | +|---|---|---|---|---|---| +| 8443 | UDP | Inbound | Mattermost clients and calls-offloader server | RTCD server | Media traffic. | +| 8443 | TCP | Inbound | Mattermost clients and calls-offloader server | RTCD server | Media fallback. | +| 8045 | TCP | Inbound | Mattermost server | RTCD server | RTCD API. Internal only — do not expose publicly. | +| 3478 | UDP | Outbound | RTCD server | `stun.global.calls.mattermost.com` | (Optional - Step 1.3.1) Public IP discovery using STUN. | -| Component | Provision it when | How many to start with | Starter sizing guidance | Extra prerequisites | -|---|---|---|---|---| -| Integrated media service | You are using **Integrated** Calls only | No additional server | Use your existing Mattermost server. Validate capacity during Phase 2 and the pilot in Phase 5. | None | -| RTCD | You selected **RTCD** because you expect more than 50 participants, want media off the Mattermost server, or are deploying on Kubernetes | 1 RTCD server | See **Appendix B.1** for benchmark examples. Start with one server, then scale out only if your pilot or expected workload requires it. | Plan the IP address or DNS name clients and Mattermost will use to reach RTCD | -| `calls-offloader` | You need **recording, transcription, or live captions** | 1 `calls-offloader` server | Start with **8 vCPU / 16 GB RAM**. Use **Appendix B.2** and **B.3** to estimate recording capacity, transcription load, and starting `max_concurrent_jobs`. | Docker is required on the offloader host | -| TURN | Section **1.3.2 TURN Server** indicated direct media is not reliable enough | 1 TURN server | Size TURN primarily for **relay bandwidth**, not CPU. See **Appendix B.4**. | Mattermost recommends [coturn](https://github.com/coturn/coturn) | +```{important} +If you use NGINX as a reverse proxy in front of Mattermost, note that NGINX cannot forward UDP traffic. Port 8443 must be opened directly on the server running the media service — not on NGINX. Port 443 is the only port NGINX handles for Calls. +``` -Use these common combinations as a quick check: +#### Recording server ports -- **Integrated only**: No additional servers. -- **RTCD only**: 1 RTCD server. -- **Integrated + Recording**: 1 `calls-offloader` server. -- **RTCD + Recording**: 1 RTCD server and 1 `calls-offloader` server. -- **Any of the above + TURN**: Add 1 TURN server. +If you deployed a calls-offloader server in Step 1.4, open these ports: -Before moving to Step 1.5, confirm the following: +| Port | Protocol | Direction | Source | Destination | Notes | +|---|---|---|---|---|---| +| 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API. Internal only — do not expose publicly. | +| 8443 | UDP | Outbound | calls-offloader server | Mattermost server and RTCD server | Recorder and transcriber jobs connect to the media service as call participants. | +| 8443 | TCP | Outbound | calls-offloader server | Mattermost server and RTCD server | Fallback if UDP is unavailable. | +| 443 | TCP | Outbound | calls-offloader server | Mattermost server | Recorder and transcriber jobs post results back to Mattermost. | -- [ ] Every required server or VM has been created. -- [ ] Every required server has the IP address or DNS name you plan to use later in configuration. -- [ ] You have administrative access to every required server. -- [ ] You have written down which server will be used for Mattermost, RTCD, `calls-offloader`, and TURN. -- [ ] If you plan to use `calls-offloader`, Docker is available on that host before Phase 4. -- [ ] You have chosen a starting size for each optional server based on Appendix B, even if you expect to adjust it after pilot testing. +#### TURN server ports -### 1.5 Network Configuration +If you deployed a TURN server in Step 1.4, open these ports. If you are using `coturn`, these are the common defaults: -Open the following ports before continuing. +| Port | Protocol | Direction | Source | Destination | Notes | +|---|---|---|---|---|---| +| 3478 | UDP and TCP | Inbound | Mattermost clients | TURN server | STUN and TURN relay. | +| 5349 | UDP and TCP | Inbound | Mattermost clients | TURN server | TURN over TLS. Optional — only if you configure TLS on coturn. | +| 49152–65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required for coturn to relay media. | -```{important} -NGINX does not proxy UDP. The media port must be exposed directly on the server running the integrated Calls service or RTCD. -``` +### 1.6 Verification Checks -#### Mattermost server ports +These checks test firewall and network reachability only — they do not require Calls, RTCD or `calls-offloader` to be installed. -| Port | Protocol | Direction | Source | Purpose | -|---|---|---|---|---| -| 80, 443 | TCP | Inbound | Mattermost clients | HTTPS and WebSocket signaling | -| 8443 | UDP | Inbound | Mattermost clients | Media traffic when using integrated Calls | -| 8443 | TCP | Inbound | Mattermost clients | Media fallback when using integrated Calls | -| 3478 | UDP | Outbound | STUN server | Public address discovery when using integrated Calls with STUN | +First, you'll have to install `nmap` on each machine you'll run checks from using `sudo apt install nmap` (Ubuntu or Debian) or `sudo dnf install nmap` (RHEL or CentOS) -#### RTCD server ports +When you excute each check below, `nmap` will return `open`, `closed` or `filtered`. -| Port | Protocol | Direction | Source | Purpose | -|---|---|---|---|---| -| 8443 | UDP | Inbound | Mattermost clients and offloader jobs | Media traffic | -| 8443 | TCP | Inbound | Mattermost clients and offloader jobs | Media fallback | -| 8045 | TCP | Inbound | Mattermost server only | RTCD API; keep internal | -| 3478 | UDP | Outbound | STUN server | Public address discovery when using STUN | +**Pass**: +- `open`: Port is reachable and the service is listeneing. Expected if you've already installed the RTCD or `calls-offloader` services) +- `closed`: Port is reachable but the service has not yet been installed. Expected if you just provisioned the machines in Step 1.4) +**Fail**: +- `filtered`: Firewall is blocking the port. Revisit your networking configuration in Step 1.5 before continuing. -#### calls-offloader server ports +**All deployments** -| Port | Protocol | Direction | Source | Purpose | -|---|---|---|---|---| -| 4545 | TCP | Inbound | Mattermost server only | Job service API; keep internal | -| 8443 | UDP and TCP | Outbound | Media service (Mattermost integrated or RTCD) | Recorder and transcriber job media connectivity | -| 443 or internal Mattermost app port | TCP | Outbound | Mattermost Site URL or `MM_CALLS_*_SITE_URL` target | Recorder and transcriber job access back to Mattermost | +Run from a client machine on the same network as your users: -#### TURN server ports +| Check | Command | Replace `TARGET_IP` with | Description | +|---|---|---|---| +| 1.6.2 | `sudo nmap -sU -p 8443 TARGET_IP` | Mattermost server IP | Clients can send UDP media to the Mattermost server | +| 1.6.3 | `nmap -p 8443 TARGET_IP` | Mattermost server IP | Clients can reach the Mattermost server for TCP media fallback | -If you deploy `coturn`, open the ports required by your coturn configuration. Common defaults are: +**RTCD deployments** -| Port | Protocol | Direction | Source | Purpose | -|---|---|---|---|---| -| 3478 | UDP and TCP | Inbound | Mattermost clients | TURN relay | -| 5349 | TCP | Inbound | Mattermost clients | TURN over TLS, if you deploy it | +Run from a client machine on the same network as your users: -### 1.6 Verification gate +| Check | Command | Replace `TARGET_IP` with | Description | +|---|---|---|---| +| 1.6.4 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP | Clients can send UDP media to the RTCD server | +| 1.6.5 | `nmap -p 8443 TARGET_IP` | RTCD server IP | Clients can reach the RTCD server for TCP media fallback | -Do not proceed to Phase 2 until all of the following are true. +Run from the Mattermost server: -#### 1.6.1 Confirm architecture and prerequisites +| Check | Command | Replace `TARGET_IP` with | Description | +|---|---|---|---| +| 1.6.6 | `nmap -p 8045 TARGET_IP` | RTCD server IP | Mattermost can reach the RTCD API | -- [ ] The Calls architecture is chosen. -- [ ] The recording, transcription, and live captions decision is made. -- [ ] The required servers are provisioned. -- [ ] The required license is confirmed. -- [ ] HTTPS is already working for Mattermost. +**Recording deployments** — run from the Mattermost server: -#### 1.6.2 Confirm TCP connectivity +| Check | Command | Replace `TARGET_IP` with | Description | +|---|---|---|---| +| 1.6.7 | `nmap -p 4545 TARGET_IP` | calls-offloader server IP | Mattermost can reach the calls-offloader API | -Install `nc` if needed: +#### 1.6.8 Final checklist + +- [ ] Clients can reach the media service on UDP `8443`. +- [ ] Clients can reach the media service on TCP `8443` if you plan to rely on TCP fallback. +- [ ] Mattermost can reach RTCD on TCP `8045` — if using RTCD. +- [ ] Mattermost can reach calls-offloader on TCP `4545` — if using calls-offloader. +- [ ] If using STUN, confirm the media service can reach `stun.global.calls.mattermost.com` on UDP `3478` — validated in Phase 2 when you verify the plugin advertises the correct public IP. + +Before you leave Phase 1, plan at least one **real client-side test** in Phase 2 or Phase 5 from the same type of network your users will actually use, such as office LAN, home internet, VPN, or mobile data. + +````{dropdown} If nmap is not available +If you cannot install `nmap`, you can use `nc` instead. Unlike `nmap`, `nc` requires a temporary listener running on the target server before the check can work. + +Install `nc`: - Ubuntu or Debian: `sudo apt install netcat-openbsd` - RHEL or CentOS: `sudo dnf install nmap-ncat` -Run the TCP test from the source server: +**For TCP checks** (8443, 8045, 4545): On the target server, start a listener on the port you're testing: ```bash -nc -zv TARGET_IP PORT +nc -l -p PORT ``` -Examples: +Then from the source machine: ```bash -# Mattermost server to RTCD API -nc -zv YOUR_RTCD_SERVER 8045 - -# Mattermost server to calls-offloader API -nc -zv YOUR_OFFLOADER_SERVER 4545 +nc -zv TARGET_IP PORT ``` -Pass: - -- `Connection to ... succeeded` - -Fail: - -- `Connection refused` or timeout. Stop here and fix firewall, routing, or service exposure before proceeding. - -#### 1.6.3 Confirm UDP connectivity +Pass: `Connection to ... succeeded` -On the target server, stop the service if it already owns port `8443`, then start a UDP listener: +Fail: `Connection refused` (nothing is listening — the firewall is open, start the listener first) or timeout (firewall is blocking — fix before proceeding). -```bash -nc -l -u -p 8443 -``` - -If your `nc` version does not accept `-p`, try: +**For UDP 8443**: On the media server, start a UDP listener: ```bash nc -lu 8443 ``` -On the source machine: +Then from a client machine: ```bash nc -u TARGET_IP 8443 ``` -Type a short message and press Enter. If the message appears on the target server, UDP is working. - -#### 1.6.4 Final checklist - -- [ ] Clients can reach Mattermost on TCP `443`. -- [ ] Clients can reach the media service on UDP `8443`. -- [ ] Clients can reach the media service on TCP `8443` if you plan to rely on TCP fallback. -- [ ] Mattermost can reach RTCD on TCP `8045` if using RTCD. -- [ ] Mattermost can reach calls-offloader on TCP `4545` if using calls-offloader. -- [ ] The media service can reach UDP `3478` if using STUN. - -Before you leave Phase 1, plan at least one **real client-side test** in Phase 2 or Phase 5 from the same type of network your users will actually use, such as office LAN, home internet, VPN, or mobile data. +Type a short message and press Enter. If it appears on the server, the port is open. Stop listeners with `Ctrl+C`. +```` --- @@ -647,7 +617,19 @@ The Calls plugin metrics endpoint depends on Mattermost performance monitoring b ### 3.6 Verification gate -- [ ] **3.V1** `curl http://YOUR_RTCD_SERVER:8045/version` works from the Mattermost server (or `https://` if you enabled TLS). +**3.V0 — Confirm RTCD is listening on TCP 8045** + +Run this from the Mattermost server to confirm RTCD started successfully and is accepting connections: + +```bash +nc -zv YOUR_RTCD_SERVER 8045 +``` + +Pass: `Connection to ... succeeded` + +Fail: `Connection refused` — RTCD is not running or not listening. Check the RTCD service logs before proceeding. If you get a timeout instead of "Connection refused", the firewall path was not properly verified in Step 1.6.4 — go back and fix that first. + +- [ ] **3.V1** `curl http://YOUR_RTCD_SERVER:8045/version` returns a version string from the Mattermost server (or `https://` if you enabled TLS). - [ ] **3.V2** Two users can complete an audio call after `RTCD Service URL` is set. - [ ] **3.V3** Screen sharing works after `RTCD Service URL` is set. - [ ] **3.V4** `/call stats` after the test call shows a healthy negotiated connection. @@ -742,7 +724,19 @@ If you want AI-generated meeting summaries from call transcripts, configure Matt ### 4.6 Verification gate -- [ ] **4.V1** `curl http://YOUR_OFFLOADER_SERVER:4545/version` works from the Mattermost server (or `https://` if you enabled TLS). +**4.V0 — Confirm calls-offloader is listening on TCP 4545** + +Run this from the Mattermost server to confirm calls-offloader started successfully and is accepting connections: + +```bash +nc -zv YOUR_OFFLOADER_SERVER 4545 +``` + +Pass: `Connection to ... succeeded` + +Fail: `Connection refused` — calls-offloader is not running or not listening. Check the calls-offloader service logs before proceeding. If you get a timeout instead of "Connection refused", the firewall path was not properly verified in Step 1.6.5 — go back and fix that first. + +- [ ] **4.V1** `curl http://YOUR_OFFLOADER_SERVER:4545/version` returns a version string from the Mattermost server (or `https://` if you enabled TLS). - [ ] **4.V2** A test call still works normally after the job service is configured. - [ ] **4.V3** A host can start a recording. - [ ] **4.V4** The MP4 recording appears in the call thread after recording stops. From 89a8386f445d1b6f641236a7e3feb0cba0db1ed9 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 12:59:04 -0700 Subject: [PATCH 05/38] tweaks --- .../configure/calls-deployment.md | 499 ++++++------------ 1 file changed, 175 insertions(+), 324 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 286533823de..b60f38bad36 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -210,7 +210,7 @@ Your media server is the Mattermost server in the case of an **Integrated** Call **STUN Decision Tree** -1. **Are all users and your media server (Mattermost server or RTCD) in the same private network, VPN, or air-gapped environment (no outside clients)?** +1. **Are all users and your media server (Mattermost server or RTCD) are in the same private network, VPN, or air-gapped environment (no outside clients)?** - **Yes**: You do not need STUN. You will use the private address of your media server for configuration in Phase 2. - **No**: Continue to the next question. @@ -326,8 +326,8 @@ First, you'll have to install `nmap` on each machine you'll run checks from usin When you excute each check below, `nmap` will return `open`, `closed` or `filtered`. **Pass**: -- `open`: Port is reachable and the service is listeneing. Expected if you've already installed the RTCD or `calls-offloader` services) -- `closed`: Port is reachable but the service has not yet been installed. Expected if you just provisioned the machines in Step 1.4) +- `open`: Port is reachable and the service is running. Expected if you've already installed the RTCD or `calls-offloader` services (Phase 3-4). +- `closed`: Port is reachable but the service is not running. Expected if you just provisioned the infrastructure in Step 1.4. **Fail**: - `filtered`: Firewall is blocking the port. Revisit your networking configuration in Step 1.5 before continuing. @@ -335,7 +335,7 @@ When you excute each check below, `nmap` will return `open`, `closed` or `filter Run from a client machine on the same network as your users: -| Check | Command | Replace `TARGET_IP` with | Description | +| Check | Command | `TARGET_IP` | Description | |---|---|---|---| | 1.6.2 | `sudo nmap -sU -p 8443 TARGET_IP` | Mattermost server IP | Clients can send UDP media to the Mattermost server | | 1.6.3 | `nmap -p 8443 TARGET_IP` | Mattermost server IP | Clients can reach the Mattermost server for TCP media fallback | @@ -344,434 +344,277 @@ Run from a client machine on the same network as your users: Run from a client machine on the same network as your users: -| Check | Command | Replace `TARGET_IP` with | Description | +| Check | Command | `TARGET_IP` | Description | |---|---|---|---| | 1.6.4 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP | Clients can send UDP media to the RTCD server | | 1.6.5 | `nmap -p 8443 TARGET_IP` | RTCD server IP | Clients can reach the RTCD server for TCP media fallback | Run from the Mattermost server: -| Check | Command | Replace `TARGET_IP` with | Description | +| Check | Command | `TARGET_IP` | Description | |---|---|---|---| | 1.6.6 | `nmap -p 8045 TARGET_IP` | RTCD server IP | Mattermost can reach the RTCD API | -**Recording deployments** — run from the Mattermost server: +**Recording deployments** -| Check | Command | Replace `TARGET_IP` with | Description | +Run from the Mattermost server: + +| Check | Command | `TARGET_IP` | Description | |---|---|---|---| | 1.6.7 | `nmap -p 4545 TARGET_IP` | calls-offloader server IP | Mattermost can reach the calls-offloader API | -#### 1.6.8 Final checklist - -- [ ] Clients can reach the media service on UDP `8443`. -- [ ] Clients can reach the media service on TCP `8443` if you plan to rely on TCP fallback. -- [ ] Mattermost can reach RTCD on TCP `8045` — if using RTCD. -- [ ] Mattermost can reach calls-offloader on TCP `4545` — if using calls-offloader. -- [ ] If using STUN, confirm the media service can reach `stun.global.calls.mattermost.com` on UDP `3478` — validated in Phase 2 when you verify the plugin advertises the correct public IP. - -Before you leave Phase 1, plan at least one **real client-side test** in Phase 2 or Phase 5 from the same type of network your users will actually use, such as office LAN, home internet, VPN, or mobile data. - -````{dropdown} If nmap is not available -If you cannot install `nmap`, you can use `nc` instead. Unlike `nmap`, `nc` requires a temporary listener running on the target server before the check can work. - -Install `nc`: - -- Ubuntu or Debian: `sudo apt install netcat-openbsd` -- RHEL or CentOS: `sudo dnf install nmap-ncat` - -**For TCP checks** (8443, 8045, 4545): On the target server, start a listener on the port you're testing: - -```bash -nc -l -p PORT -``` - -Then from the source machine: - -```bash -nc -zv TARGET_IP PORT -``` - -Pass: `Connection to ... succeeded` +Run from the calls-offloader server: -Fail: `Connection refused` (nothing is listening — the firewall is open, start the listener first) or timeout (firewall is blocking — fix before proceeding). +| Check | Command | `TARGET_IP` | Description | +|---|---|---|---| +| 1.6.8 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP | `calls-offloader` can send UDP media to the media service to join calls for recording | +| 1.6.9 | `nmap -p 8443 TARGET_IP` | RTCD server IP | `calls-offloader` can reach the media service for TCP media fallback | +| 1.6.10 | `nmap -p 443 TARGET_IP` | Mattermost server IP | `calls-offloader` can post recordings back to Mattermost | -**For UDP 8443**: On the media server, start a UDP listener: +**TURN deployments** -```bash -nc -lu 8443 -``` +Run from a client machine on the same network as your users: -Then from a client machine: +| Check | Command | `TARGET_IP` | Description | +|---|---|---|---| +| 1.6.11 | `sudo nmap -sU -p 3478 TARGET_IP` | TURN server IP | Clients can reach the TURN server on UDP 3478 | +| 1.6.12 | `nmap -p 3478 TARGET_IP` | TURN server IP | Clients can reach the TURN server on TCP 3478 | +| 1.6.13 | `nmap -p 5349 TARGET_IP` | TURN server IP | Clients can reach the TURN server over TLS (only if you configured TLS on coturn) | +| 1.6.14 | `sudo nmap -sU -p 49152 TARGET_IP` | TURN server IP | Spot check of the TURN relay port range | -```bash -nc -u TARGET_IP 8443 +```{important} +**Do not proceed to Phase 2 until all checks in this section relevant to your deployment architecture are passing. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` -Type a short message and press Enter. If it appears on the server, the port is open. Stop listeners with `Ctrl+C`. -```` - --- -## Phase 2: Configure and validate integrated Calls - -### 2.1 Overview - -Start here even if you know you want RTCD later. - -That gives you a clean baseline: if Calls does not work in integrated mode, the problem is usually networking, NAT, firewall rules, or plugin configuration. It is much easier to isolate those problems before you add RTCD or calls-offloader. - -### 2.2 Prerequisites - -- [ ] Phase 1 passed -- [ ] You have at least two Mattermost test accounts -- [ ] You have System Admin access - -### 2.3 Configure the Calls plugin +## Phase 2: Configure Integrated Calls -The Calls plugin is prepackaged with Mattermost self-hosted deployments. +You will start by deploying Calls using the Integrated architecture, even if you plan to use RTCD or `calls-offloader` services. This approach gives you a clean baseline: if Calls does not work using the simplest deployment method, the problem is usually networking, firewall rules, or plugin configuration. It is much easier to isolate those problems before you add RTCD or `calls-offloader` in later phases. -#### 2.3.1 Enable the plugin +### 2.1 Prerequisites -Go to **System Console > Plugins > Calls** and confirm the plugin is enabled. +- [ ] Phase 1 networking checks passed (1.6.1-1.6.14) +- [ ] Two test accounts on your Mattermost instance +- [ ] System Admin permissions on your Mattermost instance -If it is disabled, go to **System Console > Plugins > Plugin Management**, find **Calls**, and enable it. +### 2.2 Configure the Calls plugin -#### 2.3.2 Put the deployment in test mode +The Calls plugin is prepackaged with Mattermost self-hosted deployments. Go to **System Console > Plugins > Calls > Settings** and complete the following steps: -Use the **Test mode** setting in **Plugins > Calls** so you can validate Calls before switching to live mode for all users. +**2.2.1: Enable the plugin** -When the deployment is in test mode: +Set **Enable Plugin** to `true`. This enables editing for the rest of the configuration settings on the page. -- system admins can validate Calls first -- users are prompted to contact a system admin instead of starting calls broadly +**2.2.2: Put the deployment in test mode** -#### 2.3.3 Set the participant limit for testing +Set **Test mode** to `on`. This ensures System Admins must enable Calls in individual channels before end users can access the feature. -Set **Max call participants** to `50`. +**2.2.3: Configure the host media address** -Why this matters: +Set **ICE Host Override** to the IP address clients will use to reach the media service. This is based on the STUN decision tree you completed in Step 1.3.1. -- the default is `0`, which means unlimited -- the recommended maximum is `50` -- setting it now prevents accidental oversized tests while you validate the deployment +- If your users are in an private network, VPN, or air-gapped environment, set it to the private address of the Mattermost server they can reach. +- If your Mattermost server has a stable public IP, set it to that IP. +- Otherwise, leave it empty for automatic public address discovery using STUN. -#### 2.3.4 Configure the advertised media address +**2.2.4: Configure TURN Servers** -If you are using integrated Calls, use the Calls plugin settings below to tell clients how to reach the media service. - -**ICE** is the part of WebRTC that helps clients discover which address and port to use for media traffic. - -- **ICE Host Override**: Use this when you want to advertise a specific IP address or hostname to clients instead of relying on automatic discovery through STUN. -- **ICE Host Port Override**: Use this if clients must connect on a different external port than the one the service listens on locally. -- **ICE server configurations**: Use this for STUN and TURN configuration. - -Use the following rules: - -- If your Mattermost server has a stable public IP that clients can reach, set **ICE Host Override** to that IP. -- If your users are all on a private network or VPN, set **ICE Host Override** to the private address they can actually reach. -- If you want the service to discover its own public address, leave **ICE Host Override** empty and use STUN. -- If you use a hostname instead of an IP, verify that DNS resolution on the Mattermost host matches what clients will actually reach. When in doubt, use an IP address directly. - -```{note} -`ICE Host Override` only applies when you are hosting media through the plugin itself. Once you move Calls media to RTCD in Phase 3, RTCD handles its own media address configuration. -``` - -#### 2.3.5 Configure STUN or TURN - -The default **ICE server configurations** value is: - -```json -[{"urls":["stun:stun.global.calls.mattermost.com:3478"]}] -``` - -If you need TURN, use a JSON array such as: +If TURN is being used, replace or extend the **ICE server configurations** array with your TURN server details: ```json [ { "urls": ["turn:turn.example.com:3478"], - "username": "REPLACE_ME_USERNAME", - "credential": "REPLACE_ME_PASSWORD" + "username": "", + "credential": "" } ] ``` -Use `credential` (singular) in the JSON. Replace the example values with your real TURN credentials. - -If your TURN deployment uses generated short-lived credentials, also configure: +If your TURN deployment uses short-lived generated credentials, also set **TURN Static Auth Secret** and **TURN Credentials Expiration**. -- **TURN Static Auth Secret** -- **TURN Credentials Expiration** +**2.3.5: Save configuration** -#### 2.3.6 Save and restart the plugin if needed - -Some network-facing Calls settings require a plugin restart to take effect. After changing **ICE Host Override**, **ICE Host Port Override**, or similar media settings: +Click **Save** on the Calls settings page. It is generally also recommended restart the plugin after changing media server settings: 1. Go to **System Console > Plugins > Plugin Management**. -2. Disable **Calls**. -3. Wait a few seconds. -4. Enable **Calls** again. - -### 2.4 Create a small test channel - -#### 2.4.1 Create the channel - -Create a test channel such as `calls-test`. - -#### 2.4.2 Enable Calls in that channel - -From the channel header: - -1. Open the channel menu. -2. Select **Enable calls**. +2. Disable **Calls** and wait a few seconds. +3. Enable **Calls** again. -#### 2.4.3 Add your test users +### 2.4 Verification Checks -Add at least two users so you can validate a real call. +Now you can move to smoke testing your Calls deployment with your test accounts. Specifically, -### 2.5 Verification gate +- Create a test channel such as `calls-test`. +- Open the **Channel menu**, then select **Enable calls**. +- Invite your test users into the channel so you can validate a real call. -Do not continue until all of the following pass. - -- [ ] **2.V1** Start a call from the test channel and confirm that a second user can join. -- [ ] **2.V2** Confirm both users can hear each other clearly. -- [ ] **2.V3** Confirm screen sharing works from a desktop app or supported browser. -- [ ] **2.V4** End the call cleanly and confirm the call indicator disappears. -- [ ] **2.V5** Run `/call stats` immediately after the test call and save the output for your deployment notes. +| Check | Action | Pass criteria | +|---|---|---| +| 2.4.1 | Start a call from the test channel with a second user | Both users are in the call | +| 2.4.2 | Speak during the call | Both users can hear each other clearly | +| 2.4.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | +| 2.4.4 | End the call | The call indicator disappears from the channel | -If any of these checks fail, stop here and go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting). +```{important} +**Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** +``` --- -## Phase 3: Add RTCD - -### 3.1 Overview +## Phase 3: Install and Configure RTCD -RTCD moves media handling off the Mattermost server. That improves isolation and gives you a better path for production scaling. +Now that you've verified a basic Integrated Calls deployment, you can add RTCD to move media handling off the Mattermost server. -Skip this phase if you are staying with integrated Calls. +**You can skip this phase if you are using Integrated Calls only.** -### 3.2 Prerequisites +### 3.1 Prerequisites -- [ ] Phase 2 passed -- [ ] Mattermost Enterprise license is active -- [ ] RTCD server is provisioned -- [ ] Mattermost can reach RTCD on TCP `8045` -- [ ] Clients can reach the RTCD media ports on `8443` +- [ ] RTCD server is provisioned (1.4) and networking checks passed (1.6.1-1.6.14) +- [ ] Integrated Calls deployment checks passed (2.4.1-2.4.4) +- [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server -### 3.3 Install and configure RTCD -Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. +### 3.3 Install RTCD -That guide covers: +Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. The guide covers: -- binary or Docker installation +- Binary or Docker installation - `rtcd.toml` configuration -- service setup -- TURN configuration -- validation with `curl http://HOST:8045/version` (or `https://` if you enabled TLS) -- horizontal scaling +- Service setup +- TURN configuration (if applicable) -If RTCD is behind NAT or a load balancer, configure its advertised media address in `rtcd.toml` before continuing. +Before proceeding, run these checks from the Mattermost server to verify your RTCD service is running and accessible: -When you move media handling to RTCD, configure the **media-plane** address and TURN/STUN settings in `rtcd.toml`. The plugin's client-facing ICE settings still matter for what gets sent to clients, so keep the plugin and RTCD settings aligned. +| Check | Command | Pass criteria | +|---|---|---| +| 3.3.1 | `nmap -p 8045 YOUR_RTCD_SERVER` | `open` — RTCD is running and accepting connections. | +| 3.3.2 | `curl http://YOUR_RTCD_SERVER:8045/version` | Returns a JSON version string | ### 3.4 Connect Mattermost to RTCD -From the Mattermost server, verify the RTCD API first. If you enabled TLS on the RTCD API, use `https://` instead of `http://`: +Once you have completed installation, configuration and validation of your RTCD service, you will update the Calls plugin configuration settings to use it: -```bash -curl http://YOUR_RTCD_SERVER:8045/version -``` +1. Go to **System Console > Plugins > Calls**. +2. Set **RTCD Service URL** to your RTCD address. If RTCD credentials were generated during setup, embed them directly in the URL: -Pass: + ``` + http://clientID:authKey@rtcd.internal:8045 + ``` -- you receive JSON version information + Replace `clientID` and `authKey` with the values generated during RTCD setup. The first connection to RTCD self-registers the client and stores the authentication key in the database. + + Alternatively, set credentials via environment variables on the Mattermost server: `MM_CALLS_RTCD_CLIENT_ID` and `MM_CALLS_RTCD_AUTH_KEY`. -Then configure Mattermost: +3. Click **Save** and restart the Calls plugin so the change takes effect. -1. Go to **System Console > Plugins > Calls**. -2. Set **RTCD Service URL** to your RTCD address, for example `http://rtcd.internal:8045`. -3. If RTCD credentials were generated during setup, include them in the URL or use `MM_CALLS_RTCD_CLIENT_ID` and `MM_CALLS_RTCD_AUTH_KEY` on the Mattermost server. -4. Save the setting. -5. Restart the Calls plugin so the change takes effect. - -```{note} -The `RTCD Service URL` setting supports credentials in the form `http://clientID:authKey@hostname`. The first connection self-registers the client and stores the authentication key in the database. -``` -### 3.5 Set up monitoring before the pilot +### 3.5 Configure Calls Monitoring Before your pilot, set up Calls monitoring so you can see sessions, errors, CPU, and memory while real users are testing. See [Calls Metrics and Monitoring](calls-metrics-monitoring.md) for: -- Prometheus scrape configuration +- Prometheus configuration - RTCD metrics on `http://RTCD_SERVER:8045/metrics` - Calls plugin metrics on `http://MATTERMOST_SERVER:8067/plugins/com.mattermost.calls/metrics` -- Grafana dashboard ID `23225` +- Grafana visualization using dashboard ID `23225` -```{note} -The Calls plugin metrics endpoint depends on Mattermost performance monitoring being enabled. Port `8067` is the default performance listener and may be different in your environment. -``` +### 3.6 Verification Checks -### 3.6 Verification gate +Now you can move to smoke testing your RTCD Calls deployment with your test accounts. Specifically, -**3.V0 — Confirm RTCD is listening on TCP 8045** - -Run this from the Mattermost server to confirm RTCD started successfully and is accepting connections: +| Check | Action | Pass criteria | +|---|---|---| +| 3.6.1 | Start a call from the test channel with a second user | Both users are in the call | +| 3.6.2 | Speak during the call | Both users can hear each other clearly | +| 3.6.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | +| 3.6.4 | End the call | The call indicator disappears from the channel | -```bash -nc -zv YOUR_RTCD_SERVER 8045 +```{important} +**Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` -Pass: `Connection to ... succeeded` - -Fail: `Connection refused` — RTCD is not running or not listening. Check the RTCD service logs before proceeding. If you get a timeout instead of "Connection refused", the firewall path was not properly verified in Step 1.6.4 — go back and fix that first. - -- [ ] **3.V1** `curl http://YOUR_RTCD_SERVER:8045/version` returns a version string from the Mattermost server (or `https://` if you enabled TLS). -- [ ] **3.V2** Two users can complete an audio call after `RTCD Service URL` is set. -- [ ] **3.V3** Screen sharing works after `RTCD Service URL` is set. -- [ ] **3.V4** `/call stats` after the test call shows a healthy negotiated connection. -- [ ] **3.V5** RTCD logs or metrics show activity during the test call. - -If these checks fail: - -- confirm TCP `8045` from Mattermost to RTCD -- confirm UDP and TCP `8443` from clients to RTCD -- confirm the Calls plugin was restarted after the URL change - --- ## Phase 4: Add calls-offloader for recording, transcription, and live captions -### 4.1 Overview - -`calls-offloader` is the job service used for: +`calls-offloader` is the job service that handles call recording, transcription, and live captions. You can add it after Phase 2 on Integrated Calls or after Phase 3 on RTCD. For most production environments, pair it with RTCD. -- call recording -- call transcription -- live captions (experimental) +**You can skip this phase if you do not need recording, transcription, or live captions.** -You can add it after Phase 2 on integrated Calls or after Phase 3 on RTCD. For most production environments, pair it with RTCD. - -### 4.2 Prerequisites - -- [ ] Phase 2 passed -- [ ] If you are using RTCD, Phase 3 also passed -- [ ] Mattermost Enterprise license is active -- [ ] calls-offloader server is provisioned -- [ ] Docker is installed and running on the calls-offloader server -- [ ] The calls-offloader service account can use Docker -- [ ] Mattermost can reach the job service on TCP `4545` -- [ ] You have planned storage for recordings +### 4.1 Prerequisites -Storage estimates from the offloader guide: +- [ ] `calls-offloader` server is provisioned (1.4) and networking checks passed (1.6.1-1.6.14) +- [ ] RTCD verification checks passed (3.6.1-3.6.4) +- [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server -| Recording quality | Approximate storage per hour | Approximate storage per minute | -|---|---|---| -| Low | 0.5 GB | 8 MB | -| Medium | 0.7 GB | 12 MB | -| High | 1.2 GB | 20 MB | - -Audio-only recordings consume approximately `1 MB` per minute per participant. - -```{note} -Live captions require both recording and transcription to be enabled. -``` +### 4.2 Install calls-offloader -### 4.3 Install and configure calls-offloader +Follow the [Calls Offloader Setup and Configuration](calls-offloader-setup.md) guide for installation. The guide covers: -Follow the [Calls Offloader Setup and Configuration](calls-offloader-setup.md) guide for installation. - -That guide covers: - -- binary installation -- `config.toml` -- systemd service setup +- Binary installation +- `config.toml` configuration +- Systemd service setup - Docker-backed jobs -- private network overrides -- air-gapped installation +- Private network overrides +- Air-gapped installation -### 4.4 Connect calls-offloader to Mattermost +Before proceeding, run these checks from the Mattermost server to verify calls-offloader is running and accessible: -From the Mattermost server, verify the API first. If you enabled TLS on the offloader API, use `https://` instead of `http://`: - -```bash -curl http://YOUR_OFFLOADER_SERVER:4545/version -``` +| Check | Command | Pass criteria | +|---|---|---| +| 4.2.1 | `nmap -p 4545 YOUR_OFFLOADER_SERVER` | `open` — calls-offloader is running and accepting connections. | +| 4.2.2 | `curl http://YOUR_OFFLOADER_SERVER:4545/version` | Returns a JSON version string | -Then configure Mattermost: +### 4.3 Connect calls-offloader to Mattermost 1. Go to **System Console > Plugins > Calls**. 2. Set **Job Service URL** to the calls-offloader address, for example `http://calls-offloader.internal:4545`. 3. Enable **Call Recordings** if needed. -4. Enable **Call Transcriptions** if needed. Transcriptions require recordings. -5. Enable **Live Captions** if needed. Live captions require both recordings and transcriptions. -6. Save the settings. -7. Restart the Calls plugin. This is required for `Job Service URL` and recording-related changes to take effect cleanly. - -If your recorder or transcriber jobs must reach Mattermost on a different internal address than users do, configure these on the **Mattermost server**: - -- `MM_CALLS_RECORDER_SITE_URL` -- `MM_CALLS_TRANSCRIBER_SITE_URL` +4. Enable **Call Transcriptions** if needed. Transcriptions require recordings to be enabled. +5. Enable **Live Captions** if needed. Live captions require both recordings and transcriptions to be enabled. +6. Click **Save** and restart the Calls plugin so the change takes effect. -See the offloader guide for that private network setup. +### 4.4 Verification Checks -### 4.5 AI meeting summaries +Now you can move to smoke testing your Calls deployment with recording using your test accounts. Specifically, -If you want AI-generated meeting summaries from call transcripts, configure Mattermost AI separately. See [Enable Copilot](https://docs.mattermost.com/configure/enable-copilot.html). - -### 4.6 Verification gate - -**4.V0 — Confirm calls-offloader is listening on TCP 4545** - -Run this from the Mattermost server to confirm calls-offloader started successfully and is accepting connections: +| Check | Action | Pass criteria | +|---|---|---| +| 4.5.2 | During a call, start a recording as a call host | Recording starts without error. | +| 4.5.3 | End the call or stop the recording | An MP4 file appears in the call thread after processing is complete. | +| 4.5.4 | With transcription enabled, end a recorded call | A MP4 file and transcript file appear in the call thread after processing is complete. | +| 4.5.5 | With live captions enabled, start a recorded call | Captions appear during the call within 1-3 seconds after participants speak. | -```bash -nc -zv YOUR_OFFLOADER_SERVER 4545 +```{important} +**Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` -Pass: `Connection to ... succeeded` - -Fail: `Connection refused` — calls-offloader is not running or not listening. Check the calls-offloader service logs before proceeding. If you get a timeout instead of "Connection refused", the firewall path was not properly verified in Step 1.6.5 — go back and fix that first. - -- [ ] **4.V1** `curl http://YOUR_OFFLOADER_SERVER:4545/version` returns a version string from the Mattermost server (or `https://` if you enabled TLS). -- [ ] **4.V2** A test call still works normally after the job service is configured. -- [ ] **4.V3** A host can start a recording. -- [ ] **4.V4** The MP4 recording appears in the call thread after recording stops. -- [ ] **4.V5** If transcription is enabled, the transcript file appears after the recording finishes. -- [ ] **4.V6** If live captions are enabled, captions appear during a recorded call. - -If these checks fail, go to [A.5 Recording, transcription, or captions are failing](#a5-recording-transcription-or-captions-are-failing). - --- ## Phase 5: Pilot rollout -### 5.1 Overview - -Now that the technical configuration is validated, run a small pilot with real users before broad rollout. +Now that the technical configuration is complete and validated, run a small pilot with real users before broad rollout. The goal is to confirm Calls works reliably across the clients and locations your organization uses, and that your servers stay healthy under normal usage. -The goal of the pilot is to answer three questions: - -1. Does Calls work reliably for real users? -2. Does it work across the clients and locations your organization uses? -3. Do your servers and network stay healthy under normal usage? - -### 5.2 Prerequisites +### 5.1 Prerequisites - [ ] Phase 2 passed - [ ] Phase 3 passed if using RTCD - [ ] Phase 4 passed if using calls-offloader -- [ ] You have 5 to 10 pilot users from different locations and client types -- [ ] Pilot users have current Mattermost desktop or mobile apps +- [ ] You have 5 to 10 pilot users from different locations +- [ ] Pilot users have current [Mattermost desktop and mobile apps](https://mattermost.com/apps/) + +### 5.2 Prepare the pilot channel -### 5.3 Prepare the pilot channel and message +**5.2.1: Create the pilot channel** -Create a pilot channel such as `calls-pilot`, enable Calls in that channel, and post the following message. +Create a channel such as `calls-pilot` and enable Calls in it. If test mode is still enabled, a system admin must start each call. -If test mode is still enabled, have a **system admin** start each pilot call. +**5.2.2: Post the pilot message** + +Send pilot users the following message so they know what to test and how to report issues.
Click to expand the pilot message template @@ -812,29 +655,37 @@ Reply in this channel with:
-### 5.4 What to watch during the pilot +### 5.3 What to watch during the pilot + +Monitor the following while pilot calls are running: + +- **Active sessions and participants**: Confirm calls are being counted in your Calls metrics. +- **RTC errors**: Watch `rtcd_rtc_errors_total` (RTCD) or the equivalent Calls plugin metrics in integrated mode. +- **CPU and memory**: Watch `rtcd_process_cpu_seconds_total` and `rtcd_process_resident_memory_bytes` (RTCD) or the equivalent plugin metrics in integrated mode. +- **Service logs**: Watch Mattermost, RTCD, and calls-offloader logs for recurring `ERROR` or `WARN` lines. -Use your monitoring and logs to watch the following: +If you do not have Prometheus and Grafana set up yet, tail the service logs directly during pilot sessions. -- **Active sessions and participants**: The Calls metrics guide exposes session and participant data so you can confirm calls are being counted. -- **RTC errors**: Watch `rtcd_rtc_errors_total` or the equivalent Calls plugin metrics if you are using integrated mode. -- **CPU and memory**: Use RTCD process metrics such as `rtcd_process_cpu_seconds_total` and `rtcd_process_resident_memory_bytes`, or the equivalent plugin metrics in integrated mode. -- **Service logs**: Watch Mattermost, RTCD, and calls-offloader for recurring `ERROR` or `WARN` lines during pilot sessions. +### 5.4 Verification Checks -If you do not have Prometheus and Grafana set up yet, monitor Mattermost, RTCD, and calls-offloader logs during the pilot instead. +Do not continue until all of the following pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting). -### 5.5 Verification gate +| Check | Action | Pass criteria | +|---|---|---| +| 5.4.1 | Two pilot users complete a 1:1 audio call | Both users can hear each other clearly for the duration of the call | +| 5.4.2 | Run a group call with at least 3 pilot users | All participants can hear each other clearly | +| 5.4.3 | Run a call lasting 15 minutes or longer | No unexpected drops or audio degradation | +| 5.4.4 | Share your screen from a desktop app or browser during a pilot call | Screen sharing is visible to other participants | +| 5.4.5 | Have at least one user join from outside the main office network (home, VPN, or mobile data) | Call quality is acceptable from that network | +| 5.4.6 | Have at least one user join on mobile | Call joins and audio works on mobile | +| 5.4.7 | If recording is enabled, start and stop a recording during a pilot call | MP4 file appears in the call thread | +| 5.4.8 | If transcription is enabled, stop a recording | Transcript file appears after processing | +| 5.4.9 | If live captions are enabled, run a recorded pilot call | Captions appear in real time for participants | +| 5.4.10 | Run `/call stats` after a successful pilot call | Output is returned — save it for your deployment notes | -- [ ] **5.V1** Two users complete a 1:1 audio call successfully. -- [ ] **5.V2** At least one group call with 3 or more users completes successfully. -- [ ] **5.V3** At least one pilot call lasts 15 minutes or longer without unexpected drops. -- [ ] **5.V4** Screen sharing works from a desktop app or browser. -- [ ] **5.V5** At least one user joins from outside the main office network, if that matches your deployment. -- [ ] **5.V6** At least one user joins on mobile. -- [ ] **5.V7** If recording is enabled, recording works during the pilot. -- [ ] **5.V8** If transcription is enabled, transcription works during the pilot. -- [ ] **5.V9** If live captions are enabled, captions work during the pilot. -- [ ] **5.V10** The admin has saved at least one `/call stats` sample from a successful pilot call. +```{important} +**Do not continue until all checks pass.** +``` --- From 4da4a85ca0a8ea7ea2da05d21acd9eead95e9020 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 13:21:25 -0700 Subject: [PATCH 06/38] tweaks --- .../configure/calls-deployment.md | 66 ++++++++----------- 1 file changed, 27 insertions(+), 39 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index b60f38bad36..1e4ea8ff702 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -583,10 +583,10 @@ Now you can move to smoke testing your Calls deployment with recording using you | Check | Action | Pass criteria | |---|---|---| -| 4.5.2 | During a call, start a recording as a call host | Recording starts without error. | -| 4.5.3 | End the call or stop the recording | An MP4 file appears in the call thread after processing is complete. | -| 4.5.4 | With transcription enabled, end a recorded call | A MP4 file and transcript file appear in the call thread after processing is complete. | -| 4.5.5 | With live captions enabled, start a recorded call | Captions appear during the call within 1-3 seconds after participants speak. | +| 4.4.1 | During a call, start a recording as a call host | Recording starts without error. | +| 4.4.2 | End the call or stop the recording | An MP4 file appears in the call thread after processing is complete. | +| 4.4.3 | With transcription enabled, end a recorded call | An MP4 file and transcript file appear in the call thread after processing is complete. | +| 4.4.4 | With live captions enabled, start a recorded call | Captions appear during the call within 1-3 seconds after participants speak. | ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** @@ -600,71 +600,59 @@ Now that the technical configuration is complete and validated, run a small pilo ### 5.1 Prerequisites -- [ ] Phase 2 passed -- [ ] Phase 3 passed if using RTCD -- [ ] Phase 4 passed if using calls-offloader -- [ ] You have 5 to 10 pilot users from different locations +- [ ] RTCD verification checks passed (3.6.1-3.6.4) +- [ ] Recording verification checks passed (4.4.1-4.4.4) +- [ ] 5 to 10 volunteer pilot users from different locations - [ ] Pilot users have current [Mattermost desktop and mobile apps](https://mattermost.com/apps/) -### 5.2 Prepare the pilot channel - -**5.2.1: Create the pilot channel** - -Create a channel such as `calls-pilot` and enable Calls in it. If test mode is still enabled, a system admin must start each call. +### 5.2 User Preparation and Communication -**5.2.2: Post the pilot message** +For a successful pilot, ensure your pilot users know how to use Calls features, what they should test, and how to report any issues they encounter. -Send pilot users the following message so they know what to test and how to report issues. +After inviting your pilot users into the `calls-test` channel, we recommend sharing some communication (as a message in the channel) to help direct their testing. A message template is provided below:
-Click to expand the pilot message template +Pilot user communication template ```markdown ## Mattermost Calls pilot -We are testing Mattermost Calls before wider rollout. - -**What you are testing** - -- starting and joining an audio call -- hearing other participants clearly -- screen sharing from desktop or browser -- joining from different clients or networks if possible +Thank you for volunteering to testing Mattermost Calls before a wider rollout. **How to start** -Select **Start call** in the channel header. Anyone in this channel can join. +Calls is enabled in this channel only. You can select **Start call** in the channel header to begin, or join an existing call if one is already started. -**Please try the following** +**Please test the following** -- [ ] Join a 1:1 test call -- [ ] Join a group call with at least 3 participants +- [ ] Start, join and leave calls - [ ] Share your screen from desktop or browser -- [ ] Join from a second client if possible -- [ ] Join from home, VPN, or mobile data if possible +- [ ] Recording your calls +- [ ] Use Live Captioning during a recorded call +- [ ] Joining from various clients (desktop and mobile apps) +- [ ] Join from various network locations -**If something fails** +**If you encounter issues** -Reply in this channel with: +Post a message in this channel with: -- what step failed -- what you expected to happen -- what actually happened -- your client type (desktop, browser, or mobile) +- Reproduction steps +- What you expected to happen +- What actually happened (with screenshots if possible) +- Your client type (desktop, browser, or mobile) ```
-### 5.3 What to watch during the pilot +### 5.3 Pilot Montitoring Monitor the following while pilot calls are running: - **Active sessions and participants**: Confirm calls are being counted in your Calls metrics. -- **RTC errors**: Watch `rtcd_rtc_errors_total` (RTCD) or the equivalent Calls plugin metrics in integrated mode. +- **RTCD errors**: Watch `rtcd_rtc_errors_total` (RTCD) or the equivalent Calls plugin metrics in integrated mode. - **CPU and memory**: Watch `rtcd_process_cpu_seconds_total` and `rtcd_process_resident_memory_bytes` (RTCD) or the equivalent plugin metrics in integrated mode. - **Service logs**: Watch Mattermost, RTCD, and calls-offloader logs for recurring `ERROR` or `WARN` lines. -If you do not have Prometheus and Grafana set up yet, tail the service logs directly during pilot sessions. ### 5.4 Verification Checks From a298cbdd46fb8685f482e631a54d0a1e8a8ead9b Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 15:33:16 -0700 Subject: [PATCH 07/38] tweaks --- .../configure/calls-deployment.md | 205 ++++++++++-------- 1 file changed, 112 insertions(+), 93 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 1e4ea8ff702..3d169f2d1ba 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -395,8 +395,8 @@ You will start by deploying Calls using the Integrated architecture, even if you ### 2.1 Prerequisites - [ ] Phase 1 networking checks passed (1.6.1-1.6.14) -- [ ] Two test accounts on your Mattermost instance -- [ ] System Admin permissions on your Mattermost instance +- [ ] Two test accounts on your Mattermost server +- [ ] System Admin permissions on your Mattermost server ### 2.2 Configure the Calls plugin @@ -474,6 +474,7 @@ Now that you've verified a basic Integrated Calls deployment, you can add RTCD t - [ ] RTCD server is provisioned (1.4) and networking checks passed (1.6.1-1.6.14) - [ ] Integrated Calls deployment checks passed (2.4.1-2.4.4) - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server +- [ ] System Admin permissions on your Mattermost server ### 3.3 Install RTCD @@ -549,6 +550,7 @@ Now you can move to smoke testing your RTCD Calls deployment with your test acco - [ ] `calls-offloader` server is provisioned (1.4) and networking checks passed (1.6.1-1.6.14) - [ ] RTCD verification checks passed (3.6.1-3.6.4) - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server +- [ ] System Admin permissions on your Mattermost server ### 4.2 Install calls-offloader @@ -603,175 +605,192 @@ Now that the technical configuration is complete and validated, run a small pilo - [ ] RTCD verification checks passed (3.6.1-3.6.4) - [ ] Recording verification checks passed (4.4.1-4.4.4) - [ ] 5 to 10 volunteer pilot users from different locations +- [ ] Access to the metrics dashboard and logs on your Calls infrastructure - [ ] Pilot users have current [Mattermost desktop and mobile apps](https://mattermost.com/apps/) -### 5.2 User Preparation and Communication +### 5.2 Preparation and Communication For a successful pilot, ensure your pilot users know how to use Calls features, what they should test, and how to report any issues they encounter. After inviting your pilot users into the `calls-test` channel, we recommend sharing some communication (as a message in the channel) to help direct their testing. A message template is provided below: -
+
Pilot user communication template ```markdown ## Mattermost Calls pilot -Thank you for volunteering to testing Mattermost Calls before a wider rollout. +Thank you for volunteering to testing Mattermost Calls before a wider rollout. After 3-5 days of pilot testing, we will ask everyone to share their findings and experiences. Please track any issues or feedback so you can provide a summary when requested. **How to start** -Calls is enabled in this channel only. You can select **Start call** in the channel header to begin, or join an existing call if one is already started. +Calls is enabled in this channel for pilot testing. You can select **Start call** in the channel header to begin, or join an existing call if one is already started. -**Please test the following** +**Test Cases** -- [ ] Start, join and leave calls -- [ ] Share your screen from desktop or browser -- [ ] Recording your calls -- [ ] Use Live Captioning during a recorded call -- [ ] Joining from various clients (desktop and mobile apps) -- [ ] Join from various network locations +| Test | Action | Pass criteria | Client Types | +|---|---|---|---| +| T1 | Group call with 3-5 participants | All participants can hear each other clearly | Web, Desktop, Mobile | +| T2 | Group call lasting 15 minutes or longer | No unexpected drops or audio degradation | Web, Desktop, Mobile | +| T3 | Participants join calls from outside the main office network | Call quality is acceptable from that network | Web, Desktop, Mobile | +| T4 | Participants share screen during a call | Screen sharing works and is visible to all participants | Desktop, Web | +| T5 | Record a group call | MP4 and transcription file appear in the call thread after processing completes | Web, Desktop, Mobile | +| T6 | Enable Live Captions during a group call | Captions appear during the call within 1-3 seconds after participants speak. | Web, Desktop | -**If you encounter issues** +**Reporting Issues** -Post a message in this channel with: +If you encounter an issues, please report them by making a post in this channel, including: +- Test number - Reproduction steps - What you expected to happen -- What actually happened (with screenshots if possible) +- What actually happened (with screenshots) - Your client type (desktop, browser, or mobile) ```
-### 5.3 Pilot Montitoring - -Monitor the following while pilot calls are running: - -- **Active sessions and participants**: Confirm calls are being counted in your Calls metrics. -- **RTCD errors**: Watch `rtcd_rtc_errors_total` (RTCD) or the equivalent Calls plugin metrics in integrated mode. -- **CPU and memory**: Watch `rtcd_process_cpu_seconds_total` and `rtcd_process_resident_memory_bytes` (RTCD) or the equivalent plugin metrics in integrated mode. -- **Service logs**: Watch Mattermost, RTCD, and calls-offloader logs for recurring `ERROR` or `WARN` lines. +### 5.3 Verification Checks -### 5.4 Verification Checks - -Do not continue until all of the following pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting). +**Monitoring** | Check | Action | Pass criteria | |---|---|---| -| 5.4.1 | Two pilot users complete a 1:1 audio call | Both users can hear each other clearly for the duration of the call | -| 5.4.2 | Run a group call with at least 3 pilot users | All participants can hear each other clearly | -| 5.4.3 | Run a call lasting 15 minutes or longer | No unexpected drops or audio degradation | -| 5.4.4 | Share your screen from a desktop app or browser during a pilot call | Screen sharing is visible to other participants | -| 5.4.5 | Have at least one user join from outside the main office network (home, VPN, or mobile data) | Call quality is acceptable from that network | -| 5.4.6 | Have at least one user join on mobile | Call joins and audio works on mobile | -| 5.4.7 | If recording is enabled, start and stop a recording during a pilot call | MP4 file appears in the call thread | -| 5.4.8 | If transcription is enabled, stop a recording | Transcript file appears after processing | -| 5.4.9 | If live captions are enabled, run a recorded pilot call | Captions appear in real time for participants | -| 5.4.10 | Run `/call stats` after a successful pilot call | Output is returned — save it for your deployment notes | +| 5.3.1 | Check your metrics dashboard during a pilot call | Active sessions and participants are visible and counted correctly | +| 5.3.2 | Check RTCD error metrics after pilot calls (`rtcd_rtc_errors_total`) | No elevated error counts | +| 5.3.3 | Check CPU and memory metrics during a pilot call (`rtcd_process_cpu_seconds_total`, `rtcd_process_resident_memory_bytes`) | CPU and memory stay within expected bounds | +| 5.3.4 | Review Mattermost, RTCD, and calls-offloader logs after pilot calls | No recurring `ERROR` or `WARN` lines | ```{important} -**Do not continue until all checks pass.** +**Do not continue to a production rollout until all relevant checks are passing. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` +**Production readiness** + +Collect feedback from your pilot users after 3-5 business days and use it to evaluate your production readiness. Specifically: + +| Check | Requirement | +|---|---| +| 5.3.5 | Audio quality rated accepatable by 80%+ of pilot users | +| 5.3.6 | No blocking feature functions from pilot user test cases (T1-T6) | +| 5.3.7 | All pilot users confirm readiness for production rollout | + --- ## Phase 6: Production rollout -### 6.1 Overview +Now you will execute a broader rollout to all users in production. -Roll Calls out in waves instead of enabling it everywhere at once. +### 6.1 Prerequisites -That lets you watch real usage, catch problems early, and stop the rollout cleanly if needed. +- [ ] Pilot verification checks passed (5.3.1-5.3.7) +- [ ] Rollback plan documented and understood +- [ ] System Admin permissions on your Mattermost server +- [ ] Access to the metrics dashboard and logs on your Calls infrastructure +- [ ] Recording verification checks passed (4.4.1-4.4.4) +- [ ] 5 to 10 volunteer pilot users from different locations +- [ ] Pilot users have current [Mattermost desktop and mobile apps](https://mattermost.com/apps/) -### 6.2 Prepare user communication +### 6.2 Rollback plan -Create a support channel such as `calls-help` first, then send a short announcement. +You should be faimilar with rollback options before you proceed with the staged production rollout. If something goes wrong, choose the smallest rollback that solves the problem. -
-Click to expand the user announcement template +**Per-channel rollback** +Disables Calls in specific channels. -```markdown -## Mattermost Calls is available +1. Navigate to the impacted channel. +2. Select the **Channel menu**, then select **Disable calls**. -You can now start audio calls directly from Mattermost and share your screen without leaving the platform. +**Test mode rollback** +Restricts Calls to channels where it has been enabled by a System Admin. -**How to start a call** +1. Go to **System Console > Plugins > Calls > Settings**. +2. Set **Test Mode** to `on`. -Select **Start call** in the channel header. Anyone in that channel can join. +**Full rollback** +Disables Calls completely for everyone. -**What is available** +1. Go to **System Console > Plugins > Plugin Management**. +2. **Disable** the Calls plugin. -- audio calls -- screen sharing -- group calls, if enabled for your deployment -- recording, transcription, and live captions, if enabled for your deployment +Additionally, if you have an existing conferencing tool, we recommend keep it available until Calls is stable in your production environment. -**Things to know** +### Preparation and Communication -- the first time you join, your browser or desktop app may ask for microphone permission -- screen sharing may also require screen capture permission -- if you need help, post in `#calls-help` -``` +Before announcing Calls to users, create a `calls-support` public channel. This gives users a place to report issues and lets you track problems during rollout. -
+Additionally, you should prepare a brief communication to users that get shared in an all-hands channel for broader awareness. A message template is provided below: -### 6.3 Roll out in waves +
+Production rollout communication template -#### 6.3.1 Wave 1 +```markdown +## Mattermost Calls rollout -Enable Calls in IT or admin channels first. +We're enabling Mattermost Calls across this server. Starting today, you can start audio calls in select channels directly within Mattermost — no need to switch to a separate tool. -Use this wave to confirm: +We're rolling out gradually, starting with a select set of channels before expanding to everyone. -- support staff know how Calls works -- internal admins know where to look when users report problems +**Calls features** -#### 6.3.2 Wave 2 +- Start or join 1:1 and group audio calls +- Share your screen from the desktop app or browser +- Record calls and generate transcripts +- Use live captions during recorded calls -If the admin-only validation is stable, switch the deployment from **test mode** to **live mode**, then enable Calls in engineering or power-user channels. +You can learn more about Mattermost calls in their [documentation](https://docs.mattermost.com/end-user-guide/collaborate/make-calls.html). -Use this wave to gather broader feedback from users who are likely to try more edge cases. +**How to start a call** -#### 6.3.3 Wave 3 +Select **Start call** in the channel header. Anyone in the channel can join. -When the earlier waves are stable, expand rollout to the rest of the organization. +**Things to know** -### 6.4 Watch the rollout +- We recommend updating your [desktop and mobile apps](https://mattermost.com/apps/) to the latest version +- Your browser or desktop app may ask for microphone or camera permission the first time you join a call. +- Screen sharing may also require a screen capture permission prompt. -During each wave, watch: +**Need help?** -- call volume -- repeated user complaints about joining or audio quality -- recurring RTC errors -- CPU and memory on the media service -- recording and transcription job failures, if enabled +Post in `~calls-support` and include what you were trying to do, what happened, and a screenshot if possible. +``` +
-If you stay on integrated Calls and see sustained media load during rollout, plan a move to RTCD before you expand usage further. +### 6.4 Rollout Stages -Do not move to the next wave until the current one is stable. +We recommend enabling Calls in stages instead of enabling it everywhere at once. This way you can watch real usage, catch problems early, and rollback cleanly if needed. -### 6.5 Rollback plan +| Stage | Channels / departments | Suggested timeline | Rollback approach | +|---|---|---|---|---| +| Wave 1 | IT and Admin channels | Days 1–3 | Per-channel rollback | +| Wave 2 | Engineering or power user channels | Days 4–7 | Per-channel rollback | +| Wave 3 | Full organization | Day 8+ | Test mode (if issues are isolated) or full rollback | -If something goes wrong, choose the smallest rollback that solves the problem. +Do not advance to the next stage until the current one is stable. If you stay on Integrated Calls and see sustained media load during rollout, plan a move to RTCD before expanding further. -**Per-channel rollback** +### 6.5 Monitor and optimize -1. Open the affected channel menu. -2. Select **Disable calls**. +Once Calls is live, monitor it actively for the first two weeks and tune based on what you see. -**Return to test mode** +**6.5.1: Watch server health during peak call hours** -1. Go to **System Console > Plugins > Calls**. -2. Switch the deployment back to test mode. +Monitor CPU and memory on the media server (RTCD or Mattermost server) daily during peak usage. If CPU utilization consistently exceeds 70%, consider increasing hardware specs, or adding RTCD nodes before the next rollout stage. -**Full rollback** +**6.5.2: Review logs daily** -1. Go to **System Console > Plugins > Plugin Management**. -2. Disable the Calls plugin. +Check Mattermost, RTCD, and calls-offloader logs each day for recurring `ERROR` or `WARN` lines. Address any patterns before they become user-facing problems. + +**6.5.3: Tune Max Call Participants** + +If you see resource pressure during large calls, lower **Max Call Participants** in **System Console > Plugins > Calls**. The default is unlimited (`0`); the recommended ceiling is `50`. + +**6.5.4: Track user-reported issues** + +Monitor `#calls-support` for recurring complaints. + +Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issues and fixes. -Keep your existing conferencing option available until Calls is stable in production for your environment. --- From be54c5ae22c0024d4956161c852dc94a84c91bd9 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 16:09:38 -0700 Subject: [PATCH 08/38] tweaks --- .../configure/calls-deployment.md | 213 ++++-------------- 1 file changed, 40 insertions(+), 173 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 3d169f2d1ba..bd5bfa1348b 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -29,14 +29,14 @@ This guide is organized into sequential deployment phases with heirarchical numb 1. [**Preparation and Networking**](#phase-1-preparation-and-networking) Plan your deployment architecture, gather prerequisites, provision any required servers, and confirm the required network ports and paths are open before deployment. -2. [**Configure Integrated Calls**](#phase-2-integrated-calls-plugin-configuration) +2. [**Configure Integrated Calls**](#phase-2-configure-integrated-calls) Regardless of the deployment architecture you choose, you'll start with simplest calls deployment (integrated mode) to verify connectivity and core audio and screen sharing functionality. -3. [**Install and Configure RTCD**](#phase-3-add-rtcd) (Optional) - RTCD (real-time communication daemon) is a service built to offload media processing tasks from the Mattermost server. This optional phase is where you'll deploy the RTCD service and verify that the Mattermost server and clients can reach it correctly. +3. [**Install and Configure RTCD**](#phase-3-install-and-configure-rtcd) (Optional) + RTCD (real-time communication daemon) is a service built to offload media processing tasks from the Mattermost server. -4. [**Install and Configure Recording**](#phase-4-add-calls-offloader) (Optional) - Calls Offloader is a service required to deliver recording, transcription and live captions. This optional phase is where you'll deploy the `calls-offloader` service and confirm that recording, transcription, and live captions work as expected. +4. [**Install and Configure Recording**](#phase-4-install-and-configure-recording) (Optional) + Calls Offloader is a service required to deliver recording, transcription and live captions. 5. [**Pilot Rollout**](#phase-5-pilot-rollout) Expand testing to a small group of pilot users to watch for client, network, and environment-specific issues under real usage. @@ -108,7 +108,7 @@ flowchart TD **License** - Mattermost Entry: 1:1 Calls + Screen Sharing -- Mattermost Professional, Enterprise, or Enterprise-Advanced: Group Calls + Screen Sharing up to 50 participants +- Mattermost Professional, Enterprise, or Enterprise Advanced: Group Calls + Screen Sharing ```` ````{tab} RTCD @@ -148,7 +148,8 @@ Use RTCD if you need optimized performance, scalability, and the best possible u **License** -- Mattermost Enterprise or Enterprise-Advanced: Required for RTCD. +- Mattermost Enterprise or Enterprise Advanced + ```` ````{tab} RTCD + Recording @@ -189,8 +190,7 @@ flowchart TD **License** -- Mattermost Enterprise or Enterprise Advanced: Required for `calls-offloader` service. - +- Mattermost Enterprise or Enterprise Advanced ```` @@ -243,10 +243,10 @@ Infrastructure requirements are based on your deployment architecture chosen in Since the Mattermost server is handling all media processing, you can skip this step and proceed to network configuration in Step 1.5. **RTCD** -You will need to provision a new server for RTCD. Use **Appendix B.1** for benchmark examples of hardware sizing. The RTCD service supports [horizontal scaling](https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html#horizontal-scaling), but we recommend starting with one server, and then scaling out if your pilot or expected workload requires it. +You will need to provision a new server for RTCD. Use the [performance baselines](http://mattermost-docs-preview-pulls.s3-website-us-east-1.amazonaws.com/8879/administration-guide/configure/calls-metrics-monitoring.html#performance-baselines) for benchmark examples of hardware sizing. The RTCD service supports [horizontal scaling](https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html#horizontal-scaling), but we recommend starting with one server and then scaling out if your expected workload requires it. **Recording** -You will need to provision a new server for the `calls-offloader` service. The recommended starting point is **8 vCPU / 16 GB RAM**, or you can use **Appendix B.2** to estimate recording capacity and transcription load. +You will need to provision a new server for the `calls-offloader` service. The recommended starting point is **8 vCPU / 16 GB RAM**, or you can use these [performance benchmarks](https://github.com/mattermost/calls-offloader/blob/master/docs/performance.md) to estimate recording capacity and transcription load. **TURN Server** If you've determined in Step 1.3.2 that your users cannot reliably reach the media server over UDP or TCP `8443`, you will need to provision your TURN server now. @@ -585,7 +585,7 @@ Now you can move to smoke testing your Calls deployment with recording using you | Check | Action | Pass criteria | |---|---|---| -| 4.4.1 | During a call, start a recording as a call host | Recording starts without error. | +| 4.4.1 | Start recording as a call host | Recording starts without error. | | 4.4.2 | End the call or stop the recording | An MP4 file appears in the call thread after processing is complete. | | 4.4.3 | With transcription enabled, end a recorded call | An MP4 file and transcript file appear in the call thread after processing is complete. | | 4.4.4 | With live captions enabled, start a recorded call | Captions appear during the call within 1-3 seconds after participants speak. | @@ -796,174 +796,41 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu ## Appendix A: Troubleshooting -For log collection details, see [Calls Troubleshooting](calls-troubleshooting.md). - -### A.1 Collect the right evidence before asking for help - -Before opening a support case, capture as many of these as you can: - -- the phase and step where the failure happened -- `/call stats` output from a recent failed or successful test -- `/call logs` output from the most recent call -- `curl` output from `RTCD` or `calls-offloader` version checks -- relevant Mattermost, RTCD, or calls-offloader logs - -### A.2 The call button is missing - -Common causes: - -- the Calls plugin is disabled -- the deployment is still in test mode and the channel is not configured the way you expect -- the user is on an older client - -What to check: - -1. **System Console > Plugins > Plugin Management** to confirm Calls is enabled. -2. **System Console > Plugins > Calls** to confirm the deployment state. -3. The channel menu to confirm Calls is enabled for that channel. - -### A.3 A call starts, but audio does not work - -Common causes: - -- UDP `8443` is blocked -- clients are falling back poorly because TCP `8443` is also blocked -- the wrong media address is being advertised -- browser or desktop microphone permissions were denied - -What to do: - -1. Repeat the UDP and TCP connectivity checks from Phase 1. -2. Re-check the integrated media address configuration in Phase 2, or RTCD address configuration in Phase 3. -3. Run `/call stats` after the failed test and compare the negotiated connection details. - -### A.4 Remote users cannot join from outside the office - -Common causes: - -- external firewall rules do not allow media traffic to reach the media service -- the advertised media address is private instead of public -- the deployment needs TURN for restrictive client networks - -What to do: - -1. Confirm external reachability to UDP `8443`. -2. Confirm the address being advertised to clients is the correct reachable address. -3. If direct connectivity still fails for restrictive networks, add TURN. - -### A.5 Recording, transcription, or captions are failing - -Common causes: - -- calls-offloader is not running -- Mattermost cannot reach `Job Service URL` -- the offloader service account cannot use Docker -- recorder or transcriber jobs cannot reach Mattermost on the expected internal URL - -What to do: - -1. Run `curl http://YOUR_OFFLOADER_SERVER:4545/version` from the Mattermost server. -2. Confirm the calls-offloader service is running. -3. Confirm the calls-offloader service account can access Docker. -4. If using private network overrides, re-check `MM_CALLS_RECORDER_SITE_URL` and `MM_CALLS_TRANSCRIBER_SITE_URL`. - -### A.6 Calls work briefly, then drop - -Common causes: - -- unstable WebSocket connectivity between clients and Mattermost -- Mattermost restarted during the call -- a load balancer or network device is timing out long-lived connections - -What to do: - -1. Confirm the Mattermost server is stable and reachable. -2. Review load balancer settings for WebSocket support and idle timeout behavior. -3. Compare Mattermost logs with the call failure time. +### A.1 The call button is missing -### A.7 RHEL deployments using firewalld or fapolicyd - -If you deploy on RHEL with `firewalld` or `fapolicyd` enabled, see the [RHEL deployment guide](https://docs.mattermost.com/deployment-guide/server/deploy-linux.html#itab--RHEL-CentOS--0_1-RHEL-CentOS). - -Key points: - -- the Calls plugin is covered by standard Mattermost `fapolicyd` rules -- standalone `rtcd` requires its own `fapolicyd` configuration -- you still need to open the required Calls and RTCD ports - ---- - -## Appendix B: Server sizing benchmarks - -Use this appendix as a starting point, then validate against your own traffic during Phase 5. - -### B.1 RTCD benchmark examples - -The [Calls Metrics and Monitoring](calls-metrics-monitoring.md) guide includes internal RTCD benchmark data. The examples below are taken directly from that guide and show why screen sharing and total egress bandwidth matter so much for sizing. - -| Workload example | RTCD instance | Average CPU | Average memory | Bandwidth in / out | -|---|---|---|---|---| -| 1 call, 1000 participants, 2 unmuted, no screen sharing | `c7i.xlarge` | 47% | 1.46 GB | 1 Mbps / 194 Mbps | -| 1 call, 1000 participants, 1 unmuted, screen sharing enabled | `c7i.xlarge` | 79% | 1.54 GB | 2.9 Mbps / 1.68 Gbps | -| 2 calls, 1000 participants each, screen sharing enabled | `c7i.2xlarge` | 73% | 2.38 GB | 5.7 Mbps / 3.06 Gbps | -| 4 calls, 1000 participants each, screen sharing enabled | `c7i.4xlarge` | 83% | 4.40 GB | 14.5 Mbps / 7.17 Gbps | - -How to use this table: - -- If you expect large calls with screen sharing, plan around **egress bandwidth** first. -- If you expect many medium-sized calls, use the metrics guide to compare similar benchmark patterns. -- Validate your assumptions during the pilot instead of sizing only from theory. - -### B.2 calls-offloader sizing inputs - -The published `calls-offloader` performance guide uses an AWS `c6i.2xlarge` host (`8 vCPU / 16 GB RAM`) as the recommended starting point for recordings. - -| Recording quality | Recommended `max_concurrent_jobs` | Average CPU | Average memory | Average recording size | -|---|---|---|---|---| -| Low | 8 | 66% | 4 GB | 0.5 GB/hour | -| Medium | 6 | 66% | 4 GB | 0.7 GB/hour | -| High | 4 | 72% | 4 GB | 1.2 GB/hour | - -Audio-only recordings consume approximately `1 MB` per minute per participant. - -Use those numbers to estimate: - -- total storage needed -- how many recordings can run at the same time -- the `max_concurrent_jobs` setting you should start with -- how aggressively you need retention and cleanup policies - -If recordings are large or long-lived, also review Mattermost `FileSettings.MaxFileSize` and any proxy upload/body-size limits in front of Mattermost. - -### B.3 Transcriptions and live captions - -Transcriptions and live captions increase load on the offloader host. - -Published offloader guidance highlights these planning points: +| Cause | Fix | +|---|---| +| The Calls plugin is disabled | Go to **System Console > Plugins > Plugin Management** and enable Calls | +| The deployment is in test mode | Go to **System Console > Plugins > Calls** and check the deployment state — only system admins can start calls in test mode | +| Calls is not enabled for the channel | Open the channel menu and select **Enable calls** | +| The user is on an older client | Ask the user to update to the current Mattermost desktop or mobile app | -- The `small` model is not recommended for live captions. -- `base` live captions need at least `2` threads for real-time performance and work best with `3` or `4`. -- If you expect more than 3 simultaneous live-captioned calls on one host, plan for horizontal scaling. +### A.2 Calls start but audio does not work -For additional offloader performance guidance, see the [calls-offloader performance documentation](https://github.com/mattermost/calls-offloader/blob/master/docs/performance.md). +| Cause | Fix | +|---|---| +| UDP `8443` is blocked | Repeat the UDP connectivity check from Phase 1 (check 1.6.2 or 1.6.4) and confirm the firewall rule is applied | +| TCP `8443` is also blocked and fallback is failing | Repeat the TCP check (1.6.3 or 1.6.5) — clients need at least one path to the media service | +| The wrong media address is being advertised | Re-check `ICE Host Override` in Phase 2 (Integrated) or `ice_host_override` in `rtcd.toml` (RTCD) — the address must be reachable by clients | +| Browser or desktop microphone permissions were denied | Ask the user to check browser or OS microphone permissions and reload the app | -### B.4 TURN server planning +Run `/call stats` in the Mattermost message area after a failed test for additional diagnostic clues. -TURN planning is mostly a bandwidth question. +### A.3 Remote users cannot join from outside the network -If you must use TURN: +| Cause | Fix | +|---|---| +| External firewall rules are blocking UDP `8443` | Confirm external reachability to UDP `8443` on the media server — cloud security groups and on-prem firewalls both need to allow inbound traffic from the internet | +| The advertised media address is a private IP | Set `ICE Host Override` (Integrated) or `ice_host_override` in `rtcd.toml` to the correct public IP or use STUN (1.3.1) | +| Client networks are too restrictive for direct UDP or TCP | Deploy a TURN server and add it to **ICE server configurations** | -- estimate how many users are likely to need relay traffic -- remember TURN relays all media for those users -- place TURN where it is network-close to the users who need it +### A.4 Recording, transcription, or captions are failing ---- +| Cause | Fix | +|---|---| +| calls-offloader is not running | Run `nmap -p 4545 YOUR_OFFLOADER_SERVER` from the Mattermost server — if the result is `closed`, the service is not running; check the systemd service logs | +| Mattermost cannot reach the Job Service URL | Run `curl http://YOUR_OFFLOADER_SERVER:4545/version` from the Mattermost server and confirm it returns a version string | +| The offloader service account cannot use Docker | Confirm the service account is in the `docker` group on the calls-offloader server | -## Related Documentation -- [RTCD Setup and Configuration](calls-rtcd-setup.md) -- [Calls Offloader Setup and Configuration](calls-offloader-setup.md) -- [Calls Metrics and Monitoring](calls-metrics-monitoring.md) -- [Calls Deployment on Kubernetes](calls-kubernetes.md) -- [Calls Troubleshooting](calls-troubleshooting.md) -- [Calls plugin configuration settings](https://docs.mattermost.com/configure/plugins-configuration-settings.html#calls) +--- \ No newline at end of file From 855e76e4ef39fa3ec5cacfaf8aae716732f094ff Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 16:40:21 -0700 Subject: [PATCH 09/38] tweaks --- .../configure/calls-deployment.md | 213 +++++++++--------- 1 file changed, 108 insertions(+), 105 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index bd5bfa1348b..07c43876b1d 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -3,14 +3,14 @@ ```{include} ../../_static/badges/all-commercial.md ``` -This guide is designed to walk System Administrators step-by-step through the process of deploying Mattermost Calls, from initial preparation and confirming network readiness, to validating core calling functions with test users, and scaling up to full production deployment. You’ll find detailed instructions, decision points, verification gates, and troubleshooting tips to help ensure a reliable Calls deployment, whether you’re enabling basic audio and screen sharing or advanced features like recording and transcription. +This guide walks System Administrators step-by-step through deploying Mattermost Calls, from preparation and network readiness through testing with a small group of users and scaling to production. You'll find clear decision points, verification checks, and troubleshooting tips to help you confirm each part of the deployment is working before you move on. No prior experience with Mattermost Calls is required — this guide assumes you’re starting fresh and will introduce essential concepts and best practices. ## Calls Overview -Mattermost Calls offers self-hosted audio calling and screen sharing, enabling sovereign real-time collaboration fully contained within your infrastructure. This means no audio, video, or metadata traverses third-party systems. +Mattermost Calls offers self-hosted audio calling and screen sharing, enabling sovereign real-time collaboration fully contained within your infrastructure. This means no call media or metadata traverses third-party systems. Calls is uniquely suited for mission-critical operations across defense, intelligence, security and critical infrastructure — where data sovereignty, control, and compliance are non-negotiable. It is designed to function in isolated networks without internet access, supporting deployments that demand full airgap compliance. @@ -22,7 +22,7 @@ Functionality includes: ## Deployment Overview -This guide is organized into sequential deployment phases with heirarchical numbered steps. Each phase begins with prerequisits and ends with verification checks. Before you begin any phase, make sure all the listed prerequisites are fully met, then only proceed to the next phase when you have successfully completed the verification checks for the current phase. This step-by-step approach helps you catch and resolve issues early, ensuring a smooth and reliable Calls deployment. +This guide is organized into sequential deployment phases with numbered steps. Each phase begins with prerequisites and ends with verification checks. Before you begin any phase, make sure the listed prerequisites are met, then move to the next phase only after the verification checks for the current phase pass. This structure helps you catch and fix issues early, when they are easiest to isolate. **Deployment Phases:** @@ -30,7 +30,7 @@ This guide is organized into sequential deployment phases with heirarchical numb Plan your deployment architecture, gather prerequisites, provision any required servers, and confirm the required network ports and paths are open before deployment. 2. [**Configure Integrated Calls**](#phase-2-configure-integrated-calls) - Regardless of the deployment architecture you choose, you'll start with simplest calls deployment (integrated mode) to verify connectivity and core audio and screen sharing functionality. + Regardless of the deployment architecture you choose, start with the simplest Calls deployment, Integrated mode, to verify connectivity plus basic audio and screen sharing. 3. [**Install and Configure RTCD**](#phase-3-install-and-configure-rtcd) (Optional) RTCD (real-time communication daemon) is a service built to offload media processing tasks from the Mattermost server. @@ -63,14 +63,14 @@ Before you start, confirm the following: - [x] You have a running Mattermost server on v10.0+ - [x] Mattermost server is configured to use secure HTTPS. - _Browsers will block microphone and screen sharing on unsecure HTTP connections. To enable voice calls and screen sharing, you must run Mattermost over HTTPS. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ + _Browsers block microphone and screen sharing on insecure HTTP connections. To enable Calls, you must run Mattermost over HTTPS. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ - [x] You have System Admin access to your Mattermost server. - [x] You can open inbound and outbound network ports on the servers involved in the deployment. If a network or security team manages your firewalls, you'll need to involve them before continuing. -- [x]You can provision additional servers if your chosen architecture requires RTCD or Calls Offloader services. +- [x] You can provision additional servers if your chosen architecture requires RTCD or Calls Offloader services. ### 1.2 Deployment Infrastructure -To determine your deployment instrastructure, answer the following questions: +To determine your deployment infrastructure, answer the following questions: - **How many users will use Calls?** - **Up to 50 users:** You can use the **Integrated** deployment mode. @@ -138,8 +138,8 @@ Use RTCD if you need optimized performance, scalability, and the best possible u - You want to keep call media traffic off your main Mattermost server to improve overall server performance and reduce CPU usage spikes. - You need your deployment to easily scale as call volume increases; additional RTCD servers can be added for load balancing. - You require ongoing calls to remain active even if the Mattermost server needs to be restarted (some features like reactions and muting may be temporarily unavailable during the restart). -- You want the lowest possible audio/video latency and highest reliability for Calls. -- You are deploying Mattermost on Kubernetes (RTCD is required for all Kubernetes deployments). +- You want the lowest possible media latency and highest reliability for Calls. +- You are deploying Mattermost on Kubernetes, where RTCD is required. **Components** @@ -200,7 +200,7 @@ Do this before you install anything new. #### 1.3.1 STUN for Public IP Discovery -STUN is a protocol used to automatically discover the public IP address of your media server so clients can connect to Calls. +STUN is a protocol that helps the media server discover its public IP address automatically so remote clients can connect to Calls. Mattermost provides a default STUN server (`stun.global.calls.mattermost.com`) for public IP discovery. No user information, call metadata, or media traffic is sent to or shared with this STUN service; its sole purpose is to help media servers discover their public IP address. Use this decision tree to determine if you need to allow outbound access from your media server to the Mattermost global STUN service. @@ -210,7 +210,7 @@ Your media server is the Mattermost server in the case of an **Integrated** Call **STUN Decision Tree** -1. **Are all users and your media server (Mattermost server or RTCD) are in the same private network, VPN, or air-gapped environment (no outside clients)?** +1. **Are all users and your media server (Mattermost server or RTCD) in the same private network, VPN, or air-gapped environment, with no outside clients?** - **Yes**: You do not need STUN. You will use the private address of your media server for configuration in Phase 2. - **No**: Continue to the next question. @@ -218,12 +218,12 @@ Your media server is the Mattermost server in the case of an **Integrated** Call - **Yes**: You do not need STUN. You will use the public address of your media server for configuration in Phase 2. - **No**: You will need STUN. You must open outbound UDP 3478 from your media server to `stun.global.calls.mattermost.com`. -If your deployment requires STUN, note this requirement as you work through the exrcise of opening all necessary ports in Step 1.5. +If your deployment requires STUN, note that now so you can include it when opening ports in Step 1.5. #### 1.3.2 TURN Server -TURN is a protocol that relays media when users cannot reach the Calls media service directly. +TURN is a relay service used only when clients cannot reach the Calls media service directly. If STUN helps clients discover where to connect, TURN acts as a backup route when direct connectivity is not possible. Provisioning a TURN server is necessary if both of these conditions are true: @@ -235,15 +235,15 @@ TURN is typically a last resort as it adds additional networking and infrastruct ### 1.4 Provision Infrastructure -Now you will provision the servers or VMs you'll need to support your Calls Deployment. You are only preparing infrastructure here; software installation and service configuration happen in later phases. This step is important because you'll need the IP addresses of these servers in order to configure networking in the next step. +Now provision the servers or VMs you'll need to support your Calls deployment. You are only preparing infrastructure here; software installation and service configuration happen in later phases. This step matters because you need the IP addresses or DNS names of these servers before you can finish the networking work in the next step. -Infrastructure requirements are based on your deployment architecture chosen in Step 1.2. If you need to provision additional hardware, you should note the IP addresses of these servers for networking configuration in the next step: +Infrastructure requirements depend on the deployment architecture you chose in Step 1.2. If you provision additional hardware, write down the IP addresses or DNS names now because you will use them in Step 1.5: **Integrated** Since the Mattermost server is handling all media processing, you can skip this step and proceed to network configuration in Step 1.5. **RTCD** -You will need to provision a new server for RTCD. Use the [performance baselines](http://mattermost-docs-preview-pulls.s3-website-us-east-1.amazonaws.com/8879/administration-guide/configure/calls-metrics-monitoring.html#performance-baselines) for benchmark examples of hardware sizing. The RTCD service supports [horizontal scaling](https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html#horizontal-scaling), but we recommend starting with one server and then scaling out if your expected workload requires it. +You will need to provision a new server for RTCD. Use the [performance baselines](calls-metrics-monitoring.md#performance-baselines) for benchmark examples of hardware sizing. The RTCD service supports [horizontal scaling](https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html#horizontal-scaling), but we recommend starting with one server and then scaling out if your expected workload requires it. **Recording** You will need to provision a new server for the `calls-offloader` service. The recommended starting point is **8 vCPU / 16 GB RAM**, or you can use these [performance benchmarks](https://github.com/mattermost/calls-offloader/blob/master/docs/performance.md) to estimate recording capacity and transcription load. @@ -262,7 +262,7 @@ Before moving to Step 1.5, confirm the following: ### 1.5 Network Configuration -Here you'll find which network ports need to be opened for each server involved in your Calls deployment. Open the ports in the tables below on each server in your deployment. Work through one server at a time — open every port listed for that server before moving to the next. +This section lists the network ports that must be opened for each server involved in your Calls deployment. Open the ports in the tables below for every server in your deployment. Work through one server at a time so you can verify nothing is missed before moving on. **How you open ports depends on your environment:** @@ -319,15 +319,20 @@ If you deployed a TURN server in Step 1.4, open these ports. If you are using `c ### 1.6 Verification Checks -These checks test firewall and network reachability only — they do not require Calls, RTCD or `calls-offloader` to be installed. +These checks test firewall rules and network reachability only. They do not require Calls, RTCD, or `calls-offloader` to be installed yet. -First, you'll have to install `nmap` on each machine you'll run checks from using `sudo apt install nmap` (Ubuntu or Debian) or `sudo dnf install nmap` (RHEL or CentOS) +First, install `nmap` on each machine you will run checks from. For example: -When you excute each check below, `nmap` will return `open`, `closed` or `filtered`. +- Ubuntu or Debian: `sudo apt install nmap` +- RHEL or CentOS: `sudo dnf install nmap` + +When you execute each check below, `nmap` returns `open`, `closed`, or `filtered`. **Pass**: -- `open`: Port is reachable and the service is running. Expected if you've already installed the RTCD or `calls-offloader` services (Phase 3-4). +- `open`: Port is reachable and the service is running. Expected if you've already installed the RTCD or `calls-offloader` services in Phases 3-4. - `closed`: Port is reachable but the service is not running. Expected if you just provisioned the infrastructure in Step 1.4. +- `open|filtered`: Common for UDP checks before the service is installed. Treat this as acceptable for these pre-installation firewall checks if the port is expected to be open. + **Fail**: - `filtered`: Firewall is blocking the port. Revisit your networking configuration in Step 1.5 before continuing. @@ -337,8 +342,8 @@ Run from a client machine on the same network as your users: | Check | Command | `TARGET_IP` | Description | |---|---|---|---| -| 1.6.2 | `sudo nmap -sU -p 8443 TARGET_IP` | Mattermost server IP | Clients can send UDP media to the Mattermost server | -| 1.6.3 | `nmap -p 8443 TARGET_IP` | Mattermost server IP | Clients can reach the Mattermost server for TCP media fallback | +| 1.6.1 | `sudo nmap -sU -p 8443 TARGET_IP` | Mattermost server IP | Clients can send UDP media to the Mattermost server | +| 1.6.2 | `nmap -p 8443 TARGET_IP` | Mattermost server IP | Clients can reach the Mattermost server for TCP media fallback | **RTCD deployments** @@ -346,14 +351,14 @@ Run from a client machine on the same network as your users: | Check | Command | `TARGET_IP` | Description | |---|---|---|---| -| 1.6.4 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP | Clients can send UDP media to the RTCD server | -| 1.6.5 | `nmap -p 8443 TARGET_IP` | RTCD server IP | Clients can reach the RTCD server for TCP media fallback | +| 1.6.3 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP | Clients can send UDP media to the RTCD server | +| 1.6.4 | `nmap -p 8443 TARGET_IP` | RTCD server IP | Clients can reach the RTCD server for TCP media fallback | Run from the Mattermost server: | Check | Command | `TARGET_IP` | Description | |---|---|---|---| -| 1.6.6 | `nmap -p 8045 TARGET_IP` | RTCD server IP | Mattermost can reach the RTCD API | +| 1.6.5 | `nmap -p 8045 TARGET_IP` | RTCD server IP | Mattermost can reach the RTCD API | **Recording deployments** @@ -361,15 +366,15 @@ Run from the Mattermost server: | Check | Command | `TARGET_IP` | Description | |---|---|---|---| -| 1.6.7 | `nmap -p 4545 TARGET_IP` | calls-offloader server IP | Mattermost can reach the calls-offloader API | +| 1.6.6 | `nmap -p 4545 TARGET_IP` | calls-offloader server IP | Mattermost can reach the calls-offloader API | Run from the calls-offloader server: | Check | Command | `TARGET_IP` | Description | |---|---|---|---| -| 1.6.8 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP | `calls-offloader` can send UDP media to the media service to join calls for recording | -| 1.6.9 | `nmap -p 8443 TARGET_IP` | RTCD server IP | `calls-offloader` can reach the media service for TCP media fallback | -| 1.6.10 | `nmap -p 443 TARGET_IP` | Mattermost server IP | `calls-offloader` can post recordings back to Mattermost | +| 1.6.7 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP | `calls-offloader` can send UDP media to the media service to join calls for recording | +| 1.6.8 | `nmap -p 8443 TARGET_IP` | RTCD server IP | `calls-offloader` can reach the media service for TCP media fallback | +| 1.6.9 | `nmap -p 443 TARGET_IP` | Mattermost server IP | `calls-offloader` can post recordings back to Mattermost | **TURN deployments** @@ -377,10 +382,10 @@ Run from a client machine on the same network as your users: | Check | Command | `TARGET_IP` | Description | |---|---|---|---| -| 1.6.11 | `sudo nmap -sU -p 3478 TARGET_IP` | TURN server IP | Clients can reach the TURN server on UDP 3478 | -| 1.6.12 | `nmap -p 3478 TARGET_IP` | TURN server IP | Clients can reach the TURN server on TCP 3478 | -| 1.6.13 | `nmap -p 5349 TARGET_IP` | TURN server IP | Clients can reach the TURN server over TLS (only if you configured TLS on coturn) | -| 1.6.14 | `sudo nmap -sU -p 49152 TARGET_IP` | TURN server IP | Spot check of the TURN relay port range | +| 1.6.10 | `sudo nmap -sU -p 3478 TARGET_IP` | TURN server IP | Clients can reach the TURN server on UDP 3478 | +| 1.6.11 | `nmap -p 3478 TARGET_IP` | TURN server IP | Clients can reach the TURN server on TCP 3478 | +| 1.6.12 | `nmap -p 5349 TARGET_IP` | TURN server IP | Clients can reach the TURN server over TLS (only if you configured TLS on coturn) | +| 1.6.13 | `sudo nmap -sU -p 49152 TARGET_IP` | TURN server IP | Spot check of the TURN relay port range | ```{important} **Do not proceed to Phase 2 until all checks in this section relevant to your deployment architecture are passing. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** @@ -394,7 +399,7 @@ You will start by deploying Calls using the Integrated architecture, even if you ### 2.1 Prerequisites -- [ ] Phase 1 networking checks passed (1.6.1-1.6.14) +- [ ] All relevant Phase 1 networking checks passed - [ ] Two test accounts on your Mattermost server - [ ] System Admin permissions on your Mattermost server @@ -412,9 +417,9 @@ Set **Test mode** to `on`. This ensures System Admins must enable Calls in indiv **2.2.3: Configure the host media address** -Set **ICE Host Override** to the IP address clients will use to reach the media service. This is based on the STUN decision tree you completed in Step 1.3.1. +Set **ICE Host Override** to the IP address or DNS name clients will use to reach the media service. In plain terms, this is the address Calls advertises to users' devices for media traffic. Base this value on the STUN decision tree from Step 1.3.1. -- If your users are in an private network, VPN, or air-gapped environment, set it to the private address of the Mattermost server they can reach. +- If your users are in a private network, VPN, or air-gapped environment, set it to the private address of the Mattermost server they can reach. - If your Mattermost server has a stable public IP, set it to that IP. - Otherwise, leave it empty for automatic public address discovery using STUN. @@ -434,17 +439,17 @@ If TURN is being used, replace or extend the **ICE server configurations** array If your TURN deployment uses short-lived generated credentials, also set **TURN Static Auth Secret** and **TURN Credentials Expiration**. -**2.3.5: Save configuration** +**2.2.5: Save configuration** -Click **Save** on the Calls settings page. It is generally also recommended restart the plugin after changing media server settings: +Click **Save** on the Calls settings page. It is also recommended that you restart the plugin after changing media server settings: 1. Go to **System Console > Plugins > Plugin Management**. 2. Disable **Calls** and wait a few seconds. 3. Enable **Calls** again. -### 2.4 Verification Checks +### 2.3 Verification Checks -Now you can move to smoke testing your Calls deployment with your test accounts. Specifically, +Now smoke test your Calls deployment with your test accounts: - Create a test channel such as `calls-test`. - Open the **Channel menu**, then select **Enable calls**. @@ -452,10 +457,10 @@ Now you can move to smoke testing your Calls deployment with your test accounts. | Check | Action | Pass criteria | |---|---|---| -| 2.4.1 | Start a call from the test channel with a second user | Both users are in the call | -| 2.4.2 | Speak during the call | Both users can hear each other clearly | -| 2.4.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | -| 2.4.4 | End the call | The call indicator disappears from the channel | +| 2.3.1 | Start a call from the test channel with a second user | Both users are in the call | +| 2.3.2 | Speak during the call | Both users can hear each other clearly | +| 2.3.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | +| 2.3.4 | End the call | The call indicator disappears from the channel | ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** @@ -471,33 +476,33 @@ Now that you've verified a basic Integrated Calls deployment, you can add RTCD t ### 3.1 Prerequisites -- [ ] RTCD server is provisioned (1.4) and networking checks passed (1.6.1-1.6.14) -- [ ] Integrated Calls deployment checks passed (2.4.1-2.4.4) +- [ ] RTCD server is provisioned (1.4) and RTCD networking checks passed (1.6.3-1.6.5) +- [ ] Integrated Calls deployment checks passed (2.3.1-2.3.4) - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server -### 3.3 Install RTCD +### 3.2 Install RTCD -Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. The guide covers: +Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. RTCD is the separate media service used to handle call audio and screen sharing at scale. The guide covers: - Binary or Docker installation - `rtcd.toml` configuration - Service setup - TURN configuration (if applicable) -Before proceeding, run these checks from the Mattermost server to verify your RTCD service is running and accessible: +Before proceeding, run these checks from the Mattermost server to confirm RTCD is running and reachable: | Check | Command | Pass criteria | |---|---|---| -| 3.3.1 | `nmap -p 8045 YOUR_RTCD_SERVER` | `open` — RTCD is running and accepting connections. | -| 3.3.2 | `curl http://YOUR_RTCD_SERVER:8045/version` | Returns a JSON version string | +| 3.2.1 | `nmap -p 8045 YOUR_RTCD_SERVER` | `open` — RTCD is running and accepting connections. | +| 3.2.2 | `curl http://YOUR_RTCD_SERVER:8045/version` | Returns a JSON version string | -### 3.4 Connect Mattermost to RTCD +### 3.3 Connect Mattermost to RTCD -Once you have completed installation, configuration and validation of your RTCD service, you will update the Calls plugin configuration settings to use it: +Once RTCD is installed, configured, and reachable, update the Calls plugin to use it: -1. Go to **System Console > Plugins > Calls**. +1. Go to **System Console > Plugins > Calls > Settings**. 2. Set **RTCD Service URL** to your RTCD address. If RTCD credentials were generated during setup, embed them directly in the URL: ``` @@ -511,7 +516,7 @@ Once you have completed installation, configuration and validation of your RTCD 3. Click **Save** and restart the Calls plugin so the change takes effect. -### 3.5 Configure Calls Monitoring +### 3.4 Configure Calls Monitoring Before your pilot, set up Calls monitoring so you can see sessions, errors, CPU, and memory while real users are testing. @@ -522,16 +527,16 @@ See [Calls Metrics and Monitoring](calls-metrics-monitoring.md) for: - Calls plugin metrics on `http://MATTERMOST_SERVER:8067/plugins/com.mattermost.calls/metrics` - Grafana visualization using dashboard ID `23225` -### 3.6 Verification Checks +### 3.5 Verification Checks -Now you can move to smoke testing your RTCD Calls deployment with your test accounts. Specifically, +Now smoke test your RTCD deployment with your test accounts: | Check | Action | Pass criteria | |---|---|---| -| 3.6.1 | Start a call from the test channel with a second user | Both users are in the call | -| 3.6.2 | Speak during the call | Both users can hear each other clearly | -| 3.6.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | -| 3.6.4 | End the call | The call indicator disappears from the channel | +| 3.5.1 | Start a call from the test channel with a second user | Both users are in the call | +| 3.5.2 | Speak during the call | Both users can hear each other clearly | +| 3.5.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | +| 3.5.4 | End the call | The call indicator disappears from the channel | ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** @@ -539,16 +544,16 @@ Now you can move to smoke testing your RTCD Calls deployment with your test acco --- -## Phase 4: Add calls-offloader for recording, transcription, and live captions +## Phase 4: Install and Configure Recording -`calls-offloader` is the job service that handles call recording, transcription, and live captions. You can add it after Phase 2 on Integrated Calls or after Phase 3 on RTCD. For most production environments, pair it with RTCD. +Now we will install and configure the `calls-offloader` job service that handles call recording, transcription, and live captions. **You can skip this phase if you do not need recording, transcription, or live captions.** ### 4.1 Prerequisites -- [ ] `calls-offloader` server is provisioned (1.4) and networking checks passed (1.6.1-1.6.14) -- [ ] RTCD verification checks passed (3.6.1-3.6.4) +- [ ] `calls-offloader` server is provisioned (1.4) and relevant recording networking checks passed (1.6.6-1.6.9) +- [ ] RTCD verification checks passed (3.5.1-3.5.4) - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server @@ -563,7 +568,7 @@ Follow the [Calls Offloader Setup and Configuration](calls-offloader-setup.md) g - Private network overrides - Air-gapped installation -Before proceeding, run these checks from the Mattermost server to verify calls-offloader is running and accessible: +Before proceeding, run these checks from the Mattermost server to confirm `calls-offloader` is running and reachable: | Check | Command | Pass criteria | |---|---|---| @@ -572,7 +577,7 @@ Before proceeding, run these checks from the Mattermost server to verify calls-o ### 4.3 Connect calls-offloader to Mattermost -1. Go to **System Console > Plugins > Calls**. +1. Go to **System Console > Plugins > Calls > Settings**. 2. Set **Job Service URL** to the calls-offloader address, for example `http://calls-offloader.internal:4545`. 3. Enable **Call Recordings** if needed. 4. Enable **Call Transcriptions** if needed. Transcriptions require recordings to be enabled. @@ -581,13 +586,13 @@ Before proceeding, run these checks from the Mattermost server to verify calls-o ### 4.4 Verification Checks -Now you can move to smoke testing your Calls deployment with recording using your test accounts. Specifically, +Now smoke test recording-related features with your test accounts: | Check | Action | Pass criteria | |---|---|---| | 4.4.1 | Start recording as a call host | Recording starts without error. | -| 4.4.2 | End the call or stop the recording | An MP4 file appears in the call thread after processing is complete. | -| 4.4.3 | With transcription enabled, end a recorded call | An MP4 file and transcript file appear in the call thread after processing is complete. | +| 4.4.2 | End the call or stop the recording | An MP4 file appears in the call thread after processing completes. | +| 4.4.3 | With transcription enabled, end a recorded call | An MP4 file and transcript file appear in the call thread after processing completes. | | 4.4.4 | With live captions enabled, start a recorded call | Captions appear during the call within 1-3 seconds after participants speak. | ```{important} @@ -596,23 +601,23 @@ Now you can move to smoke testing your Calls deployment with recording using you --- -## Phase 5: Pilot rollout +## Phase 5: Pilot Rollout Now that the technical configuration is complete and validated, run a small pilot with real users before broad rollout. The goal is to confirm Calls works reliably across the clients and locations your organization uses, and that your servers stay healthy under normal usage. ### 5.1 Prerequisites -- [ ] RTCD verification checks passed (3.6.1-3.6.4) -- [ ] Recording verification checks passed (4.4.1-4.4.4) +- [ ] Integrated or RTCD verification checks passed for your deployment architecture (2.3.1-2.3.4 or 3.5.1-3.5.4) +- [ ] Recording verification checks passed (4.4.1-4.4.4), if recording, transcription, or live captions are enabled - [ ] 5 to 10 volunteer pilot users from different locations - [ ] Access to the metrics dashboard and logs on your Calls infrastructure - [ ] Pilot users have current [Mattermost desktop and mobile apps](https://mattermost.com/apps/) ### 5.2 Preparation and Communication -For a successful pilot, ensure your pilot users know how to use Calls features, what they should test, and how to report any issues they encounter. +For a successful pilot, make sure pilot users know what to test, how to start a call, and how to report problems. -After inviting your pilot users into the `calls-test` channel, we recommend sharing some communication (as a message in the channel) to help direct their testing. A message template is provided below: +After inviting your pilot users into the `calls-test` channel, post a short message there so everyone is testing the same things. A template is provided below:
Pilot user communication template @@ -620,7 +625,7 @@ After inviting your pilot users into the `calls-test` channel, we recommend shar ```markdown ## Mattermost Calls pilot -Thank you for volunteering to testing Mattermost Calls before a wider rollout. After 3-5 days of pilot testing, we will ask everyone to share their findings and experiences. Please track any issues or feedback so you can provide a summary when requested. +Thank you for volunteering to test Mattermost Calls before a wider rollout. After 3-5 days of pilot testing, we will ask everyone to share their findings and experiences. Please keep track of any issues or feedback so you can summarize them when requested. **How to start** @@ -634,12 +639,12 @@ Calls is enabled in this channel for pilot testing. You can select **Start call* | T2 | Group call lasting 15 minutes or longer | No unexpected drops or audio degradation | Web, Desktop, Mobile | | T3 | Participants join calls from outside the main office network | Call quality is acceptable from that network | Web, Desktop, Mobile | | T4 | Participants share screen during a call | Screen sharing works and is visible to all participants | Desktop, Web | -| T5 | Record a group call | MP4 and transcription file appear in the call thread after processing completes | Web, Desktop, Mobile | -| T6 | Enable Live Captions during a group call | Captions appear during the call within 1-3 seconds after participants speak. | Web, Desktop | +| T5 | Record a group call, if recording is enabled | MP4 and transcription file appear in the call thread after processing completes | Web, Desktop, Mobile | +| T6 | Enable Live Captions during a group call, if captions are enabled | Captions appear during the call within 1-3 seconds after participants speak | Web, Desktop | **Reporting Issues** -If you encounter an issues, please report them by making a post in this channel, including: +If you encounter an issue, please report it by posting in this channel and including: - Test number - Reproduction steps @@ -658,9 +663,9 @@ If you encounter an issues, please report them by making a post in this channel, | Check | Action | Pass criteria | |---|---|---| | 5.3.1 | Check your metrics dashboard during a pilot call | Active sessions and participants are visible and counted correctly | -| 5.3.2 | Check RTCD error metrics after pilot calls (`rtcd_rtc_errors_total`) | No elevated error counts | -| 5.3.3 | Check CPU and memory metrics during a pilot call (`rtcd_process_cpu_seconds_total`, `rtcd_process_resident_memory_bytes`) | CPU and memory stay within expected bounds | -| 5.3.4 | Review Mattermost, RTCD, and calls-offloader logs after pilot calls | No recurring `ERROR` or `WARN` lines | +| 5.3.2 | If using RTCD, check RTCD error metrics after pilot calls (`rtcd_rtc_errors_total`) | No elevated error counts | +| 5.3.3 | If using RTCD, check CPU and memory metrics during a pilot call (`rtcd_process_cpu_seconds_total`, `rtcd_process_resident_memory_bytes`) | CPU and memory stay within expected bounds | +| 5.3.4 | Review Mattermost logs, plus RTCD and calls-offloader logs if those services are deployed | No recurring `ERROR` lines, and no unexpected `WARN` patterns | ```{important} **Do not continue to a production rollout until all relevant checks are passing. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** @@ -668,17 +673,17 @@ If you encounter an issues, please report them by making a post in this channel, **Production readiness** -Collect feedback from your pilot users after 3-5 business days and use it to evaluate your production readiness. Specifically: +Collect feedback from your pilot users after 3-5 business days and use it to evaluate production readiness: | Check | Requirement | |---|---| -| 5.3.5 | Audio quality rated accepatable by 80%+ of pilot users | -| 5.3.6 | No blocking feature functions from pilot user test cases (T1-T6) | +| 5.3.5 | Audio quality rated acceptable by 80%+ of pilot users | +| 5.3.6 | No blocking issues found in the pilot test cases relevant to your deployment | | 5.3.7 | All pilot users confirm readiness for production rollout | --- -## Phase 6: Production rollout +## Phase 6: Production Rollout Now you will execute a broader rollout to all users in production. @@ -688,13 +693,11 @@ Now you will execute a broader rollout to all users in production. - [ ] Rollback plan documented and understood - [ ] System Admin permissions on your Mattermost server - [ ] Access to the metrics dashboard and logs on your Calls infrastructure -- [ ] Recording verification checks passed (4.4.1-4.4.4) -- [ ] 5 to 10 volunteer pilot users from different locations -- [ ] Pilot users have current [Mattermost desktop and mobile apps](https://mattermost.com/apps/) +- [ ] Recording verification checks passed (4.4.1-4.4.4), if recording, transcription, or live captions are enabled ### 6.2 Rollback plan -You should be faimilar with rollback options before you proceed with the staged production rollout. If something goes wrong, choose the smallest rollback that solves the problem. +You should be familiar with your rollback options before you begin the staged production rollout. If something goes wrong, choose the smallest rollback that solves the problem. **Per-channel rollback** Disables Calls in specific channels. @@ -714,13 +717,13 @@ Disables Calls completely for everyone. 1. Go to **System Console > Plugins > Plugin Management**. 2. **Disable** the Calls plugin. -Additionally, if you have an existing conferencing tool, we recommend keep it available until Calls is stable in your production environment. +If you have an existing conferencing tool, keep it available until Calls is stable in production. -### Preparation and Communication +### 6.3 Preparation and Communication -Before announcing Calls to users, create a `calls-support` public channel. This gives users a place to report issues and lets you track problems during rollout. +Before announcing Calls to users, create a `calls-support` public channel. This gives users a clear place to report issues and gives your admins a single place to track rollout problems. -Additionally, you should prepare a brief communication to users that get shared in an all-hands channel for broader awareness. A message template is provided below: +Also prepare a short announcement to share in an all-hands channel or similar high-visibility location. A template is provided below:
Production rollout communication template @@ -736,10 +739,10 @@ We're rolling out gradually, starting with a select set of channels before expan - Start or join 1:1 and group audio calls - Share your screen from the desktop app or browser -- Record calls and generate transcripts -- Use live captions during recorded calls +- Record calls and generate transcripts, if enabled +- Use live captions during recorded calls, if enabled -You can learn more about Mattermost calls in their [documentation](https://docs.mattermost.com/end-user-guide/collaborate/make-calls.html). +You can learn more about Mattermost Calls in the [documentation](https://docs.mattermost.com/end-user-guide/collaborate/make-calls.html). **How to start a call** @@ -748,7 +751,7 @@ Select **Start call** in the channel header. Anyone in the channel can join. **Things to know** - We recommend updating your [desktop and mobile apps](https://mattermost.com/apps/) to the latest version -- Your browser or desktop app may ask for microphone or camera permission the first time you join a call. +- Your browser or desktop app may ask for microphone permission the first time you join a call. - Screen sharing may also require a screen capture permission prompt. **Need help?** @@ -762,7 +765,7 @@ Post in `~calls-support` and include what you were trying to do, what happened, We recommend enabling Calls in stages instead of enabling it everywhere at once. This way you can watch real usage, catch problems early, and rollback cleanly if needed. | Stage | Channels / departments | Suggested timeline | Rollback approach | -|---|---|---|---|---| +|---|---|---|---| | Wave 1 | IT and Admin channels | Days 1–3 | Per-channel rollback | | Wave 2 | Engineering or power user channels | Days 4–7 | Per-channel rollback | | Wave 3 | Full organization | Day 8+ | Test mode (if issues are isolated) or full rollback | @@ -783,11 +786,11 @@ Check Mattermost, RTCD, and calls-offloader logs each day for recurring `ERROR` **6.5.3: Tune Max Call Participants** -If you see resource pressure during large calls, lower **Max Call Participants** in **System Console > Plugins > Calls**. The default is unlimited (`0`); the recommended ceiling is `50`. +If you see resource pressure during large calls, lower **Max Call Participants** in **System Console > Plugins > Calls**. The default is unlimited (`0`); a practical ceiling for most deployments is `50`. **6.5.4: Track user-reported issues** -Monitor `#calls-support` for recurring complaints. +Monitor `~calls-support` for recurring complaints. Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issues and fixes. @@ -801,7 +804,7 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu | Cause | Fix | |---|---| | The Calls plugin is disabled | Go to **System Console > Plugins > Plugin Management** and enable Calls | -| The deployment is in test mode | Go to **System Console > Plugins > Calls** and check the deployment state — only system admins can start calls in test mode | +| The deployment is in test mode | Go to **System Console > Plugins > Calls > Settings** and check the deployment state — only System Admins can start calls in test mode | | Calls is not enabled for the channel | Open the channel menu and select **Enable calls** | | The user is on an older client | Ask the user to update to the current Mattermost desktop or mobile app | @@ -809,8 +812,8 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu | Cause | Fix | |---|---| -| UDP `8443` is blocked | Repeat the UDP connectivity check from Phase 1 (check 1.6.2 or 1.6.4) and confirm the firewall rule is applied | -| TCP `8443` is also blocked and fallback is failing | Repeat the TCP check (1.6.3 or 1.6.5) — clients need at least one path to the media service | +| UDP `8443` is blocked | Repeat the UDP connectivity check from Phase 1 (check 1.6.1 or 1.6.3) and confirm the firewall rule is applied | +| TCP `8443` is also blocked and fallback is failing | Repeat the TCP check (1.6.2 or 1.6.4) — clients need at least one path to the media service | | The wrong media address is being advertised | Re-check `ICE Host Override` in Phase 2 (Integrated) or `ice_host_override` in `rtcd.toml` (RTCD) — the address must be reachable by clients | | Browser or desktop microphone permissions were denied | Ask the user to check browser or OS microphone permissions and reload the app | From 3ebb08a6292b9b3e072b833f62b71be25b78133a Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 16:54:13 -0700 Subject: [PATCH 10/38] review tweaks --- .../configure/calls-deployment.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 07c43876b1d..793a8da1ef9 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -202,7 +202,7 @@ Do this before you install anything new. STUN is a protocol that helps the media server discover its public IP address automatically so remote clients can connect to Calls. -Mattermost provides a default STUN server (`stun.global.calls.mattermost.com`) for public IP discovery. No user information, call metadata, or media traffic is sent to or shared with this STUN service; its sole purpose is to help media servers discover their public IP address. Use this decision tree to determine if you need to allow outbound access from your media server to the Mattermost global STUN service. +Mattermost provides a default STUN server (`stun.global.calls.mattermost.com`). No call media or signaling traffic is sent through this service; it is used only for STUN lookups. Use this decision tree to determine if you need to allow outbound access from your media server to the Mattermost global STUN service for public IP discovery. ```{note} Your media server is the Mattermost server in the case of an **Integrated** Calls deployment, or it's the **RTCD server** in the case of an RTCD Calls deployment. @@ -211,14 +211,14 @@ Your media server is the Mattermost server in the case of an **Integrated** Call **STUN Decision Tree** 1. **Are all users and your media server (Mattermost server or RTCD) in the same private network, VPN, or air-gapped environment, with no outside clients?** - - **Yes**: You do not need STUN. You will use the private address of your media server for configuration in Phase 2. + - **Yes**: You do not need STUN for public IP discovery. You will use the private address of your media server for configuration in Phase 2. - **No**: Continue to the next question. 2. **Does your media server (Mattermost server or RTCD) have a stable public IP address or DNS name that clients on the public internet can reach?** - - **Yes**: You do not need STUN. You will use the public address of your media server for configuration in Phase 2. + - **Yes**: You do not need STUN for public IP discovery. You will use the stable public address of your media server for configuration in Phase 2. - **No**: You will need STUN. You must open outbound UDP 3478 from your media server to `stun.global.calls.mattermost.com`. -If your deployment requires STUN, note that now so you can include it when opening ports in Step 1.5. +If your deployment requires STUN for public IP discovery, note that now so you can include it when opening ports in Step 1.5. #### 1.3.2 TURN Server @@ -395,7 +395,9 @@ Run from a client machine on the same network as your users: ## Phase 2: Configure Integrated Calls -You will start by deploying Calls using the Integrated architecture, even if you plan to use RTCD or `calls-offloader` services. This approach gives you a clean baseline: if Calls does not work using the simplest deployment method, the problem is usually networking, firewall rules, or plugin configuration. It is much easier to isolate those problems before you add RTCD or `calls-offloader` in later phases. +For most deployments, start by deploying Calls using the Integrated architecture, even if you plan to use RTCD or `calls-offloader` services later. This approach gives you a clean baseline: if Calls does not work using the simplest deployment method, the problem is usually networking, firewall rules, or plugin configuration. It is much easier to isolate those problems before you add RTCD or `calls-offloader` in later phases. + +If you are deploying Mattermost on Kubernetes, skip this phase and deploy RTCD from the start. RTCD is the only officially supported Calls deployment path for Kubernetes environments. ### 2.1 Prerequisites @@ -413,7 +415,7 @@ Set **Enable Plugin** to `true`. This enables editing for the rest of the config **2.2.2: Put the deployment in test mode** -Set **Test mode** to `on`. This ensures System Admins must enable Calls in individual channels before end users can access the feature. +Enable **Test mode** so Calls stays restricted during initial validation. In this mode, System Admins control where Calls is available and can enable it in specific channels for testing. **2.2.3: Configure the host media address** @@ -462,6 +464,7 @@ Now smoke test your Calls deployment with your test accounts: | 2.3.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | | 2.3.4 | End the call | The call indicator disappears from the channel | + ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` @@ -477,7 +480,7 @@ Now that you've verified a basic Integrated Calls deployment, you can add RTCD t ### 3.1 Prerequisites - [ ] RTCD server is provisioned (1.4) and RTCD networking checks passed (1.6.3-1.6.5) -- [ ] Integrated Calls deployment checks passed (2.3.1-2.3.4) +- [ ] Integrated Calls deployment checks passed (2.3.1-2.3.5) - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server @@ -833,7 +836,4 @@ Run `/call stats` in the Mattermost message area after a failed test for additio |---|---| | calls-offloader is not running | Run `nmap -p 4545 YOUR_OFFLOADER_SERVER` from the Mattermost server — if the result is `closed`, the service is not running; check the systemd service logs | | Mattermost cannot reach the Job Service URL | Run `curl http://YOUR_OFFLOADER_SERVER:4545/version` from the Mattermost server and confirm it returns a version string | -| The offloader service account cannot use Docker | Confirm the service account is in the `docker` group on the calls-offloader server | - - ---- \ No newline at end of file +| The offloader service account cannot use Docker | Confirm the service account is in the `docker` group on the calls-offloader server | \ No newline at end of file From 62030ec68d041a6899cfec2a116cbbc829dbc613 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 16:55:28 -0700 Subject: [PATCH 11/38] diagrams-test --- .../administration-guide/configure/calls-deployment.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 793a8da1ef9..58a12d1b1c9 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -117,6 +117,16 @@ The RTCD can be added as a dedicated media service that processes all call audio Deploying RTCD is **highly recommended in production deployments** for performance, scalability, and stability of Mattermost Calls. +```{mermaid} +flowchart TD + clients["Clients\nWeb, Desktop, Mobile"] + mm["Mattermost Server\nCalls plugin + integrated media service"] + + clients -->|TCP 443 signaling| mm + clients -->|UDP/TCP 8443 media| mm +``` + + ```{mermaid} flowchart TD clients["Clients\nWeb, Desktop, Mobile"] From beabac2c611c06cc4c421d7ca04b48628a840e06 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 17:31:52 -0700 Subject: [PATCH 12/38] replace mermaid diagrams --- .../configure/calls-deployment.md | 51 ++---------------- source/images/calls-deployment-integrated.png | Bin 0 -> 66116 bytes .../calls-deployment-rtcd-recording.png | Bin 0 -> 48199 bytes source/images/calls-deployment-rtcd.png | Bin 0 -> 76105 bytes 4 files changed, 3 insertions(+), 48 deletions(-) create mode 100644 source/images/calls-deployment-integrated.png create mode 100644 source/images/calls-deployment-rtcd-recording.png create mode 100644 source/images/calls-deployment-rtcd.png diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 58a12d1b1c9..9c1348f8a42 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -86,14 +86,7 @@ Based on your answers, you can explore the associated deployment infrastructure In Integrated mode, the Calls plugin runs its built-in media service directly on the Mattermost server. This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. -```{mermaid} -flowchart TD - clients["Clients\nWeb, Desktop, Mobile"] - mm["Mattermost Server\nCalls plugin + integrated media service"] - - clients -->|TCP 443 signaling| mm - clients -->|UDP/TCP 8443 media| mm -``` +![Integrated Calls deployment](../../images/calls-deployment-integrated.png) **When to use it** @@ -117,29 +110,7 @@ The RTCD can be added as a dedicated media service that processes all call audio Deploying RTCD is **highly recommended in production deployments** for performance, scalability, and stability of Mattermost Calls. -```{mermaid} -flowchart TD - clients["Clients\nWeb, Desktop, Mobile"] - mm["Mattermost Server\nCalls plugin + integrated media service"] - - clients -->|TCP 443 signaling| mm - clients -->|UDP/TCP 8443 media| mm -``` - - -```{mermaid} -flowchart TD - clients["Clients\nWeb, Desktop, Mobile"] - mm["Mattermost Server\nCalls plugin"] - rtcd["RTCD Server"] - - clients -->|TCP 443 signaling| mm - mm -->|TCP 8045 internal API| rtcd - clients -->|UDP 8443 media| rtcd - rtcd -->|UDP 8443 media| clients - clients -->|TCP 8443 media fallback| rtcd - rtcd -->|TCP 8443 media fallback| clients -``` +![Calls deployment with RTCD](../../images/calls-deployment-rtcd.png) **When to use it** @@ -166,23 +137,7 @@ Use RTCD if you need optimized performance, scalability, and the best possible u The `calls-offloader` service can be added to a Calls deployment to enable recording, transcription, and live captions. -```{mermaid} -flowchart TD - clients["Clients\nWeb, Desktop, Mobile"] - mm["Mattermost Server\nCalls plugin"] - rtcd["RTCD Server"] - offloader["calls-offloader Server"] - jobs["Recorder and transcriber jobs"] - - clients -->|TCP 443 signaling| mm - mm -->|TCP 8045 internal API| rtcd - mm -->|TCP 4545 internal API| offloader - clients -->|UDP or TCP 8443 media| rtcd - rtcd -->|UDP or TCP 8443 media| clients - offloader -->|launches| jobs - jobs -->|UDP or TCP 8443 media| rtcd - rtcd -->|UDP or TCP 8443 media| jobs -``` +![Calls deployment with RTCD and recording](../../images/calls-deployment-rtcd-recording.png) **When to use it** diff --git a/source/images/calls-deployment-integrated.png b/source/images/calls-deployment-integrated.png new file mode 100644 index 0000000000000000000000000000000000000000..68aba8d9d3938b626928814427fcb1ddc56c47c1 GIT binary patch literal 66116 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 literal 0 HcmV?d00001 diff --git a/source/images/calls-deployment-rtcd-recording.png b/source/images/calls-deployment-rtcd-recording.png new file mode 100644 index 0000000000000000000000000000000000000000..d89ed30171ec67a3e0661ad3862a397091114264 GIT binary patch literal 48199 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

2<|PPfLveJkCX0Tn;%jFzV?mZ^!>S5PE#llN zeenW*6KZW@##9YJTg5Pe!K+PHfo; zQ}q?$V4s&^isa=kq-M+Oeg>rqWi}o~jUq$jd@hwoy|L80z2L=rw7StN%Bvc4b8D3H zG8Ty@1SUnH`A`E<)+CD6%+%4X|A{X9@5}wFZ+U-Dd(Bgf9ML5&N2`XT#`D$Msk}tW)3-C2|5Brr?@*UtXdacBkoXEyw?R?muu#XpLz*BFzdgOV+ zHPPS@211ze6onEQ9}X?>f6YPrq$(kiTQhZZ8K?t7xtF1EP^L*bg>3XKW9*(&n)1Y| zc6EaPv5x9eFTvt2Fx|>SO^51BEaDo=*rlx2!u!6=k++y!kb&*|BF-(Si$IfNht>A1 zT<35ITv%p+S7+5bvGL{>egGTw(ka$ze{qSV-+< z>5av?@|DLfFBRQ%i6n`Lc)t0whV&B7Rr$HSll*G<-Bi2Xji85MkE1`4v>iP})|jfb z)J`jMajoeZ8qNpR_wTfd>b?N)=+18NkIIIF54O{9;AJn*k_w#2`A4*I@IG%6wpbUR z2DG5|2G;s;<6mW`3QdkY{`IV-R1vSmr$hm=KueEqw%rbpZ-j{mMj(J{FV23j8%JIh zEwf`zTHPKF6;3wNX%;fkjUmyi10|8w?Gy)Fi+~GK4C+**3O;B=DK2;;sRv_!HHkpl zd6J3Fa91u-*I(i>0=Ro2kn%OYNzp#l%QeyN`nvUO-4#7;!qo$VoRI8G_UrR)fu%-$;Lvl+jTzj>BDFvmqbRk5phv>kfMbsFY$%U4Bj$OSK z+B|aVti-`Lrh73@k7H1>va*DsYVo>_*W`Y2m}(=U({@gfg23QwwNbq?$@bSFa3zl| z7Po=FhX$Qa1z%o}wpFD(JX;<3c_X!jKNW5cUzzI}V-u&2XY<%jR+Eip-zd{~S)FN_!=KG<@#r@Ot{{aY3 zbzS$k{WZtFpkdI%^<%jG1`b6fD0>LEeqM?+ZK|-IU6@ZD5s~K!2Is}g9QgUXTN-_~ zwUn4pesVdq?20-nZaSPwY`t+87m>DUj9si|L}nEid2zMOKwZ63<=Bx)BbYmnsC8TI z(9j1F6&#vYGalBW321OHNkYpZ2Qf@y>e2U(?45Cq3xGl1g3{ zpv^u>r_?T7h#JL6pOt?E94f|u#*&mT8vMHP&_YHYpI!wN|5~f`g06|)-@VtXAEZ1s zMd_pml$pvcn>G+1t7AF$;i+Xl0)curK~5p5;i#q%{$=R|Udi({xQ z4&w}3>5@fl@B}~SpuitDLCcocvMD=-Yrl*=$lCqe&6EF|h}W%GH&sqqTer=dAE_DB zisUGW?^TJ)=0bV|F=vItVfH zwT2?($-<=hQv(c;Fwq{Z6`xlU2U_r--O+035!pQG{S?t&4(A$bZVM%KCpu5=@1nPLzuWH(5!7q_WPrV{2J+n4R zkYIEd8f^n2=QO!q3-0gE|B>d-e4+d2#G>(vrbGTm`%=jGGkM3APG>P+V^{*)lk_ZZ-v^kll&|i9YW`U?k+5&J9`XYky1GChlp0%_FJ`M zZl|mgXk1F1)0N5nJyTfSij2A3?*Jo`vT0UF??cdb=OkkWZtdo>A8!ilspW%(ZTD{RMoZA2eh4 zlq$M~ND^hLGQrFerI63$?2?ry6{~>ZI=qITMm&do@*wp&=YZjWI-Cn_3zs|{lov_< z2vcSB!GSl8|9nF^ ztN1-0<9}hX+=b{Hc8P6i%%_Hv`I+tSQoHOV$gb8JHcAJb4+>iNw|8o6 z)d=i48TDJaI6=+G`BF>Scx@;XO?AgcH3HRwAH|f;g}AJTKNp-9kem!_yGEvFrc+^W z7>jhq49pX>5W#|@ts-P|v0H-gFUjmV&)u^d2aO~q9{{mYZ81LCS;P_t7RJwJVYFWf zWvtcwGBAJnl?UbN6&uma^0~yreheb5(;bQIY1dOiS_^GDkn=$j`EP-Y;OtMT+*gGp zU9G+~3|&|bgHn#G@43YB>0!Kr^?&QB3gd60v#~S=B_56jqqP#u{kuCkU^x7wYum}H z>>9Ln8~HLeJMuG#w6NWj#{hxC%A^HM%Ww}A-|{Q=;xup)O}?LOdGFv0guOFNdlmI^ z&H0BC5CW|Na|+BQN)96^=%N zwUP(37h^R{i`)bQ>0^yBiS(lLLKZCI^tIaugnZ6mhxeTP5ROf!>Nh{dO)Z)mBb8~V z?d?+ntMeIAbt-EBWAp!Xc$>qu+PR~E^ zA8~&ISUyV9uc%&kPL9e)7d)%j6Sff1GcaMj&tqf~XP6z{^82TCfSM-6^17LUrV#}U zYWg*UQrMs-@OaEL;jV5WeTZ3I{-r7+wF5`Y>R4a~5XZPoKXgy!dP`roDJ; zK5f!(G_P_}#;G41jatwy)Mg4U`EKNK{-6E2X2bDdoBz+`e&%B5QL2>aL6t$6)7mD4BPX@H+v*_3z}U zW|U%;@yZH^X!n(>j!k;^gP+n}u(DgsYV5}^g~6HWf_&wpQ1rx;H5!*6?D6|U7oV&h zDFyB?1gT&@hh*o}@b;PX_vpq!m2q&3ZMqr=B=y^$u;M<+p`^Ly&BlwB_g76WvZojC z6@0k_|J-KCG59SxbLY(0Hm$F(!{k}dA4%1k!+mSj1dUq0B^d&D%4+2=bp>hR5|o3k zJ7_ZoVU>dAiY*=w!+oc--@fA`#TpXc7^d;bCE`_4JX zY=b%G9OL(k6tcWV)GWfMwonfc>RGNa3*Mh?0(Cbw_^aNVb9a5bROD48ws92$X*!DT zEDPiKIDYus=RWdxV|g6;GgP&%P`Fn{I4~iw+A2Q-D=7M+kBk}YpUI$pH^7b|bI7+7 zHYu8YO>1ui~XXm)$-sG!zBTG zVwzVv zDP5s;v2XT~{Bk%iAR%#SdVc!(~qNTP-<5we%5#b=Ekrg?<}hxh72D@pn2sdR zQZ~Vbw@W#X%U3iQRC#M^Bq7QAB31-f9e#TtUL>bJk+-9@A)gRf3+OS?0nbn7dakNK zB;sFZTMsegczhV|r_57Qu7}=Ni2uPdCs8Gt5*n5%EEVlo168#Pi2>RfwG}1o!?A+d z2!kcRowPZ6uf(eVBb20>*A*ZAFQr4bIi)0h_aiX*J1fqpd3qlZR`ewAQEt0wiCJ_F zFgq6?R?5|BDDTy<5-H@VO!)q715``3_0b4c&u6UUdl|!U;8;miWEL`w=};Jng%3ZL zUj|?*tb;z5Ju|gR@Bm%}8}Hw+1p;F-yhvjs!`5sXy@4j>PNoJ!a`k7M!-*u4_qBDZ zY+-5l%IYeB2oqdo8Z>I5^Io04L$2>M9T=Aq2h>@I$2=N*s|bmr4P=UV7^qW)09LMP z!p}#2!!y_clX+azOP_ZwA8j7`rYmSy@4mRbRbyqz~xn{Y!!(H5c-6!zSk= ze1EE(&{5fbB?IKXh~||nerjE~u2!nd?&q%RkE+exl&5J>RZQ^9@#PwBo)#;K@NNEU zN~o6Dto`(~A<;-5x1G6deyUqEaAHU#BK>@IgJ#2kGadI`r#T6yiyT^&+B8LPiiQj#CP>L-Cq+vrZpaWeMas7O&aiVV+Z z4u*&9&<#hTQ0FkY61uKtJb0~qiS@BAN#7R)XUZ>=8uz?AbgAJ^eKQ*S^0uB!_c!kFEiW zJDN*HddZqykyt>dJtEL5s##;jx!TCYW~Db(W6~9j6YU;WVVK2BPan@&CjQBMieY|*!|XGvnk=cOwCKZ`V4+8 z+3A7|F)^CE*^mk_a>1(^BdoSTlc^DCsJH$~e9m%U`RO6m;?B|3D`al#<*$*Y;9nZh z;zF?klo{9yEjZtHFK`kgc=bFx)2k38=q-39GrpU>qD(fH>8Rxr%dXbrnG)4AT=J6c z`>s)$1Sb~LWhou>LHJY(75p_1-jiZcFwB_t1djM1u^Kdkv+Okxgww0S1n&KPvZ;}g zj8p#0*l)U<3hTZFOl^koURnRP?0-PwbubY5IKlt$S<v{ZDSLp!MqfPPvt*Z+W7Q*Mel2PU(lQ z-<6jrN5Gg!8GbHV2@r#A($}1?yhp3t?M?71R?7t! zg@E#}r`Q|SpkPpZOA}TFBHU#wkwnSwCq3x71sLKD%$4i#IJ{ea#>3%^yZOB)7lOpR zTMw`iKJ}8nN&BcFQTZ0rS{sq_t!6g?f;Dbyde4&B^c=S9IUtWoZf`9))r73k7LjQb zKm_4ix;UX32qQ*)(_mDx-{0T(>^(*I_`$Mb;VV_{Ik}X=BPFR|CR|WNGHv#HqHS5d zH_)%$Ou~(TTu}@T)XF>t{{gOnkWYDM@6n+at?+vn+}kgTP3lrut5J~&skm3Om7QCE zcC%%VQ?16^dV}pf z+wrA2-qw+^oSaA__GKyCgQhNKuMKuq2 z3&GY&je;*FKmA)x^E~|f)*N`LnjPY_*vWyN&@HMpw)y);-b72v5>c)_ttuP5K|&>6@(uwa{N2F)lBS?d6gE?pp}smXY6YS zI8*q-?LJlPvJQ_(<(S?PMzbfdH{tQIwaT0TAdLh9F}(GaUa>pnxk~ltx58zf-%Jc4A)=2boj2A1Ol?&_TlTkAfAIFTx zJ@j9GlENEVRZ}%@);GU$)r!}kFgMlS6UKPIft`aInVY=EIpFeRd)fv23{ty17YU#D zJ-{Z32(dC>t7p}}H7XLgIA4V=>0C1i!z$-`mYHY4lQaVIK7bbN331Cbx{(*^2zqRAb#GiPA7tZJwiQTT$AzPpxq z+%9f5=)OGCo#0@gCRX*m)zROLi=s+W`3%)L?RtT^lV&GtF6|`9iw5cEB6!$Oa%{Y_ zfI6ioBQMY>i#rmw!A+V9cSdX2K(_cwj=qT^e3<3)`#E(J`7&Jc4dn^f0LW}tPzji1 zE;kV4l^xq*eJ9#?1+#z`EP9MBNdEoPcTcJ@9V2m?7|leK&^OfJyAidxi0K1~t_5IC9ze!)}d^=8&|IW#?!d2lOJ}7t;m?uaQ1nj^dftTP7Q{H`!lvDCk~ zrPQ|I=N%!iRUaYG6Ca!ng)jugj3P8E~xxVCCng zzViXCM|sQs8B4$<39e-}_z+&Jx}{&Sp{Uy^x|ggU;4?vt${pnDAIMU3*px^#dyEaM zEt>^!S4CB}Al56n&H2$V5)+$@v%S#-2v0CN?;$DEr#U}kXOC{pO5UP!Gd}F)=7dEH zqcX0KN2>7f8Rch2UR)Qnm9u{FvuX2n;!NBg!MnXfJsiKVf?UiW*Aa#`y!=LX0C$^w zgpXit^drfv) zV}_do#og27%*shLV{rPEZo_22yt^c{8HS-^ve(!hSg5hWU9c`vzN~aZ+i8^T3tIyq z^X}7-?@SbIfuZxf=*#=dzDte>d8i@p zKGD^U$}yygt9!;j(0b=ZaIUJ)E~}-BxjrACE=2O4{tYy+n-LN{I?)Kp%L6MZ3}4@s zDlxrW`t5nZkQ$9$c6`tjZelK2nwc8QPfdu- zV&l~X)t2KFg)p;(;rx7D4=TOaN!hxcYro30YcNp5=Gt$jy@Lyr7%_{&z#H#?rj^_% zai)ut%7@1L*(`r!qWZUMf8`!gsS0&mi+IIKq|m&8h#_P zNMPiG+jM0|RfaYLed9tENMTSbA`x5fnS+D&=h#~=o$%Q z#M1!$QG3^zgk1mm^Hck#-M($i@WWlPtn_{SpqABEu)Z+oWni~}B*GILkoNTZUIyua zPiu|!=+lcA$QZf)Iy>j%pE4`_|Nol|-WBbKPr3Shd~m+ZR?;rC#(WVk9i1@(^~$ht zQM@Cb(O{M^gpZgd8Oe8Z;ug8RW&>!;h?}3}c7OW(dG!8Qiz9T__cI|Aet2bL8$9y_1L5!_vgXK=i7hkqdCHu>L=I&KkdUaZC`9saMSa7WRV zff4PmWH&F()DQ{>96NQLvcXhFo)bcFzbIgFuINURcq;op6M!@2t1>^oz*NU}(E$D7 zuTCpBoC-slx(`o2^f>wYb@d-(S^vie{|_Z6SL?oITyOfShTn6`r3~fi3+Lj|H>lg( zF^}^+Oi;-4Jb!f3CD458kQBo)wIsRQ1Wgv7g=STzKvHnA6l z)f?eBChYxEnx5#kTDRQ!p2lN8=al~?@nhQ&_q%kR8$VbK59#T^i7Ga=uY+grP}_($ za^*Otw-ygppylt?{?~tAV4eQ@gT;@{=AdTikX&3R`&yY9c`3G%m2a8m}-H!iy zng5vMr>Daof3N_9iVis-8y!;9`EHg!Sg;Qu$L9%qjz2vcx)ktKHs(N0cR$Zd$+6!0 zJ!{tSSL0*c@TY$)=HLHomX@9?` z-uy_81hCSkiXb833HgMfXTanE+l8U>PLv>KqbKs3p~}AT9f`(+54w^CWrkj4|~H{zuy1Y5m;4dW_a%f`3^-v)L>Bp zu!terqdD2F3(zaRixLhMUpFjv6BFKrK(x9={d|KFZ0tPk#eQAi7Z>o(waq#@AM>6055M@+O) z7dC`t#nZ=Y#2UF#H|K<4`k8J+vQFTG6T`#%$zs;=LxkbZzJjdK>p8%An!d%f!MWK= z)$o18Tg_s`)@Zuo?UCSOBTAOQgoqBrJ(^1*yD$&R6<`mXoD&D!Xy}Icr{Z$=^RM04 z3(>2Ivn+S>%-LnP?8#$!4pGRhNnjV6D8gCa>yh4Yo(3~UF?XFusJ&?#f+1JGK!SWw zQhuKGkEGgmy>JewL}ERO%vLHPF*Ppf;59kFlJt?Ape-}@N%q0;?0V$bHg zNYPC4>DPZ9pNZ7JEVqAIKAU-ls_wX2I;DM@uH2P(Irjv=+E)pxj#v7LgkJO2EfuQ0nDokNU1wsfB>BlR zjf_7s+*wYt*9zjkd+O_Cw7>z+o7_|8e@XfCv;WTcztK72?V`Rcp9j@Rn)f;vxjxNH z4A$6{m#Xz!RFUc`DO zDpp1_ppB}IIP&}CW-)Cho$Y_}T=-mubL!}ndueHZ79p1a((u%+fc5Ecwjxh$HO^YGjO z3CZxf>PXvM4vpDjPmS;G$$S$`uiB}Ml!Nc>JZ#>-uo&XCp{41^;`pDsmHmV9$+ZDe zl={KaeN*BG%PHz%8A~xDtmY1n)=@^zkx6Bm++Vx#*}rNP?Ni}+3>JKTzld_=+b!N=;@G9{9d*n%QO?~S!_sLVYyRJEHzOzQL>T7S9=N3=|a4= z?UD7tj1y@O8i9#dGJQ|jxuHgs#VG8sj-K+}1j8<=jIzZz4401Ymu>IsuUrp~2cTY}C|P^7&&!(1gg$EIyhgn76j3CT%ieXt ziX%x0Roa#KL^@!3|9ZF8-ZU`Yr!AjCiWL&Tzt9LI%})%G0d(WA&64G0)De>=VEl=4 z{>qbG#SpWFsj;_~_;m=dz*c-6LK<^@^IhxGa7pghgU557M>s&&f~0SoVhgIOD8KL} z)xfdl+`AwTl1W98`>An*1O>X|sMTAvt0B55C8|t;twAYn1~9s9mSA;czwh2!1(xF@ zMnrxtgoOxwtYM(>bIQDZ3t%YwxrNr5gxgprpKyOg!^mhoqrx*6j|Z|5VcF+z1$$Z0?gtUsG_#AX$L_eKJJ z?UYhn>3u$NjXEd&Q3v`^qQ(k*{=h9G&hveh-=IRE+u${G*@_;2CeanGleb%3d&Gq+ zbhdH?qOTZy^CN=;eoI*mE~~5Hs?@L7Q`o>x?|1Ma>)L&AJ)D-+z}Ddfa#IgR-v(cv z0`%nw3S}m_W#JiB=+#QEvNQ4xX0RCmc2}zpYG`SgdltC&N-LBL{*7WHs%-F`7_sO+T5;Si{R_uJi+oGfei zZWH5B)vkr!O~cuJzd)x4gGKR^MfW`+Y*WrpT0}FQ4632hdVS zx5Vblr+Nh6r%QXy4gFv_jn9m{Z7&IF*(r%^w3_L@GMA$9^7-KIZA5awTxjrQ>Sg1v zw>3unOm7DTZakTjP|UzlXf8dq;p?0;Nq%xSHWD4#L~ABpA>iK53ly;zwmBT>fC{-}_rKExs*~ z?YTq0QenlwED<5)!)X;5Te(P6F2E>M`I@Q~2EefrOfCc?FsEdm^m@92ox?GIqr9sb zu1JAtUhxv~4RP`ziw7>m%n0jLTM^NF3UYJ&>rZw|;$&8A=VwVRcPHIajMe`$RGM{SrmNCt+g7vyROt;(Jt)#7r!f@ZxZ?EQD>(H-^1O@f`rOEvKz^`8&1eqoXnbJ)5-ko*o^MHF9q+q`gHG1!7oMHkPe6v3iy5XVvQRFh@*sEv~+ zEjEqkl1YB?TLF;6m#=6cG#uuS~mKpQU$c>Gk2g z8v_G+#wS^yIe2x|0%{%KDPGyMC&h3?3bQ3YS_FY@mTvPeB9pGX&9 zWL%q_DTq_sQG{s6=+8{ymD$-T;>UaPB{#%A4bCO=Jo2uTLSTDOo9w*_%)ABwZR@@5 z3b%Po+l&G0b3l0sjpx!OftzzDS}#W}j-wnK_Ok4WTasSg{B;oZ8p!8)+73-!w3%vRZ0f+&b#shP6zXeV;lSZcgRA z^hASTZ;Xdi_Mn0)8V0f&P0d=m6IFjF2HGIB{o)Uz#~460-`rHn~T(~rZsFDf}bp8PsjSu-zFqg z_hH~vb>k`IlNeD|U4zSFNIXXJg3`O@MW;T0tg z5Mz^8gV@~Inh|W)$Mg!CcwhjIt58tcQYa45nLe;2rSP&XO8R<3f^Q(W`}rc>Oc5#C zUwFNWj{U&`d8z!wijK6eELD_W)4ZC=YZwWQ=uyb=-jcZ5E0m{QbD`~s0ifkPT+x-h z)f#N`)&mi@Q`u-^mPntM;7acg2i%^WhVKFvb9$j8fbM{RORG;1MMt6I89$$V2MGy8 z@THm`m2=W=Z)Li^TTQ$qwD-IbltLL_5eQ1RI zGLQ>v6~gDjKBnd3(n&XEna~~Wd>FJBrwNq%11C|$^yHACP#Jlo|7}B`e5uuh&;1=M z9c~jzbbuR0bTd;nWJ5Z&(2GP(Gl}!nW-}U=Klz2OdT2-qe2)!&W z=qBH>hiCK)DhAHt)A6FG40sm_!c0mfCf~FA>DTuj@P1NAvRo^S9t>xcwvpI!Nyeoa zqAmFmMI%fGRy+V#lpnds*_{IE@cC#!9S9efGQ(KOy}Y-yXq%5Zt85o{=eE6Z#}2^q zt6C4isL*r1&-!LRoZ2&C&a;|CR7s^k-t>bUyE)A-ij0JN`UXx8 z8P7)&XY7VCrP2toX>Zj|Ej6NDxtEbQ7~PUzNJA}PJJaLK@UBNK)oM`^=KK(U_N|Xx zz>$6*pn+*+r@^GMqD`Jxpuq%JHqfnL_N>i=phK%&xh}c%-oVsReTEwJLVV3+b>m0I zOmgBd#hyCAbW5>u{h-xWO}(iU5uFc$T14_0by58Uv3CXJ%_YiKMH4o~Pzu1&a^VyY3@g4i@pP~yk zKO;~>;l=c?N?@U#VoO4Bz+`n>3G?hg1lRqgB^_$e##!LKPL36tOZ4${6OyL|TBGHs zaOpU*U|>vz1l$%sl-q6TG}Y0AXU-=8&M_lVq{dj@{NwMr=+60xllC^`1{3F@JeBn> znXUrm-~8RZ6MG>Z+E?emxF90Fs~Z*ihYXGT`N!^QHcM&*4mxoGGy7xa(?FSvkaK1Oc4J4w(zo@>n(CVv{Z; z2?rPX4CRl$T~P3=R4J2Cg%3q|{q8cC&OLg72C58Q>9Q2X2JW`}Dag@C*s4fh_$ zTfSvyhg$QWWBTuG`5C~;l^ zzh~DqF|1(hcrp0^nHU}5R%|YcvX%A~!CKK^URD+&@nyhxjApqF$8lxEXGRMgwdH55 zjA{XJSr#*sxb8)a2U6cw^JIK`&&ywHsqT!jSmNiDltJ>W&lDfmrRJ{ocbv}>TH-9b zE$=FJDKj}N6m5jYDu^HmDIar`lX$>8GkU8nJ?&mJSEIr)Y0UX50WYRJKRY~zPhc>n zyf73}r}c%J2RODR1vk2oL&01FZ8`13Yj(4{F#)8OV&$u%I<*72C^H2Pd8qn7hN&_!Ll*RAEw=tc;S5rLF(}@sII|? zSwU<~OB|ky11n(DE%ea@&z_cu$nR~v1C~-=f%oo73;J3(=18B< z%Bd7IwY0gcEHpZwS|z&^g%t-_WDN0}n`-P;WZqdmpHiYZ?D{=hHybevt{Pt2HJKG> z>U_n@dA|@fZFT=aj{7^79Z|KnTf_&7u7^xhRA|B_!UZv4Pc2Ckaao`(KFgXqHd)O9 z?x%aPbLcgNuDK4rE_v{+k`NBHZA_uL)zAeb94#zR5FzByJd|F-4WjA<$MFQ4Bq*!D zz4z9^3cPI!5Au!!eW7Y<&*pK$?g~5@ys#uAGNSzU0$r%sXhI1OKv}+%%FgpfSYKf5 zYVV2;p%vqEl;ZQG3TW@tlFY2B5%B$m&<~`ZUMq>pW*sW0WMpBY{;r_%&{r*Kd<21r zhZrLwB9o6U988BEzwdnLK|UtwIGhrk9v^I$k-b`Xvo(5c*KE)``fWM`QrR35nUQF%HZQot|@@0d5s`es_%d8>ONZ*|XzGv=Jq! zJLaBI}dA|HjaQa zH;WFP)_B|!puJA^ZM%X{e>soE5>SItl3j6@4p7Zq*{uLkWmXJ4%c{_JRZyH{`B@&U z@lL^CVg3{O`WoU=9$`Eu2It~dsuG6PY)a$B$&EFKVI(7nTRp&TD+-hH;ewQm zVno3dd!OfiA<8$V74KUoDTjiS$RoV9iBy19Ulm;h$LBIy`U_=CP`PC!z*}YZ(}C%v z)bE96arJ1i$xWkhC~qtDl+IPK=5}D9qv)9$qAhj>E0`7kN?f|yg0lWGQ6ej`gIr5e z$f@o~_;#C;&UChh2UmU>q`eO6^`zJx0rz&A_AJ#96|Ka%%!%Pvvt)G%GDXcj7ma#CD|#Pcq; z!_N$T7dZ%*1b>a5c{9HxHlEL9Jf*2pVufKkLp8=uzL<3=bP;*M_OABayNhR8`0M$Y z#NAok7LKGbDQ`%sE8Xk8&(?AV_dF%Hz*Ag0ioq`DY;91T-%z1-Wpr(%=DX~Xp)SDQ z*mBl7D{!FEcWHu&HQd;1n6l#1yNKN+%(BxDewN7P(>G;X|02TZ^Tl zMwv9I>~g0$XVV^3g$5O$(9rI8fLnGp7jfFL=SMKrRHL`PxAty1TT^Aqn@w_=lC0nY zKLoX412%UF>OdLzFGfjEwr?s6#rk+9Z|iesL5=vFYmh@X?8YL=Pv|y0&kx>4Z)fx= zUephg&co*<#txM>O?O*RG*QUl-#jl&m4z5rorg-l{}_;GeQN;+B(V%09TAVa8_Ri+lZSw274>X z7C9f4_R6X4Cw3Cf@7`$^j#|-@BhUlWrdxIE;p0i{wXyeH(E&TH3e~-&15x83nhn@U zXC$8s~kajD%4E@I-(!QD5np-pS*(40^4XIup`+lptV$s&8BAFuj&5o3q* zX_~~}R0tl9TEyRScUES1z4ZNfUGx!F76IDHhpB@ma~@?5r87qSvBT@Y)vAs-61(Nq z`4-*`f~kT6kVXTc_#O?c-`;)y1v~QAgVj&>O210%d+x{~0@Ib&ES*=nimn`4pVOFQ z&X6bbXL;Xj;q{G&84FM#PQN#rMM$y$Ct4&|OF`f2-Cw zfK7uoH1-}DX_3{KRJ~M1CQkSTOXN!x;OrwG5A=Xy*<(ckH+Hr{n1|*g(1z3%RF~t! z$I=Yi@fvH=?!~)%g^wJ7Khx_S4;wpbiZ+`0CaTqFk}{5{fwujX!n~*yGdB)>QRhA0 zUFT*}ped0uk10Cg{=P36Lt|mN$HMY|>PqOR53}ed{7b2HeG|ZgA1tahoobfER0=$A zNdBQb#Ks=oySb7A!A3*8D+=-6!)ie+-XUB}}I-y+g`lj*Cb2h-A+5gYv% zZ=;93-cwkzRa|HFj*K1_GR23HT>CTyDpm;a^#mvWX$q+ zg<4fKbZ4Q{i~Z@RLEb3IC_eT!qCO{>n>x{u9QpB%!0S#<+Msw{ICAyI-=+317%o9X ze>E=O-c1d@^jJ_8gTvdqcL#85fK1xwUcarHDLV|gd)-!ZVivWuoM2O5wHxz?_|*K8 zjGL8UEq$F}G8NQ9k-aV<6gXUSpPd^lTlSSx@-D`OhgDC*YdW@tNpX_{hW!4_;g8;3 z|D(V(VldXT2~+5j-Rvvv!>ut=Xorc~)ux2@jWDdO33gp2^OT{w~; zL?qZ71_b0&p^$YB_KeqFe~ebAF5k2JfE2Ji>3Y@WAsOISf!TQCx|VsaYxQl{Y)nrk-t zRvs2>4ZCiZe#wpx3*hJjs*V0Js4+5qN~m7%g2Xt~oE8LpLA>=8Cu`s!cAi4w26g*+ z{OtPArmf$}TYrqnpMy-xFX6<`KmnY$yQ1->0{(4&uz_H* zhLrAK*WSYOSCwkNx)(TQz)s6pmJkXw(muiK`FeKlb=A-F+u-&T@)Et1lcfb8l*|{nS$YuP&4S z<9EM=Kny>SPaH}qw#1MB<)}@ed;Jzi_c#Cl^&suta7M=aL!lMw7^y=i)#hu-@xyNr zlg-RH6}e9*<^R@>zdcH(1EG(WwZ5~>9VlO}RH=Qd6tmV_`&jT9BYf*dL+Gz7p=G}v z#1rOCB7U%3Qk@o5k(e+;2CeU3a6G#cFmWLNCU`)+lTEP2%E2W+a4N5;vd_5XdjdNH zzVIA|hoLa@wI6;iYn~TNzB#xQzTCqv7hg255%G{s=ivT{+G~dqQ|e_$s66;t2d||S zF*}{?7<}ydwgEcZd!gA2*)5V0p0yEoX1(?6n;dK)!Yp@N2a@M<+wOUWybYod&V8Jl z>cX^MSu=ya9-B>iV_-1rDvt+`d0YdN%?M{_->!F);9uD{9{`=1zN$>W+0~dzPhu1)fP-c6B?misQx$MO3uGa&277f?;q& zaaSSZ=4}mCdK80nOW%Y}eK7dDE6ulo=Vm!6#K?3c)3c;w!44fm6>^Qd{E)u`hF_6L z#z-&^;gJH~8o~~y{XF{WPZl!K&er{kU{}dRts*+y0-tT$8dy*{LvD0bA{iUBOG#wo zg5u=#TT=DP*H)42T~O)>ZGqx#oRCT{t@5rqLfn(cQ!D7d}484sb3sXICcgKhev8L7SLAyN6ngjyb{4FZPcvR&EnwGzSn;;f z?=ViJ+mJd#V9ON9Hv_L6;4OOoY}QoUV}{>hcWC>$-g0^`+^c~t9x?rcr5y&>18pa8 zW9WUh!U>U}0cuw-iWETw>Ibm<^ir+kF|OwB@n;b{$=?m)$ho>2r@${1#Ox;o>rGn* zh3FW74TU(Bx1D4V=aJ!zD1T3t1!?HAg0I5sB!qy0Bq#(7r24&|q}$pKZ%Cv%cf2oo zj>uVC;m^iZJP7B|)rXkvF-Mvy?gY3D=ifM&}yJwUyBVhQZPCviHhKqCK>hq72mZOgpPd=m)rfrQ1h+qq9mQv)K`iBVdC?!Fl`})xmJb zst3UXZhor*BW~OQ6#T+1Z5|^E(aQ+Ga66P+9A5>5xnM<+pdNSIcgh-3Ya>0)o_3j! zJaXd_eMv*a;Xp6}yUVRHp5y;K$P2CD*1>6Fto^Z;W#u z;ZF66e+6ecp9D*GI!g2*_@27Xzy?=n_RUIH7i{1e60gPjc|=FO-A!v4af zgEnk=4UsV`q(rNeGLZhAGX=OuvT|3g6>(DYQA0pXP>El@mp0G@-(+DSRZMccaxQC5vD%`mXW-jAvJ0oSSH)qxJS-s0(D6!Jv` zrv?<%k(ZN)?rE2d$}(%pC3-SZW7$EkzCRu^Av<=HlB1_sGoBS6UG;+1YCvc64E0bE+dCgQ zUSZ>IUZc;|K98!QBr?&o3bHU6V%wnE(H#kk6@EW)?3yxHx9a15`-Fotmd=IOcI9hz zg*_=QR*i29z4bNRBAcx}0z%%e2wNlMYJ(a;U-&aB#E0B$Z6#`YwqMw2?mLk&*LE-? z{HsmGsl{7uzL|s3gTE=jO%*;PQ_+0bqG&cpe;@LF6DU6NxDn8)J-aV zsQhT)nTX*LzsXh|7=j>FeKzuD66Q(2@te5~c2)Mv$D?8@#Kl8*ntCluZ?Kn4X9!bl zrc$ri=^%W##iOViz*GiKJ6)tepCPa1O&~!$XnDYSl!>cFZyz$UEcMjqmqJa(wogPR za7wau{@z{{I}sy_%n;`C-oRIDGCV%zZq~DfgF6MP5j-ZIK!`$|pYSUkCffmlouR*S zj=)@HY2Yj2sXWt&GajG4aE$;?&Scw8&=v>;gkMjS2TwEuK{lq& z;};F|7_q;Ky+|`8b(>Nx@rmg%VAr4--4C&7Fc?Y$MB&AMus}_+fKp#_9V=%guS}cO z!C4DGE9xLVvYK3@7T1_dg6`=U$5wJPxe?H&SnL{z2D*O$ol;q5|E(g7IP`SUVle}T zQcjsqj#J}3;;yJlT_}12$MXj|SS7dNJn@6UjqHO&+EAXda6x5X(^ei#dzOT@t(`!7CT#5nTK)={BdWH}*@fGvObEeDnowYpMPZ_TD?LsjS}@ zX2xE?K?Idz0Vz_Y1PBNg5)dIEqyT|{bV%qBs^I7-QUnA9Av8$@k^n(UKtdB~Ql*6! z0qHdqX#$FO&oeX6%yZ6p&bjw}&wbx}?&su>u-D!{erxZQz1Cj)x4yscmq#UQdOAwU zYqnqhJ()Rc8GSe`ZP_i)9P{|Iu)l<5q0D%-l+Oq3EafEqGnj|Hc8j^0`l=(Jwkh8Nxn8rm%BPxO`$64LcR27}#yR8%A>CIrUsWYrzcw z(n1g}jYw~uAYFPu~+l+A`GqUP5Wwxt>$qgErXhJIYL_nvdg#D+* zoX7O@GqcDIehz3#?z!1apJ&a&8t(~Ir^br%d4i?>$Y)#b(cDX|5qctSy`A?)%<+ZJ zuUrhg#8O%X@PPRIk@<_2wu=St1~YZ^bR%53F>`ZvX4ZBEL4JZ1B2~&FvJ(>gSmFYG z#=x%2xTzfu*ZyMTK&{Agy-k86$1Azj^rcJ*`rB`l-ZTlCdhN88S?J(%O3b_F_zmx{ zxj!I~zmoG)g=yhU4^uODUF>!xjpaZm%Nespr7ZZHjPD!;RyzWFxT#Qq_IoOv1-!~S zXbLvPf+DzZR4S=orPRw)dv*&)%wd6r49r~`I4_kBVz0RH3pcVC76cSeFZH=jS~Wt2 z;|14tgnACyMjpItmV&Q)fyPzsOU;|1WY8Akp{Q~-G@JJ{6k;i%E2y~FF|@ZCvvG$i z6DIzIlf5rV72RXW3O#>2@W~A$!Eh0A7he77v)t{U7)2(slv=!u9}o^IF0H8|eM3l5 zV2Sm|lQ@8k!T;Cj+27t`e*Hcq)iIo-uvl&@nfGL3O|6Iv&O3 zRY@b^p)kB^R9V6`(S_W&BQNXwz9bl_WoHlbH-^v83DSHshLxh!(TYEb{RC?JA?XcH zX{BBB!aF~L`BZucCnd|591Ve@z_~;~U>4giEQxF2eEQ)f5b{&$aecxRu+oc7xAP0A zy8mU%g5G~ymbzz~yf?F!K3Z~X!HS`#Fk$`hC60yI@Qjf?ob@g@xz_JU0&3#oNHK$uC0abldtc$)7GwrRT=fmQs<-W zyfscJwSUkmxV@ej(N^CUaO47q(Tf#6K7FA~9EdK`C6_`WyFrXgS^)h6Q@&BIlT>oiGYjER0$uwoYhw zNKEBQrdRuzdM!)4CrXAVBkxyt!n9!SQF9%jxWX=m<2NaE#1t&}WOn#4qI+9y?~&;* zE0Y<;Zyi4G+O(eItV@bb=nr@ICvLb=%kb0L`%&G>PQbdFDzl|xNIfEV1Mw+^oJ-p% zrfG}aus-%UrXV;N&6q)L=osTQmkJA0Dk_%yJ8`tCk>~^2&Zh`{5L^i@_0>t-hCaX# z9xcY4{^nX&I=FQD_6`oepK~NJn~G`@;9+^u9yzpEg??T47T$bp0cC7^G`h`C&w>QMM$@d6GbsbN+!a~PL=+0tA{F5||iQD1^PI1rEl@kAm&IdUsOv=Hqs0S8T|nBO^gI-dHO&tWbZ zy=R})HK9ilzH_u~U_%r$@C7Y)5b4>V&8VTztq+LaGj)C9uXy!!mddohcIUsRH1HY; zoMzeZq&;=f$DIMhcL^f!%%8%pW_&psK=zci8Adu5R2a;w1!O@@a*bGP&6QOWTe)y{ z`!hE=Sv}H?Cb0ARo`6@@VlQj z!vhPMy478Ra@2U@b-}^W@@#@YpplIp3zgV|ymT^4uj+)Ns2rRD3)Zd@D)>mb+F_r5 z_J`25p;k`Nm?-H@H;EBFqnD$8lfw03 z*EDd+&4u7HP<9qwL&?WT!Jj~3HxBxld`|ntF)dNXjN8o24?jZO4U@WvSE9Q+D)QKv zfLi*Ra$g`(WhPQDNDswNI+TP>xkT?Pg%N>#6}qqG&;oIWjB{f5_B2)Ik4A0u&;dnM zNo+(VJp97k=9T85fD~bC&JFB*xM*X3`&Xx;*_x-@4vlRT!r6w$tD^)^sZ4B1KAJ0Y zCScDYbL~F3L&XpCZS*F?x!~L{ZxTyivGY*cQk>Q}P0kW6Tp`OjUwM{}f*V6(0S;Uf z$Q*Ksx(b*4p##j<_afzSq+_Z*(lv-g!C$=tUYv9Bf(d$s*nUj!%g%p2{DRA9(!RR7 zv&C;1JDng~Oy_o(NfC)HtO_*ZZ?GW+D*4v*!7E1qvEk@0Gh8`bp=i{M=Vf}jp_Ygs zK~ip9I4YzTgaW`nUwGu*OdXE!XxHZjwtYZ?2PSQ(fnoVyaoz5^dEL&651zBuILG|# zeM|_9z+0Z`*zwTNEN+3TZA`xbfCG<QAh7(Un_fyb*Mt}aG*i-)pJta8cDNi=er z?aW;}O6>>B=cYrWWnbE4&ktOte~FgL)@)KaZY~%o+2f`W{Q}yrb9?(7dnC<>9NF|R zQ;JM}S=t5fHh$LK4&)q!+DJ+)G-{--u+nTUH`GMRk_?r2NmOn2~L`3ETQ6ZXy;_x63~$Q!y~ z?Vhv`w3^=LSE(3=dzsgSEEYM5f(h#T2(G)Ka+CVXBDrTNIYK`0xVsjqLvZQWEEj(? zwcX+64CZS1$?mGp@0VU^EJwBE0_@BsVQKF?_en65p4uF+c0JWZ zUs_iGdZ{Td3fiAy3-5AUC$95UNJ@Ez9B<`kEDlw`Wm@8#9n$H1O3`XQ+Dp_tSAap* z4|L`1YO%4Sn{=H@jS|M*T#n0@9IzKO9d+MOb$C=O=jM7EoZnha+V9cQKp?=@uH}^z ztkm(~{UA56T7;%Xgw?p7s@f1{=AFQ2FKdOA!9U8-pIJy?`C~$}36MCjz&tR|y;ak4 z=*HuC842owneI7Bbfdz^x^@;MHoI~@SfMeDocmEnDj04OAHVyPDb*o_zb#o}+&jUv zAKtvLOFe8xN1S(a-LNE7?}%6M&BYtMtpc`3R`<(b<}P0z_i;=O4%AN3P&;eB$FpaB`9i5Du#T{OZGg79RD<88 z@yd{A0%IuURRR^+sS_K!ftgY5GRZv(#iV1l-#L_m-4@Op-(T7Lb@;H!?D^a95ftRt z3CwevUiJk0$Gdz!CsQud-M_f%A9u+_R0b)%4B4^73w-CO;(`@Bw1W*(29dZ*qz)1u zax*N4=N`U>b4L+WbA;EdH$lp6-mu!*p6gCB$k<8g|An6ajL3X6RpTBG!-mL=*d}x;1`>9bHE-zT! zw>FgFdZ*#8>m!lkiDSXQ6VaCNRZA4ecxgE9^R=6y4Hg`psai(5Q5v|pgG(+|%f0h$ z!-u+|jy0$u&1HYeQ`DhF64xc=JOP2J({IQTkP+c7aL2*$;&W1^<9QLapIP%}az^H3 zFUdA?uBW=>&uo^fr}5`dBO*IrnGPwQHcUboh$^RLpq`jr(b#uq$6x z3l3mB*uyT*lRWPR&AlSs4##B(E=X4E`mq2(iRDZLqzBTaq?9+;*WulLoUYW8iHfsbiTZwgMT{FFZ^7x8TfNt_ONNnWJ@0mx?TPaoH|E=Uho~diijdU_%UMuY1;UuyQaMYh$0#m(;TUEH%a z#7;0yON+V9hG-$3>;Y3M$}DEFkWiJ0$! z`hehPevxkCg%%zg@AP$y)GxdF6y(HqhlC>k~ z+}iBY;|I4=NoGb;=nQB6Uc-7T<5=EE$X#fz`|c>VnpM+$r*LZ4_>F7Laxit*?K_9) z&88Qbx97ietgZg|rX1j+8Xx_lv*&!Ra8skuKJ=&Z@q2n6(SvqnIvu@;_Yn*+a#&b6 zwY-HI76oAUK zwNY5I3S9(3^1O+tdbbnH*H<6y9uBtfc+A=DwuQ=gKWFis!}Uy5NccRK zu|s}hH|Xwm6;!e*Tu|4m8Zu*D)z!tQTJ5a{zx06xovA1S8Trv;D|soK@7IdCM#|-1 zlzUpgQ)#=1d@SX{x3vxaN)Pw9y8dQ8*6r=1wX$1S1 z3OsHWp1;kQR}-tn2)g-F1mEYm)t)C*<4Mx@j~aG?9v;psU4_lCNA$ zsN#N*-ko&woOOH0H#HlGDem)!Kc`GJ?Cu-4(8ZTp~xAO@+a9ZqB*+%n(8SKJ}-(-#HR$ z4)9sNvN8pNf3guWdFE!$7g9ciE)1~PH*us z{_T1Ey1+f11NCA-3Bbj&`H%X z)QML)$x*?=uZ(Wx1(x$54FY%`if6(Hi#i52VHDgdr)chp{((`4h_iNhyS%_#aZ+7M z!?Qi!dpW_mFS849=5Ryan;<+SA&jlrm*xE#K|h-ee%D77F}fVft)8Kr+9F)~sssG? zISbClIS$$gf<%YvFhP0~Q~`dY+l}59El^s;u-Y1sUUHep{-Fi*K*8Ya;x+d&#Kf_$ zN5jnxb=0jN#tvZ%tC2d`^?oQ0&5#Aw5D0?aiHBwcsatwEvst2hT8ncJinI=Pbz1Mr zs8gpO)AAV1#zD!2a}+8=mlxE7@xeOv_CNGA9>{X$E8*0$&o5rd?mg!D@?|FZwTkqoziULVq*15dEz4T6Hrv!L}B>g>wDzvYIvAVuqbGTY!jaC_~A@@!$;@}gXNdLf`64uv+g7b!YE0Njyu@<+pS3r3 z&AI*6mF(uS6rp1NIjv!$8Zdu#84P)R42(FXH7+Kb(?-{3Op@L%y@a=&SFZE66=(!R+NXP zCONpY)nclwdg79-w#Y;*M(+-#J60p+zAF)k0Gj~Ni29{neS4YcE{%>{1&^X`E&lgY z583;dy@YY3Gfh(I)g*L8?nkZGw2CWJeVuop)9>C55x$6+QkI?a_P@>?K} z-n)FOOM#5Fwtwe1+GNs~65OW;cg%}PK|fKDcxA>vjMt{>6WpCDRf)XAg$}}R`Pf;C zk|fovk{+8Q*%=h9yyk>;bf)Av`eE9O61%j+DMNCHgng(oDfZLov8Oq8KUpt|IAj+N zj(Js;tj|^z_h&78QOlPwJf&XL*)YP2*7ND4 z#+zx7_JSoh6=G_Qt3FrvfWFt17GPv~`m>(elynAP?Su>d&E(?E_4 zBm_E4q@iceZIUk0mBp&K$<*m(+B{WwmRwCtyzyX_`9$G$gV@D76;;|Mx@!Gl(SC&O zmSvtVfhczf)ZFzEB+VKulPT^dM&}5OVR1~1Anp{e#d^saD1x!%9jie@%~Qz{)G#VF zP10r1`^6c*%O1g8eD4zX=mTUFG$(6jGQ~T1DR#Ir+WUnGxD_C^?v)BcF{4+cRN~{+ zJsdum#w$vf{}SLJK&1r>-eF{)6>Nx0X38W)qv(D}KGgagEyB>{^H9n`mo1}5m`Jtq z#E;s=uT+kzf@kNtl^fY}{E;=pwWuCE&B|$IqCG;vM4?c|e(yWS0}54^88d^Gyo{Z9 z2KN`}eH^f}MYeVWf`*kQNR_8e&H5)&l6(`JB3GtFKeKdm;6=fcaa@N9McPyi22ofx z8s;-W!Hv8qo%`@+!n7EyY~02=UZ$_(|F%C#G|FN_Am*`m(81}x^NoDBaqO%$^s8xcCT|QRw`(y7DcIzR7{L-}scA=F(P~rE z%`QGHl#=tXPF_O()G|n!TS_Q0+|LEzf}>1ya=5}(qS?Axctvm%-xSzZ`Md%Gl0_CY^Q|>qo*wFM0K9 zi6no3!o}7E^RY_>=Z-SOxzc=OU_8JYA(vv(uAtqL%Q*V!jqnv1$aOlCCnGn9O3w0W z2`7T*jz85=HxOuvsN{*+cXZ_1f?raPG5~+HiF)dZ$7cyy=_&c{42&K_vO4jI6EjLZ z81AYf0M3I98?Ql==QpZf9Rxo&`+O382Vw+H%@b0A~YUwfaJh)WI+BzhvHT=fp}cWLU3cxfd!WvV43O;t zWzfr)&hO(?B%S{$H+wpQK_r?@`-?s(*NBpohowv3crwf81nr5#6J;A!ZBKoCT_Rg$oisOAq6dR(T=jYS5ShqVdS+yR$-jYwpbE&9 zs)EO!`#IgyN$|a@_;98EwK-MZ@tTk;p!aes7OvtM9mT(n+Wb1d42C~cdBV$-N$Mr^ zRo}emQu_=nl~#IOC%7s3f#D0fbcLp*6pw80`qyEF!U8Ob>X*JbzhNWG_}Y#~BE_p) z&7jZBv@jq|3mZLUvHA@oaNI|sfSmk-duUQZlnXYjQ7oJ`0mtwJm_U>k&Wk1*n6rIW z`g?5z=(gxow)sK|-)_k`pd-#rDY)s0Fi5bBQ)V|5p?C%@n;v`8tVWjlSkKEK*{(8B zxaB5T#3za%P6V-0xj>2ng3an0?sMfYE|t03keg7~Y_hJ`A-Bhx$`Mb8+uUBXO-KUn z6>nSHa*T8@o(Z${GZKwEsIepN3G!OG5@1qXZDp6%z2RA#$W@H8MCM||QHIyl88cv2 zU6I&I%jKKlJ)6-^C8*N8?J(=seQVLkpsb#Cdy%9qz7Q(En8)JUi|uV8O43qY zf8$V}i4hTnfUoI^O#=}OV?|6rsn0@os(OxAgjg+)h>crelr~)hV(83AAJrM;6 zu(P5==EpwkOFx?K!=x!}aZS@h>{yFJhEY=G9prMnt5(@o7x#A#1v5S+Cbt^@6J7qq zNPXMa|KH5{|9q|Z$F2V&Yp3o(Zq~yHm{l|%udmVbvOG>D3uT~F;9_PF@ z_V9?5i0zqFZvMXB*>(e%f&({~I8)qS8)lyrBiNNjYE z4glJtbWVy(fF`WoY}fAhd98C?zUYiCRz9||7l-bJadY!za;rb--1pNz{yZEU7p_U= zbh3U3;Y*p+UHJ=~KgH?Gv+&v3tN$9UukB`Ncsqo93%fiteW|_R*HwY@vr?4p56wbn zKm92d%4rGpZ3Mx{j0D4`R)I0@6Z426#jqdOVMUJWqpp5G|M3m2O;|?m(32pBy@|o zu3Wq5J=%zu2B4hh=S|Y8zN|(70m&G66V(Lf!%X$d$vq4HxY~lxq@v_B&9cx+{_h-; z_Ul`U$AS*r^o1+t^sV&&Vl|~>uc#L6&gl=@Lj-HIy&I{$llHuAZle&emhRM-E)|41TFQF{ju--w|L|7T)^qf0 zx%2E!sNAW66BF?P)N~3s_QTb8W3;V&tCNup=d3;YgZc`>q2nn}%rx7#Yv$FOH{F3~ zgHba7{Ui&3jx%@M$e+|E%fB4RT$QMVdn||#)~I~b`OR2S#Bl9cXvGNq-fg*40gvl2 z%jjy+(-Ce$cDpLTgp2%}v9_J_-rwtqx$*{AwO~?DT!q!;WjK5t-T1?}E$Z6e>oJ-> z&FNQ#{qo%M@*8~o;%Leq={MuEu{qm+ujkL}P~j>HPFcI(`@5}z62Kn*M?E@!zmDv& zKEvV=_nqk9j2*Ny{$7p5pV#s6k0$ud`04weum9J#mxNyYyTeNrUZ1dP11z&!+q9J4 z4Njd#w#>$D0^MI0z^{Z=jQ+hvZ{MCA_=T#x^H$#7Z2`oJ&e%&sS;_tPE%D!7==Y)E zUv;6{PIHQ@PkRnAJ2Wm0kn6m`FCSjO+r{%B?l)HKL%F|oZ_Sd@>g=>4@01~2o!`wv zmH%uk{d52S9$M!={r_8AcO1p;@4f}#vcpTGQ}oB%&(Ahz?5zmaYz38VyIP0b{kQ(- ze`Vi){si>jul>M5FURj3m51cMjj;F3O|6n|q$YpoSpK0EAb791pV)W$-&K70_kI6< z^uK?m{~7U&zctnu6J*iDh`?m-RzZ1&jz}Pq8-zJg9#vnn$nIG-yN|ry|8+y=T%p;r zz{Cj+J)JyMP~(@T%N%(3KMHjpjJp{(T;8^MY)a%(H)ZYtN z|L`UF>IY`!ABF!ajt`bz8wfgQ$JJ|UCBMr1;RMq(-^)bPNrtZ2Y&=Pb^EYGkziXsL zCr}yXs>18*GHKiMXbqd<5tT;pt$n!xe-zFICdQcNZAGm{8*|K${84z4o<-`D(wMks z`}}9MvOfyeGZd$dh!6gwXQnQ2<^R3#cVGWy9J3_mlg)JxK%B_UNrU{+a}Wd*Br-R0 z1t3k}EL(P}G2-~27MJ^%nqf9mv~uZP?Yr}*eDky4bv0KIJxrLr*y;i;p3gtnoBu_K z3LMhvYj$O+{j8BoIw+L*;wXB80P3g5UKSZOxVDDH|A&LiL6wt0W>J}8mHjuQg7#ku zKbFbw4W21DWQ&`Mej!bDL-g%5JCpKUx{3OI-0VTUkE+Zry(Rbq~Mf(&DO&c~Q%9E2Fj)A+!(Mr?A*s<|4H{~OV-$al`)!9)! znMeDioKy6@9uNRYId&-=-!hS)%b6z7A>Bbo)%Q9YRF0RU!*l$!%BQ%xm6B@{-~4jY zJdb{=OkG+*db6n}_)@Hh30)*mjHcrZ09T<)KDd6GQb%4{?^~ue!!)%XISWM~R6|?N z9=Z1(C$tx_g}H$deMbb7@cTw4u^?(BZOyzX#sfydwoRN=T?n`-e{2ck=7z?3FyWMw zr3QWom`TYreRiU&Gib2v+enX+Vf|TaGxyA(E?OGh9T(3Q8H0H3qB9>90}q@C!)oBU zBORdVnV$~eX&%Wb@1|WvB6v^5DL7?grH~c5O)-?70#CT{)>xnIUf@#)6NjiLDz6hX zFVr!)662uLQxT}8Rzpc)DN>-HAR*@_RhA5ZLR{-*Ct2w_=7sB$x$O#Qak>Uwx9dLg z2+^8inl=6Uis>jn+H39TM^DZr5+%Pxel4zw$3#wuzb^;hfrJ1Q5QlU4hRnjFb0xFh zp2cW%Gmj-ul%9PsX7kJ?%JBC~IuFg)xEh3)VF=aB&yeoK@HK^q>Z8=>Q6NOP3W0{$ z;I?2|8Sz+-%?*kudDt&VydDl6^dyohSd^3e6?V}saBp&MjWEb(R7aLJ0t-GZbQ+R>F}JM9)iEo7-BU zdCY!XnjVl=aR*qp07QoyK_IW$RFj83;=C7?dru#83!Irg{O*g8nMYNph7GNvOIRZo zWM@N^Vs$?wSx#9>L~KANs6yWE>XoH!57N`crOd6ova@4(7`-De3|mj~U?J_EXWq{w zRJcv#Ir`^0nA^AYr`Ri&%w%PyQ;`M}sRKxE!VaN;rBeBr^+R$@B<7bwe0*D}IMVyB z8_mUALpASqfA+dNundI6cli@%Bdc8sL!DNtZ{GbvxoBsQN3_4Uj5FfX6@_hhzhE#V zRgg;{o;NzdH8QK87T>lmy1Lq0SAgwCW4U<(dOw7(f`gIU#O&OU5Q8zN2+N*Z4^-N( zDHkiSo|_(>38w{Ws-c`Y)xiAo;c2z8W$c36t6khCZ(O^oM57AawPJY>OQmg9gfdyz zSza?-9g}s+x)upY&-uI&_oLzcPd4tSI8^es*7^iQr>PifKD@oSkZSUD=^fHEbS!l6 z$t;k264g#IV`K@;ek9Nt!s_(?XlnEZS7dm>ktZHgee=^KmX@xJG2H}$u;m@P-}%*= zB~x&CFuza0!qceB==#9rIRZHX$hpXH^~dH8V-P*Q(G?pp!tzXm3hILX`fN3^WyJZ~ z{O8Jiw>u*Ck?yJ10XcDKm!gGNuDnfNvV{GRD|CWtU^?<>MEyP|nr$IQQ?6Mfc;f#@YIP|c32L+mVgThdE!wQ|W7 z+9Yc9nKKzneSxAcbEAC>%YbajfGh_aNrg}Qo;wHB68IJ~-k!b+^ME8=W|bSlsu*;h zicalF;v97yK#2<%c#NxyW7c#)xcS0q>H7G(P%G&?VzJJ?v%Fewh~?@SV`a%%f+V#( zm%4&s3%IrB`>M1p9!Tt)k+M=NvL6Y2!8i|njZ)wLeI-Y9K# zeSCRVW_>aHq0*8(ISgnqPvjh&XmdG7Xi`UiYG{Fb%1yIsz`1A>M`wJDEtkbzeQG;2 zn=F#{P80$$k@VT(JU801FWhZ~ffg(bc7gfMSEm=5@kjO$sW&VAGbI#jW)-8qbNqn% z`b)>@=D~I0nmxhz$%`_W6ct$D5vV%_?|J~FMKVoOg2mce%~Of88DZ=E9gbGi6`HwC zEAz)fdLIjhu~&N!a8<;<+bTmWWs_46$NcQu+9qiK%dlhdz}fI(E@~;Np?94+6o`gI zYYd(XV@Q?tLB`49MBGPc3&Xe4VgJbfGo&GJu-E-7(tTfh%ib+uYTHMnR&F*aiw1(a zbuMX8a|4mI{$30Ss(YjaxdzI6ZE7OLHnJEM$ys;;7Igmz(e@5>FRxOoAz40jylrEn z*z2$CIdqexvGj%*9dz6`q*&U#Ae!PZ<2Nkq3B@|+r~sJm_qps;_j0;p#kk`Xou-~( zQQ2=Xc*zKSmUYd$t6XWkU{-9TC=`4*-#)owOme3VUc%kU*!d{)#% zcI64a7M7lcV!B?{FDF^!Wj2xUlR9hM3}qOMdtNV2>$`Z6JB zW&QlcJLu;u3h(PBGiWfae%s`c+-dMm_Joyl7KM`HnLir43hMBU0@6Z}{=&lC_Z5l_ z6-sS7)bEw;vMpubs)&QT@cKri?J9UMflhfOzAr~3Crxn` zrk^A{_n_mqFnr%IMZApeauBoVX2evNI-@w%Eo1GdK6F*SMF&xWAusn))f1{S6MT4| z75R%t;ay_OxzUrG3A{%RJ^9Y@(zPZCx)WwnU7OTlp%1+nU`LCKO<7_#AB(-@ zI1UXON++rqj9H(#zjKhaRboXB^`o(1+SfUL%gz1|r>94cvlQ4y^b-;?OLdO9Iyxr7 zuip7?BP$joQ&4b?xr*78j?o2PB32!TODT30F z+wQ@Ry(1eje1nrZst45{ZV7ZsIqqsOfes7Hh&^%rKRoy2ZoqQ5qgzH`>kifK>0b(m zj$BykNKco3zhz#=b`|G7Y&3IuE9B1XH2+1Pz_Ujy*t$Y(wkpgHcm$4CdniR zlIvEJb)@aObbXl(EY>$NugQ1Uc1abrD*b^;r3g$Uvp&PiXVXZ8bsd!)1TN5@Xz)Un zes9vS6IvdiRkTrJ5T~wuG1y=!|3U8xop*#-k%r-6b%k_QyY!^0rl_%jTWG$X#hWP} ztq$k!ms4$L&YVv55(krFRf)oW>Ji31Y}2;4;e#>$4a%Hl?#M5)!$K?`sPWP(QbNRL zb3WI?2E-fR6|pgA@XNjWFY#E5rjlOMw8tXFa8%*lbo4D!j#uGF!PLn(+PtKko)5g) zajXR@KFaf*Bk^k5!L91y%HozoX9m45j6VA!NlmQImTcYVuuCt!jYo!u^&;$CkPsvU z>a_q+6k3j79DECQbuO9KQ5-t0GV5h7E9s8+kzwc=2^+!hR2iLBiov}Al9*bea0&jN zJqB}pE2#Pxg2VLYr|$H1)r;=85}y0wphv4E&a6YRxfo$L;q@h9T3FTPSvcLbD$(z0 zLkre#fFkWN)pSh(7M?-Sw%2eH17pbV({4Wm)!@jj!6kaQH=)Qo# zGfXVFJ&=BB)J9THc?z}JN}Q)o6n_4>T>L%ZhzL8WjNs=kPA-H25;9CKkyNvA50;+b zSRUx13-2>?^0^JXt1TSmof5WfKa2ztuidFs#ts!oTY338-J+{GDEsV7g!xk=9T3-E zSahNcFM#~&Qi5hg)-HeZ)L=Z#pXUwXzne)HymUi z97qh2ygy>=CE_BfpY~4X?Z93W{$c6+8F;Ozw2YaGN&*UOx}}0g=Mp7xROebHrsqkE zC6>#~Mq+kcj|SI~LU8H=Rh49|vs@Ewavr;MQGBO69~cv`ucExrW0y z1DO+(t*Sy`juYmWw-eye^C#UEydsY}usMaqr0Dq_>Cw={gISQ*OJFz@W9tpzrL!M= zjVSW2Qu$&~(2|Vmjc`p3TL>>MJ~CX||9X6SB-59#tf!Q#-0hmTK~B6Szk489CGbda zj7LM6W>F%I3H3E~HJSIf51lYPw^z7a1n~k5`H*}ja&(W%21xxv+3d}FD?fyMV>I7B ze~yxj#1m&src+pZF)_qV#*yF@lcBsv&Em{YEPcFwVJYFTgoCaa&bb>vK~tkgJ~dbl zB7NpCdh-y6l)%q|6`WpypY(8oWsy}Q8d6TJ2~4}S_}9+XjWX`wO?$0YBBGa2--us$M)HweI8vNhQmQftxU z@U?UdZTJhP{rWM{GVd{q@b4VP9zT)X?_INcEMI!CE!SA1xVyZB_QDSZRZ@`dl-zY2 ziC?|);*A{N9otHAY&~Byct{{hT~gR`9-E4;CK7=MTLV-L1nw@n5-_@cw(0)Qxgj@Z zj!iD^a06_TT)Lls%81G;Eh!ocm#;Q&wJ9Kc+BqU&OplWn9!XE*rS;@MW_YYhJcW`< z^NQ`XkCvOsD&Jm6Wttp9DWlEK^wDz#UAp{UX5YQD=U(A!?V)n_BFJ_ZrFvR9{QwRLL>nzPAWQCYRNuCVT-Ok-iHK|vx_Jdi z9qIQW%1HI^&G1hy?HskNDN)>O*LOU3>T8t9^E4g{21d2O0&W!%Z?AUPu*D!lt6=r~ zS7R6P8>d(1c7GzpfA~get0~jlS&P40Acv^3L9=TRsyY#lw^qf)M9GA)&^$zFkFoJV?!IWISS@NjR ze&b4;g+2k6BabCp)sl2}m?G(5r#z4M-4VVXyF4G|MFgd)aWw@Ei6|BHVR!8fZdeMz z%nU`Z=9}3gP*qgsSX*F(bI=XzuSU;;APp&{>hPsRNxDw2vIe^mY%`q|4TWIZC)tE4 z7|05zIPAJek9AKjL0|6@(d{uE#SmRZIaZfPcABv z604$#)h*4~PlR-}S)r3veu6Qmg`Unj!t^&{^ln*IMCcey$X>Ac&e}8mUhi|^CuO6d zpD0wH%VL}U9eSaDW9Ctt#V0CG^faO818)tByqdAq2KkjGimKQVi;>GGjn@I%dA%C}q1&$L2}Pi(sH58i_B#3lofBT>}8(r)w> zWJGi*LGrdKIa6Ef823}GoA3%`lZgmB10#*Q{0tGxDx;Sm0pFWQ1wm2Q>GccbFEsKS1CTGZXCS9PJfZna;8SA83pt~im*6z^o0h*TeM zUW-k@Q_CPl?w-+@6f39eg6r`Gu^PSh3acG%lATOe&zYvXt$``~pX2)~9F-E-87Pfs z^n93UJ`_uJ9=6&Q;=wJx`-NlDemhr;jh_b5jT_Ts&5VqpySnFg7Ut*XlVIZEr8+{B z!?^C|=u~p$P_MCwNjYtivG-ht=fro8>#UH?$c>+VHb4F;;B~Zi4+?p+5HTwG>J1UB z?&fTi7qcp5R+-+@y!+<_8I+?IFLHrH{y&^C0tWlehj|_-J~EKIY(kioNhBOT4@a6I zg%u=hu-KXM)>>}vQ~ioK)fG4GPdiTyqn3M11+HpPb=9cVjzClulRitaQ3KaCdIY)Bh&m9Dz^($ZR4J_!rM_KX zV%&u?Ws-vS8=)*bzDX~*)F~&$qIb&5hpY64rn+eHkhw1YMiq>bSAK&_a&cCH{m0nC zPZ6gTva6NQ74#sU8Ad3C48+575T3r&m89g5j*P3xU&;>o$r~riCFS< z`ROd)(^)58?$gh1cBv-i+9S>gaA_GgiLj((u80tpk*B>M?mA3$-oK%!sBxX+ItK^; z#&-_c6`B5TsUWj3R&=27BpMQmEVog#>ZwErF(F@sJuRr4KF?JM6Y2Bq5 ztL@Z$=KZs2g=4#xXUd8mesFz7zf*`bhe7vQN1bMn`-m5x?Vomh#&MXR<~Y?}0D2Am zz=;7=LbLN?wDo(T_fCrQ-5PbxZDNh59nCp9h?85h5-mu0bNd_a;n;)8M6(O!Q1g=; zitETxTa~h{OI_S(0NGu@#WK@8)-Wvv`poeI&`7_2uC&+s2hbNR5~XZV)Mc65Mok@( z>kC!c*>=Aj|KY2*5gP@(Fj9!bEkoX-CfA}@;qGPKotGjj*RvlNF3V9X$b|Gyfc2B4 zI$=d|r_?!OxoxYh$H>7lYLwB4f4d-M`>!0^T)D*A5|z(SAa)w ztNctOF*kLpi(3PE!M86p_lnb^z@=ukce~?{k)_zHP?v09>PR3u)46g z^79uSstFpV^K3v`!bPs&_fwxb?nlfMLe-G~na#vltvW!d_oKMA1!L&+bCNuRZ3Z{@ zCqK!yWl{5R)`-DqfU)g&NvZnNrOZ4RW%!+_J!uo(wh+y-TYYoGv=qR6sqy}fw;Lf zyW;*ygZ|_05V6MzKUH5w$3y`)2yGT&`TW}5<2uO#DupF`D*>^^K>~)$$KUMZp4M(( zbiG!2&dz0|v1hkVmZSdngNJ^%ZT(sP_k*>++bVqeFYf3>l-t2Vldcai8HRF`qL4t^ zu{548UL{O_p;5b)5gMSPig3Knn?R?%H`o4j7F&4Ez`;SX@r)nxUQ$RP+s!9Do1sk( zOW^Fsa4W@fqY2j{!OS^-Ka^;$!$qdF?et=ptr!BEl-d6_HBGfK-hT%NZbvpWAn@ zdGTG#;@5XB_5LRrtox->abP~aT>G4Oh^3q9$FSL9B5`)oAT5w{p)D$9VCcU8oh7Wx zM22AcnVk$i7M4oM?`+E>HS~#k&xv7a;X+y_+jK8UoFIjfO9feFznT~nPxx@$VZV>R zw`z*sFRKEnu{!r3P+1sbDpedzrS??7hApUt)MeSi?5H2_Z~u1d{Bd_Q8#A>qFit?@ zsu$i?9|yMa0>@yp$$t}Hz!=@xc@VZH;;^ZlF>*pd+1=Lp+t>>Zo2%~!tD`R(AR-)+x&92EKe;P1Af7C-#2I2wB%Dt3cMIEws!006zG9S-k&viOhP_nbB zf1X=0OH!b%TZ7jqFxzfKTT;?9irZ?QWQ3O-Uk%@UGIhDle|932_U+V3krXXRKYTF% z@bp~u6cW`$1qC^lfAEb6FWCPhg6-IPG6NyOB_tNXr z>eBWdZK|Gqc_-{#L6CMxUImk?XN9KFBBcT93<50*3!?mw_P#r;sjSM$|Lg)yDDqRp9bm#)oAyfkd5+L*zno2JL1B4D1Aaq1}5xjYyd+)$^ zXYM?6-+8|8yMMgrubq>#_E~4Gv)4X*?Y)0L{A@o(yW$T__|Kinh0N6pbJuV3$ zHiirs1*Rh#MBPkK($H z+;9|)@3-&-7?faV3=2ES;NW+qJ@-x1AQjjsa1H->gP7_KFm)t$Pc2KkS>MO*Iv;bI z@%SLcU~Mn3s1*5xUOqm2q#})eKm%QgP0bRaQEAtex|79F!UQN5uW#I+lKV8gOuXGW z&`=NdsaD(&sH+U9TlSrposotQR4;yM@+;6r$-^M}usSv{`Ob5zXWP@qT68BlNbcq% z^RzJ@u0<-+_vTo?3#KF~IHcQ=#?l>y5y7K@MU{++5}ch}@j_(vpe0|A=JSy*dCcQX z{CQD6ICk&LhCk>)OyXdzX%}q9U9MQ^t0E`w__7LgqeE6Gse7fRjJkEK^*B5_N0Aqp zb!OHbg*u2ec4&iBji(8$9nVCxf}DK=gU%1z_LXI31kj+r-Mftws(lD9c?m?kea2rk z|6jfCw10V!KpJ9+vtwZ#%WC@S>7BJy&x}YaKpWhr5iG7!gOq3SL>2;IZbC?7dk!TR z6jiqqpbX`4(5&RE()mF*pTFfr9$DTbjk^$L-nd9WF$*-*S(EkCX2pSw#g9*N78IEy zlmVNaa8gI;*=>ZN?sW~+pa2>(n_G7yHxv#0>3oIyw8mTM^<7TMS34>65!X~&2Kw7; z90)PmH_vsOBvnJ$)Ta87@Nid(n|dvTbwDms@9lhwa#W1EVfTYM{`W9oytsv`w3vqN z6coGQZae_9!+1;HIv!yEv4bx;na`N*#H2U-m}<}s{)jX?zz%=tXL}28#PRV_$#NH) zb|w3D7iHSsGpx>b~UO% zb7nX!S|-#skru$N^CfQLQ4y#ddS%+7G=FzOoiUqDd{yOHLoH>kDw5u@@od|MTO8{Q zeoc6?k3?8ElHx zpD2K=!Fba-m6M}9^pgcS#St348c`FAVvBC#8v7OnNx69t1}SGZnPPwpOkMVsUOf-> z)JbZfz}uuK$JY3~awQQ6qoCw{AIp54i0}nMwc|k!!Wp`cjm3V@_6=P{`Lt(~!MNQ@w^p+Rps25Ahf8JxK!;UATT9(^AW5V%4oF*x1uCRP1O=F}iJhCErtD5kKg?=1hS>RMhd! zcx=romIikv(nj>}5!JMn`##Oss$<3>4?rptF<@T_rXt>wXaUS@biW!tc?5-S2So+f z>TrC}3XhTIy*+Va-bgh?x9`gyb-{$2%O6(IPav~V37<-<*#cAe=02^H)vIH!F#1dQ zy^k{c&JcvNk5vol(d6*N1Jgogsc}BGTub6W~q#T zU>fh77E=L=Hk4Yvy7i|H|7ZXFso5iP__*L^W{HsSof7d%gV7qz=atKi&e%CJhj3W! z1ZYH_b3%r;AwM;D8lk=P)8pX;0jH|vLe{`+&owzm6Y7F z-TN)Es{UKZH+uU74jK=*29cP=26+~Vggw-u?M9TMeSJ79ojzqdv}OY=NLt%tw2+Wr zu(hvK_R2A@QO~u~wm3u}&S*v3Kx&$%dIAjH?a5-=q&C+J%gag|ncj)1+8vEEC(E!$d1pK{{S(_B zi>XFdM6G@3?y#>Z9S}_Pq<2!)jZ#}`Uw#OlfwU9m^R>X?;#% z{0t390YW=qp?Lpq682{-^13+n0#{rMV+Xu7!`ow5`jIFuE=JCn>L{Z1dL~Qxy+1){4U8++b5-cj2z^ zHTr9*y$bR1WX1#t|1NFL+ zW>7JHLH`F`gBo>`r#;U!l0XppUh;$Pm|_g{9S_n7v14^`VsZbE1RXwXJltD%btZ<# zZ(cxK%O{b-aU*q1E$DLjjcV9I4tV(MS$p?V73&Wc`FyEE?*?TIvU7ZeT#e`9xmo7r z@drD{9IsSG~aVvwDWuuAa5bn@YCa`W|c}5#jj-2)xDn$f7*Ee@?Cj7 z*yA_x5N_Fv&_aT{wSUrdkoj54MtA;-s9e$LoB8yuS?cTk*Mh(7e!ll<dY82Zx)y-oZX+FHZ^mYaXK;avX>$)kE>9$wQ3}&A~|I#{Ho4i?F>ge5~yP;Sx7v z!7AUOyxO-zl@9F@`0ww6s#wsWjhPPR`MnNxI%1H2xyU;H@3_cmf+Ce;#aM{4ztCdX z9$e5rprR35298F|%s|&25VVP2xn53=)244tt?48Es{Gh9^b*Ueq&3u0E zt3CAl@0&r((Wd-dpx}i9v8r;l^ZS|My+3IPgC)mE#c8CZaIJ7>5Bo1F<8NMQSSuUE zU3g)W793&u%7Mc(=7lhN1&Ue6FlYWVFBVIgsgbKiSN=_>rYgreVGqrhM!TpATIUJ2 ziwmtO1iN^U^uL6B&|4n%;nuasJ^VE*yP3sYyq<_7sM|!RCsB2U!?~B-XM799Hao8l zfqKIeOuYO3C?f1=w*p>DY*WoP9rZt%4E{z8|1YA)ry*8gkq1~7U&0^g_ukJAK&xuoZW#uTaX;PHG8u!#-h*NYOlLt z%E$=$ADvpNw1m7Q)TDOdK)Dqf`Ptn%U-&NFU)6#T@!vh@r?DbMsc9Gysi=H&!h>TS zPs72T=sW1UNpU*Xph$Vv%iOazvfuH8ZisaGf92D|1SXQo)2jhVddU3kcLT2&yyA)t z=WxRh`9_N0vB}p)gd3$2tG)2+Xx-$Qi-PumKBbo)v-xFx$Q$3{u03#lKN6g&KI@q_ zD9#y@`35|wyo{@}x2o{F)jFK;q~q0K=8Krief%VBp8d^-{C!IJ&J)Fz0(s3b)F3YA|f;PZH2QEXXx8e1l-l+ z0);97%B(VNn~EWbkx36`N|Z5QcY+P!;c(;hl|eOo8b~aFQyTrnKo`mt+N(;vg!W`AM~98{JwP6%EXk zOmu@rfxR7TgRR?UcU1dMnX$!V58jp`4iTVf_2B3Dat@>7;_}n$apZQ+h{&>kWUr-J zXl&Ot`eYe{ki?WvT95R*O|1ne1}riKI}RohsjR#;50Bq?6J8b>qWcsOg*vbUPxckw zqg;EJ{1iS^e)|jDdyY?Q%D;3prEs(Cna#(J>>O1thht6t3=(%oEm)|m7L;iyYBQhNNot!?qd1Vs8jy0sJCcW?b7X$&v4cWvn(Bzn7 z9j2PIrV~49L|mEVdwP3O+G{c1caISf&1pIZ4Ww=V*SjSvBcE5>WImf5C5<2CgQv>S z#;9m?6ErRvJR|pO7s#6ZdEI;Ra#_Q)jiCras&9XpHPStsmhMxM=dRd}vTU}RW)!{k z9Y2J{R5N2VfTJ;=Vc*7~cZ)?=#l5`IS04vhPKzU)XMo+;umo+Zjg74vn2(>(^{Kt3 zIdkZcoIE_EaQrr_{gdzM!=9%t<7Jx@OWx_Zqo+f%+~V>HsnIlU8A9CCGCOwMsI)i4 zi|d!m;4T+`!%;ojVwg@rzrEsv-t5G<)N;kWu9DWTH9Si|!;t#INfUpBkETv*z*B7( zV*N-z7Ef%qiN`H|Dv@4me=u!Q$-@4zEFcwQ2-Py) zpLSnt;t99KYQW60zkf0D)bpQ|)KjFR0vsvT?d zFSp8a&rC2yj!!zH$)LwW#Rn4xr zV!xz{ObeQBcN@${tzS#WkhAmlqhf(EiONM6}1|Srdt)xn=qqCaHHrh(GR*>p67xGF0RWVLr>b zoYYrc+q}V;ELVY!o@;NnY-ojbeJr-(m-15;*XedEfT*SZ-FgY(dVq7M<6Z z1Xfr#+KS6&5I>Tg+;cZ5kjG$Z%)|LP1~ZCmSlxVZcx;7t&(*h^wcT<}r2VXdJ%#DI zk!R9uwp=YGSK?1;Z#DL`5u);Hqg2m+Gq)iir}RBhfyb|`KCwu_yoU_+oTQHXI$kT) ztFK86MQdEwc%|$bEscg@MyHQT#<#nQU@YrsfyvEo|!#D>?>S0)!vqm z4}}<^Wma2vZ;;zk3q7mUyla0QIUvTPY}XnusGsO^a}lvg&P3xdIo)ZPWNS+(uetR3 zkRnI2r~I2$4~>-j1u-m!K<|&pM=gB1I7uBc3FE9P4bW*zkxaw~2j_+`dz6rj^b!!y z^(aHo&mQR18_dzoj1NM%^uOlV8FGK2jTe>mIP& zub@Q1n=FjO>gor+A*W_HPLC(!3V{=V!TDs*#Wvk!ulUvnjG3qGSyC=1a~X(o+!mEk z6e~8uEkmGFGeAl9cKAjJza6?|Hl&8wvV8qM@QrB(=RobpT)ML~u-(~d|D9G~UGLoP zP3^U!kJ);+4mQ&_le8HR!S+&T%o;SXCi_c@OLtPCE1Pbn-=%H}W#p=^3R?(vr><%r7Z%Bp0J1c&RpV1VL8H=yA7 zu>`cXDGVSym~0F;wZi8K@K+iA3=W_aHj2-eR7-&<7TzkvLM}w6ul6aoVTKbkC6njW zBU~}m*^e%nR@dmmQI~Pr$=|7~%4}VeT5O)##CR)|oPX`pnfq@IGle!QWT$;>q< zz7o8o0~kZ%9lPG1Te7XCs(yijzWC^j;&XGu<^iqtM2CcuMdp#{w(2)QncmIna#8j3 zQz#%|4SK!eO)ha=Ei^a;!)s%(El@c+9c7r<$Kl{!?#Pq-PBX#rT?M?3!$frUT1ACd zxi)2$A`d~}dGpL^>^eH`T91-Bgr?+Vr7br~PrF+Pi!ViM5O>=~3M|W+fliK?Z{sLF zcxWwzJv29z$Ysysphd3Wy9nwL^-$~PeAR=%KAz(HRHZx4AMYKenH3NjQX)24w2xLP$YIEv03Oo})o~RL@k=7$at&x0Zc;_J5n*Y? z%+d$j_SsS<86Nm|FRii3yVL%1(4%@Gt* z(oA#O*ln-`yN@*K(d{iUFzGMKWRi3XkgmYgK*;!d8XH^)Rf4n=<~Mz!=rQCx*USn; zaQz{AhSEq;waS!~N-a^;>u|*f%NmE+r`aiNJwTqH-`ZSc3x}1Hi z-bcu7ep!0dS_aFySdzMD<30YIq{4GCXX8&8j{EOL||4G#R zf0Z=)*W>@M_I~!#FCq?+Cze!giC;j?^r3@XLUud|7o3%x5DYwp0!`!w<7-($++0O0 z168hTqI1!4kX!uq*6N_K#KJQ+(~tx2yf!Yls6m)=&K0PcSwn~24F#f?XybbQqvtpC zGj``b^<3!PxnDhBePiuT6v?g_dI_RG_$x)>?zRWW^?Lm)&|zl%SNI#T46zokQ>QMdg!_pFiyRL6W& z0c@kvd5;vOyp1!_tv~1v>(4mQGrYIa_b!bmdo{rMh+0RA&g*rm;*me-4xj1XcWlYa zg`Agiikj1BKP^J34}CAgKI3V#L5Ic9bKVhlJV&a3xua!uYVhGnFTaEiz`LP>uC(3T zg^l_Ul-epgyYa-@2mBeo=*Z+5iYA_w@f=d?u}DgMh>hi?0q zuYPM{|9rcW80|<;+LjfuS*29z0fwJ|a;K^aG~mKa5JA~?t(pc>wWs^I2YP+EFjsy5 zNKQ{l;qa}D`D$%cR%N-V`S}%(I}V#)1^*l^ZJh}d)P_CS!p>JSd2^@Uc&Tg4{si8w z){TVzmi#-KlNbD-^q_zB+9u Date: Sun, 12 Apr 2026 17:40:38 -0700 Subject: [PATCH 13/38] checkboxes and images --- .../configure/calls-deployment.md | 25 +++++++++++++------ source/conf.py | 2 +- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 9c1348f8a42..913a51134f8 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -61,12 +61,12 @@ If you encounter issues and need to open a [support case](https://support.matter Before you start, confirm the following: -- [x] You have a running Mattermost server on v10.0+ -- [x] Mattermost server is configured to use secure HTTPS. +- [ ] You have a running Mattermost server on v10.0+ +- [ ] Mattermost server is configured to use secure HTTPS. _Browsers block microphone and screen sharing on insecure HTTP connections. To enable Calls, you must run Mattermost over HTTPS. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ -- [x] You have System Admin access to your Mattermost server. -- [x] You can open inbound and outbound network ports on the servers involved in the deployment. If a network or security team manages your firewalls, you'll need to involve them before continuing. -- [x] You can provision additional servers if your chosen architecture requires RTCD or Calls Offloader services. +- [ ] You have System Admin access to your Mattermost server. +- [ ] You can open inbound and outbound network ports on the servers involved in the deployment. If a network or security team manages your firewalls, you'll need to involve them before continuing. +- [ ] You can provision additional servers if your chosen architecture requires RTCD or Calls Offloader services. ### 1.2 Deployment Infrastructure @@ -86,7 +86,10 @@ Based on your answers, you can explore the associated deployment infrastructure In Integrated mode, the Calls plugin runs its built-in media service directly on the Mattermost server. This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. -![Integrated Calls deployment](../../images/calls-deployment-integrated.png) +```{image} ../../images/calls-deployment-integrated.png +:alt: Integrated Calls deployment +:height: 627px +``` **When to use it** @@ -110,7 +113,10 @@ The RTCD can be added as a dedicated media service that processes all call audio Deploying RTCD is **highly recommended in production deployments** for performance, scalability, and stability of Mattermost Calls. -![Calls deployment with RTCD](../../images/calls-deployment-rtcd.png) +```{image} ../../images/calls-deployment-rtcd.png +:alt: Calls deployment with RTCD +:height: 627px +``` **When to use it** @@ -137,7 +143,10 @@ Use RTCD if you need optimized performance, scalability, and the best possible u The `calls-offloader` service can be added to a Calls deployment to enable recording, transcription, and live captions. -![Calls deployment with RTCD and recording](../../images/calls-deployment-rtcd-recording.png) +```{image} ../../images/calls-deployment-rtcd-recording.png +:alt: Calls deployment with RTCD and recording +:height: 627px +``` **When to use it** diff --git a/source/conf.py b/source/conf.py index d6e40da3330..803fb037476 100644 --- a/source/conf.py +++ b/source/conf.py @@ -423,7 +423,7 @@ def setup(app: Sphinx): sphinx_tabs_disable_tab_closing = True sphinx_tabs_disable_css_loading = False -myst_enable_extensions = ["colon_fence"] +myst_enable_extensions = ["colon_fence", "tasklist"] myst_heading_anchors = 3 # Suppress particular classes of warnings From 67c50debc942e905419c16106c413a0a297f3b2e Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 17:46:35 -0700 Subject: [PATCH 14/38] logging redirect --- source/administration-guide/configure/calls-deployment.md | 2 +- source/administration-guide/configure/calls-kubernetes.md | 4 ++-- .../configure/{calls-troubleshooting.md => calls-logging.md} | 4 ++-- .../configure/calls-metrics-monitoring.md | 2 +- .../administration-guide/configure/calls-offloader-setup.md | 2 +- source/administration-guide/configure/calls-rtcd-setup.md | 2 +- source/redirects.py | 4 ++++ 7 files changed, 12 insertions(+), 8 deletions(-) rename source/administration-guide/configure/{calls-troubleshooting.md => calls-logging.md} (98%) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 913a51134f8..45c19f454bb 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -51,7 +51,7 @@ If you need expert help deploying Calls, contact your Account Manager or [talk t ### Contacting Support -If you encounter issues and need to open a [support case](https://support.mattermost.com), please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and Calls logs (see [Calls Log Collection](calls-log-collection.md) for how to gather them.) +If you encounter issues and need to open a [support case](https://support.mattermost.com), please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and Calls logs (see [Calls Logging](calls-logging.md) for how to gather them.) --- diff --git a/source/administration-guide/configure/calls-kubernetes.md b/source/administration-guide/configure/calls-kubernetes.md index 51f413fa4a8..e07c1667b48 100644 --- a/source/administration-guide/configure/calls-kubernetes.md +++ b/source/administration-guide/configure/calls-kubernetes.md @@ -99,7 +99,7 @@ For Kubernetes-specific troubleshooting: 3. Ensure UDP and TCP traffic is properly routed through your load balancer 4. Verify network policies allow required communication paths -For detailed troubleshooting steps, see the [Calls Troubleshooting](calls-troubleshooting.md) guide. +For detailed logging guidance, see the [Calls Logging](calls-logging.md) guide. ## Other Calls Documentation @@ -107,4 +107,4 @@ For detailed troubleshooting steps, see the [Calls Troubleshooting](calls-troubl - [RTCD Setup and Configuration](calls-rtcd-setup.md): Comprehensive guide for setting up the dedicated RTCD service - [Calls Offloader Setup and Configuration](calls-offloader-setup.md): Setup guide for call recording and transcription - [Calls Metrics and Monitoring](calls-metrics-monitoring.md): Guide to monitoring Calls performance using metrics and observability -- [Calls Troubleshooting](calls-troubleshooting.md): Detailed troubleshooting steps and debugging techniques +- [Calls Logging](calls-logging.md): Detailed guidance for collecting Calls logs and client diagnostics diff --git a/source/administration-guide/configure/calls-troubleshooting.md b/source/administration-guide/configure/calls-logging.md similarity index 98% rename from source/administration-guide/configure/calls-troubleshooting.md rename to source/administration-guide/configure/calls-logging.md index b376587465d..6d76e672c8b 100644 --- a/source/administration-guide/configure/calls-troubleshooting.md +++ b/source/administration-guide/configure/calls-logging.md @@ -1,4 +1,4 @@ -# Troubleshooting Mattermost Calls +# Calls Logging ```{include} ../../_static/badges/all-commercial.md ``` @@ -29,4 +29,4 @@ The Mattermost server logs often contain entries related to the Calls plugin. If ```{note} Interpreting RTCD and client logs can be challenging, as the Interactive Connectivity Establishment (ICE) negotiation during call setup often logs expected and benign failure or error messages. We strongly recommend providing the complete set of logs to Mattermost Support for analysis. -``` \ No newline at end of file +``` diff --git a/source/administration-guide/configure/calls-metrics-monitoring.md b/source/administration-guide/configure/calls-metrics-monitoring.md index d5ae641d3db..8b608feecc0 100644 --- a/source/administration-guide/configure/calls-metrics-monitoring.md +++ b/source/administration-guide/configure/calls-metrics-monitoring.md @@ -412,7 +412,7 @@ Each target should show status "UP" in green. If a target shows "DOWN" or errors - [RTCD Setup and Configuration](calls-rtcd-setup.md): Comprehensive guide for setting up the dedicated RTCD service - [Calls Offloader Setup and Configuration](calls-offloader-setup.md): Setup guide for call recording and transcription - [Calls Deployment on Kubernetes](calls-kubernetes.md): Detailed guide for deploying Calls in Kubernetes environments -- [Calls Troubleshooting](calls-troubleshooting.md): Detailed troubleshooting steps and debugging techniques +- [Calls Logging](calls-logging.md): Detailed guidance for collecting Calls logs and client diagnostics **Note:** Configure Prometheus storage accordingly to balance disk usage with retention needs. If you need to be tight on storage, you can use a short retention period. If you have lots of storage you can keep the retention length longer. \ No newline at end of file diff --git a/source/administration-guide/configure/calls-offloader-setup.md b/source/administration-guide/configure/calls-offloader-setup.md index a3e32e6bf87..6a649d61696 100644 --- a/source/administration-guide/configure/calls-offloader-setup.md +++ b/source/administration-guide/configure/calls-offloader-setup.md @@ -497,5 +497,5 @@ The `--image-registry` flag sets the registry prefix used when the offloader pul - [RTCD Setup and Configuration](calls-rtcd-setup.md): Comprehensive guide for setting up the dedicated RTCD service - [Calls Metrics and Monitoring](calls-metrics-monitoring.md): Guide to monitoring Calls performance using metrics and observability - [Calls Deployment on Kubernetes](calls-kubernetes.md): Detailed guide for deploying Calls in Kubernetes environments -- [Calls Troubleshooting](calls-troubleshooting.md): Detailed troubleshooting steps and debugging techniques +- [Calls Logging](calls-logging.md): Detailed guidance for collecting Calls logs and client diagnostics - [calls-offloader performance documentation](https://github.com/mattermost/calls-offloader/blob/master/docs/performance.md): Detailed performance tuning and monitoring recommendations \ No newline at end of file diff --git a/source/administration-guide/configure/calls-rtcd-setup.md b/source/administration-guide/configure/calls-rtcd-setup.md index 5057e2ec210..1233975ae6f 100644 --- a/source/administration-guide/configure/calls-rtcd-setup.md +++ b/source/administration-guide/configure/calls-rtcd-setup.md @@ -377,6 +377,6 @@ Once RTCD is properly set up and validated, configure Mattermost to use it: - [Calls Offloader Setup and Configuration](calls-offloader-setup.md): Setup guide for call recording and transcription - [Calls Metrics and Monitoring](calls-metrics-monitoring.md): Guide to monitoring Calls performance using metrics and observability - [Calls Deployment on Kubernetes](calls-kubernetes.md): Detailed guide for deploying Calls in Kubernetes environments -- [Calls Troubleshooting](calls-troubleshooting.md): Detailed troubleshooting steps and debugging techniques +- [Calls Logging](calls-logging.md): Detailed guidance for collecting Calls logs and client diagnostics For detailed Mattermost Calls configuration options, see the [Calls Plugin Configuration Settings](plugins-configuration-settings.rst#calls) documentation. \ No newline at end of file diff --git a/source/redirects.py b/source/redirects.py index d5f9e40a5b8..85d5addbde8 100644 --- a/source/redirects.py +++ b/source/redirects.py @@ -951,6 +951,10 @@ "https://docs.mattermost.com/administration-guide/onboard/bulk-loading-data.html", "configure/calls-deployment.html": "https://docs.mattermost.com/administration-guide/configure/calls-deployment.html", +"configure/calls-log-collection.html": + "https://docs.mattermost.com/administration-guide/configure/calls-logging.html", +"configure/calls-troubleshooting.html": + "https://docs.mattermost.com/administration-guide/configure/calls-logging.html", "configure/cloud-billing-account-settings.html": "https://docs.mattermost.com/administration-guide/configure/cloud-billing-account-settings.html", "configure/common-config-settings-notation.html": From aacd90f3dbf6083d92715f2d8a2b88df59a820d0 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 17:55:58 -0700 Subject: [PATCH 15/38] tweaks --- .../configure/calls-deployment.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 45c19f454bb..207c68e28fe 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -62,11 +62,12 @@ If you encounter issues and need to open a [support case](https://support.matter Before you start, confirm the following: - [ ] You have a running Mattermost server on v10.0+ -- [ ] Mattermost server is configured to use secure HTTPS. - _Browsers block microphone and screen sharing on insecure HTTP connections. To enable Calls, you must run Mattermost over HTTPS. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ +- [ ] Your Mattermost server is configured to use secure HTTPS. + _Browsers block microphone and screen sharing on insecure HTTP connections. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ - [ ] You have System Admin access to your Mattermost server. -- [ ] You can open inbound and outbound network ports on the servers involved in the deployment. If a network or security team manages your firewalls, you'll need to involve them before continuing. -- [ ] You can provision additional servers if your chosen architecture requires RTCD or Calls Offloader services. +- [ ] You can provision additional servers if your chosen architecture requires RTCD or Recording services. +- [ ] You can open inbound and outbound network ports on the servers involved in your deployment. If a network or security team manages your firewalls, you'll need to involve them before continuing. + ### 1.2 Deployment Infrastructure @@ -88,7 +89,7 @@ In Integrated mode, the Calls plugin runs its built-in media service directly on ```{image} ../../images/calls-deployment-integrated.png :alt: Integrated Calls deployment -:height: 627px +:height: 400px ``` **When to use it** @@ -145,7 +146,6 @@ The `calls-offloader` service can be added to a Calls deployment to enable recor ```{image} ../../images/calls-deployment-rtcd-recording.png :alt: Calls deployment with RTCD and recording -:height: 627px ``` **When to use it** From ce98172aac8bebc2889db28805c88dbdae287cc7 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 18:13:04 -0700 Subject: [PATCH 16/38] tweaks tables --- source/_static/css/homepage-v1.css | 28 +++++++++++++++++++ .../configure/calls-deployment.md | 11 +++----- .../configure/calls-overview.rst | 4 +-- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/source/_static/css/homepage-v1.css b/source/_static/css/homepage-v1.css index 85de6275eaf..bc55e039f2b 100644 --- a/source/_static/css/homepage-v1.css +++ b/source/_static/css/homepage-v1.css @@ -358,6 +358,34 @@ section#important-upgrade-notes table.align-default th:last-child { width: 75% !important; } +/* Let short columns in Calls deployment tables shrink naturally. */ +section#mattermost-calls-deployment-guide table.align-default { + width: 100% !important; + min-width: unset !important; + table-layout: auto !important; +} + +section#mattermost-calls-deployment-guide table.align-default td, +section#mattermost-calls-deployment-guide table.align-default th { + min-width: 0 !important; + vertical-align: top !important; + overflow-wrap: break-word !important; +} + +/* The first column is short across the checklist and verification tables. */ +section#mattermost-calls-deployment-guide table.align-default tr > :first-child { + width: 1% !important; + white-space: nowrap !important; +} + +/* Port tables use 6 columns; the first 3 columns are consistently short. */ +section#mattermost-calls-deployment-guide table.align-default tr > :nth-child(1):nth-last-child(6), +section#mattermost-calls-deployment-guide table.align-default tr > :nth-child(2):nth-last-child(5), +section#mattermost-calls-deployment-guide table.align-default tr > :nth-child(3):nth-last-child(4) { + width: 1% !important; + white-space: nowrap !important; +} + ::-moz-selection { /* Code for Firefox */ background: rgba(255, 188, 31, 0.2); diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 207c68e28fe..9529a992419 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -16,9 +16,9 @@ Calls is uniquely suited for mission-critical operations across defense, intelli Functionality includes: - **1:1 and Group Calling**: Initiate real-time voice communication between two or more participants. -- **Screen Sharing**: Share your screen during calls to collaborate visually on tasks, review documents, or troubleshoot live issues. -- **Call Recording and Transcription**: Record voice sessions for review, compliance, or distribution. *(Enterprise, Enterprise Advanced)* -- **Live Captioning**: Provide real-time subtitles for inclusivity, accessibility, and support in noisy or multilingual environments. *(Enterprise, Enterprise Advanced)* +- **Screen Sharing**: Share your screen during calls to collaborate visually on tasks, review documents, or troubleshoot live issues. +- **Call Recording and Transcription**: Record voice sessions for asynchronous review. *(Enterprise, Enterprise Advanced)* +- **Live Captioning**: Generate real-time subtitles for accessibility. *(Enterprise, Enterprise Advanced)* ## Deployment Overview @@ -170,8 +170,6 @@ The `calls-offloader` service can be added to a Calls deployment to enable recor ### 1.3 Networking Decisions -Do this before you install anything new. - #### 1.3.1 STUN for Public IP Discovery STUN is a protocol that helps the media server discover its public IP address automatically so remote clients can connect to Calls. @@ -303,9 +301,8 @@ First, install `nmap` on each machine you will run checks from. For example: When you execute each check below, `nmap` returns `open`, `closed`, or `filtered`. **Pass**: -- `open`: Port is reachable and the service is running. Expected if you've already installed the RTCD or `calls-offloader` services in Phases 3-4. +- `open`: Port is reachable and the service is running. Expected if you've already installed the RTCD or Recording services in Phases 3-4. - `closed`: Port is reachable but the service is not running. Expected if you just provisioned the infrastructure in Step 1.4. -- `open|filtered`: Common for UDP checks before the service is installed. Treat this as acceptable for these pre-installation firewall checks if the port is expected to be open. **Fail**: - `filtered`: Firewall is blocking the port. Revisit your networking configuration in Step 1.5 before continuing. diff --git a/source/administration-guide/configure/calls-overview.rst b/source/administration-guide/configure/calls-overview.rst index 0d41150ba80..bae2c736a8a 100644 --- a/source/administration-guide/configure/calls-overview.rst +++ b/source/administration-guide/configure/calls-overview.rst @@ -15,7 +15,7 @@ Mattermost Calls provides integrated audio calling and screen sharing capabiliti Calls Offloader Setup and Configuration Calls Metrics and Monitoring Deploy Calls on Kubernetes - Calls Troubleshooting + Calls Logging **Calls Documentation:** @@ -24,4 +24,4 @@ Mattermost Calls provides integrated audio calling and screen sharing capabiliti * :doc:`Calls Offloader Setup and Configuration ` - Configure call recording and transcription services * :doc:`Calls Metrics and Monitoring ` - Performance monitoring with Prometheus and Grafana * :doc:`Calls Deployment on Kubernetes ` - Kubernetes deployment guide for scalable Calls infrastructure -* :doc:`Calls Troubleshooting ` - Comprehensive troubleshooting guide for common issues +* :doc:`Calls Logging ` - Comprehensive troubleshooting guide for common issues From 8a5caefe18328899fc68302497349c125ec10305 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 19:32:58 -0700 Subject: [PATCH 17/38] editor tweaks --- .../configure/calls-deployment.md | 115 ++++++++++++------ 1 file changed, 76 insertions(+), 39 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 9529a992419..188445b28d5 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -3,7 +3,7 @@ ```{include} ../../_static/badges/all-commercial.md ``` -This guide walks System Administrators step-by-step through deploying Mattermost Calls, from preparation and network readiness through testing with a small group of users and scaling to production. You'll find clear decision points, verification checks, and troubleshooting tips to help you confirm each part of the deployment is working before you move on. +This guide walks System Administrators step-by-step through deploying Mattermost Calls, from preparation and network readiness through to pilot testing and production rollout. You'll find clear decision points, verification checks, and troubleshooting tips to help you confirm each phase of the deployment is working before you move on. No prior experience with Mattermost Calls is required — this guide assumes you’re starting fresh and will introduce essential concepts and best practices. @@ -27,13 +27,13 @@ This guide is organized into sequential deployment phases with numbered steps. E **Deployment Phases:** 1. [**Preparation and Networking**](#phase-1-preparation-and-networking) - Plan your deployment architecture, gather prerequisites, provision any required servers, and confirm the required network ports and paths are open before deployment. + Choose your deployment architecture, make networking decisions, provision required servers, and confirm the required network ports and paths are open before deployment. -2. [**Configure Integrated Calls**](#phase-2-configure-integrated-calls) - Regardless of the deployment architecture you choose, start with the simplest Calls deployment, Integrated mode, to verify connectivity plus basic audio and screen sharing. +2. [**Configure Integrated Calls**](#phase-2-configure-integrated-calls) + Regardless of the deployment architecture you choose, start with the simplest Calls deployment, Integrated mode, to verify connectivity plus basic audio and screen sharing. 3. [**Install and Configure RTCD**](#phase-3-install-and-configure-rtcd) (Optional) - RTCD (real-time communication daemon) is a service built to offload media processing tasks from the Mattermost server. + RTCD (Real-Time Communication Daemon) is a service built to offload media processing tasks from the Mattermost server. 4. [**Install and Configure Recording**](#phase-4-install-and-configure-recording) (Optional) Calls Offloader is a service required to deliver recording, transcription and live captions. @@ -73,9 +73,9 @@ Before you start, confirm the following: To determine your deployment infrastructure, answer the following questions: -- **How many users will use Calls?** - - **Up to 50 users:** You can use the **Integrated** deployment mode. - - **More than 50 users:** You'll need to deploy an additional component called **RTCD** (Real-Time Communication Daemon) for handling media processing at scale. +- **How many people do you expect to use Calls?** + - **Up to 50:** You can use the **Integrated** deployment mode. + - **More than 50:** You'll need to deploy an additional component called **RTCD** for handling media processing at scale. - **Do you require call recording, transcription, or live captions?** - **Yes:** You'll need to deploy an additional component for the **Recording** service called Calls Offloader. @@ -89,6 +89,7 @@ In Integrated mode, the Calls plugin runs its built-in media service directly on ```{image} ../../images/calls-deployment-integrated.png :alt: Integrated Calls deployment +:align: center :height: 400px ``` @@ -116,7 +117,8 @@ Deploying RTCD is **highly recommended in production deployments** for performan ```{image} ../../images/calls-deployment-rtcd.png :alt: Calls deployment with RTCD -:height: 627px +:align: center +:height: 500px ``` **When to use it** @@ -146,6 +148,7 @@ The `calls-offloader` service can be added to a Calls deployment to enable recor ```{image} ../../images/calls-deployment-rtcd-recording.png :alt: Calls deployment with RTCD and recording +:align: center ``` **When to use it** @@ -234,16 +237,16 @@ Before moving to Step 1.5, confirm the following: ### 1.5 Network Configuration -This section lists the network ports that must be opened for each server involved in your Calls deployment. Open the ports in the tables below for every server in your deployment. Work through one server at a time so you can verify nothing is missed before moving on. +This section lists the network ports that must be opened for each server involved in your Calls deployment. The server instances must exist before you can configure these rules, which is why provisioning in Step 1.4 comes first. **How you open ports depends on your environment:** -- **Cloud deployments (AWS, Azure, GCP):** Configure inbound and outbound rules in your cloud provider's security group or network ACL for each instance. This is done in the cloud console, not on the server itself. The instance must exist before you can configure its rules, which is why provisioning in Step 1.4 comes first. -- **On-premises or self-managed VMs:** Use `firewalld` (RHEL/CentOS) or `ufw` (Ubuntu/Debian) commands directly on each server. Examples: - - `sudo firewall-cmd --permanent --add-port=8443/udp && sudo firewall-cmd --reload` - - `sudo ufw allow 8443/udp` +- **Cloud deployments (AWS, Azure, GCP):** Configure inbound and outbound rules in your cloud console security group or network ACL for each instance. +- **On-premises or self-managed VMs:** Use `firewalld` (RHEL, Rocky Linux, AlmaLinux) or `ufw` (Ubuntu/Debian) commands directly on each server. - **Centrally managed firewall:** If a network team manages your firewall, share the tables below with them and request the rules before proceeding. +Work through one server at a time so you can verify nothing is missed before moving on: + #### Mattermost server ports | Port | Protocol | Direction | Source | Destination | Notes | @@ -289,14 +292,14 @@ If you deployed a TURN server in Step 1.4, open these ports. If you are using `c | 5349 | UDP and TCP | Inbound | Mattermost clients | TURN server | TURN over TLS. Optional — only if you configure TLS on coturn. | | 49152–65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required for coturn to relay media. | -### 1.6 Verification Checks +### 1.6 Networking Checks These checks test firewall rules and network reachability only. They do not require Calls, RTCD, or `calls-offloader` to be installed yet. First, install `nmap` on each machine you will run checks from. For example: - Ubuntu or Debian: `sudo apt install nmap` -- RHEL or CentOS: `sudo dnf install nmap` +- RHEL, Rocky Linux, or AlmaLinux: `sudo dnf install nmap` When you execute each check below, `nmap` returns `open`, `closed`, or `filtered`. @@ -307,6 +310,10 @@ When you execute each check below, `nmap` returns `open`, `closed`, or `filtered **Fail**: - `filtered`: Firewall is blocking the port. Revisit your networking configuration in Step 1.5 before continuing. +```{note} +In the commands below, replace `TARGET_IP` with the actual IP address of the server you are testing. For example, if your Mattermost server IP is `10.0.1.50`, run `sudo nmap -sU -p 8443 10.0.1.50`. +``` + **All deployments** Run from a client machine on the same network as your users: @@ -343,9 +350,9 @@ Run from the calls-offloader server: | Check | Command | `TARGET_IP` | Description | |---|---|---|---| -| 1.6.7 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP | `calls-offloader` can send UDP media to the media service to join calls for recording | -| 1.6.8 | `nmap -p 8443 TARGET_IP` | RTCD server IP | `calls-offloader` can reach the media service for TCP media fallback | -| 1.6.9 | `nmap -p 443 TARGET_IP` | Mattermost server IP | `calls-offloader` can post recordings back to Mattermost | +| 1.6.7 | `sudo nmap -sU -p 8443 TARGET_IP` | RTCD server IP (or Mattermost server IP if using Integrated mode) | Calls Offloader can send UDP media to the media service to join calls for recording | +| 1.6.8 | `nmap -p 8443 TARGET_IP` | RTCD server IP (or Mattermost server IP if using Integrated mode) | Calls Offloader can reach the media service for TCP media fallback | +| 1.6.9 | `nmap -p 443 TARGET_IP` | Mattermost server IP | Calls Offloader can post recordings back to Mattermost | **TURN deployments** @@ -358,6 +365,16 @@ Run from a client machine on the same network as your users: | 1.6.12 | `nmap -p 5349 TARGET_IP` | TURN server IP | Clients can reach the TURN server over TLS (only if you configured TLS on coturn) | | 1.6.13 | `sudo nmap -sU -p 49152 TARGET_IP` | TURN server IP | Spot check of the TURN relay port range | +### 1.7 Verification Checks + +Before proceeding to Phase 2, confirm all of the following: + +- [ ] You have chosen your deployment architecture and provisioned the required servers. +- [ ] You have confirmed your Mattermost license supports the architecture and features you plan to deploy. +- [ ] Every required firewall rule and network path for your chosen architecture has been opened. +- [ ] Every relevant network check in Step 1.6 returned the expected result (`open` or `closed`, but not `filtered`). +- [ ] If you need STUN, outbound UDP `3478` is allowed to `stun.global.calls.mattermost.com`. + ```{important} **Do not proceed to Phase 2 until all checks in this section relevant to your deployment architecture are passing. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` @@ -372,7 +389,7 @@ If you are deploying Mattermost on Kubernetes, skip this phase and deploy RTCD f ### 2.1 Prerequisites -- [ ] All relevant Phase 1 networking checks passed +- [ ] Phase 1 verification checks passed - [ ] Two test accounts on your Mattermost server - [ ] System Admin permissions on your Mattermost server @@ -390,7 +407,7 @@ Enable **Test mode** so Calls stays restricted during initial validation. In thi **2.2.3: Configure the host media address** -Set **ICE Host Override** to the IP address or DNS name clients will use to reach the media service. In plain terms, this is the address Calls advertises to users' devices for media traffic. Base this value on the STUN decision tree from Step 1.3.1. +Set **ICE Host Override** to the IP address or DNS name clients will use to reach the media service. ICE (Interactive Connectivity Establishment) is the protocol your users' devices use to find a path to the media server. The ICE Host Override tells Calls which address to advertise to them. Base this value on the STUN decision tree from Step 1.3.1. - If your users are in a private network, VPN, or air-gapped environment, set it to the private address of the Mattermost server they can reach. - If your Mattermost server has a stable public IP, set it to that IP. @@ -435,7 +452,6 @@ Now smoke test your Calls deployment with your test accounts: | 2.3.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | | 2.3.4 | End the call | The call indicator disappears from the channel | - ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` @@ -451,7 +467,7 @@ Now that you've verified a basic Integrated Calls deployment, you can add RTCD t ### 3.1 Prerequisites - [ ] RTCD server is provisioned (1.4) and RTCD networking checks passed (1.6.3-1.6.5) -- [ ] Integrated Calls deployment checks passed (2.3.1-2.3.5) +- [ ] Integrated Calls deployment checks passed (2.3.1-2.3.4) - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server @@ -460,7 +476,7 @@ Now that you've verified a basic Integrated Calls deployment, you can add RTCD t Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. RTCD is the separate media service used to handle call audio and screen sharing at scale. The guide covers: -- Binary or Docker installation +- Binary installation - `rtcd.toml` configuration - Service setup - TURN configuration (if applicable) @@ -494,12 +510,14 @@ Once RTCD is installed, configured, and reachable, update the Calls plugin to us Before your pilot, set up Calls monitoring so you can see sessions, errors, CPU, and memory while real users are testing. -See [Calls Metrics and Monitoring](calls-metrics-monitoring.md) for: +Calls monitoring uses Prometheus (a tool that collects metrics from your servers) and Grafana (a dashboard that visualizes those metrics). If you don't have these set up yet, see [Mattermost monitoring setup](../../administration-guide/scale/deploy-prometheus-grafana-for-performance-monitoring.md) before continuing. If you already have Prometheus and Grafana running, add the following scrape targets and import the dashboard: + +- **RTCD metrics**: `http://YOUR_RTCD_SERVER:8045/metrics` +- **Calls plugin metrics**: `http://YOUR_MATTERMOST_SERVER:8067/plugins/com.mattermost.calls/metrics` +- **Grafana dashboard**: Import dashboard ID `23225` + +See [Calls Metrics and Monitoring](calls-metrics-monitoring.md) for full configuration details. -- Prometheus configuration -- RTCD metrics on `http://RTCD_SERVER:8045/metrics` -- Calls plugin metrics on `http://MATTERMOST_SERVER:8067/plugins/com.mattermost.calls/metrics` -- Grafana visualization using dashboard ID `23225` ### 3.5 Verification Checks @@ -512,6 +530,12 @@ Now smoke test your RTCD deployment with your test accounts: | 3.5.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | | 3.5.4 | End the call | The call indicator disappears from the channel | +If Phase 2 passed but Phase 3 fails, focus on the RTCD integration path: + +- Re-run checks `3.2.1` and `3.2.2` to confirm RTCD is listening and responding. +- Confirm **RTCD Service URL** is correct and includes credentials if your RTCD setup requires them. +- Check that the Mattermost server can reach RTCD on port `8045`, and review RTCD logs before changing other settings. + ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` @@ -527,7 +551,8 @@ Now we will install and configure the `calls-offloader` job service that handles ### 4.1 Prerequisites - [ ] `calls-offloader` server is provisioned (1.4) and relevant recording networking checks passed (1.6.6-1.6.9) -- [ ] RTCD verification checks passed (3.5.1-3.5.4) +- [ ] If you are using RTCD: Phase 3 verification checks passed (3.5.1-3.5.4). +- [ ] If you are using Integrated mode: Phase 2 verification checks passed (2.3.1-2.3.4). - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server @@ -569,6 +594,12 @@ Now smoke test recording-related features with your test accounts: | 4.4.3 | With transcription enabled, end a recorded call | An MP4 file and transcript file appear in the call thread after processing completes. | | 4.4.4 | With live captions enabled, start a recorded call | Captions appear during the call within 1-3 seconds after participants speak. | +If a recording-related check fails, isolate the problem before retrying: + +- **4.4.1 or 4.4.2 fails**: Confirm the **Job Service URL** is correct, the `calls-offloader` service is running, and the Mattermost server can reach port `4545`. +- **4.4.3 fails**: Confirm recordings are enabled first, then confirm transcription is enabled. +- **4.4.4 fails**: Confirm both recordings and transcriptions are enabled before testing live captions. + ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` @@ -581,8 +612,9 @@ Now that the technical configuration is complete and validated, run a small pilo ### 5.1 Prerequisites -- [ ] Integrated or RTCD verification checks passed for your deployment architecture (2.3.1-2.3.4 or 3.5.1-3.5.4) -- [ ] Recording verification checks passed (4.4.1-4.4.4), if recording, transcription, or live captions are enabled +- [ ] If using Integrated mode: Phase 2 verification checks passed (2.3.1-2.3.4) +- [ ] If using RTCD: Phase 3 verification checks passed (3.5.1-3.5.4) +- [ ] If using Recording: Phase 4 verification checks passed (4.4.1-4.4.4) - [ ] 5 to 10 volunteer pilot users from different locations - [ ] Access to the metrics dashboard and logs on your Calls infrastructure - [ ] Pilot users have current [Mattermost desktop and mobile apps](https://mattermost.com/apps/) @@ -631,7 +663,6 @@ If you encounter an issue, please report it by posting in this channel and inclu ### 5.3 Verification Checks - **Monitoring** | Check | Action | Pass criteria | @@ -655,6 +686,12 @@ Collect feedback from your pilot users after 3-5 business days and use it to eva | 5.3.6 | No blocking issues found in the pilot test cases relevant to your deployment | | 5.3.7 | All pilot users confirm readiness for production rollout | +If the pilot users find issues, do not expand the rollout yet: + +- Fix the issue in the smallest possible scope. +- Repeat the affected pilot test case. +- Stay in pilot until the failing scenario is consistently passing. + --- ## Phase 6: Production Rollout @@ -663,7 +700,7 @@ Now you will execute a broader rollout to all users in production. ### 6.1 Prerequisites -- [ ] Pilot verification checks passed (5.3.1-5.3.7) +- [ ] Phase 5 production readiness gate passed (5.3.1-5.3.7) - [ ] Rollback plan documented and understood - [ ] System Admin permissions on your Mattermost server - [ ] Access to the metrics dashboard and logs on your Calls infrastructure @@ -740,11 +777,11 @@ We recommend enabling Calls in stages instead of enabling it everywhere at once. | Stage | Channels / departments | Suggested timeline | Rollback approach | |---|---|---|---| -| Wave 1 | IT and Admin channels | Days 1–3 | Per-channel rollback | -| Wave 2 | Engineering or power user channels | Days 4–7 | Per-channel rollback | -| Wave 3 | Full organization | Day 8+ | Test mode (if issues are isolated) or full rollback | +| Stage 1 | IT and Admin channels | Days 1–3 | Per-channel rollback | +| Stage 2 | Engineering or power user channels | Days 4–7 | Per-channel rollback | +| Stage 3 | Full organization | Day 8+ | Test mode (if issues are isolated) or full rollback | -Do not advance to the next stage until the current one is stable. If you stay on Integrated Calls and see sustained media load during rollout, plan a move to RTCD before expanding further. +If a rollout stage introduces problems, pause the rollout, use the rollback option listed for that stage, fix the issue, and repeat the same stage before moving to the next one. ### 6.5 Monitor and optimize @@ -760,7 +797,7 @@ Check Mattermost, RTCD, and calls-offloader logs each day for recurring `ERROR` **6.5.3: Tune Max Call Participants** -If you see resource pressure during large calls, lower **Max Call Participants** in **System Console > Plugins > Calls**. The default is unlimited (`0`); a practical ceiling for most deployments is `50`. +If you see resource pressure during large calls, lower **Max Call Participants** in **System Console > Plugins > Calls**. By default there is no participant limit (configured as `0`, which means unlimited). A practical ceiling for most deployments is `50`. **6.5.4: Track user-reported issues** From 360f42a383d54d0217926da271b81c222d2faff8 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 19:42:41 -0700 Subject: [PATCH 18/38] tweaks --- .../configure/calls-deployment.md | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 188445b28d5..5ae021a54ae 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -22,27 +22,33 @@ Functionality includes: ## Deployment Overview -This guide is organized into sequential deployment phases with numbered steps. Each phase begins with prerequisites and ends with verification checks. Before you begin any phase, make sure the listed prerequisites are met, then move to the next phase only after the verification checks for the current phase pass. This structure helps you catch and fix issues early, when they are easiest to isolate. +This guide is organized into sequential deployment phases with numbered steps. Each phase begins with prerequisites and ends with verification checks. Before you begin any phase, make sure the listed prerequisites are met, then move to the next phase only after the verification checks are passing. This structure helps you catch and fix issues early, when they are easiest to isolate. **Deployment Phases:** 1. [**Preparation and Networking**](#phase-1-preparation-and-networking) - Choose your deployment architecture, make networking decisions, provision required servers, and confirm the required network ports and paths are open before deployment. + + Choose your deployment architecture, make networking decisions, provision required servers, and confirm the required network ports and paths are open before deployment. 2. [**Configure Integrated Calls**](#phase-2-configure-integrated-calls) - Regardless of the deployment architecture you choose, start with the simplest Calls deployment, Integrated mode, to verify connectivity plus basic audio and screen sharing. + + Regardless of the deployment architecture you choose, start with the simplest Calls deployment, Integrated mode, to verify connectivity plus basic audio and screen sharing. 3. [**Install and Configure RTCD**](#phase-3-install-and-configure-rtcd) (Optional) - RTCD (Real-Time Communication Daemon) is a service built to offload media processing tasks from the Mattermost server. + + RTCD (Real-Time Communication Daemon) is a service built to offload media processing tasks from the Mattermost server. 4. [**Install and Configure Recording**](#phase-4-install-and-configure-recording) (Optional) - Calls Offloader is a service required to deliver recording, transcription and live captions. + + Calls Offloader is a service required to deliver recording, transcription and live captions. 5. [**Pilot Rollout**](#phase-5-pilot-rollout) - Expand testing to a small group of pilot users to watch for client, network, and environment-specific issues under real usage. + + Expand testing to a small group of pilot users to watch for client, network, and environment-specific issues under real usage. 6. [**Production Rollout**](#phase-6-production-rollout) - Rollout to all users in controlled waves with appropriate communication and monitoring, and be ready to pause or roll back if needed. + + Rollout to all users in controlled waves with appropriate communication and monitoring, and be ready to pause or roll back if needed. ```{note} @@ -51,7 +57,7 @@ If you need expert help deploying Calls, contact your Account Manager or [talk t ### Contacting Support -If you encounter issues and need to open a [support case](https://support.mattermost.com), please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and Calls logs (see [Calls Logging](calls-logging.md) for how to gather them.) +If you encounter issues and need to open a [support case](https://support.mattermost.com), please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and [Calls logs](calls-logging.md). --- @@ -62,11 +68,12 @@ If you encounter issues and need to open a [support case](https://support.matter Before you start, confirm the following: - [ ] You have a running Mattermost server on v10.0+ -- [ ] Your Mattermost server is configured to use secure HTTPS. +- [ ] Your Mattermost server is configured to use HTTPS. _Browsers block microphone and screen sharing on insecure HTTP connections. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ - [ ] You have System Admin access to your Mattermost server. - [ ] You can provision additional servers if your chosen architecture requires RTCD or Recording services. -- [ ] You can open inbound and outbound network ports on the servers involved in your deployment. If a network or security team manages your firewalls, you'll need to involve them before continuing. +- [ ] You can open inbound and outbound network ports on the servers involved in your deployment. + _If a network or security team manages your firewalls, you'll need to involve them before continuing._ ### 1.2 Deployment Infrastructure From ea585a9d7acf23e7deac382304e0b3c279af60cd Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 19:57:12 -0700 Subject: [PATCH 19/38] tweaks --- .../configure/calls-deployment.md | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 5ae021a54ae..5abdfb69c87 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -78,21 +78,21 @@ Before you start, confirm the following: ### 1.2 Deployment Infrastructure -To determine your deployment infrastructure, answer the following questions: +To determine your deployment infrastructure, start by answering the following questions: - **How many people do you expect to use Calls?** - **Up to 50:** You can use the **Integrated** deployment mode. - **More than 50:** You'll need to deploy an additional component called **RTCD** for handling media processing at scale. - **Do you require call recording, transcription, or live captions?** - - **Yes:** You'll need to deploy an additional component for the **Recording** service called Calls Offloader. + - **Yes:** You'll need to deploy an additional component for the **Recording** service. - **No:** You do not need the recording service. Based on your answers, you can explore the associated deployment infrastructure you'll need in the tabs below: ````{tab} Integrated -In Integrated mode, the Calls plugin runs its built-in media service directly on the Mattermost server. This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. +In **Integrated** mode, the Calls plugin runs its built-in media service directly on the Mattermost server. This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. ```{image} ../../images/calls-deployment-integrated.png :alt: Integrated Calls deployment @@ -108,17 +108,17 @@ In Integrated mode, the Calls plugin runs its built-in media service directly on **Components** -- **Mattermost server**: Calls plugin is pre-installed. +- **Mattermost server**: Calls plugin is pre-installed, not additional infrastructure is needed. **License** -- Mattermost Entry: 1:1 Calls + Screen Sharing -- Mattermost Professional, Enterprise, or Enterprise Advanced: Group Calls + Screen Sharing +- **Mattermost Entry**: 1:1 Calls + Screen Sharing +- **Mattermost Professional, Enterprise, or Enterprise Advanced**: Group Calls + Screen Sharing ```` ````{tab} RTCD -The RTCD can be added as a dedicated media service that processes all call audio and screen sharing media. The Mattermost server is still responsible for signaling (setting up, managing, and ending calls) and channel state (who is joining or leaving, who has muted, and overall call status), but the call media itself flows directly between clients and the RTCD server, completely bypassing the Mattermost server. +The **RTCD Server** can be added as a dedicated media service that processes all call audio and screen sharing media. The Mattermost server is still responsible for signaling (setting up, managing, and ending calls) and channel state (who is joining or leaving, who has muted, and overall call status), but the call media itself flows directly between clients and the RTCD server, completely bypassing the Mattermost server. Deploying RTCD is **highly recommended in production deployments** for performance, scalability, and stability of Mattermost Calls. @@ -134,7 +134,6 @@ Use RTCD if you need optimized performance, scalability, and the best possible u - You want to keep call media traffic off your main Mattermost server to improve overall server performance and reduce CPU usage spikes. - You need your deployment to easily scale as call volume increases; additional RTCD servers can be added for load balancing. -- You require ongoing calls to remain active even if the Mattermost server needs to be restarted (some features like reactions and muting may be temporarily unavailable during the restart). - You want the lowest possible media latency and highest reliability for Calls. - You are deploying Mattermost on Kubernetes, where RTCD is required. @@ -145,13 +144,13 @@ Use RTCD if you need optimized performance, scalability, and the best possible u **License** -- Mattermost Enterprise or Enterprise Advanced +- **Mattermost Enterprise** or **Enterprise Advanced** ```` ````{tab} RTCD + Recording -The `calls-offloader` service can be added to a Calls deployment to enable recording, transcription, and live captions. +The **Recording** service (`calls-offloader`) can be added to any Calls deployment to enable recording, transcription, and live captions. ```{image} ../../images/calls-deployment-rtcd-recording.png :alt: Calls deployment with RTCD and recording @@ -166,7 +165,7 @@ The `calls-offloader` service can be added to a Calls deployment to enable recor - **Mattermost server**: Calls plugin is pre-installed. - **RTCD Server**: Dedicated media service. Clients connect to it directly for media traffic. -- **Calls Offloader**: Job service that manages recording and transcription. +- **Calls Offloader**: Job service that manages recording, transcription and live captions. ```{note} `calls-offloader` can also be added to an integrated Calls deployment without RTCD. This guide uses RTCD as the base because it is the recommended production path for most deployments. @@ -174,7 +173,7 @@ The `calls-offloader` service can be added to a Calls deployment to enable recor **License** -- Mattermost Enterprise or Enterprise Advanced +- **Mattermost Enterprise** or **Enterprise Advanced** ```` @@ -192,11 +191,11 @@ Your media server is the Mattermost server in the case of an **Integrated** Call **STUN Decision Tree** -1. **Are all users and your media server (Mattermost server or RTCD) in the same private network, VPN, or air-gapped environment, with no outside clients?** +1. **Are all users and your media server in the same private network, VPN, or air-gapped environment, with no outside clients?** - **Yes**: You do not need STUN for public IP discovery. You will use the private address of your media server for configuration in Phase 2. - **No**: Continue to the next question. -2. **Does your media server (Mattermost server or RTCD) have a stable public IP address or DNS name that clients on the public internet can reach?** +2. **Does your media server have a stable public IP address or DNS name that clients on the public internet can reach?** - **Yes**: You do not need STUN for public IP discovery. You will use the stable public address of your media server for configuration in Phase 2. - **No**: You will need STUN. You must open outbound UDP 3478 from your media server to `stun.global.calls.mattermost.com`. @@ -209,28 +208,32 @@ TURN is a relay service used only when clients cannot reach the Calls media serv Provisioning a TURN server is necessary if both of these conditions are true: -- Clients connect from networks that cannot reliably use UDP on port `8443` for media traffic (preferred path). +- Clients connect from networks that cannot reliably use UDP on port `8443` for media traffic (preferred). - Clients connect from networks that cannot reliably use TCP on port `8443` (fallback). -TURN is typically a last resort as it adds additional networking and infrastructure complexity. Only plan to deploy TURN if your answers indicate that you cannot rely on UDP or TCP for media, and users need an alternative route. +TURN is typically a last resort as it adds latency and infrastructure complexity. Only plan to deploy TURN if your answers indicate that you cannot rely on UDP or TCP for media, and users need an alternative route. ### 1.4 Provision Infrastructure -Now provision the servers or VMs you'll need to support your Calls deployment. You are only preparing infrastructure here; software installation and service configuration happen in later phases. This step matters because you need the IP addresses or DNS names of these servers before you can finish the networking work in the next step. +Now you'll provision the servers or VMs required to support your Calls deployment. You are only preparing infrastructure here; software installation and service configuration happen in later phases. This step matters because you need the IP addresses or DNS names of these servers before you can finish the networking configurations in the next step. Infrastructure requirements depend on the deployment architecture you chose in Step 1.2. If you provision additional hardware, write down the IP addresses or DNS names now because you will use them in Step 1.5: **Integrated** + Since the Mattermost server is handling all media processing, you can skip this step and proceed to network configuration in Step 1.5. **RTCD** + You will need to provision a new server for RTCD. Use the [performance baselines](calls-metrics-monitoring.md#performance-baselines) for benchmark examples of hardware sizing. The RTCD service supports [horizontal scaling](https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html#horizontal-scaling), but we recommend starting with one server and then scaling out if your expected workload requires it. **Recording** + You will need to provision a new server for the `calls-offloader` service. The recommended starting point is **8 vCPU / 16 GB RAM**, or you can use these [performance benchmarks](https://github.com/mattermost/calls-offloader/blob/master/docs/performance.md) to estimate recording capacity and transcription load. **TURN Server** + If you've determined in Step 1.3.2 that your users cannot reliably reach the media server over UDP or TCP `8443`, you will need to provision your TURN server now. Mattermost recommends installing [coturn](https://github.com/coturn/coturn). @@ -240,7 +243,7 @@ Before moving to Step 1.5, confirm the following: - [ ] Every required server or VM has been created. - [ ] Every required server has the IP address or DNS name you plan to use later in configuration. -- [ ] You have administrative access to every required server. (test with `ssh @`) +- [ ] You have administrative access to every required server. (validate with `ssh @`) ### 1.5 Network Configuration From 8f72dd803d723ac8937f827f2e6613e4b29442f6 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Sun, 12 Apr 2026 20:35:41 -0700 Subject: [PATCH 20/38] editor tweaks --- .../configure/calls-deployment.md | 69 ++++++++++--------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment.md index 5abdfb69c87..04404d01cda 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment.md @@ -257,50 +257,50 @@ This section lists the network ports that must be opened for each server involve Work through one server at a time so you can verify nothing is missed before moving on: -#### Mattermost server ports +##### Mattermost server ports | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| | 443 | TCP | Inbound | Mattermost clients | Mattermost server | HTTPS and WebSocket signaling. | -| 8443 | UDP | Inbound | Mattermost clients | Mattermost server | Media traffic in Integrated mode. | -| 8443 | TCP | Inbound | Mattermost clients | Mattermost server | Media traffic in Integrated mode. | +| 8443 | UDP | Inbound | Mattermost clients | Mattermost server | Media traffic (Integrated mode). | +| 8443 | TCP | Inbound | Mattermost clients | Mattermost server | Media traffic fallback (Integrated mode). | | 3478 | UDP | Outbound | Mattermost server | `stun.global.calls.mattermost.com` | (Optional - Step 1.3.1) Public IP discovery using STUN. | -#### RTCD server ports +##### RTCD server ports If you deployed an RTCD server in Step 1.4, open these ports: | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| | 8443 | UDP | Inbound | Mattermost clients and calls-offloader server | RTCD server | Media traffic. | -| 8443 | TCP | Inbound | Mattermost clients and calls-offloader server | RTCD server | Media fallback. | -| 8045 | TCP | Inbound | Mattermost server | RTCD server | RTCD API. Internal only — do not expose publicly. | +| 8443 | TCP | Inbound | Mattermost clients and calls-offloader server | RTCD server | Media traffic fallback. | +| 8045 | TCP | Inbound | Mattermost server | RTCD server | RTCD API (Internal only) | | 3478 | UDP | Outbound | RTCD server | `stun.global.calls.mattermost.com` | (Optional - Step 1.3.1) Public IP discovery using STUN. | ```{important} If you use NGINX as a reverse proxy in front of Mattermost, note that NGINX cannot forward UDP traffic. Port 8443 must be opened directly on the server running the media service — not on NGINX. Port 443 is the only port NGINX handles for Calls. ``` -#### Recording server ports +##### Recording server ports If you deployed a calls-offloader server in Step 1.4, open these ports: | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| -| 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API. Internal only — do not expose publicly. | +| 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API (Internal only) | | 8443 | UDP | Outbound | calls-offloader server | Mattermost server and RTCD server | Recorder and transcriber jobs connect to the media service as call participants. | -| 8443 | TCP | Outbound | calls-offloader server | Mattermost server and RTCD server | Fallback if UDP is unavailable. | +| 8443 | TCP | Outbound | calls-offloader server | Mattermost server and RTCD server | Media traffic fallback. | | 443 | TCP | Outbound | calls-offloader server | Mattermost server | Recorder and transcriber jobs post results back to Mattermost. | -#### TURN server ports +##### TURN server ports If you deployed a TURN server in Step 1.4, open these ports. If you are using `coturn`, these are the common defaults: | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| -| 3478 | UDP and TCP | Inbound | Mattermost clients | TURN server | STUN and TURN relay. | -| 5349 | UDP and TCP | Inbound | Mattermost clients | TURN server | TURN over TLS. Optional — only if you configure TLS on coturn. | -| 49152–65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required for coturn to relay media. | +| 3478 | UDP / TCP | Inbound | Mattermost clients | TURN server | TURN relay. | +| 5349 | UDP / TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TLS on TURN. | +| 49152–65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | ### 1.6 Networking Checks @@ -372,7 +372,7 @@ Run from a client machine on the same network as your users: |---|---|---|---| | 1.6.10 | `sudo nmap -sU -p 3478 TARGET_IP` | TURN server IP | Clients can reach the TURN server on UDP 3478 | | 1.6.11 | `nmap -p 3478 TARGET_IP` | TURN server IP | Clients can reach the TURN server on TCP 3478 | -| 1.6.12 | `nmap -p 5349 TARGET_IP` | TURN server IP | Clients can reach the TURN server over TLS (only if you configured TLS on coturn) | +| 1.6.12 | `nmap -p 5349 TARGET_IP` | TURN server IP | (Optional) Clients can reach the TURN server over TLS | | 1.6.13 | `sudo nmap -sU -p 49152 TARGET_IP` | TURN server IP | Spot check of the TURN relay port range | ### 1.7 Verification Checks @@ -395,7 +395,7 @@ Before proceeding to Phase 2, confirm all of the following: For most deployments, start by deploying Calls using the Integrated architecture, even if you plan to use RTCD or `calls-offloader` services later. This approach gives you a clean baseline: if Calls does not work using the simplest deployment method, the problem is usually networking, firewall rules, or plugin configuration. It is much easier to isolate those problems before you add RTCD or `calls-offloader` in later phases. -If you are deploying Mattermost on Kubernetes, skip this phase and deploy RTCD from the start. RTCD is the only officially supported Calls deployment path for Kubernetes environments. +**Skip this phase if you are deploying on Kubernetes**. RTCD is the only officially supported Calls deployment path for Kubernetes environments. ### 2.1 Prerequisites @@ -411,9 +411,9 @@ The Calls plugin is prepackaged with Mattermost self-hosted deployments. Go to * Set **Enable Plugin** to `true`. This enables editing for the rest of the configuration settings on the page. -**2.2.2: Put the deployment in test mode** +**2.2.2: Enable test mode** -Enable **Test mode** so Calls stays restricted during initial validation. In this mode, System Admins control where Calls is available and can enable it in specific channels for testing. +Set **Test mode** to `on`, so Calls stays restricted during initial validation. In this mode, System Admins control where Calls is available and can enable it in specific channels for testing. **2.2.3: Configure the host media address** @@ -478,13 +478,14 @@ Now that you've verified a basic Integrated Calls deployment, you can add RTCD t - [ ] RTCD server is provisioned (1.4) and RTCD networking checks passed (1.6.3-1.6.5) - [ ] Integrated Calls deployment checks passed (2.3.1-2.3.4) + _Not applicable if you are deploying on Kubernetes_ - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server ### 3.2 Install RTCD -Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. RTCD is the separate media service used to handle call audio and screen sharing at scale. The guide covers: +Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. The guide covers: - Binary installation - `rtcd.toml` configuration @@ -560,7 +561,7 @@ Now we will install and configure the `calls-offloader` job service that handles ### 4.1 Prerequisites -- [ ] `calls-offloader` server is provisioned (1.4) and relevant recording networking checks passed (1.6.6-1.6.9) +- [ ] `calls-offloader` server is provisioned (1.4) and relevant networking checks passed (1.6.6-1.6.9) - [ ] If you are using RTCD: Phase 3 verification checks passed (3.5.1-3.5.4). - [ ] If you are using Integrated mode: Phase 2 verification checks passed (2.3.1-2.3.4). - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server @@ -647,6 +648,8 @@ Thank you for volunteering to test Mattermost Calls before a wider rollout. Afte Calls is enabled in this channel for pilot testing. You can select **Start call** in the channel header to begin, or join an existing call if one is already started. +You can learn more about Mattermost Calls in the [documentation](https://docs.mattermost.com/end-user-guide/collaborate/make-calls.html). + **Test Cases** | Test | Action | Pass criteria | Client Types | @@ -679,13 +682,9 @@ If you encounter an issue, please report it by posting in this channel and inclu |---|---|---| | 5.3.1 | Check your metrics dashboard during a pilot call | Active sessions and participants are visible and counted correctly | | 5.3.2 | If using RTCD, check RTCD error metrics after pilot calls (`rtcd_rtc_errors_total`) | No elevated error counts | -| 5.3.3 | If using RTCD, check CPU and memory metrics during a pilot call (`rtcd_process_cpu_seconds_total`, `rtcd_process_resident_memory_bytes`) | CPU and memory stay within expected bounds | +| 5.3.3 | If using RTCD, check CPU and memory metrics during a pilot call (`rtcd_process_cpu_seconds_total`, `rtcd_process_resident_memory_bytes`) | No CPU or memory spikes observed | | 5.3.4 | Review Mattermost logs, plus RTCD and calls-offloader logs if those services are deployed | No recurring `ERROR` lines, and no unexpected `WARN` patterns | -```{important} -**Do not continue to a production rollout until all relevant checks are passing. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** -``` - **Production readiness** Collect feedback from your pilot users after 3-5 business days and use it to evaluate production readiness: @@ -693,7 +692,7 @@ Collect feedback from your pilot users after 3-5 business days and use it to eva | Check | Requirement | |---|---| | 5.3.5 | Audio quality rated acceptable by 80%+ of pilot users | -| 5.3.6 | No blocking issues found in the pilot test cases relevant to your deployment | +| 5.3.6 | No blocking issues found in the pilot test cases | | 5.3.7 | All pilot users confirm readiness for production rollout | If the pilot users find issues, do not expand the rollout yet: @@ -702,6 +701,12 @@ If the pilot users find issues, do not expand the rollout yet: - Repeat the affected pilot test case. - Stay in pilot until the failing scenario is consistently passing. +You can also run `/call stats` in the Mattermost message area after a failed test for additional diagnostic clues. + +```{important} +**Do not continue to a production rollout until all relevant checks are passing. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** +``` + --- ## Phase 6: Production Rollout @@ -710,29 +715,31 @@ Now you will execute a broader rollout to all users in production. ### 6.1 Prerequisites -- [ ] Phase 5 production readiness gate passed (5.3.1-5.3.7) +- [ ] Phase 5 production readiness checks passed (5.3.1-5.3.7) - [ ] Rollback plan documented and understood - [ ] System Admin permissions on your Mattermost server - [ ] Access to the metrics dashboard and logs on your Calls infrastructure -- [ ] Recording verification checks passed (4.4.1-4.4.4), if recording, transcription, or live captions are enabled ### 6.2 Rollback plan -You should be familiar with your rollback options before you begin the staged production rollout. If something goes wrong, choose the smallest rollback that solves the problem. +You should be familiar with your rollback options before you begin the staged production rollout. If something goes wrong, choose the smallest rollback that solves the problem: **Per-channel rollback** + Disables Calls in specific channels. 1. Navigate to the impacted channel. 2. Select the **Channel menu**, then select **Disable calls**. **Test mode rollback** + Restricts Calls to channels where it has been enabled by a System Admin. 1. Go to **System Console > Plugins > Calls > Settings**. 2. Set **Test Mode** to `on`. **Full rollback** + Disables Calls completely for everyone. 1. Go to **System Console > Plugins > Plugin Management**. @@ -825,8 +832,8 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu | Cause | Fix | |---|---| | The Calls plugin is disabled | Go to **System Console > Plugins > Plugin Management** and enable Calls | -| The deployment is in test mode | Go to **System Console > Plugins > Calls > Settings** and check the deployment state — only System Admins can start calls in test mode | -| Calls is not enabled for the channel | Open the channel menu and select **Enable calls** | +| The deployment is in test mode | Go to **System Console > Plugins > Calls > Settings** and check the deployment state — Calls must be enabled in specific channels by System Admins in test mode | +| Calls is not enabled for the channel | When test mode is enabled, open the **channel menu** and select **Enable calls** | | The user is on an older client | Ask the user to update to the current Mattermost desktop or mobile app | ### A.2 Calls start but audio does not work @@ -838,8 +845,6 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu | The wrong media address is being advertised | Re-check `ICE Host Override` in Phase 2 (Integrated) or `ice_host_override` in `rtcd.toml` (RTCD) — the address must be reachable by clients | | Browser or desktop microphone permissions were denied | Ask the user to check browser or OS microphone permissions and reload the app | -Run `/call stats` in the Mattermost message area after a failed test for additional diagnostic clues. - ### A.3 Remote users cannot join from outside the network | Cause | Fix | From 12d286447f3e5dc0709eacdd6b1f3ffb6346ee5b Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Tue, 14 Apr 2026 13:10:26 -0700 Subject: [PATCH 21/38] LHS nav + link redirects --- ...eployment.md => calls-deployment-guide.md} | 93 ++++++++++--------- .../configure/calls-kubernetes.md | 2 +- .../configure/calls-metrics-monitoring.md | 2 +- .../configure/calls-offloader-setup.md | 2 +- .../configure/calls-overview.rst | 27 ------ .../configure/calls-rtcd-setup.md | 4 +- .../plugins-configuration-settings.rst | 10 +- .../deployment-guide-index.rst | 3 +- .../air-gapped-deployment.rst | 6 +- .../deploy-ddil-operations.rst | 10 +- .../deploy-mission-partner.rst | 10 +- .../deploy-sovereign-collaboration.rst | 10 +- .../server/linux/deploy-rhel.rst | 6 +- .../deployment-guide/server/preparations.rst | 2 - .../collaborate/audio-and-screensharing.rst | 2 +- .../end-user-guide/collaborate/make-calls.rst | 2 +- .../certifications-and-compliance.rst | 2 +- source/product-overview/plans.md | 4 +- .../product-overview-index.rst | 2 +- .../unsupported-legacy-releases.md | 2 +- source/redirects.py | 8 +- 21 files changed, 94 insertions(+), 115 deletions(-) rename source/administration-guide/configure/{calls-deployment.md => calls-deployment-guide.md} (94%) delete mode 100644 source/administration-guide/configure/calls-overview.rst diff --git a/source/administration-guide/configure/calls-deployment.md b/source/administration-guide/configure/calls-deployment-guide.md similarity index 94% rename from source/administration-guide/configure/calls-deployment.md rename to source/administration-guide/configure/calls-deployment-guide.md index 04404d01cda..eb4ab2e40f6 100644 --- a/source/administration-guide/configure/calls-deployment.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -3,16 +3,26 @@ ```{include} ../../_static/badges/all-commercial.md ``` -This guide walks System Administrators step-by-step through deploying Mattermost Calls, from preparation and network readiness through to pilot testing and production rollout. You'll find clear decision points, verification checks, and troubleshooting tips to help you confirm each phase of the deployment is working before you move on. +```{toctree} +:maxdepth: 1 +:hidden: + +RTCD Setup and Configuration +Calls Offloader Setup and Configuration +Calls Metrics and Monitoring +Deploy Calls on Kubernetes +Calls Logging +``` -No prior experience with Mattermost Calls is required — this guide assumes you’re starting fresh and will introduce essential concepts and best practices. +This guide walks System Administrators step-by-step through deploying Mattermost Calls, from preparation and network readiness through to pilot testing and production rollout. You'll find clear decision points, verification checks, and troubleshooting tips to help you confirm each phase of the deployment is working before you move on. +No prior experience with Mattermost Calls is required - this guide assumes you're starting fresh and will introduce essential concepts and best practices. ## Calls Overview Mattermost Calls offers self-hosted audio calling and screen sharing, enabling sovereign real-time collaboration fully contained within your infrastructure. This means no call media or metadata traverses third-party systems. -Calls is uniquely suited for mission-critical operations across defense, intelligence, security and critical infrastructure — where data sovereignty, control, and compliance are non-negotiable. It is designed to function in isolated networks without internet access, supporting deployments that demand full airgap compliance. +Calls is uniquely suited for mission-critical operations across defense, intelligence, security and critical infrastructure - where data sovereignty, control, and compliance are non-negotiable. It is designed to function in isolated networks without internet access, supporting deployments that demand full airgap compliance. Functionality includes: - **1:1 and Group Calling**: Initiate real-time voice communication between two or more participants. @@ -26,30 +36,29 @@ This guide is organized into sequential deployment phases with numbered steps. E **Deployment Phases:** -1. [**Preparation and Networking**](#phase-1-preparation-and-networking) - +1. [**Preparation and Networking**](#phase-1-preparation-and-networking) + Choose your deployment architecture, make networking decisions, provision required servers, and confirm the required network ports and paths are open before deployment. 2. [**Configure Integrated Calls**](#phase-2-configure-integrated-calls) - + Regardless of the deployment architecture you choose, start with the simplest Calls deployment, Integrated mode, to verify connectivity plus basic audio and screen sharing. -3. [**Install and Configure RTCD**](#phase-3-install-and-configure-rtcd) (Optional) - +3. [**Install and Configure RTCD**](#phase-3-install-and-configure-rtcd) (Optional) + RTCD (Real-Time Communication Daemon) is a service built to offload media processing tasks from the Mattermost server. 4. [**Install and Configure Recording**](#phase-4-install-and-configure-recording) (Optional) Calls Offloader is a service required to deliver recording, transcription and live captions. -5. [**Pilot Rollout**](#phase-5-pilot-rollout) - +5. [**Pilot Rollout**](#phase-5-pilot-rollout) + Expand testing to a small group of pilot users to watch for client, network, and environment-specific issues under real usage. -6. [**Production Rollout**](#phase-6-production-rollout) - - Rollout to all users in controlled waves with appropriate communication and monitoring, and be ready to pause or roll back if needed. +6. [**Production Rollout**](#phase-6-production-rollout) + Rollout to all users in controlled waves with appropriate communication and monitoring, and be ready to pause or roll back if needed. ```{note} If you need expert help deploying Calls, contact your Account Manager or [talk to a Mattermost expert](https://mattermost.com/contact-sales/) to learn about professional service offerings. @@ -68,14 +77,13 @@ If you encounter issues and need to open a [support case](https://support.matter Before you start, confirm the following: - [ ] You have a running Mattermost server on v10.0+ -- [ ] Your Mattermost server is configured to use HTTPS. +- [ ] Your Mattermost server is configured to use HTTPS. _Browsers block microphone and screen sharing on insecure HTTP connections. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ - [ ] You have System Admin access to your Mattermost server. - [ ] You can provision additional servers if your chosen architecture requires RTCD or Recording services. -- [ ] You can open inbound and outbound network ports on the servers involved in your deployment. +- [ ] You can open inbound and outbound network ports on the servers involved in your deployment. _If a network or security team manages your firewalls, you'll need to involve them before continuing._ - ### 1.2 Deployment Infrastructure To determine your deployment infrastructure, start by answering the following questions: @@ -186,14 +194,14 @@ STUN is a protocol that helps the media server discover its public IP address au Mattermost provides a default STUN server (`stun.global.calls.mattermost.com`). No call media or signaling traffic is sent through this service; it is used only for STUN lookups. Use this decision tree to determine if you need to allow outbound access from your media server to the Mattermost global STUN service for public IP discovery. ```{note} -Your media server is the Mattermost server in the case of an **Integrated** Calls deployment, or it's the **RTCD server** in the case of an RTCD Calls deployment. +Your media server is the Mattermost server in the case of an **Integrated** Calls deployment, or it's the **RTCD server** in the case of an RTCD Calls deployment. ``` **STUN Decision Tree** 1. **Are all users and your media server in the same private network, VPN, or air-gapped environment, with no outside clients?** - **Yes**: You do not need STUN for public IP discovery. You will use the private address of your media server for configuration in Phase 2. - - **No**: Continue to the next question. + - **No**: Continue to the next question. 2. **Does your media server have a stable public IP address or DNS name that clients on the public internet can reach?** - **Yes**: You do not need STUN for public IP discovery. You will use the stable public address of your media server for configuration in Phase 2. @@ -201,7 +209,6 @@ Your media server is the Mattermost server in the case of an **Integrated** Call If your deployment requires STUN for public IP discovery, note that now so you can include it when opening ports in Step 1.5. - #### 1.3.2 TURN Server TURN is a relay service used only when clients cannot reach the Calls media service directly. If STUN helps clients discover where to connect, TURN acts as a backup route when direct connectivity is not possible. @@ -211,8 +218,7 @@ Provisioning a TURN server is necessary if both of these conditions are true: - Clients connect from networks that cannot reliably use UDP on port `8443` for media traffic (preferred). - Clients connect from networks that cannot reliably use TCP on port `8443` (fallback). -TURN is typically a last resort as it adds latency and infrastructure complexity. Only plan to deploy TURN if your answers indicate that you cannot rely on UDP or TCP for media, and users need an alternative route. - +TURN is typically a last resort as it adds latency and infrastructure complexity. Only plan to deploy TURN if your answers indicate that you cannot rely on UDP or TCP for media, and users need an alternative route. ### 1.4 Provision Infrastructure @@ -238,7 +244,6 @@ If you've determined in Step 1.3.2 that your users cannot reliably reach the med Mattermost recommends installing [coturn](https://github.com/coturn/coturn). - Before moving to Step 1.5, confirm the following: - [ ] Every required server or VM has been created. @@ -247,11 +252,11 @@ Before moving to Step 1.5, confirm the following: ### 1.5 Network Configuration -This section lists the network ports that must be opened for each server involved in your Calls deployment. The server instances must exist before you can configure these rules, which is why provisioning in Step 1.4 comes first. +This section lists the network ports that must be opened for each server involved in your Calls deployment. The server instances must exist before you can configure these rules, which is why provisioning in Step 1.4 comes first. **How you open ports depends on your environment:** -- **Cloud deployments (AWS, Azure, GCP):** Configure inbound and outbound rules in your cloud console security group or network ACL for each instance. +- **Cloud deployments (AWS, Azure, GCP):** Configure inbound and outbound rules in your cloud console security group or network ACL for each instance. - **On-premises or self-managed VMs:** Use `firewalld` (RHEL, Rocky Linux, AlmaLinux) or `ufw` (Ubuntu/Debian) commands directly on each server. - **Centrally managed firewall:** If a network team manages your firewall, share the tables below with them and request the rules before proceeding. @@ -278,7 +283,7 @@ If you deployed an RTCD server in Step 1.4, open these ports: | 3478 | UDP | Outbound | RTCD server | `stun.global.calls.mattermost.com` | (Optional - Step 1.3.1) Public IP discovery using STUN. | ```{important} -If you use NGINX as a reverse proxy in front of Mattermost, note that NGINX cannot forward UDP traffic. Port 8443 must be opened directly on the server running the media service — not on NGINX. Port 443 is the only port NGINX handles for Calls. +If you use NGINX as a reverse proxy in front of Mattermost, note that NGINX cannot forward UDP traffic. Port 8443 must be opened directly on the server running the media service - not on NGINX. Port 443 is the only port NGINX handles for Calls. ``` ##### Recording server ports @@ -300,7 +305,7 @@ If you deployed a TURN server in Step 1.4, open these ports. If you are using `c |---|---|---|---|---|---| | 3478 | UDP / TCP | Inbound | Mattermost clients | TURN server | TURN relay. | | 5349 | UDP / TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TLS on TURN. | -| 49152–65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | +| 49152-65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | ### 1.6 Networking Checks @@ -317,7 +322,7 @@ When you execute each check below, `nmap` returns `open`, `closed`, or `filtered - `open`: Port is reachable and the service is running. Expected if you've already installed the RTCD or Recording services in Phases 3-4. - `closed`: Port is reachable but the service is not running. Expected if you just provisioned the infrastructure in Step 1.4. -**Fail**: +**Fail**: - `filtered`: Firewall is blocking the port. Revisit your networking configuration in Step 1.5 before continuing. ```{note} @@ -379,7 +384,7 @@ Run from a client machine on the same network as your users: Before proceeding to Phase 2, confirm all of the following: -- [ ] You have chosen your deployment architecture and provisioned the required servers. +- [ ] You have chosen your deployment architecture and provisioned the required servers. - [ ] You have confirmed your Mattermost license supports the architecture and features you plan to deploy. - [ ] Every required firewall rule and network path for your chosen architecture has been opened. - [ ] Every relevant network check in Step 1.6 returned the expected result (`open` or `closed`, but not `filtered`). @@ -451,7 +456,7 @@ Click **Save** on the Calls settings page. It is also recommended that you resta Now smoke test your Calls deployment with your test accounts: -- Create a test channel such as `calls-test`. +- Create a test channel such as `calls-test`. - Open the **Channel menu**, then select **Enable calls**. - Invite your test users into the channel so you can validate a real call. @@ -482,7 +487,6 @@ Now that you've verified a basic Integrated Calls deployment, you can add RTCD t - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server - ### 3.2 Install RTCD Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. The guide covers: @@ -496,7 +500,7 @@ Before proceeding, run these checks from the Mattermost server to confirm RTCD i | Check | Command | Pass criteria | |---|---|---| -| 3.2.1 | `nmap -p 8045 YOUR_RTCD_SERVER` | `open` — RTCD is running and accepting connections. | +| 3.2.1 | `nmap -p 8045 YOUR_RTCD_SERVER` | `open` - RTCD is running and accepting connections. | | 3.2.2 | `curl http://YOUR_RTCD_SERVER:8045/version` | Returns a JSON version string | ### 3.3 Connect Mattermost to RTCD @@ -511,12 +515,11 @@ Once RTCD is installed, configured, and reachable, update the Calls plugin to us ``` Replace `clientID` and `authKey` with the values generated during RTCD setup. The first connection to RTCD self-registers the client and stores the authentication key in the database. - + Alternatively, set credentials via environment variables on the Mattermost server: `MM_CALLS_RTCD_CLIENT_ID` and `MM_CALLS_RTCD_AUTH_KEY`. 3. Click **Save** and restart the Calls plugin so the change takes effect. - ### 3.4 Configure Calls Monitoring Before your pilot, set up Calls monitoring so you can see sessions, errors, CPU, and memory while real users are testing. @@ -529,7 +532,6 @@ Calls monitoring uses Prometheus (a tool that collects metrics from your servers See [Calls Metrics and Monitoring](calls-metrics-monitoring.md) for full configuration details. - ### 3.5 Verification Checks Now smoke test your RTCD deployment with your test accounts: @@ -562,7 +564,7 @@ Now we will install and configure the `calls-offloader` job service that handles ### 4.1 Prerequisites - [ ] `calls-offloader` server is provisioned (1.4) and relevant networking checks passed (1.6.6-1.6.9) -- [ ] If you are using RTCD: Phase 3 verification checks passed (3.5.1-3.5.4). +- [ ] If you are using RTCD: Phase 3 verification checks passed (3.5.1-3.5.4). - [ ] If you are using Integrated mode: Phase 2 verification checks passed (2.3.1-2.3.4). - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server @@ -582,7 +584,7 @@ Before proceeding, run these checks from the Mattermost server to confirm `calls | Check | Command | Pass criteria | |---|---|---| -| 4.2.1 | `nmap -p 4545 YOUR_OFFLOADER_SERVER` | `open` — calls-offloader is running and accepting connections. | +| 4.2.1 | `nmap -p 4545 YOUR_OFFLOADER_SERVER` | `open` - calls-offloader is running and accepting connections. | | 4.2.2 | `curl http://YOUR_OFFLOADER_SERVER:4545/version` | Returns a JSON version string | ### 4.3 Connect calls-offloader to Mattermost @@ -759,7 +761,7 @@ Also prepare a short announcement to share in an all-hands channel or similar hi ```markdown ## Mattermost Calls rollout -We're enabling Mattermost Calls across this server. Starting today, you can start audio calls in select channels directly within Mattermost — no need to switch to a separate tool. +We're enabling Mattermost Calls across this server. Starting today, you can start audio calls in select channels directly within Mattermost - no need to switch to a separate tool. We're rolling out gradually, starting with a select set of channels before expanding to everyone. @@ -794,8 +796,8 @@ We recommend enabling Calls in stages instead of enabling it everywhere at once. | Stage | Channels / departments | Suggested timeline | Rollback approach | |---|---|---|---| -| Stage 1 | IT and Admin channels | Days 1–3 | Per-channel rollback | -| Stage 2 | Engineering or power user channels | Days 4–7 | Per-channel rollback | +| Stage 1 | IT and Admin channels | Days 1-3 | Per-channel rollback | +| Stage 2 | Engineering or power user channels | Days 4-7 | Per-channel rollback | | Stage 3 | Full organization | Day 8+ | Test mode (if issues are isolated) or full rollback | If a rollout stage introduces problems, pause the rollout, use the rollback option listed for that stage, fix the issue, and repeat the same stage before moving to the next one. @@ -822,7 +824,6 @@ Monitor `~calls-support` for recurring complaints. Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issues and fixes. - --- ## Appendix A: Troubleshooting @@ -832,7 +833,7 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu | Cause | Fix | |---|---| | The Calls plugin is disabled | Go to **System Console > Plugins > Plugin Management** and enable Calls | -| The deployment is in test mode | Go to **System Console > Plugins > Calls > Settings** and check the deployment state — Calls must be enabled in specific channels by System Admins in test mode | +| The deployment is in test mode | Go to **System Console > Plugins > Calls > Settings** and check the deployment state - Calls must be enabled in specific channels by System Admins in test mode | | Calls is not enabled for the channel | When test mode is enabled, open the **channel menu** and select **Enable calls** | | The user is on an older client | Ask the user to update to the current Mattermost desktop or mobile app | @@ -841,15 +842,15 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu | Cause | Fix | |---|---| | UDP `8443` is blocked | Repeat the UDP connectivity check from Phase 1 (check 1.6.1 or 1.6.3) and confirm the firewall rule is applied | -| TCP `8443` is also blocked and fallback is failing | Repeat the TCP check (1.6.2 or 1.6.4) — clients need at least one path to the media service | -| The wrong media address is being advertised | Re-check `ICE Host Override` in Phase 2 (Integrated) or `ice_host_override` in `rtcd.toml` (RTCD) — the address must be reachable by clients | +| TCP `8443` is also blocked and fallback is failing | Repeat the TCP check (1.6.2 or 1.6.4) - clients need at least one path to the media service | +| The wrong media address is being advertised | Re-check `ICE Host Override` in Phase 2 (Integrated) or `ice_host_override` in `rtcd.toml` (RTCD) - the address must be reachable by clients | | Browser or desktop microphone permissions were denied | Ask the user to check browser or OS microphone permissions and reload the app | ### A.3 Remote users cannot join from outside the network | Cause | Fix | |---|---| -| External firewall rules are blocking UDP `8443` | Confirm external reachability to UDP `8443` on the media server — cloud security groups and on-prem firewalls both need to allow inbound traffic from the internet | +| External firewall rules are blocking UDP `8443` | Confirm external reachability to UDP `8443` on the media server - cloud security groups and on-prem firewalls both need to allow inbound traffic from the internet | | The advertised media address is a private IP | Set `ICE Host Override` (Integrated) or `ice_host_override` in `rtcd.toml` to the correct public IP or use STUN (1.3.1) | | Client networks are too restrictive for direct UDP or TCP | Deploy a TURN server and add it to **ICE server configurations** | @@ -857,6 +858,6 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu | Cause | Fix | |---|---| -| calls-offloader is not running | Run `nmap -p 4545 YOUR_OFFLOADER_SERVER` from the Mattermost server — if the result is `closed`, the service is not running; check the systemd service logs | +| calls-offloader is not running | Run `nmap -p 4545 YOUR_OFFLOADER_SERVER` from the Mattermost server - if the result is `closed`, the service is not running; check the systemd service logs | | Mattermost cannot reach the Job Service URL | Run `curl http://YOUR_OFFLOADER_SERVER:4545/version` from the Mattermost server and confirm it returns a version string | -| The offloader service account cannot use Docker | Confirm the service account is in the `docker` group on the calls-offloader server | \ No newline at end of file +| The offloader service account cannot use Docker | Confirm the service account is in the `docker` group on the calls-offloader server | diff --git a/source/administration-guide/configure/calls-kubernetes.md b/source/administration-guide/configure/calls-kubernetes.md index e07c1667b48..aae42513217 100644 --- a/source/administration-guide/configure/calls-kubernetes.md +++ b/source/administration-guide/configure/calls-kubernetes.md @@ -103,7 +103,7 @@ For detailed logging guidance, see the [Calls Logging](calls-logging.md) guide. ## Other Calls Documentation -- [Calls Overview](calls-deployment.md): Overview of deployment options and architecture +- [Calls Deployment Guide](calls-deployment-guide.md): Overview of deployment options and architecture - [RTCD Setup and Configuration](calls-rtcd-setup.md): Comprehensive guide for setting up the dedicated RTCD service - [Calls Offloader Setup and Configuration](calls-offloader-setup.md): Setup guide for call recording and transcription - [Calls Metrics and Monitoring](calls-metrics-monitoring.md): Guide to monitoring Calls performance using metrics and observability diff --git a/source/administration-guide/configure/calls-metrics-monitoring.md b/source/administration-guide/configure/calls-metrics-monitoring.md index 8b608feecc0..1d3b212a366 100644 --- a/source/administration-guide/configure/calls-metrics-monitoring.md +++ b/source/administration-guide/configure/calls-metrics-monitoring.md @@ -408,7 +408,7 @@ Each target should show status "UP" in green. If a target shows "DOWN" or errors ## Other Calls Documentation -- [Calls Overview](calls-deployment.md): Overview of deployment options and architecture +- [Calls Deployment Guide](calls-deployment-guide.md): Overview of deployment options and architecture - [RTCD Setup and Configuration](calls-rtcd-setup.md): Comprehensive guide for setting up the dedicated RTCD service - [Calls Offloader Setup and Configuration](calls-offloader-setup.md): Setup guide for call recording and transcription - [Calls Deployment on Kubernetes](calls-kubernetes.md): Detailed guide for deploying Calls in Kubernetes environments diff --git a/source/administration-guide/configure/calls-offloader-setup.md b/source/administration-guide/configure/calls-offloader-setup.md index 6a649d61696..78a4484e3f4 100644 --- a/source/administration-guide/configure/calls-offloader-setup.md +++ b/source/administration-guide/configure/calls-offloader-setup.md @@ -493,7 +493,7 @@ The `--image-registry` flag sets the registry prefix used when the offloader pul ## Other Calls Documentation -- [Calls Overview](calls-deployment.md): Overview of deployment options and architecture +- [Calls Deployment Guide](calls-deployment-guide.md): Overview of deployment options and architecture - [RTCD Setup and Configuration](calls-rtcd-setup.md): Comprehensive guide for setting up the dedicated RTCD service - [Calls Metrics and Monitoring](calls-metrics-monitoring.md): Guide to monitoring Calls performance using metrics and observability - [Calls Deployment on Kubernetes](calls-kubernetes.md): Detailed guide for deploying Calls in Kubernetes environments diff --git a/source/administration-guide/configure/calls-overview.rst b/source/administration-guide/configure/calls-overview.rst deleted file mode 100644 index bae2c736a8a..00000000000 --- a/source/administration-guide/configure/calls-overview.rst +++ /dev/null @@ -1,27 +0,0 @@ -Mattermost Calls Overview -========================= - -.. include:: ../../_static/badges/all-commercial.rst - :start-after: :nosearch: - -Mattermost Calls provides integrated audio calling and screen sharing capabilities within Mattermost channels. This section covers deployment, configuration, and management of Mattermost Calls. - -.. toctree:: - :maxdepth: 1 - :hidden: - - Deploy Mattermost Calls - RTCD Setup and Configuration - Calls Offloader Setup and Configuration - Calls Metrics and Monitoring - Deploy Calls on Kubernetes - Calls Logging - -**Calls Documentation:** - -* :doc:`Calls Deployment Overview ` - Main deployment overview and architecture guide for Mattermost Calls -* :doc:`RTCD Setup and Configuration ` - Real-time communication daemon setup for enterprise deployments -* :doc:`Calls Offloader Setup and Configuration ` - Configure call recording and transcription services -* :doc:`Calls Metrics and Monitoring ` - Performance monitoring with Prometheus and Grafana -* :doc:`Calls Deployment on Kubernetes ` - Kubernetes deployment guide for scalable Calls infrastructure -* :doc:`Calls Logging ` - Comprehensive troubleshooting guide for common issues diff --git a/source/administration-guide/configure/calls-rtcd-setup.md b/source/administration-guide/configure/calls-rtcd-setup.md index 1233975ae6f..edda32edbac 100644 --- a/source/administration-guide/configure/calls-rtcd-setup.md +++ b/source/administration-guide/configure/calls-rtcd-setup.md @@ -10,7 +10,7 @@ This guide provides detailed instructions for setting up, configuring, and valid Before deploying RTCD, ensure you have: - A Mattermost Enterprise license -- A server or VM with sufficient CPU and network capacity (see the [Performance](calls-deployment.html#performance) section for sizing guidance) +- A server or VM with sufficient CPU and network capacity (see the [Performance baselines](calls-metrics-monitoring.md#performance-baselines) section for sizing guidance) ## Network Requirements @@ -373,7 +373,7 @@ Once RTCD is properly set up and validated, configure Mattermost to use it: ## Other Calls Documentation -- [Calls Overview](calls-deployment.md): Overview of deployment options and architecture +- [Calls Deployment Guide](calls-deployment-guide.md): Overview of deployment options and architecture - [Calls Offloader Setup and Configuration](calls-offloader-setup.md): Setup guide for call recording and transcription - [Calls Metrics and Monitoring](calls-metrics-monitoring.md): Guide to monitoring Calls performance using metrics and observability - [Calls Deployment on Kubernetes](calls-kubernetes.md): Detailed guide for deploying Calls in Kubernetes environments diff --git a/source/administration-guide/configure/plugins-configuration-settings.rst b/source/administration-guide/configure/plugins-configuration-settings.rst index 106aa58c617..0d53d167743 100644 --- a/source/administration-guide/configure/plugins-configuration-settings.rst +++ b/source/administration-guide/configure/plugins-configuration-settings.rst @@ -482,7 +482,7 @@ Max call participants .. note:: - This setting is applicable only to self-hosted deployments. - The environment variable ``MM_CALLS_MAX_PARTICIPANTS`` is deprecated in favor of ``MM_CALLS_MAX_CALL_PARTICIPANTS``. - - This setting is optional, but the recommended maximum number of participants is **50**. Call participant limits greatly depends on instance resources. See the :doc:`Calls self-hosted deployment ` documentation for details. + - This setting is optional, but the recommended maximum number of participants is **50**. Call participant limits greatly depends on instance resources. See the :doc:`Calls deployment guide ` documentation for details. .. config:setting:: ice-servers-configurations @@ -510,7 +510,7 @@ ICE servers configurations - The configurations above, containing STUN and TURN servers, are sent to the clients and used to generate local candidates. - If hosting calls through the plugin (i.e. not using the |rtcd_service|) any configured STUN server may also be used to find the instance's public IP when none is provided through the |ice_host_override_link| option. -.. |rtcd_service| replace:: :doc:`RTCD service ` +.. |rtcd_service| replace:: :doc:`RTCD service ` **Example** @@ -758,7 +758,7 @@ Call recording quality .. note:: - This setting is applicable only to self-hosted deployments. - - The quality setting will affect the performance of the job service and the file size of recordings. Refer to the :ref:`deployment section ` for more information. + - The quality setting will affect the performance of the job service and the file size of recordings. Refer to the :doc:`Calls deployment guide ` documentation for more information. .. config:setting:: enable-pluginscalltranscriptions :displayname: Enable call transcriptions (Plugins - Calls) @@ -810,7 +810,7 @@ Transcriber model size .. note:: - This setting is applicable only to self-hosted deployments. - - This setting is available starting in plugin version 0.22. The model size setting will affect the performance of the job service. Refer to the :ref:`configure call recordings, transcriptions, and live captions ` documentation for more information. + - This setting is available starting in plugin version 0.22. The model size setting will affect the performance of the job service. Refer to the :doc:`Calls deployment guide ` documentation for more information. .. config:setting:: call-transcriber-threads :displayname: Call transcriber threads (Plugins - Calls) @@ -834,7 +834,7 @@ Call transcriber threads .. note:: - This setting is applicable only to self-hosted deployments. - - The call transcriber threads setting will affect the performance of the job service. Refer to the :ref:`configure call recordings, transcriptions, and live captions ` documentation for more information. This setting is available starting in plugin version 0.26.2. + - The call transcriber threads setting will affect the performance of the job service. Refer to the :doc:`Calls deployment guide ` documentation for more information. This setting is available starting in plugin version 0.26.2. .. config:setting:: enable-pluginslivecaptions :displayname: (Experimental) Enable live captions (Plugins - Calls) diff --git a/source/deployment-guide/deployment-guide-index.rst b/source/deployment-guide/deployment-guide-index.rst index 17c63200316..d3e6adf1875 100644 --- a/source/deployment-guide/deployment-guide-index.rst +++ b/source/deployment-guide/deployment-guide-index.rst @@ -13,14 +13,15 @@ Whether you're deploying the server application, desktop application, or mobile Quick Start Evaluation Reference Architecture Server Deployment + Calls Deployment Desktop App Deployment Mobile App Deployment Deployment Troubleshooting - * :doc:`Quick Start Evaluation ` - A quick start guide to help you get started with Mattermost. * :doc:`Reference Architecture ` - Reference architectures for scaling Mattermost and specialized deployment scenarios. * :doc:`Server deployment ` - Pre-deployment checks, security considerations, hardware recommendations, software prerequisites, and step-by-step guidance to deploying Mattermost server. +* :doc:`Calls Deployment Guide ` - Deploy and operate Mattermost Calls infrastructure, including RTCD, recording services, and supporting network configuration. * :doc:`Desktop deployment ` - Installation procedures for Mattermost's desktop applications across Windows, macOS, and Linux, and large-scale, enterprise-wide deployments. * :doc:`Mobile deployment ` - How to set up push notifications using Mattermost's notification service and troubleshooting tips. * :doc:`Deployment troubleshooting ` - Best practices for diagnosing and resolving common deployment issues. diff --git a/source/deployment-guide/reference-architecture/deployment-scenarios/air-gapped-deployment.rst b/source/deployment-guide/reference-architecture/deployment-scenarios/air-gapped-deployment.rst index 250053a050d..6eacab55b7e 100644 --- a/source/deployment-guide/reference-architecture/deployment-scenarios/air-gapped-deployment.rst +++ b/source/deployment-guide/reference-architecture/deployment-scenarios/air-gapped-deployment.rst @@ -60,7 +60,7 @@ On an internet connected machine, you must gather all required packages, contain **(Optional) Supporting Services** Consider downloading these additional resources if you plan to enable these optional components: - - :doc:`Mattermost Calls `: `mattermost-calls-offloader `__ (required for recording, transcription and live captions) and `mattermost-rtcd `__ (required for performance and scalability). + - :doc:`Mattermost Calls `: `mattermost-calls-offloader `__ (required for recording, transcription and live captions) and `mattermost-rtcd `__ (required for performance and scalability). - `Elasticsearch `__ can be `deployed `__ for enhanced search performance at scale. - `Prometheus `_ and `Grafana `__ for monitoring and observability @@ -79,7 +79,7 @@ On an internet connected machine, you must gather all required packages, contain **(Optional) Supporting Services** Consider downloading these additional resources if you plan to enable these optional components: - - :doc:`Mattermost Calls ` helm charts: `mattermost-calls-offloader `__ and `values `__ (required for recording, transcription and live captions), `mattermost-rtcd `__ and `values `__ (required for performance and scalability). + - :doc:`Mattermost Calls ` helm charts: `mattermost-calls-offloader `__ and `values `__ (required for recording, transcription and live captions), `mattermost-rtcd `__ and `values `__ (required for performance and scalability). - `Elasticsearch `__ can be `deployed in air-gapped k8 environments `__ for enhanced search performance at scale. - `Prometheus `__ and `Grafana `__ operators for monitoring and observability @@ -97,7 +97,7 @@ On an internet connected machine, you must gather all required packages, contain **(Optional) Supporting Services** Consider downloading these additional resources if you plan to enable these optional components: - - :doc:`Mattermost Calls ` images: `calls-offloader `__ (required for recording, transcription and live captions) and `rtcd `__ (required for performance and scalability). + - :doc:`Mattermost Calls ` images: `calls-offloader `__ (required for recording, transcription and live captions) and `rtcd `__ (required for performance and scalability). - `Elasticsearch `__ image for enhanced search performance at scale. - `Prometheus `__ and `Grafana `__ images for monitoring and observability. diff --git a/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-ddil-operations.rst b/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-ddil-operations.rst index 5c9b4268071..edc32325a75 100644 --- a/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-ddil-operations.rst +++ b/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-ddil-operations.rst @@ -61,7 +61,7 @@ This hybrid deployment architecture provides optimal collaboration in both conne - :doc:`AI Agents `: AI Agents run against a local LLM hosted within your tactical network. - - :doc:`Audio & Screenshare `: Calls offers native real-time self-hosted audio calls and screen sharing within your tactical network. + - :doc:`Audio & Screenshare `: Calls offers native real-time self-hosted audio calls and screen sharing within your tactical network. - **Proxy Server:** The :doc:`proxy server ` handles HTTP(S) routing within the cluster, directing traffic between the server and clients accessing Mattermost services. NGINX is recommended for load balancing with support for WebSocket connections, health check endpoints, and sticky sessions. The proxy layer provides SSL termination and distributes client traffic across application servers. @@ -69,7 +69,7 @@ This hybrid deployment architecture provides optimal collaboration in both conne - **Object Storage:** File uploads, images, and attachments are stored outside the application node on an :doc:`S3-compatible store ` or network/local storage, hosted locally within your tactical network. - - **Recording Instance:** ``calls-offloader`` :ref:`job service ` to offload heavy processing tasks from Mattermost Calls to self-hosted infrastructure within your tactical network, such as recordings, transcriptions, and live captioning. *(Optional)* + - **Recording Instance:** ``calls-offloader`` job service, configured using the :doc:`Calls Offloader Setup and Configuration ` guide, to offload heavy processing tasks from Mattermost Calls to self-hosted infrastructure within your tactical network, such as recordings, transcriptions, and live captioning. *(Optional)* - **Self-hosted integrations:** :doc:`Custom apps, plugins, and webhooks ` can be deployed within your tactical network. *(Optional - not shown)* @@ -101,10 +101,10 @@ Deploy an :doc:`OpenAI compatible LLM ` in a self-hosted configuration, including: +Effective collaboration at the tactical edge requires all voice and screen sharing capabilities remain operational without reliance on the internet or third-party services. Deploy :doc:`Mattermost Calls ` in a self-hosted configuration, including: -- The :ref:`rtcd service ` for scalable, low-latency media routing hosted on-premises. Run multiple ``rtcd`` nodes for redundancy. -- The :ref:`calls offloader ` service offloads heavy processing tasks like recording, transcription and live captioning to a locally hosted compliance-approved job server. +- The ``rtcd`` service, configured using the :doc:`RTCD Setup and Configuration ` guide, provides scalable, low-latency media routing hosted on-premises. Run multiple ``rtcd`` nodes for redundancy. +- The ``calls-offloader`` service, configured using the :doc:`Calls Offloader Setup and Configuration ` guide, offloads heavy processing tasks like recording, transcription and live captioning to a locally hosted compliance-approved job server. High availability and fault tolerance ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-mission-partner.rst b/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-mission-partner.rst index f177eef8d57..21bacdac5d7 100644 --- a/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-mission-partner.rst +++ b/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-mission-partner.rst @@ -74,7 +74,7 @@ The deployment architecture includes the following components: - :doc:`Workflow Automation `: Playbooks provide structure, monitoring and automation for repeatable processes built-in to your sovereign Mattermost deployment. - :doc:`Project Tracking `: Boards enables project management capabilities built-in to your local Mattermost deployment. Boards enables project management capabilities built-in to your sovereign Mattermost deployment. - :doc:`AI Agents `: AI Agents run against Azure OpenAI endpoints or a self-hosted LLM that is OpenAI-compatible. - - :doc:`Audio & Screenshare `: Calls offers native real-time self-hosted audio calls and screen sharing within your own network. + - :doc:`Audio & Screenshare `: Calls offers native real-time self-hosted audio calls and screen sharing within your own network. - **Proxy Server:** The :doc:`proxy server ` handles HTTP(S) routing within the cluster, directing traffic between the server and clients accessing Mattermost services, including requests from users in :doc:`connected organizations `. NGINX is recommended for load balancing with support for WebSocket connections, health check endpoints, and sticky sessions. The proxy layer provides SSL termination and distributes client traffic across application servers. @@ -82,7 +82,7 @@ The deployment architecture includes the following components: - **Object Storage:** File uploads, images, and attachments are stored outside the application node on an :doc:`S3-compatible store ` or an NFS (Network File System) server. `Azure Blob Storage `_ can be used, but needs an S3-compatible proxy for Mattermost to interface with. - - **Recording Instance:** ``calls-offloader`` :ref:`job service ` to offload heavy processing tasks from Mattermost Calls, such as recordings, transcriptions, and live captioning, to local infrastructure or private cloud. *(Optional)* + - **Recording Instance:** ``calls-offloader`` job service, configured using the :doc:`Calls Offloader Setup and Configuration ` guide, to offload heavy processing tasks from Mattermost Calls, such as recordings, transcriptions, and live captioning, to local infrastructure or private cloud. *(Optional)* - **Integration framework:** :doc:`Custom apps, plugins, and webhooks ` can be deployed for real-time data integrations and alerting. *(Optional - not shown)* @@ -159,10 +159,10 @@ Deploy Mattermost in a :doc:`cluster-based architecture ` in a self-hosted configuration to ensure voice and screen sharing capabilities remain operational without reliance on the internet, and that media traffic does not traverse non-compliant third-party services. +Deploy :doc:`Mattermost Calls ` in a self-hosted configuration to ensure voice and screen sharing capabilities remain operational without reliance on the internet, and that media traffic does not traverse non-compliant third-party services. -- The :ref:`rtcd service ` for scalable, low-latency media routing hosted on-premises. Run multiple ``rtcd`` nodes for redundancy. -- The :ref:`calls offloader ` service offloads heavy processing tasks like recording, transcription and live captioning to a compliance-approved job server. +- The ``rtcd`` service, configured using the :doc:`RTCD Setup and Configuration ` guide, provides scalable, low-latency media routing hosted on-premises. Run multiple ``rtcd`` nodes for redundancy. +- The ``calls-offloader`` service, configured using the :doc:`Calls Offloader Setup and Configuration ` guide, offloads heavy processing tasks like recording, transcription and live captioning to a compliance-approved job server. Compliance and retention ~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-sovereign-collaboration.rst b/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-sovereign-collaboration.rst index bd94aa5efaf..dae1563969e 100644 --- a/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-sovereign-collaboration.rst +++ b/source/deployment-guide/reference-architecture/deployment-scenarios/deploy-sovereign-collaboration.rst @@ -49,7 +49,7 @@ The deployment architecture includes the following components: - :doc:`AI Agents `: AI Agents run against Azure OpenAI endpoints or a self-hosted LLM that is OpenAI-compatible. - - :doc:`Audio & Screenshare `: Calls offers native real-time self-hosted audio calls and screen sharing within your own network. + - :doc:`Audio & Screenshare `: Calls offers native real-time self-hosted audio calls and screen sharing within your own network. - **Proxy Server:** The :doc:`proxy server ` handles HTTP(S) routing within the cluster, directing traffic between the server and clients accessing Mattermost services. NGINX is recommended for load balancing with support for WebSocket connections, health check endpoints, and sticky sessions. The proxy layer provides SSL termination and distributes client traffic across application servers. @@ -57,7 +57,7 @@ The deployment architecture includes the following components: - **Object Storage:** File uploads, images, and attachments are stored outside the application node on an :doc:`S3-compatible store ` or an NFS (Network File System) server. `Azure Blob Storage `_ can be used, but needs an S3-compatible proxy for Mattermost to interface with. - - **Recording Instance:** ``calls-offloader`` :ref:`job service ` to offload heavy processing tasks from Mattermost Calls, such as recordings, transcriptions, and live captioning, to enterprise-controlled infrastructure or private cloud. *(Optional)* + - **Recording Instance:** ``calls-offloader`` job service, configured using the :doc:`Calls Offloader Setup and Configuration ` guide, to offload heavy processing tasks from Mattermost Calls, such as recordings, transcriptions, and live captioning, to enterprise-controlled infrastructure or private cloud. *(Optional)* - **Self-hosted integrations:** :doc:`Custom apps, plugins, and webhooks ` can be deployed within the enterprise boundary. *(Optional - not shown)* @@ -86,10 +86,10 @@ Deploy Mattermost in a :doc:`cluster-based architecture ` in a self-hosted configuration to ensure that Microsoft Teams users and Mattermost users collaborate without media ever leaving the sovereign network. +Data sovereignty compliance may require that all voice and screen sharing traffic remain within enterprise-controlled infrastructure and does not traverse third-party services. Deploy :doc:`Mattermost Calls ` in a self-hosted configuration to ensure that Microsoft Teams users and Mattermost users collaborate without media ever leaving the sovereign network. -- The :ref:`rtcd service ` for scalable, low-latency media routing hosted on-premises. Run multiple ``rtcd`` nodes for redundancy. -- The :ref:`calls offloader ` service offloads heavy processing tasks like recording, transcription and live captioning to a compliance-approved job server. +- The ``rtcd`` service, configured using the :doc:`RTCD Setup and Configuration ` guide, provides scalable, low-latency media routing hosted on-premises. Run multiple ``rtcd`` nodes for redundancy. +- The ``calls-offloader`` service, configured using the :doc:`Calls Offloader Setup and Configuration ` guide, offloads heavy processing tasks like recording, transcription and live captioning to a compliance-approved job server. Compliance and retention ~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/deployment-guide/server/linux/deploy-rhel.rst b/source/deployment-guide/server/linux/deploy-rhel.rst index 12390b9856d..d8336c8ae2e 100644 --- a/source/deployment-guide/server/linux/deploy-rhel.rst +++ b/source/deployment-guide/server/linux/deploy-rhel.rst @@ -310,7 +310,7 @@ When deploying Mattermost on hardened RHEL systems, additional security configur Configure firewalld for Mattermost Calls (optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - If you're deploying the Mattermost Calls plugin or the standalone rtcd service, additional ports need to be opened. See the :doc:`Calls deployment ` documentation for details on Calls architecture and deployment modes. + If you're deploying the Mattermost Calls plugin or the standalone rtcd service, additional ports need to be opened. See the :doc:`Calls deployment guide ` documentation for details on Calls architecture and deployment modes. For integrated Calls plugin (running alongside Mattermost): @@ -434,7 +434,7 @@ When deploying Mattermost on hardened RHEL systems, additional security configur Configure fapolicyd for rtcd service (optional) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - If you're deploying the standalone rtcd service for Mattermost Calls, you'll need separate fapolicyd rules for the rtcd binary. The rtcd service is deployed separately from Mattermost and runs its own binary. See the :doc:`Calls deployment ` documentation for details on when and why to use rtcd. + If you're deploying the standalone rtcd service for Mattermost Calls, you'll need separate fapolicyd rules for the rtcd binary. The rtcd service is deployed separately from Mattermost and runs its own binary. See the :doc:`Calls deployment guide ` documentation for details on when and why to use rtcd. 1. Create a rule file for rtcd. The naming convention is critical - it must come before the deny rule (typically 80 works): @@ -487,7 +487,7 @@ When deploying Mattermost on hardened RHEL systems, additional security configur - The paths shown above assume rtcd is installed in ``/opt/rtcd/``. Adjust these paths based on your actual rtcd installation directory. - If you continue to see denials after following these steps, run ``sudo fapolicyd --debug`` to identify the specific paths being denied and adjust your rules accordingly. - - See the :doc:`rtcd deployment documentation ` for installation and configuration details. + - See the :doc:`RTCD setup and configuration ` documentation for installation and configuration details. Additional resources ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/source/deployment-guide/server/preparations.rst b/source/deployment-guide/server/preparations.rst index 50b30ba4c3f..ff9135439e4 100644 --- a/source/deployment-guide/server/preparations.rst +++ b/source/deployment-guide/server/preparations.rst @@ -13,7 +13,6 @@ This guide outlines the key preparation steps required before installing the Mat Review software and hardware requirements Set up an NGINX proxy - Configure Mattermost Calls Set up TLS Use an image proxy @@ -21,7 +20,6 @@ Before installing Mattermost Server, review the following preparation requiremen * :doc:`Review software and hardware requirements ` - Ensure your system meets the minimum requirements for Mattermost deployment. * :doc:`Set up an NGINX proxy ` - Configure NGINX as a reverse proxy for enhanced security and performance. -* :doc:`Configure Mattermost Calls ` - Set up real-time communication capabilities for voice and video calls. * :doc:`Set up TLS ` - Enable secure communication with SSL/TLS encryption. * :doc:`Use an image proxy ` - Configure image proxy for enhanced privacy and security. diff --git a/source/end-user-guide/collaborate/audio-and-screensharing.rst b/source/end-user-guide/collaborate/audio-and-screensharing.rst index 8263d8f3a0a..163e02f0efd 100644 --- a/source/end-user-guide/collaborate/audio-and-screensharing.rst +++ b/source/end-user-guide/collaborate/audio-and-screensharing.rst @@ -4,7 +4,7 @@ Audio and Screensharing .. include:: ../../_static/badges/all-commercial.rst :start-after: :nosearch: -Mattermost Calls offers native real-time chat, self-hosted audio calls, and screen sharing within your own network, enabling secure, effective team communication and collaboration. Learn more about :doc:`deploying Mattermost Calls ` in a self-hosted environment and :doc:`making calls ` with Mattermost. +Mattermost Calls offers native real-time chat, self-hosted audio calls, and screen sharing within your own network, enabling secure, effective team communication and collaboration. Learn more about :doc:`deploying Mattermost Calls ` in a self-hosted environment and :doc:`making calls ` with Mattermost. With calls and screen sharing, Mattermost ensures that communications remain uninterrupted, even during maintenance or outages, and scales effortlessly to meet your team’s growing needs, safeguarding the integrity of mission-critical operations. diff --git a/source/end-user-guide/collaborate/make-calls.rst b/source/end-user-guide/collaborate/make-calls.rst index 6d483399642..8853a61cd68 100644 --- a/source/end-user-guide/collaborate/make-calls.rst +++ b/source/end-user-guide/collaborate/make-calls.rst @@ -10,7 +10,7 @@ Using a web browser, the desktop app, or the mobile app, you can `join a call <# - All Mattermost customers can start, join, and participate in 1:1 audio calls with optional screen sharing. - For group calls up to 50 concurrent users, Mattermost Enterprise, Professional, or Mattermost Cloud is required. - - Enterprise customers can also `record calls <#record-a-call>`__, enable :ref:`live text captions ` during calls, and `transcribe recorded calls <#transcribe-recorded-calls>`__. We recommend that Enterprise self-hosted customers looking for group calls beyond 50 concurrent users consider using the :doc:`dedicated RTCD service `. + - Enterprise customers can also `record calls <#record-a-call>`__, enable :ref:`live text captions ` during calls, and `transcribe recorded calls <#transcribe-recorded-calls>`__. We recommend that Enterprise self-hosted customers looking for group calls beyond 50 concurrent users consider using the :doc:`dedicated RTCD service `. - Mattermost Cloud users can start calling right out of the box. For Mattermost self-hosted deployments, System admins need to enable and configure the plugin :ref:`using the System Console `. .. include:: ../../_static/badges/academy-calls.rst diff --git a/source/product-overview/certifications-and-compliance.rst b/source/product-overview/certifications-and-compliance.rst index d8c529b7908..adb3b77e1bd 100644 --- a/source/product-overview/certifications-and-compliance.rst +++ b/source/product-overview/certifications-and-compliance.rst @@ -231,7 +231,7 @@ Are you IPv6 compliant? Yes, the Mattermost platform is compliant with IPv6 when Audio & Screen Sharing is disabled, both for our :doc:`self-hosted and Cloud offerings `. -We plan to add IPv6 compliance for :doc:`Audio & Screen Sharing ` in future. +We plan to add IPv6 compliance for :doc:`Audio & Screen Sharing ` in future. Are you 508 compliant? ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/source/product-overview/plans.md b/source/product-overview/plans.md index 2b91b55a13e..60d79ba0753 100644 --- a/source/product-overview/plans.md +++ b/source/product-overview/plans.md @@ -178,7 +178,7 @@ Multi-team collaboration Work across teams and organizations with real-time calling and screen share, guest accounts to integrate internal and external stakeholders, customer user groups to organize teams within teams, and system-wide notifications to share organization-wide messages. - Group calling and screen share: Streamline real-time collaboration with complete privacy by enabling group audio calling and screenshare up to approximately 50 concurrent users in any group call per self-hosted server. High-scale options for private, self-hosted group calling and screen share are available in Mattermost Enterprise with the setup of its horizontal scaling option. + Group calling and screen share: Streamline real-time collaboration with complete privacy by enabling group audio calling and screenshare up to approximately 50 concurrent users in any group call per self-hosted server. High-scale options for private, self-hosted group calling and screen share are available in Mattermost Enterprise with the setup of its horizontal scaling option. *v9.11+ @@ -217,7 +217,7 @@ v9.11+ - High availability, horizontally scalable calls and screen share: Enable high-scale, high availability deployment of audio calling and screen share through dedicated servers managed on an integrated Kubernetes platform. + High availability, horizontally scalable calls and screen share: Enable high-scale, high availability deployment of audio calling and screen share through dedicated servers managed on an integrated Kubernetes platform. v9.11+ diff --git a/source/product-overview/product-overview-index.rst b/source/product-overview/product-overview-index.rst index 1a4d5a266ba..71417d83dc4 100644 --- a/source/product-overview/product-overview-index.rst +++ b/source/product-overview/product-overview-index.rst @@ -79,7 +79,7 @@ Audio and screenshare - Enables :ref:`1:1 and group audio calls ` directly within channels and direct messages, maintaining contextual awareness and access control based on channel membership. - Supports secure :ref:`screen sharing ` for visual coordination and analysis. -- Operates in :doc:`sovereign, air-gapped, or sensitive network ` environments. +- Operates in :doc:`sovereign, air-gapped, or sensitive network ` environments. - Offers optional :ref:`AI-based transcription ` and :ref:`summarization ` for meeting capture and follow ups. - Works across web, desktop, and mobile for flexible, secure access. diff --git a/source/product-overview/unsupported-legacy-releases.md b/source/product-overview/unsupported-legacy-releases.md index 3dd6eeae5b0..6f28fec68b4 100644 --- a/source/product-overview/unsupported-legacy-releases.md +++ b/source/product-overview/unsupported-legacy-releases.md @@ -2346,7 +2346,7 @@ If you upgrade from a release earlier than v7.5, please read the other [Importan ### Highlights #### Calls - - [Audio calling and screen sharing](https://docs.mattermost.com/configure/calls-deployment.html) in channels is now generally available to all Mattermost customers. +- [Audio calling and screen sharing](https://docs.mattermost.com/configure/calls-deployment-guide.html) in channels is now generally available to all Mattermost customers. - Updated [the keyboard shortcut](https://docs.mattermost.com/channels/keyboard-shortcuts-for-channels.html#calls-shortcuts) to start and join calls. - Please see [the docs](https://docs.mattermost.com/configure/plugins-configuration-settings.html#calls) for additional details on configuration setting updates. diff --git a/source/redirects.py b/source/redirects.py index 85d5addbde8..490ca350a4b 100644 --- a/source/redirects.py +++ b/source/redirects.py @@ -551,6 +551,10 @@ "https://docs.mattermost.com/end-user-guide/upgrade-mattermost.html", "administration/release-lifecycle.html": "https://docs.mattermost.com/product-overview/releases-lifecycle.html", +"administration-guide/configure/calls-deployment.html": + "https://docs.mattermost.com/administration-guide/configure/calls-deployment-guide.html", +"administration-guide/configure/calls-overview.html": + "https://docs.mattermost.com/administration-guide/configure/calls-deployment-guide.html", "administration-guide/configure/site-configuration-settings.html#enable-secure-file-preview-on-mobile": "https://docs.mattermost.com/administration-guide/configure/environment-configuration-settings.html#enable-secure-file-preview-on-mobile", "administration-guide/configure/site-configuration-settings.html#allow-pdf-link-navigation-on-mobile": @@ -950,9 +954,11 @@ "configure/bulk-loading-troubleshooting.html": "https://docs.mattermost.com/administration-guide/onboard/bulk-loading-data.html", "configure/calls-deployment.html": - "https://docs.mattermost.com/administration-guide/configure/calls-deployment.html", + "https://docs.mattermost.com/administration-guide/configure/calls-deployment-guide.html", "configure/calls-log-collection.html": "https://docs.mattermost.com/administration-guide/configure/calls-logging.html", +"configure/calls-overview.html": + "https://docs.mattermost.com/administration-guide/configure/calls-deployment-guide.html", "configure/calls-troubleshooting.html": "https://docs.mattermost.com/administration-guide/configure/calls-logging.html", "configure/cloud-billing-account-settings.html": From 0b53f3f4ea693d6c41fd377473705b67cf3d60c7 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Tue, 14 Apr 2026 17:21:43 -0700 Subject: [PATCH 22/38] add calls SME persona --- .cursor/rules/calls-expert-persona-bill.mdc | 51 +++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 .cursor/rules/calls-expert-persona-bill.mdc diff --git a/.cursor/rules/calls-expert-persona-bill.mdc b/.cursor/rules/calls-expert-persona-bill.mdc new file mode 100644 index 00000000000..7af61be9cfb --- /dev/null +++ b/.cursor/rules/calls-expert-persona-bill.mdc @@ -0,0 +1,51 @@ +--- +description: Persona for answering Mattermost Calls technical questions as Bill, a Staff Engineer and Calls expert +globs: source/administration-guide/configure/calls-*.md +alwaysApply: false +--- + +# Expert Persona: Bill — Principal Engineer, Mattermost Calls + +When answering questions about Mattermost Calls, responding to technical inquiries, or reviewing/writing Calls documentation, respond as Bill. + +## Who He Is + +**Name:** Bill +**Role:** Staff Engineer at Mattermost +**Focus:** Mattermost Calls — the real-time audio calling feature built into Mattermost +**Experience:** Author and primary maintainer of the Calls plugin and its supporting infrastructure. Deep familiarity with WebRTC, media servers, network topology, and enterprise deployment patterns. + +## Source Code He Maintains + +Bill is deeply familiar with the internals of: + +- **`mattermost-plugin-calls`** — the core Calls plugin (https://github.com/mattermost/mattermost-plugin-calls) +- **`rtcd`** — the standalone real-time communications daemon for handling media traffic at scale (https://github.com/mattermost/rtcd) +- **`calls-offloader`** — the service for offloading call recording and transcription jobs (https://github.com/mattermost/calls-offloader) + +## Documentation He Wrote and Maintains + +- https://docs.mattermost.com/administration-guide/configure/calls-deployment.html +- https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html +- https://docs.mattermost.com/administration-guide/configure/calls-offloader-setup.html +- https://docs.mattermost.com/administration-guide/configure/calls-metrics-monitoring.html +- https://docs.mattermost.com/administration-guide/configure/calls-kubernetes.html +- https://docs.mattermost.com/administration-guide/configure/calls-troubleshooting.html + +## How Bill Communicates + +- Direct and precise — he knows exactly how the system works and doesn't hedge unnecessarily +- Explains the *why* behind architecture decisions, not just the *what* +- Comfortable going deep on networking (ICE, STUN/TURN, NAT traversal, UDP vs TCP), WebRTC internals, and infrastructure trade-offs +- Will point customers to the right doc section or config option by name +- If something is a known limitation or edge case, he'll say so plainly + +## How to Use This Persona + +When acting as Bill: + +- Answer as a subject matter expert who understands both the user-facing configuration and the underlying implementation +- Reference specific config options, environment variables, or architectural components by their actual names (e.g., `ICE Host Override`, `RTCD URL`) +- If a question touches on networking or deployment topology, explain the trade-offs between options (e.g., RTCD vs built-in media server, Kubernetes vs bare-metal) +- When reviewing documentation, flag anything that is technically incorrect, incomplete, or that would mislead a customer trying to configure their environment +- If a customer scenario is described, diagnose the most likely root cause based on real-world Calls deployment patterns From 123e2ecc4aeff83d98fa734d962b8db9982ca7ff Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 16 Apr 2026 20:13:31 -0700 Subject: [PATCH 23/38] commit feedback --- .../configure/calls-deployment-guide.md | 367 ++++++++++++------ .../configure/calls-kubernetes.md | 2 +- .../calls-deployment-integrated-recording.png | Bin 0 -> 95411 bytes 3 files changed, 241 insertions(+), 128 deletions(-) create mode 100644 source/images/calls-deployment-integrated-recording.png diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index eb4ab2e40f6..e9e1be25f16 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -40,33 +40,77 @@ This guide is organized into sequential deployment phases with numbered steps. E Choose your deployment architecture, make networking decisions, provision required servers, and confirm the required network ports and paths are open before deployment. -2. [**Configure Integrated Calls**](#phase-2-configure-integrated-calls) +2. [**Configure Calls**](#phase-2-configure-your-calls-deployment-path) + Complete the installation and configuration for the deployment architecture you selected in Phase 1. - Regardless of the deployment architecture you choose, start with the simplest Calls deployment, Integrated mode, to verify connectivity plus basic audio and screen sharing. + - [**Path A: Configure Integrated Calls**](#path-a-configure-integrated-calls) + Use the built-in Calls service on the Mattermost server for simpler deployment at small scale. -3. [**Install and Configure RTCD**](#phase-3-install-and-configure-rtcd) (Optional) + - [**Path B: Install and Configure RTCD**](#path-b-install-and-configure-rtcd) + RTCD (Real-Time Communication Daemon) is a service built to offload media processing tasks from the Mattermost server. - RTCD (Real-Time Communication Daemon) is a service built to offload media processing tasks from the Mattermost server. - -4. [**Install and Configure Recording**](#phase-4-install-and-configure-recording) (Optional) +3. [**Install and Configure Recording**](#phase-3-install-and-configure-recording) (Optional) Calls Offloader is a service required to deliver recording, transcription and live captions. -5. [**Pilot Rollout**](#phase-5-pilot-rollout) +4. [**Pilot Rollout**](#phase-4-pilot-rollout) Expand testing to a small group of pilot users to watch for client, network, and environment-specific issues under real usage. -6. [**Production Rollout**](#phase-6-production-rollout) +5. [**Production Rollout**](#phase-5-production-rollout) Rollout to all users in controlled waves with appropriate communication and monitoring, and be ready to pause or roll back if needed. -```{note} -If you need expert help deploying Calls, contact your Account Manager or [talk to a Mattermost expert](https://mattermost.com/contact-sales/) to learn about professional service offerings. -``` + +## Deployment Prerequisites + +Use this checklist as your grocery list before you start deploying Calls. Confirm the skills, access, infrastructure, and approvals you need now so you do not discover missing dependencies partway through the deployment. + +### Deployment Infrastrutcure Requirements + +- [ ] You have a running Mattermost server on v10.0+. + _See {doc}`View system information <../../end-user-guide/collaborate/view-system-information>` to check your Mattermost edition and version._ +- [ ] Your Mattermost server is configured to use HTTPS. + _See [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html) if you need to set up HTTPS._ +- [ ] You know how many active users you have in your current Mattermost deployment + _See {doc}`Site Statistics <../../administration-guide/manage/statistics>` to access usage metrics._ +- [ ] You can provision at least one dedicated Linux server or VM if you plan to use the RTCD service. + _See [Infrasturucte Decisions](#infrastructure-decisions) (Step 1.2) if you're unsure if you need RTCD._ +- [ ] You can provision a dedicated Linux server or VM for the `calls-offloader` service if you need recording, transcription, or live captions. +- [ ] You are prepared to deploy a TURN server if your users cannot reliably reach the media service on UDP or TCP `8443`. + _See [Networking Decisions](#infrastructure-decisions) (Step 1.3) if you're unsure if you need a TURN server._ +- [ ] You have the appropriate {doc}`Mattermost edition and license <../../product-overview/editions-and-offerings>` for the features you need: + - **Mattermost Entry or Team Edition**: 1-1 calling and screen sharing (Up to 40 minutes) + - **Mattermost Professional**: Group calling and screen sharing (No time limit) + - **Mattermost Enterprise or Enterprise Advanced**: + - RTCD service for scale (50+ users) and production reliability. + - Recording, transcription, or live captions. + +### Skills and Access Requirements + +- [ ] You are comfortable with basic Linux administration, or you have someone available who is. You will need to connect to servers over SSH, edit configuration files, manage systemd services, inspect logs, and run shell commands. +- [ ] You have System Admin access to your Mattermost server. + _See {doc}`Mattermost roles <../../end-user-guide/collaborate/learn-about-roles>`to learn about roles and permissions._ + +### Networking Requirements + +- [ ] You know how end users will connect to Calls (From private networks, VPN, or from the public internet) + _This affects your STUN and TURN decisions later in Phase 1. +- [ ] You can open the required inbound and outbound firewall rules, or you can engage the network or security team that manages them. + +### Validation Resources + +- [ ] You have two test accounts available for smoke testing during Calls installation and configuration. +- [ ] You have a small pilot group (5-10 users) available for validation across the client types and networks you care about. ### Contacting Support -If you encounter issues and need to open a [support case](https://support.mattermost.com), please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and [Calls logs](calls-logging.md). +- [ ] You know how to open a [request](https://support.mattermost.com) with Mattermost support if you encounter issues. + _Please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and [Calls logs](calls-logging.md)._ + +```{note} +If you need expert help deploying Calls, contact your Account Manager or [talk to a Mattermost expert](https://mattermost.com/contact-sales/) to learn about professional service offerings. +``` --- @@ -76,36 +120,41 @@ If you encounter issues and need to open a [support case](https://support.matter Before you start, confirm the following: -- [ ] You have a running Mattermost server on v10.0+ -- [ ] Your Mattermost server is configured to use HTTPS. - _Browsers block microphone and screen sharing on insecure HTTP connections. If you need to set up HTTPS, see [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html)._ -- [ ] You have System Admin access to your Mattermost server. +- [ ] You know how many active users you have in your current Mattermost deployment. +- [ ] You know whether recording, transcription, or live captions are required for your deployment. - [ ] You can provision additional servers if your chosen architecture requires RTCD or Recording services. - [ ] You can open inbound and outbound network ports on the servers involved in your deployment. _If a network or security team manages your firewalls, you'll need to involve them before continuing._ -### 1.2 Deployment Infrastructure +### 1.2 Infrastructure Decisions + +Here you will make two important infrastructure decisions based on the requirements of your Calls deployment. First you'll choose your media processing architecture, then decide whether you need recording. Reference topology for each architecture is provided. -To determine your deployment infrastructure, start by answering the following questions: +#### 1.2.1 Media Service: RTCD or Integrated -- **How many people do you expect to use Calls?** - - **Up to 50:** You can use the **Integrated** deployment mode. - - **More than 50:** You'll need to deploy an additional component called **RTCD** for handling media processing at scale. +**Integrated** +This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. In **Integrated** mode, the Calls plugin runs its built-in media service directly on the Mattermost server. -- **Do you require call recording, transcription, or live captions?** - - **Yes:** You'll need to deploy an additional component for the **Recording** service. - - **No:** You do not need the recording service. +**RTCD** +RTCD is a dedicated real-time communications service for Mattermost Calls that processes call media outside the main Mattermost server. In most production deployments, **RTCD is the recommended deployment model** because it improves performance, scalability, and stability by isolating call traffic and reducing load on the Mattermost server. -Based on your answers, you can explore the associated deployment infrastructure you'll need in the tabs below: +To determine if you'll need RTCD, start by answering the following questions about your deployment: -````{tab} Integrated +- **Are you deploying Calls on Kubernetes?** + - **Yes:** You'll need to deploy RTCD as it's the only supported way to run Calls. See the {doc}`Kubernetes <../../administration-guide/configure/calls-kubernetes>` Calls deployment guide for details. + - **No:** Continue to the next question. +- **What is the *Total User* count of your existing Mattermost deployment?** _(Check {doc}`Site Statistics <../../administration-guide/manage/statistics>`)_ + - **Up to 50:** You can use the **Integrated** deployment model. + - **More than 50:** You'll need to deploy RTCD to avoid impacting messaging performance of the Mattermost server. -In **Integrated** mode, the Calls plugin runs its built-in media service directly on the Mattermost server. This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. +Use the tabs below to view the reference architecture for each deployment model: + +````{tab} Integrated ```{image} ../../images/calls-deployment-integrated.png :alt: Integrated Calls deployment :align: center -:height: 400px +:height: 300px ``` **When to use it** @@ -116,24 +165,24 @@ In **Integrated** mode, the Calls plugin runs its built-in media service directl **Components** -- **Mattermost server**: Calls plugin is pre-installed, not additional infrastructure is needed. +- **Mattermost server**: Calls plugin is pre-installed, and no additional infrastructure is needed. **License** -- **Mattermost Entry**: 1:1 Calls + Screen Sharing -- **Mattermost Professional, Enterprise, or Enterprise Advanced**: Group Calls + Screen Sharing +- **Mattermost Entry**: 1:1 Calls + Screen Sharing (Up to 40 minutes) +- **Mattermost Professional, Enterprise, or Enterprise Advanced**: Group Calls + Screen Sharing (No time limit) ```` ````{tab} RTCD -The **RTCD Server** can be added as a dedicated media service that processes all call audio and screen sharing media. The Mattermost server is still responsible for signaling (setting up, managing, and ending calls) and channel state (who is joining or leaving, who has muted, and overall call status), but the call media itself flows directly between clients and the RTCD server, completely bypassing the Mattermost server. +An **RTCD Server** is added as a dedicated media service that processes all call audio and screen sharing media. The Mattermost server is still responsible for signaling (setting up, managing, and ending calls) and channel state (who is joining or leaving, who has muted, and overall call status), but the call media itself flows directly between clients and the RTCD server, completely bypassing the Mattermost server. Deploying RTCD is **highly recommended in production deployments** for performance, scalability, and stability of Mattermost Calls. ```{image} ../../images/calls-deployment-rtcd.png :alt: Calls deployment with RTCD :align: center -:height: 500px +:height: 450px ``` **When to use it** @@ -156,18 +205,35 @@ Use RTCD if you need optimized performance, scalability, and the best possible u ```` -````{tab} RTCD + Recording +#### 1.2.2 Recording -The **Recording** service (`calls-offloader`) can be added to any Calls deployment to enable recording, transcription, and live captions. +The **Recording** service (`calls-offloader`) can be added to an **Integrated** or **RTCD** Calls deployment to enable recording, transcription, and live captions. -```{image} ../../images/calls-deployment-rtcd-recording.png -:alt: Calls deployment with RTCD and recording +Use the tabs below to view the reference architecture for each deployment model when the recording service is added: + +````{tab} Integrated + Recording + +```{image} ../../images/calls-deployment-integrated-recording.png +:alt: Calls deployment with Integrated Calls and recording +:height: 400px :align: center -``` -**When to use it** +**Components** + +- **Mattermost server**: Calls plugin is pre-installed. +- **Calls Offloader**: Job service that manages recording, transcription and live captions. + +**License** + +- **Mattermost Enterprise** or **Enterprise Advanced** + +```` -- You need call recording, transcription, or live captions. +````{tab} RTCD + Recording + +```{image} ../../images/calls-deployment-rtcd-recording.png +:alt: Calls deployment with RTCD and recording +:align: center **Components** @@ -175,14 +241,14 @@ The **Recording** service (`calls-offloader`) can be added to any Calls deployme - **RTCD Server**: Dedicated media service. Clients connect to it directly for media traffic. - **Calls Offloader**: Job service that manages recording, transcription and live captions. -```{note} -`calls-offloader` can also be added to an integrated Calls deployment without RTCD. This guide uses RTCD as the base because it is the recommended production path for most deployments. -``` - **License** - **Mattermost Enterprise** or **Enterprise Advanced** +```{note} +For most production deployments that need recording, RTCD plus `calls-offloader` is the recommended combination because it keeps call media off the Mattermost server and scales more predictably. +``` + ```` ### 1.3 Networking Decisions @@ -224,7 +290,7 @@ TURN is typically a last resort as it adds latency and infrastructure complexity Now you'll provision the servers or VMs required to support your Calls deployment. You are only preparing infrastructure here; software installation and service configuration happen in later phases. This step matters because you need the IP addresses or DNS names of these servers before you can finish the networking configurations in the next step. -Infrastructure requirements depend on the deployment architecture you chose in Step 1.2. If you provision additional hardware, write down the IP addresses or DNS names now because you will use them in Step 1.5: +Infrastructure requirements depend on the deployment infrastructure you selected in Step 1.2. If you provision additional hardware, write down the IP addresses or DNS names now because you will use them in Step 1.5: **Integrated** @@ -260,7 +326,10 @@ This section lists the network ports that must be opened for each server involve - **On-premises or self-managed VMs:** Use `firewalld` (RHEL, Rocky Linux, AlmaLinux) or `ufw` (Ubuntu/Debian) commands directly on each server. - **Centrally managed firewall:** If a network team manages your firewall, share the tables below with them and request the rules before proceeding. -Work through one server at a time so you can verify nothing is missed before moving on: +Work through one server at a time so you can verify nothing is missed before moving on. Use only the tables that apply to your chosen deployment architecture (Integrated or RTCD): + + +````{tab} Integrated ##### Mattermost server ports @@ -271,9 +340,44 @@ Work through one server at a time so you can verify nothing is missed before mov | 8443 | TCP | Inbound | Mattermost clients | Mattermost server | Media traffic fallback (Integrated mode). | | 3478 | UDP | Outbound | Mattermost server | `stun.global.calls.mattermost.com` | (Optional - Step 1.3.1) Public IP discovery using STUN. | -##### RTCD server ports -If you deployed an RTCD server in Step 1.4, open these ports: +```{important} +If you use NGINX as a reverse proxy in front of Mattermost, note that NGINX cannot forward UDP traffic. Port 8443 must be opened directly on the server running the media service - not on NGINX. Port 443 is the only port NGINX handles for Calls. +``` + +##### Recording server ports + +If you deployed a calls-offloader server in Step 1.4, open these ports: + +| Port | Protocol | Direction | Source | Destination | Notes | +|---|---|---|---|---|---| +| 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API (Internal only) | +| 8443 | UDP | Outbound | calls-offloader server | Mattermost server | Recorder and transcriber jobs connect to the media service as call participants. | +| 8443 | TCP | Outbound | calls-offloader server | Mattermost server | Media traffic fallback. | +| 443 | TCP | Outbound | calls-offloader server | Mattermost server | Recorder and transcriber jobs post results back to Mattermost. | + +##### TURN server ports + +If you deployed a TURN server in Step 1.4, open these ports. If you are using `coturn`, these are the common defaults: + +| Port | Protocol | Direction | Source | Destination | Notes | +|---|---|---|---|---|---| +| 3478 | UDP / TCP | Inbound | Mattermost clients | TURN server | TURN relay. | +| 5349 | UDP / TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TLS on TURN. | +| 49152-65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | + +```` + +````{tab} RTCD + +##### Mattermost server ports + +| Port | Protocol | Direction | Source | Destination | Notes | +|---|---|---|---|---|---| +| 443 | TCP | Inbound | Mattermost clients | Mattermost server | HTTPS and WebSocket signaling. | +| 3478 | UDP | Outbound | Mattermost server | `stun.global.calls.mattermost.com` | (Optional - Step 1.3.1) Public IP discovery using STUN. | + +##### RTCD server ports | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| @@ -307,6 +411,8 @@ If you deployed a TURN server in Step 1.4, open these ports. If you are using `c | 5349 | UDP / TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TLS on TURN. | | 49152-65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | +```` + ### 1.6 Networking Checks These checks test firewall rules and network reachability only. They do not require Calls, RTCD, or `calls-offloader` to be installed yet. @@ -319,7 +425,7 @@ First, install `nmap` on each machine you will run checks from. For example: When you execute each check below, `nmap` returns `open`, `closed`, or `filtered`. **Pass**: -- `open`: Port is reachable and the service is running. Expected if you've already installed the RTCD or Recording services in Phases 3-4. +- `open`: Port is reachable and the service is running. Expected if you've already installed the RTCD or Recording services in Phases 2-3. - `closed`: Port is reachable but the service is not running. Expected if you just provisioned the infrastructure in Step 1.4. **Fail**: @@ -329,7 +435,7 @@ When you execute each check below, `nmap` returns `open`, `closed`, or `filtered In the commands below, replace `TARGET_IP` with the actual IP address of the server you are testing. For example, if your Mattermost server IP is `10.0.1.50`, run `sudo nmap -sU -p 8443 10.0.1.50`. ``` -**All deployments** +**Integrated deployments** Run from a client machine on the same network as your users: @@ -396,31 +502,37 @@ Before proceeding to Phase 2, confirm all of the following: --- -## Phase 2: Configure Integrated Calls +## Phase 2: Configure Calls + +Now you will configure Calls following the relevant path for your deployment architecture. Do not complete both paths for the same deployment. -For most deployments, start by deploying Calls using the Integrated architecture, even if you plan to use RTCD or `calls-offloader` services later. This approach gives you a clean baseline: if Calls does not work using the simplest deployment method, the problem is usually networking, firewall rules, or plugin configuration. It is much easier to isolate those problems before you add RTCD or `calls-offloader` in later phases. +- **Path A** if you are using the **Integrated** Calls deployment model. +- **Path B** if you are using the **RTCD** Calls deployment model. -**Skip this phase if you are deploying on Kubernetes**. RTCD is the only officially supported Calls deployment path for Kubernetes environments. +````{tab} Path A: Integrated -### 2.1 Prerequisites +### Path A: Configure Integrated Calls + +#### 2A.1 Prerequisites - [ ] Phase 1 verification checks passed +- [ ] Integrated is the base architecture you selected in Step 1.2 - [ ] Two test accounts on your Mattermost server - [ ] System Admin permissions on your Mattermost server -### 2.2 Configure the Calls plugin +#### 2A.2 Configure the Calls plugin The Calls plugin is prepackaged with Mattermost self-hosted deployments. Go to **System Console > Plugins > Calls > Settings** and complete the following steps: -**2.2.1: Enable the plugin** +**2A.2.1: Enable the plugin** Set **Enable Plugin** to `true`. This enables editing for the rest of the configuration settings on the page. -**2.2.2: Enable test mode** +**2A.2.2: Enable test mode** Set **Test mode** to `on`, so Calls stays restricted during initial validation. In this mode, System Admins control where Calls is available and can enable it in specific channels for testing. -**2.2.3: Configure the host media address** +**2A.2.3: Configure the host media address** Set **ICE Host Override** to the IP address or DNS name clients will use to reach the media service. ICE (Interactive Connectivity Establishment) is the protocol your users' devices use to find a path to the media server. The ICE Host Override tells Calls which address to advertise to them. Base this value on the STUN decision tree from Step 1.3.1. @@ -428,7 +540,7 @@ Set **ICE Host Override** to the IP address or DNS name clients will use to reac - If your Mattermost server has a stable public IP, set it to that IP. - Otherwise, leave it empty for automatic public address discovery using STUN. -**2.2.4: Configure TURN Servers** +**2A.2.4: Configure TURN Servers** If TURN is being used, replace or extend the **ICE server configurations** array with your TURN server details: @@ -444,7 +556,7 @@ If TURN is being used, replace or extend the **ICE server configurations** array If your TURN deployment uses short-lived generated credentials, also set **TURN Static Auth Secret** and **TURN Credentials Expiration**. -**2.2.5: Save configuration** +**2A.2.5: Save configuration** Click **Save** on the Calls settings page. It is also recommended that you restart the plugin after changing media server settings: @@ -452,7 +564,7 @@ Click **Save** on the Calls settings page. It is also recommended that you resta 2. Disable **Calls** and wait a few seconds. 3. Enable **Calls** again. -### 2.3 Verification Checks +#### 2A.3 Verification Checks Now smoke test your Calls deployment with your test accounts: @@ -462,32 +574,29 @@ Now smoke test your Calls deployment with your test accounts: | Check | Action | Pass criteria | |---|---|---| -| 2.3.1 | Start a call from the test channel with a second user | Both users are in the call | -| 2.3.2 | Speak during the call | Both users can hear each other clearly | -| 2.3.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | -| 2.3.4 | End the call | The call indicator disappears from the channel | +| 2A.3.1 | Start a call from the test channel with a second user | Both users are in the call | +| 2A.3.2 | Speak during the call | Both users can hear each other clearly | +| 2A.3.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | +| 2A.3.4 | End the call | The call indicator disappears from the channel | ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` ---- +```` -## Phase 3: Install and Configure RTCD +````{tab} Path B: Install and Configure RTCD -Now that you've verified a basic Integrated Calls deployment, you can add RTCD to move media handling off the Mattermost server. +### Path B: Install and Configure RTCD -**You can skip this phase if you are using Integrated Calls only.** - -### 3.1 Prerequisites +#### 2B.1 Prerequisites +- [ ] RTCD is the base architecture you selected in Step 1.2 - [ ] RTCD server is provisioned (1.4) and RTCD networking checks passed (1.6.3-1.6.5) -- [ ] Integrated Calls deployment checks passed (2.3.1-2.3.4) - _Not applicable if you are deploying on Kubernetes_ - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server -### 3.2 Install RTCD +#### 2B.2 Install RTCD Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the actual installation. The guide covers: @@ -496,14 +605,18 @@ Follow the [RTCD Setup and Configuration](calls-rtcd-setup.md) guide for the act - Service setup - TURN configuration (if applicable) +```{note} +If you are deploying on Kubernetes, also use the [Calls Deployment on Kubernetes](calls-kubernetes.md) guide for cluster-specific installation and Helm-based configuration. +``` + Before proceeding, run these checks from the Mattermost server to confirm RTCD is running and reachable: | Check | Command | Pass criteria | |---|---|---| -| 3.2.1 | `nmap -p 8045 YOUR_RTCD_SERVER` | `open` - RTCD is running and accepting connections. | -| 3.2.2 | `curl http://YOUR_RTCD_SERVER:8045/version` | Returns a JSON version string | +| 2B.2.1 | `nmap -p 8045 YOUR_RTCD_SERVER` | `open` - RTCD is running and accepting connections. | +| 2B.2.2 | `curl http://YOUR_RTCD_SERVER:8045/version` | Returns a JSON version string | -### 3.3 Connect Mattermost to RTCD +#### 2B.3 Connect Mattermost to RTCD Once RTCD is installed, configured, and reachable, update the Calls plugin to use it: @@ -520,7 +633,7 @@ Once RTCD is installed, configured, and reachable, update the Calls plugin to us 3. Click **Save** and restart the Calls plugin so the change takes effect. -### 3.4 Configure Calls Monitoring +#### 2B.4 Configure Calls Monitoring Before your pilot, set up Calls monitoring so you can see sessions, errors, CPU, and memory while real users are testing. @@ -532,20 +645,20 @@ Calls monitoring uses Prometheus (a tool that collects metrics from your servers See [Calls Metrics and Monitoring](calls-metrics-monitoring.md) for full configuration details. -### 3.5 Verification Checks +#### 2B.5 Verification Checks Now smoke test your RTCD deployment with your test accounts: | Check | Action | Pass criteria | |---|---|---| -| 3.5.1 | Start a call from the test channel with a second user | Both users are in the call | -| 3.5.2 | Speak during the call | Both users can hear each other clearly | -| 3.5.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | -| 3.5.4 | End the call | The call indicator disappears from the channel | +| 2B.5.1 | Start a call from the test channel with a second user | Both users are in the call | +| 2B.5.2 | Speak during the call | Both users can hear each other clearly | +| 2B.5.3 | Share your screen from a desktop app or supported browser | Screen sharing is visible to the other user | +| 2B.5.4 | End the call | The call indicator disappears from the channel | -If Phase 2 passed but Phase 3 fails, focus on the RTCD integration path: +If these checks fail, try these troubleshooting techniques first: -- Re-run checks `3.2.1` and `3.2.2` to confirm RTCD is listening and responding. +- Re-run checks `2B.2.1` and `2B.2.2` to confirm RTCD is listening and responding. - Confirm **RTCD Service URL** is correct and includes credentials if your RTCD setup requires them. - Check that the Mattermost server can reach RTCD on port `8045`, and review RTCD logs before changing other settings. @@ -555,21 +668,21 @@ If Phase 2 passed but Phase 3 fails, focus on the RTCD integration path: --- -## Phase 4: Install and Configure Recording +## Phase 3: Install and Configure Recording Now we will install and configure the `calls-offloader` job service that handles call recording, transcription, and live captions. **You can skip this phase if you do not need recording, transcription, or live captions.** -### 4.1 Prerequisites +### 3.1 Prerequisites - [ ] `calls-offloader` server is provisioned (1.4) and relevant networking checks passed (1.6.6-1.6.9) -- [ ] If you are using RTCD: Phase 3 verification checks passed (3.5.1-3.5.4). -- [ ] If you are using Integrated mode: Phase 2 verification checks passed (2.3.1-2.3.4). +- [ ] If you are using Integrated mode: Phase 2A verification checks passed (2A.3.1-2A.3.4). +- [ ] If you are using RTCD: Phase 2B verification checks passed (2B.5.1-2B.5.4). - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server - [ ] System Admin permissions on your Mattermost server -### 4.2 Install calls-offloader +### 3.2 Install calls-offloader Follow the [Calls Offloader Setup and Configuration](calls-offloader-setup.md) guide for installation. The guide covers: @@ -584,10 +697,10 @@ Before proceeding, run these checks from the Mattermost server to confirm `calls | Check | Command | Pass criteria | |---|---|---| -| 4.2.1 | `nmap -p 4545 YOUR_OFFLOADER_SERVER` | `open` - calls-offloader is running and accepting connections. | -| 4.2.2 | `curl http://YOUR_OFFLOADER_SERVER:4545/version` | Returns a JSON version string | +| 3.2.1 | `nmap -p 4545 YOUR_OFFLOADER_SERVER` | `open` - calls-offloader is running and accepting connections. | +| 3.2.2 | `curl http://YOUR_OFFLOADER_SERVER:4545/version` | Returns a JSON version string | -### 4.3 Connect calls-offloader to Mattermost +### 3.3 Connect calls-offloader to Mattermost 1. Go to **System Console > Plugins > Calls > Settings**. 2. Set **Job Service URL** to the calls-offloader address, for example `http://calls-offloader.internal:4545`. @@ -596,22 +709,22 @@ Before proceeding, run these checks from the Mattermost server to confirm `calls 5. Enable **Live Captions** if needed. Live captions require both recordings and transcriptions to be enabled. 6. Click **Save** and restart the Calls plugin so the change takes effect. -### 4.4 Verification Checks +### 3.4 Verification Checks Now smoke test recording-related features with your test accounts: | Check | Action | Pass criteria | |---|---|---| -| 4.4.1 | Start recording as a call host | Recording starts without error. | -| 4.4.2 | End the call or stop the recording | An MP4 file appears in the call thread after processing completes. | -| 4.4.3 | With transcription enabled, end a recorded call | An MP4 file and transcript file appear in the call thread after processing completes. | -| 4.4.4 | With live captions enabled, start a recorded call | Captions appear during the call within 1-3 seconds after participants speak. | +| 3.4.1 | Start recording as a call host | Recording starts without error. | +| 3.4.2 | End the call or stop the recording | An MP4 file appears in the call thread after processing completes. | +| 3.4.3 | With transcription enabled, end a recorded call | An MP4 file and transcript file appear in the call thread after processing completes. | +| 3.4.4 | With live captions enabled, start a recorded call | Captions appear during the call within 1-3 seconds after participants speak. | If a recording-related check fails, isolate the problem before retrying: -- **4.4.1 or 4.4.2 fails**: Confirm the **Job Service URL** is correct, the `calls-offloader` service is running, and the Mattermost server can reach port `4545`. -- **4.4.3 fails**: Confirm recordings are enabled first, then confirm transcription is enabled. -- **4.4.4 fails**: Confirm both recordings and transcriptions are enabled before testing live captions. +- **3.4.1 or 3.4.2 fails**: Confirm the **Job Service URL** is correct, the `calls-offloader` service is running, and the Mattermost server can reach port `4545`. +- **3.4.3 fails**: Confirm recordings are enabled first, then confirm transcription is enabled. +- **3.4.4 fails**: Confirm both recordings and transcriptions are enabled before testing live captions. ```{important} **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** @@ -619,20 +732,20 @@ If a recording-related check fails, isolate the problem before retrying: --- -## Phase 5: Pilot Rollout +## Phase 4: Pilot Rollout Now that the technical configuration is complete and validated, run a small pilot with real users before broad rollout. The goal is to confirm Calls works reliably across the clients and locations your organization uses, and that your servers stay healthy under normal usage. -### 5.1 Prerequisites +### 4.1 Prerequisites -- [ ] If using Integrated mode: Phase 2 verification checks passed (2.3.1-2.3.4) -- [ ] If using RTCD: Phase 3 verification checks passed (3.5.1-3.5.4) -- [ ] If using Recording: Phase 4 verification checks passed (4.4.1-4.4.4) +- [ ] If using Integrated mode: Phase 2A verification checks passed (2A.3.1-2A.3.4) +- [ ] If using RTCD: Phase 2B verification checks passed (2B.5.1-2B.5.4) +- [ ] If using Recording: Phase 3 verification checks passed (3.4.1-3.4.4) - [ ] 5 to 10 volunteer pilot users from different locations - [ ] Access to the metrics dashboard and logs on your Calls infrastructure - [ ] Pilot users have current [Mattermost desktop and mobile apps](https://mattermost.com/apps/) -### 5.2 Preparation and Communication +### 4.2 Preparation and Communication For a successful pilot, make sure pilot users know what to test, how to start a call, and how to report problems. @@ -676,16 +789,16 @@ If you encounter an issue, please report it by posting in this channel and inclu

-### 5.3 Verification Checks +### 4.3 Verification Checks **Monitoring** | Check | Action | Pass criteria | |---|---|---| -| 5.3.1 | Check your metrics dashboard during a pilot call | Active sessions and participants are visible and counted correctly | -| 5.3.2 | If using RTCD, check RTCD error metrics after pilot calls (`rtcd_rtc_errors_total`) | No elevated error counts | -| 5.3.3 | If using RTCD, check CPU and memory metrics during a pilot call (`rtcd_process_cpu_seconds_total`, `rtcd_process_resident_memory_bytes`) | No CPU or memory spikes observed | -| 5.3.4 | Review Mattermost logs, plus RTCD and calls-offloader logs if those services are deployed | No recurring `ERROR` lines, and no unexpected `WARN` patterns | +| 4.3.1 | Check your metrics dashboard during a pilot call | Active sessions and participants are visible and counted correctly | +| 4.3.2 | If using RTCD, check RTCD error metrics after pilot calls (`rtcd_rtc_errors_total`) | No elevated error counts | +| 4.3.3 | If using RTCD, check CPU and memory metrics during a pilot call (`rtcd_process_cpu_seconds_total`, `rtcd_process_resident_memory_bytes`) | No CPU or memory spikes observed | +| 4.3.4 | Review Mattermost logs, plus RTCD and calls-offloader logs if those services are deployed | No recurring `ERROR` lines, and no unexpected `WARN` patterns | **Production readiness** @@ -693,9 +806,9 @@ Collect feedback from your pilot users after 3-5 business days and use it to eva | Check | Requirement | |---|---| -| 5.3.5 | Audio quality rated acceptable by 80%+ of pilot users | -| 5.3.6 | No blocking issues found in the pilot test cases | -| 5.3.7 | All pilot users confirm readiness for production rollout | +| 4.3.5 | Audio quality rated acceptable by 80%+ of pilot users | +| 4.3.6 | No blocking issues found in the pilot test cases | +| 4.3.7 | All pilot users confirm readiness for production rollout | If the pilot users find issues, do not expand the rollout yet: @@ -711,18 +824,18 @@ You can also run `/call stats` in the Mattermost message area after a failed tes --- -## Phase 6: Production Rollout +## Phase 5: Production Rollout Now you will execute a broader rollout to all users in production. -### 6.1 Prerequisites +### 5.1 Prerequisites -- [ ] Phase 5 production readiness checks passed (5.3.1-5.3.7) +- [ ] Phase 4 production readiness checks passed (4.3.1-4.3.7) - [ ] Rollback plan documented and understood - [ ] System Admin permissions on your Mattermost server - [ ] Access to the metrics dashboard and logs on your Calls infrastructure -### 6.2 Rollback plan +### 5.2 Rollback plan You should be familiar with your rollback options before you begin the staged production rollout. If something goes wrong, choose the smallest rollback that solves the problem: @@ -749,7 +862,7 @@ Disables Calls completely for everyone. If you have an existing conferencing tool, keep it available until Calls is stable in production. -### 6.3 Preparation and Communication +### 5.3 Preparation and Communication Before announcing Calls to users, create a `calls-support` public channel. This gives users a clear place to report issues and gives your admins a single place to track rollout problems. @@ -790,7 +903,7 @@ Post in `~calls-support` and include what you were trying to do, what happened, ```
-### 6.4 Rollout Stages +### 5.4 Rollout Stages We recommend enabling Calls in stages instead of enabling it everywhere at once. This way you can watch real usage, catch problems early, and rollback cleanly if needed. @@ -802,23 +915,23 @@ We recommend enabling Calls in stages instead of enabling it everywhere at once. If a rollout stage introduces problems, pause the rollout, use the rollback option listed for that stage, fix the issue, and repeat the same stage before moving to the next one. -### 6.5 Monitor and optimize +### 5.5 Monitor and optimize Once Calls is live, monitor it actively for the first two weeks and tune based on what you see. -**6.5.1: Watch server health during peak call hours** +**5.5.1: Watch server health during peak call hours** Monitor CPU and memory on the media server (RTCD or Mattermost server) daily during peak usage. If CPU utilization consistently exceeds 70%, consider increasing hardware specs, or adding RTCD nodes before the next rollout stage. -**6.5.2: Review logs daily** +**5.5.2: Review logs daily** Check Mattermost, RTCD, and calls-offloader logs each day for recurring `ERROR` or `WARN` lines. Address any patterns before they become user-facing problems. -**6.5.3: Tune Max Call Participants** +**5.5.3: Tune Max Call Participants** If you see resource pressure during large calls, lower **Max Call Participants** in **System Console > Plugins > Calls**. By default there is no participant limit (configured as `0`, which means unlimited). A practical ceiling for most deployments is `50`. -**6.5.4: Track user-reported issues** +**5.5.4: Track user-reported issues** Monitor `~calls-support` for recurring complaints. @@ -843,7 +956,7 @@ Check [Appendix A: Troubleshooting](#appendix-a-troubleshooting) for common issu |---|---| | UDP `8443` is blocked | Repeat the UDP connectivity check from Phase 1 (check 1.6.1 or 1.6.3) and confirm the firewall rule is applied | | TCP `8443` is also blocked and fallback is failing | Repeat the TCP check (1.6.2 or 1.6.4) - clients need at least one path to the media service | -| The wrong media address is being advertised | Re-check `ICE Host Override` in Phase 2 (Integrated) or `ice_host_override` in `rtcd.toml` (RTCD) - the address must be reachable by clients | +| The wrong media address is being advertised | Re-check `ICE Host Override` in Phase 2A (Integrated) or `ice_host_override` in `rtcd.toml` in Phase 2B (RTCD) - the address must be reachable by clients | | Browser or desktop microphone permissions were denied | Ask the user to check browser or OS microphone permissions and reload the app | ### A.3 Remote users cannot join from outside the network diff --git a/source/administration-guide/configure/calls-kubernetes.md b/source/administration-guide/configure/calls-kubernetes.md index aae42513217..0d4f7c3beea 100644 --- a/source/administration-guide/configure/calls-kubernetes.md +++ b/source/administration-guide/configure/calls-kubernetes.md @@ -7,7 +7,7 @@ This guide provides detailed information for deploying Mattermost Calls on Kuber ## Overview -Mattermost Calls has been designed to integrate well with Kubernetes to offer improved scalability and control over the deployment. For Kubernetes deployments, the RTCD service is strongly recommended and is the only officially supported approach. +Mattermost Calls has been designed to integrate with Kubernetes for improved scalability and control over the deployment. Using the RTCD service is the only supported deployment model. ## Architecture diff --git a/source/images/calls-deployment-integrated-recording.png b/source/images/calls-deployment-integrated-recording.png new file mode 100644 index 0000000000000000000000000000000000000000..9365614553a2ce3cd82b33bd3a2dfdd83544be1c GIT binary patch literal 95411 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 X$xO(__P!5|Y)L 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 Date: Thu, 16 Apr 2026 20:27:41 -0700 Subject: [PATCH 24/38] tweaks --- .../configure/calls-deployment-guide.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index e9e1be25f16..6425b08b5f9 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -41,12 +41,15 @@ This guide is organized into sequential deployment phases with numbered steps. E Choose your deployment architecture, make networking decisions, provision required servers, and confirm the required network ports and paths are open before deployment. 2. [**Configure Calls**](#phase-2-configure-your-calls-deployment-path) + Complete the installation and configuration for the deployment architecture you selected in Phase 1. - [**Path A: Configure Integrated Calls**](#path-a-configure-integrated-calls) + Use the built-in Calls service on the Mattermost server for simpler deployment at small scale. - - [**Path B: Install and Configure RTCD**](#path-b-install-and-configure-rtcd) + - [**Path B: Install and Configure RTCD**](#path-b-install-and-configure-rtcd) (Optional) + RTCD (Real-Time Communication Daemon) is a service built to offload media processing tasks from the Mattermost server. 3. [**Install and Configure Recording**](#phase-3-install-and-configure-recording) (Optional) @@ -68,16 +71,21 @@ Use this checklist as your grocery list before you start deploying Calls. Confir ### Deployment Infrastrutcure Requirements -- [ ] You have a running Mattermost server on v10.0+. +- [ ] You have a running Mattermost server on v10.0+. + _See {doc}`View system information <../../end-user-guide/collaborate/view-system-information>` to check your Mattermost edition and version._ - [ ] Your Mattermost server is configured to use HTTPS. + _See [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html) if you need to set up HTTPS._ - [ ] You know how many active users you have in your current Mattermost deployment + _See {doc}`Site Statistics <../../administration-guide/manage/statistics>` to access usage metrics._ - [ ] You can provision at least one dedicated Linux server or VM if you plan to use the RTCD service. + _See [Infrasturucte Decisions](#infrastructure-decisions) (Step 1.2) if you're unsure if you need RTCD._ - [ ] You can provision a dedicated Linux server or VM for the `calls-offloader` service if you need recording, transcription, or live captions. - [ ] You are prepared to deploy a TURN server if your users cannot reliably reach the media service on UDP or TCP `8443`. + _See [Networking Decisions](#infrastructure-decisions) (Step 1.3) if you're unsure if you need a TURN server._ - [ ] You have the appropriate {doc}`Mattermost edition and license <../../product-overview/editions-and-offerings>` for the features you need: - **Mattermost Entry or Team Edition**: 1-1 calling and screen sharing (Up to 40 minutes) @@ -90,6 +98,7 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] You are comfortable with basic Linux administration, or you have someone available who is. You will need to connect to servers over SSH, edit configuration files, manage systemd services, inspect logs, and run shell commands. - [ ] You have System Admin access to your Mattermost server. + _See {doc}`Mattermost roles <../../end-user-guide/collaborate/learn-about-roles>`to learn about roles and permissions._ ### Networking Requirements @@ -106,6 +115,7 @@ Use this checklist as your grocery list before you start deploying Calls. Confir ### Contacting Support - [ ] You know how to open a [request](https://support.mattermost.com) with Mattermost support if you encounter issues. + _Please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and [Calls logs](calls-logging.md)._ ```{note} From f3e9de7363564d65042be2bf62fc6b9b6a0d1fae Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 16 Apr 2026 20:40:26 -0700 Subject: [PATCH 25/38] tweaks --- .../configure/calls-deployment-guide.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index 6425b08b5f9..0b0c461d0e7 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -73,10 +73,12 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] You have a running Mattermost server on v10.0+. - _See {doc}`View system information <../../end-user-guide/collaborate/view-system-information>` to check your Mattermost edition and version._ + _See {doc}`System Information <../../end-user-guide/collaborate/view-system-information>` to check your Mattermost edition and version._ + - [ ] Your Mattermost server is configured to use HTTPS. _See [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html) if you need to set up HTTPS._ + - [ ] You know how many active users you have in your current Mattermost deployment _See {doc}`Site Statistics <../../administration-guide/manage/statistics>` to access usage metrics._ @@ -134,6 +136,7 @@ Before you start, confirm the following: - [ ] You know whether recording, transcription, or live captions are required for your deployment. - [ ] You can provision additional servers if your chosen architecture requires RTCD or Recording services. - [ ] You can open inbound and outbound network ports on the servers involved in your deployment. + _If a network or security team manages your firewalls, you'll need to involve them before continuing._ ### 1.2 Infrastructure Decisions @@ -143,9 +146,11 @@ Here you will make two important infrastructure decisions based on the requireme #### 1.2.1 Media Service: RTCD or Integrated **Integrated** + This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. In **Integrated** mode, the Calls plugin runs its built-in media service directly on the Mattermost server. **RTCD** + RTCD is a dedicated real-time communications service for Mattermost Calls that processes call media outside the main Mattermost server. In most production deployments, **RTCD is the recommended deployment model** because it improves performance, scalability, and stability by isolating call traffic and reducing load on the Mattermost server. To determine if you'll need RTCD, start by answering the following questions about your deployment: @@ -161,6 +166,8 @@ Use the tabs below to view the reference architecture for each deployment model: ````{tab} Integrated +An **Integrated** deployment does not require any additional infrasrtucture: + ```{image} ../../images/calls-deployment-integrated.png :alt: Integrated Calls deployment :align: center @@ -187,7 +194,6 @@ Use the tabs below to view the reference architecture for each deployment model: An **RTCD Server** is added as a dedicated media service that processes all call audio and screen sharing media. The Mattermost server is still responsible for signaling (setting up, managing, and ending calls) and channel state (who is joining or leaving, who has muted, and overall call status), but the call media itself flows directly between clients and the RTCD server, completely bypassing the Mattermost server. -Deploying RTCD is **highly recommended in production deployments** for performance, scalability, and stability of Mattermost Calls. ```{image} ../../images/calls-deployment-rtcd.png :alt: Calls deployment with RTCD @@ -195,6 +201,7 @@ Deploying RTCD is **highly recommended in production deployments** for performan :height: 450px ``` + **When to use it** Use RTCD if you need optimized performance, scalability, and the best possible user experience for Mattermost Calls. Specifically: From 820d2b2b071d06789acadaea0f96f6c7e2282b48 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 16 Apr 2026 20:49:47 -0700 Subject: [PATCH 26/38] tweaks --- .../configure/calls-deployment-guide.md | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index 0b0c461d0e7..a4e205c38ac 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -40,7 +40,7 @@ This guide is organized into sequential deployment phases with numbered steps. E Choose your deployment architecture, make networking decisions, provision required servers, and confirm the required network ports and paths are open before deployment. -2. [**Configure Calls**](#phase-2-configure-your-calls-deployment-path) +2. [**Install and Configure Calls**](#phase-2-install-and-configure-calls) Complete the installation and configuration for the deployment architecture you selected in Phase 1. @@ -77,22 +77,25 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] Your Mattermost server is configured to use HTTPS. - _See [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html) if you need to set up HTTPS._ - + _See [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html) if you need to set up HTTPS._ + - [ ] You know how many active users you have in your current Mattermost deployment - _See {doc}`Site Statistics <../../administration-guide/manage/statistics>` to access usage metrics._ + _See {doc}`Site Statistics <../../administration-guide/manage/statistics>` to access usage metrics._ + - [ ] You can provision at least one dedicated Linux server or VM if you plan to use the RTCD service. - _See [Infrasturucte Decisions](#infrastructure-decisions) (Step 1.2) if you're unsure if you need RTCD._ + _See [Infrasturucte Decisions](#infrastructure-decisions) (Step 1.2) if you're unsure if you need RTCD._ + - [ ] You can provision a dedicated Linux server or VM for the `calls-offloader` service if you need recording, transcription, or live captions. - [ ] You are prepared to deploy a TURN server if your users cannot reliably reach the media service on UDP or TCP `8443`. - _See [Networking Decisions](#infrastructure-decisions) (Step 1.3) if you're unsure if you need a TURN server._ + _See [Networking Decisions](#infrastructure-decisions) (Step 1.3) if you're unsure if you need a TURN server._ + - [ ] You have the appropriate {doc}`Mattermost edition and license <../../product-overview/editions-and-offerings>` for the features you need: - **Mattermost Entry or Team Edition**: 1-1 calling and screen sharing (Up to 40 minutes) - **Mattermost Professional**: Group calling and screen sharing (No time limit) - - **Mattermost Enterprise or Enterprise Advanced**: + - **Mattermost Enterprise or Enterprise Advanced**: Required for, - RTCD service for scale (50+ users) and production reliability. - Recording, transcription, or live captions. @@ -101,7 +104,7 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] You are comfortable with basic Linux administration, or you have someone available who is. You will need to connect to servers over SSH, edit configuration files, manage systemd services, inspect logs, and run shell commands. - [ ] You have System Admin access to your Mattermost server. - _See {doc}`Mattermost roles <../../end-user-guide/collaborate/learn-about-roles>`to learn about roles and permissions._ + _See {doc}`Mattermost roles <../../end-user-guide/collaborate/learn-about-roles>`to learn about roles and permissions._ ### Networking Requirements @@ -118,7 +121,7 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] You know how to open a [request](https://support.mattermost.com) with Mattermost support if you encounter issues. - _Please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and [Calls logs](calls-logging.md)._ + _Please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and [Calls logs](calls-logging.md)._ ```{note} If you need expert help deploying Calls, contact your Account Manager or [talk to a Mattermost expert](https://mattermost.com/contact-sales/) to learn about professional service offerings. @@ -137,7 +140,7 @@ Before you start, confirm the following: - [ ] You can provision additional servers if your chosen architecture requires RTCD or Recording services. - [ ] You can open inbound and outbound network ports on the servers involved in your deployment. - _If a network or security team manages your firewalls, you'll need to involve them before continuing._ + _If a network or security team manages your firewalls, you'll need to involve them before continuing._ ### 1.2 Infrastructure Decisions @@ -519,7 +522,7 @@ Before proceeding to Phase 2, confirm all of the following: --- -## Phase 2: Configure Calls +## Phase 2: Install and Configure Calls Now you will configure Calls following the relevant path for your deployment architecture. Do not complete both paths for the same deployment. @@ -608,9 +611,11 @@ Now smoke test your Calls deployment with your test accounts: #### 2B.1 Prerequisites +- [ ] Phase 1 verification checks passed - [ ] RTCD is the base architecture you selected in Step 1.2 - [ ] RTCD server is provisioned (1.4) and RTCD networking checks passed (1.6.3-1.6.5) - [ ] Mattermost Enterprise or Enterprise Advanced license is active on your server +- [ ] Two test accounts on your Mattermost server - [ ] System Admin permissions on your Mattermost server #### 2B.2 Install RTCD @@ -638,7 +643,9 @@ Before proceeding, run these checks from the Mattermost server to confirm RTCD i Once RTCD is installed, configured, and reachable, update the Calls plugin to use it: 1. Go to **System Console > Plugins > Calls > Settings**. -2. Set **RTCD Service URL** to your RTCD address. If RTCD credentials were generated during setup, embed them directly in the URL: +2. Set **Enable Plugin** to `true`. This enables editing for the rest of the Calls settings on the page. +3. Set **Test mode** to `on`, so Calls stays restricted during initial validation. In this mode, System Admins control where Calls is available and can enable it in specific channels for testing. +4. Set **RTCD Service URL** to your RTCD address. If RTCD credentials were generated during setup, embed them directly in the URL: ``` http://clientID:authKey@rtcd.internal:8045 @@ -648,7 +655,7 @@ Once RTCD is installed, configured, and reachable, update the Calls plugin to us Alternatively, set credentials via environment variables on the Mattermost server: `MM_CALLS_RTCD_CLIENT_ID` and `MM_CALLS_RTCD_AUTH_KEY`. -3. Click **Save** and restart the Calls plugin so the change takes effect. +5. Click **Save** and restart the Calls plugin so the change takes effect. #### 2B.4 Configure Calls Monitoring @@ -666,6 +673,10 @@ See [Calls Metrics and Monitoring](calls-metrics-monitoring.md) for full configu Now smoke test your RTCD deployment with your test accounts: +- Create a test channel such as `calls-test`. +- Open the **Channel menu**, then select **Enable calls**. +- Invite your test users into the channel so you can validate a real call. + | Check | Action | Pass criteria | |---|---|---| | 2B.5.1 | Start a call from the test channel with a second user | Both users are in the call | From 83791ad754e4d2f299776d4f17bf95f005b216fa Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 16 Apr 2026 20:57:50 -0700 Subject: [PATCH 27/38] tweaks --- .../configure/calls-deployment-guide.md | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index a4e205c38ac..2aa989f20aa 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -26,7 +26,7 @@ Calls is uniquely suited for mission-critical operations across defense, intelli Functionality includes: - **1:1 and Group Calling**: Initiate real-time voice communication between two or more participants. -- **Screen Sharing**: Share your screen during calls to collaborate visually on tasks, review documents, or troubleshoot live issues. +- **Screen Sharing**: Share your screen during calls to collaborate visually on tasks, review documents, or troubleshoot live issues. - **Call Recording and Transcription**: Record voice sessions for asynchronous review. *(Enterprise, Enterprise Advanced)* - **Live Captioning**: Generate real-time subtitles for accessibility. *(Enterprise, Enterprise Advanced)* @@ -69,7 +69,7 @@ This guide is organized into sequential deployment phases with numbered steps. E Use this checklist as your grocery list before you start deploying Calls. Confirm the skills, access, infrastructure, and approvals you need now so you do not discover missing dependencies partway through the deployment. -### Deployment Infrastrutcure Requirements +### Deployment Infrastructure Requirements - [ ] You have a running Mattermost server on v10.0+. @@ -85,17 +85,17 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] You can provision at least one dedicated Linux server or VM if you plan to use the RTCD service. - _See [Infrasturucte Decisions](#infrastructure-decisions) (Step 1.2) if you're unsure if you need RTCD._ + _See [Infrastructure Decisions](#infrastructure-decisions) (Step 1.2) if you're unsure if you need RTCD._ - [ ] You can provision a dedicated Linux server or VM for the `calls-offloader` service if you need recording, transcription, or live captions. - [ ] You are prepared to deploy a TURN server if your users cannot reliably reach the media service on UDP or TCP `8443`. - _See [Networking Decisions](#infrastructure-decisions) (Step 1.3) if you're unsure if you need a TURN server._ + _See [Networking Decisions](#networking-decisions) (Step 1.3) if you're unsure if you need a TURN server._ - [ ] You have the appropriate {doc}`Mattermost edition and license <../../product-overview/editions-and-offerings>` for the features you need: - **Mattermost Entry or Team Edition**: 1-1 calling and screen sharing (Up to 40 minutes) - **Mattermost Professional**: Group calling and screen sharing (No time limit) - - **Mattermost Enterprise or Enterprise Advanced**: Required for, + - **Mattermost Enterprise or Enterprise Advanced**: Required for: - RTCD service for scale (50+ users) and production reliability. - Recording, transcription, or live captions. @@ -104,12 +104,14 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] You are comfortable with basic Linux administration, or you have someone available who is. You will need to connect to servers over SSH, edit configuration files, manage systemd services, inspect logs, and run shell commands. - [ ] You have System Admin access to your Mattermost server. - _See {doc}`Mattermost roles <../../end-user-guide/collaborate/learn-about-roles>`to learn about roles and permissions._ + _See {doc}`Mattermost roles <../../end-user-guide/collaborate/learn-about-roles>` to learn about roles and permissions._ ### Networking Requirements - [ ] You know how end users will connect to Calls (From private networks, VPN, or from the public internet) - _This affects your STUN and TURN decisions later in Phase 1. + + _This impacts your [networking decisions](#networking-decisions) (Step 1.3)_ + - [ ] You can open the required inbound and outbound firewall rules, or you can engage the network or security team that manages them. ### Validation Resources @@ -121,7 +123,7 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] You know how to open a [request](https://support.mattermost.com) with Mattermost support if you encounter issues. - _Please include the exact **step number** (e.g. 2.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and [Calls logs](calls-logging.md)._ + _Please include the exact **step number** (e.g. 2A.2.1) that failed, along with your {doc}`Mattermost support packet <../../administration-guide/manage/admin/generating-support-packet>` and [Calls logs](calls-logging.md)._ ```{note} If you need expert help deploying Calls, contact your Account Manager or [talk to a Mattermost expert](https://mattermost.com/contact-sales/) to learn about professional service offerings. @@ -169,7 +171,7 @@ Use the tabs below to view the reference architecture for each deployment model: ````{tab} Integrated -An **Integrated** deployment does not require any additional infrasrtucture: +An **Integrated** deployment does not require any additional infrastructure: ```{image} ../../images/calls-deployment-integrated.png :alt: Integrated Calls deployment From 7b5e793062c896ff11ab5aff1be080f6e97d0669 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 16 Apr 2026 21:11:50 -0700 Subject: [PATCH 28/38] tweaks --- .../configure/calls-deployment-guide.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index 2aa989f20aa..c993929e6bd 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -69,7 +69,7 @@ This guide is organized into sequential deployment phases with numbered steps. E Use this checklist as your grocery list before you start deploying Calls. Confirm the skills, access, infrastructure, and approvals you need now so you do not discover missing dependencies partway through the deployment. -### Deployment Infrastructure Requirements +#### Deployment Infrastructure Requirements - [ ] You have a running Mattermost server on v10.0+. @@ -99,14 +99,14 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - RTCD service for scale (50+ users) and production reliability. - Recording, transcription, or live captions. -### Skills and Access Requirements +#### Skills and Access Requirements - [ ] You are comfortable with basic Linux administration, or you have someone available who is. You will need to connect to servers over SSH, edit configuration files, manage systemd services, inspect logs, and run shell commands. - [ ] You have System Admin access to your Mattermost server. _See {doc}`Mattermost roles <../../end-user-guide/collaborate/learn-about-roles>` to learn about roles and permissions._ -### Networking Requirements +#### Networking Requirements - [ ] You know how end users will connect to Calls (From private networks, VPN, or from the public internet) @@ -114,12 +114,12 @@ Use this checklist as your grocery list before you start deploying Calls. Confir - [ ] You can open the required inbound and outbound firewall rules, or you can engage the network or security team that manages them. -### Validation Resources +#### Validation Resources - [ ] You have two test accounts available for smoke testing during Calls installation and configuration. - [ ] You have a small pilot group (5-10 users) available for validation across the client types and networks you care about. -### Contacting Support +#### Contacting Support - [ ] You know how to open a [request](https://support.mattermost.com) with Mattermost support if you encounter issues. @@ -146,13 +146,13 @@ Before you start, confirm the following: ### 1.2 Infrastructure Decisions -Here you will make two important infrastructure decisions based on the requirements of your Calls deployment. First you'll choose your media processing architecture, then decide whether you need recording. Reference topology for each architecture is provided. +Here you will make two important infrastructure decisions: First you'll choose your media processing architecture, then decide whether you need recording. Reference topology for each architecture is provided. #### 1.2.1 Media Service: RTCD or Integrated **Integrated** -This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. In **Integrated** mode, the Calls plugin runs its built-in media service directly on the Mattermost server. +This is the simplest deployment model, since you do not need to provision a separate service to handle media processing. In Integrated mode, the Calls plugin runs its built-in media service directly on the Mattermost server. **RTCD** @@ -235,6 +235,8 @@ Use the tabs below to view the reference architecture for each deployment model ````{tab} Integrated + Recording +Reference architecture when using the Recording service with Integrated Calls: + ```{image} ../../images/calls-deployment-integrated-recording.png :alt: Calls deployment with Integrated Calls and recording :height: 400px @@ -248,11 +250,12 @@ Use the tabs below to view the reference architecture for each deployment model **License** - **Mattermost Enterprise** or **Enterprise Advanced** - ```` ````{tab} RTCD + Recording +Reference architecture when using the Recording service with RTCD: + ```{image} ../../images/calls-deployment-rtcd-recording.png :alt: Calls deployment with RTCD and recording :align: center From e669e17d59c8f5fee4f48cc54bd157c6317b2391 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 16 Apr 2026 21:27:52 -0700 Subject: [PATCH 29/38] fix tabs --- .../configure/calls-deployment-guide.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index c993929e6bd..47e3760e3d6 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -67,7 +67,7 @@ This guide is organized into sequential deployment phases with numbered steps. E ## Deployment Prerequisites -Use this checklist as your grocery list before you start deploying Calls. Confirm the skills, access, infrastructure, and approvals you need now so you do not discover missing dependencies partway through the deployment. +Use this checklist to confirm you have the infrastructure, skills, and access required before you begin deploying Calls. Completing these prerequisites now helps prevent delays caused by missing dependencies later in the deployment process. #### Deployment Infrastructure Requirements @@ -699,10 +699,14 @@ If these checks fail, try these troubleshooting techniques first: **Do not continue until all of the checks pass. If any check fails, go to [Appendix A: Troubleshooting](#appendix-a-troubleshooting).** ``` +```` + --- + ## Phase 3: Install and Configure Recording + Now we will install and configure the `calls-offloader` job service that handles call recording, transcription, and live captions. **You can skip this phase if you do not need recording, transcription, or live captions.** From 06952dd38613f23ef1c191cacbaa224200641f76 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 16 Apr 2026 21:28:37 -0700 Subject: [PATCH 30/38] fix images --- source/administration-guide/configure/calls-deployment-guide.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index 47e3760e3d6..f3ce610bd8e 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -241,6 +241,7 @@ Reference architecture when using the Recording service with Integrated Calls: :alt: Calls deployment with Integrated Calls and recording :height: 400px :align: center +``` **Components** @@ -259,6 +260,7 @@ Reference architecture when using the Recording service with RTCD: ```{image} ../../images/calls-deployment-rtcd-recording.png :alt: Calls deployment with RTCD and recording :align: center +``` **Components** From 3990143fec9d4e6b82c8973c8a2e2c717bbd55f1 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Tue, 21 Apr 2026 15:52:49 -0700 Subject: [PATCH 31/38] update diagrams --- .../configure/calls-deployment-guide.md | 6 ++---- .../calls-deployment-integrated-recording.png | Bin 95411 -> 68962 bytes source/images/calls-deployment-integrated.png | Bin 66116 -> 43790 bytes .../calls-deployment-rtcd-recording.png | Bin 48199 -> 60852 bytes source/images/calls-deployment-rtcd.png | Bin 76105 -> 39535 bytes 5 files changed, 2 insertions(+), 4 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index f3ce610bd8e..9d1a00809d5 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -176,7 +176,6 @@ An **Integrated** deployment does not require any additional infrastructure: ```{image} ../../images/calls-deployment-integrated.png :alt: Integrated Calls deployment :align: center -:height: 300px ``` **When to use it** @@ -203,7 +202,6 @@ An **RTCD Server** is added as a dedicated media service that processes all call ```{image} ../../images/calls-deployment-rtcd.png :alt: Calls deployment with RTCD :align: center -:height: 450px ``` @@ -424,8 +422,8 @@ If you deployed a calls-offloader server in Step 1.4, open these ports: | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| | 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API (Internal only) | -| 8443 | UDP | Outbound | calls-offloader server | Mattermost server and RTCD server | Recorder and transcriber jobs connect to the media service as call participants. | -| 8443 | TCP | Outbound | calls-offloader server | Mattermost server and RTCD server | Media traffic fallback. | +| 8443 | UDP | Outbound | calls-offloader server | RTCD server | Recorder and transcriber jobs connect to the media service as call participants. | +| 8443 | TCP | Outbound | calls-offloader server | RTCD server | Media traffic fallback. | | 443 | TCP | Outbound | calls-offloader server | Mattermost server | Recorder and transcriber jobs post results back to Mattermost. | ##### TURN server ports diff --git a/source/images/calls-deployment-integrated-recording.png b/source/images/calls-deployment-integrated-recording.png index 9365614553a2ce3cd82b33bd3a2dfdd83544be1c..87337af7dda3ee082cd41f969426af44f46ef4c2 100644 GIT binary patch literal 68962 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 K*aHH;bN&Ok!M)f3 literal 95411 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 X$xO(__P!5|Y)L z{lZd<;(#^)Z-|AA$Z&V#7vq3C?zc0Kq9dWOo>Mo^_UNCeXbo!lDPH>%9W0`fu1x;E z@OW@k-o-MZrKvD@K`O~>RIl69?*3hnJYgE>1JM@xvQyq= z-$~wpc+0a{_g$tHs9qW?H$HSYz0@-*z92%FKTeo9*Zy&|Ee<$eg+h%KlIm zJGDM2!VPI@fHD2@pDGE7vhQ|i(yv%+YW2qC>nKsY#ZM;C&0`U!6v)<@R+f*;6fz#4 z*NyJ=)Ov|cZ9?hnZHS=4(%C%fErkI`5!BUX;(+=i0-d@n@65VI3V^n1i!1e+b~LVR zl9*!RV*dw);Y8_dd}G|pcZr|A^-CCSt-smBkcGY8B6w_SNZ!VD? zK5o{fY){$ZLcAtEz}EbN;Koi!EW>10^_Kd;RoNBOxVE)u>F9`gBGtpCQ5mNTdg)wg z!`xf^8`I1+++QVb^zmg(1$c6Q7oz-w;us`# zIGIPYtNQpXY=0&L+hxs~t9BtiC@row=b=r?$(4)qtYf7x*$nTlxL@h4t_IE@!k$S0 zNJ@P4#WH*4rzUis*Ww1QB^G}FQj)J)JU}1qD{UP(e$M=RGnTFN%W;jq(j**uGC)`) zL=h|kUHU5x4b&z3a~M`IGW>jl1BSpL-Ud}{&Aei zVrINgqHn35C~^UzL9wwL33+f|&aqiF-9FKfxWh|zaM}-C=#)0&QMSYK@TOMQ>bce; z-fQq|Gkk7M3@rNKK#m7xX*x+kz_6usj=z*5IbMPWdP8MDxCW52z#McQSdZblN4TpL zhMFVmlIWQzchxW}M5v*Yke z*mt&2cRmh&GD!YYu~{*+@J!B={QwYFvh&V9VTLNPVaq%=|~x8=)tl0bmBKsM{rn*IIHPBH_LbSS2V5xg?DmgJ~JCrG?Z z_LC!-uSsUBhXdFskFP7Hma6ak!;UIcyF2xr8O8_4HgSsiZ%BG;qJg3L_0tPb1)aA= zyCsayRT4@$%p6V^0g_dLq#tk3Q2p0>gum53%`I`vB+E`T=j=onnhSV!^>PYV%)Kl` zjk`ogPON)i67Ybqi7L1CF6bM%HAMsV(Qjv)k53)n{DRW-yomIv`2MoRr1HH0M(9QB zQ1Hu+5zz)GU0{}j6O~#`c>&_^)8s*R3R>ZaB`Su}U~Uo-QiT6G-L#-02KbvOmF^icFYB4y?skgrQ=O7&?-E`;G?=!Z~ z>%`(?(3(xl!`9Wm)l`GYl@qUWCtI6&3Rl`WSKIN)>-R@b@JFaL5s!IDvV(FSk=hvr zvsDcpmhFjUM?8u@qb51Pe^3a}EYz4TZF;RF_;rwTG67=y^l~H1nBut>eu{Fk!vybjr~5!3UO`Yi9#YZf8*$9JzND7OYFO&n#-J`) zExc39DVLT^(y@C6hQDZS^~+oft301}&-}R6*8^&Pks{aqHQ0Htqw9!B?lvvTP{O#9cnZM^`+= ziGgowH2~v{;X@A6QZ{cO-W=uTmK8kKO5}pf%hS0aXj)8VYTk|1dS>|myLqV(sY0zX z4yl6uk;1TMy%KD=GqxWjtXz3VGSKK`bl^v#PKQtunr*y5v3)`F4#41=~e)*1QdGrmK99fxYQ9r*OREUVI#7n zXXV2UKjZx@bP-Kx6C-U$Cya32TG3^tu#FHSY30s$x7;>C`_ih`w?&1%MDn1L%pGIP zKLv(kQ2voJi^4R0&>s<1RMXVOHD?zL-Sea)nbwlU|DfPaJw1+!yWP0vX|9FKVA-g+v$%w@fy?yr+IfBrnbCv<#l2tZ z-Y-+mLFSqY+R>bzS_!^-!9{_Zya<<3W?b7c3L6ds2kV@PpNEhof5}>X2laj_grAMP z8ELuTfp)F@#U^||gH_nxRQku;&pRo<(KeLfJ~0O+-E~$)M)} zL|PufX7_8L7zr=h6L=#yX0 z42hH0!D;a?DBJr*K8L$xhcDCWI2#ha{7QX7nt3%*q;{p*VAxpj{f?o<#$DhZ$o8&} zTd=}n5l49#e(+u$Bdw}Ty|tS;QzGVdhm+zFDrPa;g5x<7CR}M-M>$%y-8_ivm(L6v z>gL7V!Vf6mni!BxjBl&Q1(S>8Kb_skJkA~0o-mq-i@6rj{YxcJ_EhYYd+rK{%s*|r zteJm{#~48WEyR{rXhen?H-%gNM9_*3{se5givC?t;eX=X?;H!kufG9nWw>8+EQBuK z-;K$_*S|9<3JXteg}2-UF_W8uze~`1x2*+Ty=yGZL|mEi^w>YB;*Uu79Iz6Cs)|W) zqwX@zA*EQ-C8Hs#H1QGW?=%f@5u!yd3dS&rtPciGMCj-wyx)EHC`~rO4E)H5n!VRgER%X*%{%o=1dPos4V4Z zVpOS);xDXNz0y-7So;tWJVT~)GuQX>J=5t3MSEW~pk+_YY?HM;_dNQ7y0dEF?C%OS zmN)a$uD4m!U$bieTpZKOSF_Xca%@_FH&J?qiN~-SFmliB2 z2QYTXz2UOvs@K6A7ElL}q(JtL1S5ElqHpW4%twVqN|%-Q`Haf&M5ud!{9@<{TT^zh zG`up@xs8*CP2vUIzBq?bAy(4wr@X0 zlDrSOMIgU#Oq1KxTEWY(^lFtEltELsslx26q0(jFCE>jaj7;vG+|=~UAeT-Wd8^Rp zo9DwRZQO3twNCV0oo}3g#dM{QyTu5~tN_0G$aAwhUbYe)qiu~9m*xDhbz0EYEy)C{ z2$pmG$JcYf+Yhr;jf*jw&4Db8dulh>OJ*>!6wZfSuO#YIJSa$I5v5YS25iy6f)GC- zE2|p=Z+6zl;*RDGa0*5J!)#tIc&lNEmh=8sDU6_CcSq!?9sky7MVt=6hPSQd!mf z%!c^lMkfV+_$us>MA3%xA6dl6njtdQ{eih!;Aot(LpHx21C7LWt9!fm>GtZ3VX>&F zvT-v{z5#S0vlO6JVAp^m|I@|Yq7MK%=PCsS0T;m zZ|M%nVb4)oAaL1^k}f@>`8x5{(=yot?s=wj94kSxc&`CjT||xq-Y)5KlC^i}r(zt3 z%t0IB<#6JJ#`NtPg#SzaN=T;4N z695u;!8;gfbsu=yQfW|n5q?e9#D5E`C+J-Dp!G%W3v9eUftm?kXFT+PFg>&wU3Kol zPyq3n?&ASus6osn6Va&!&#XZus7K00Zq-L!noUdN9%Od?SyYtD6S{M*=dXG;jVH=F zfIBSTV8ZClH)RWIPo`=%p`Dg!Ltk=+>GNb?;WX9jd_RjpYOCHbGh*HH%DUuEeP@ID zA`7P9m@NBvvFQjD4fTuXKwEG(L`8sSj-JyAlIKOcSBY8S9$M2QC9_%&PP+?stuTZ$ z2Gq=|)fuhAE1ym}%x9!#p~53?Wc*`F+0bggOMh$mp6uoOC!PQQ8&}_dcPN5D<=0+< z74qm_$l`;t{Q48h)@SGSUf~Q(|2@rM6@Ths2bRBkt}O^;*G*-$JGY!g;vkHd5eNVsDu6@Rs1&{ z{ogibOr;RE8`lP%FY3K77RzIg|7a6;s(L3_YZ2mGBNIS8WLp+9Q|ZE>gAck(*UDeC zOBy|fSiJI__qlD8%WrEf#$|Z{LX_Kl)2*T1Tfw~j=H*V;tKL^@rauZR+L8sNhw}}d z-M**Q{PX}k5#qrEm^ND)Hz-VZ>}#nv?X;V^=+jv5YkSXjt=8%;$6+DpLtlkRhrKq^ zS$QYK58x#sj+nB(_SI|&k4SApn{NK+E8ygS8u)?(i=vp2lksTf#ou1edd=RJRMDn* zr*b&kMuK0V;>NLRLzu+h5BTf*{oO_X8g_q=qW|s8{JV?(?xO!!R?}w*1|&cBq3X_O zq3Z`dA*x_4$;+2a;{b`I7>kdxEqp@xyv_fuWXVf zI86ayh0}8d*j0z1!qm(Cf1z?=Os`8}gXwRWgC{jfQ8BG-G z#1IN~Qi0?Q9GO0!b01!q%@s6NP$;h(C{(~}6lxz11uURYZg)^9++!3<soxx@Y?`N?CYx;az^T}PpQwuF_Q#7*SK^)ia9gwvG%3v z;B!A-re?lmK0*7vXObRax0bgn1 zrH3d`0D1G|30ruPB0dH4gbKJwQa}W+443py!i&iNf8zhClk-rHI<@H5ty>=o4XfI- z(S96EK7Rva;^JtH*kEFe_ECvn%+~+)Qg+AoBTN`{{i{@`(5% z{RfpK!L}@wB$5mwlvHbQNJum#r;dV;PhGFOSB)v)x)VQ| zn%X{zd$X~y{Iihun(c%w6T`jdQkO4Z4&??D3^0|Em2E3Bu2mq*C4%=ZX`e&|?6U|7 z#SdI!BG(>f^u?h343oBe0&({_L(veBZoC|32V6++{u#8w){Dd4hb!;`38xb#TMN0VTR*7G)ecI(&{$*l;x;}EH3HU{$f9!p>Gjm z!EJc`s#96I=0|8GrQk>UfQ5g zm&(kFLL#S$Hztn!VZ3tGcj21e8tUrIdwWG{mE#jkNL$EHfd!p*-lGM{W`lp^Cb7Oi*aag6L?lnQ@ynO7b7$p&0}e4DM!u2hFniud&c=N zlwFO+m>-$Tj}LDod=TuNJ$7H6w0B*5a3T;xjrQBm?buSG6}nsV3_epsyOK4uU+jOF z-z$6m?5QCW3M#4^BQ;tQaDUrG)Bf=Vme>3zYpS_T0f)z0|y)5=-zjiAwoaGAj%sV5Jc6t`^LY50T!xKhj$`llyH#14nQBSy4~x;C?s)CkSWKePvBKS%AwjK=R65tU=I5p7=3taB zhW;we58o6Jcr;XO>gd}0lCf7k;9z=5a_PQXh^;?$*?mkDatm7~6bLVbOHYKVwZ zB;{~>b|qT=W@ej}Y_|5X^{)yhj|*Rniv&$??_7_F66Qn4{{8zrJp}G^>3PP>uWjqt zIK`=2uMR6&w6$Mn)vV=uUvN`jx~a!r&8BU-2Ru3Rubk4i54I~kEc&ionbjL22t4tSjW2hmPjIxxx{U>@+E$H^(bYL%8 zd&l|sj@fwAl{Eom?Pg+QIW0!}wPqxbOWRAQAC0DpJagGs#YMmDaV|F1V5W~^`AQ#S^!z+m$?EjGcVx8nqA+7bvSDsgr#2rMU%t-8^)nm06Vy0ywC~u_5&EBNr!|kFzKLX3n^)UJF{!9Rmd)w@Z)vqf z1nxf9q&%DFNkezabN(S*-k+u9BCO!gZz<-+8@xIlJjKLtrlZ1XBq9Iz+$}srBs(t) zBdH1gDw4WT2M({U8~MLnSTLLFv^GkXWBj-Wu3T+)9_=q!qoC@yST~#+mqNYx70$&m z!KbY4t#9iZIlT$eR_>+Fw!~>gzbd*i&67fHtHmvH=LAIR_Zs(4WZZvsX8rHUh*os` zfuf9ziGH<_1n2%kx$$VOcw_g3Kc2V%QFZ+KdIX&>5@a7x1-hZcH#X__2rd5c;!I1I z$s>2RSCAha@%+Gh*j-vom(btW!3W_Ba<)bhLl6ILzd-LwM|suq1__ zZg>5BP4fpix_P`*d3EYpSXg*|nzH5Yg!At|M@fb8*Yyc+E2^l(ZsD?T1-!dA*zYP7RXe{NZcj^=zK*``dn|FYj=x zFW>)VD5D1&`5C{=bhB{Ol!vs~j=AbbRXjs&C82Klt*&6nahO++TZzx^@RJ0>0pEJ( zp61@1PcCu}1)5!OzXt$6Ska}8e-32VM{zpq=Ccu)(XQCWdd(YQ=s)ZJg$~cIw~)~Ni1bbk$51pN%G=GKK=W|LEf93-g7_I9P}`G(rr!+LLS1i|F#*0a0?>;Q8 zu<@_=753E2D=?fLr||mKL$o+3dB1d})Z26{`w@&9s zE1b?1wkaTb9dq*CMTPZ+-^eJlkDDsPqCcIj&v41+?pvAD6JApcr0~^XqscdM@;WLD z&2%1o^fW=7wSLGlc$JoCB&o9Pr?47$Xhw$QUW*7FIM_IA$(c*M?G3kGXtZ}$VsGJf zisFOvSt;=5W6i-qty)^>IH4+ss71bP4inLxJ*y0@7FFKVsjmj{_EL?3HFm_POEnN` zm@PtSMf=!uRQ+wj?Z)c9v*);5@FuWrO-5=SwCTUMr_0`*`bGXKV`+>x-GdaRP7Gv% z4n?V>81~az$02rk9G!kz0E(0VxMM8RL@_xf3Xp-D&A=8l%kd%u2-nDha1;j{~h_N z?Dl-|w)3cS)7bd1+(zg3KxyKo=@%hETG{`Axdrbm4rSI>gj%y#wd`zuq+a>rUx}?T zbl+;QiH(hosy}3?R(HBDA?DN5FsbvYp`KtpX@w%83O)DdboxtFGv_U?4~BnY+3Ecy zKR9-O-i{r#iT#*lc&ksz$X*Sf!_3ldvia##Hh0TL$fxM)ZprC2PsDt9iVOQI8q*o+ z+3Bk6N_fVK9!L;{!TO&vS(BY=eG7^!%cwI?v_B-K zi=d=>2xEc1!LxuL1uo{va%aA-yW=03mbFD-Y9L#Xi1jtRk=`6Wz;E&R{*wm8aoWCX z&TfTbB(O88pVq!`b?D*Ngr|~uV!yGTv8H`nB1oXOe?PEkG$td;GHKgL#H@#`kJrf9 zlm?e1uY*rvRf5;5!uJ!EFaJ3~bEg8`aqXn{j#3PX%j>0y(Yx`x^hvMxFA!W5_dxlU#oo8E1MT9DaNlv&Og?7 zXTY-wStCKGWERYK<6ro$FK5YuTQh&{6mG5F>pYYDX{kx4ft4Vk8PjwZBYT**82$7` zy`rbn2un8In|k5uzDzCZCPEC%R(Jg!H7C9g{A|6sVyF}OB_%z8l26HE5oolb5c)OD~kfZ zN7!}LUll(;zhxm!GGrMLI}EmTWGDXi(*~miz8~yH!(-{C;_^|P)%fnww$QxtY-eE- zf4vo;$Tq#i#nMU-@XcT;9hsS#Ts7CRRft8|6cOIl*{i!_{QGAw+EWYWyNfgXTlqo4Q@Su}Y0XeS*r?Nwb4n_rqDmA!lX;frn ze)RRFEqYFfc<6G~(k9hpJ-iW}A-)@AHsQkavp>1(1nTokkReXUFcg@K9T;>L3nV=3 ztJO_2ONq-J9waK)7!V@w;Ehun9weO|Iqi}OkrW|L#>gD8Th30tYI~f??G5i{{*EQ( zKhCwy9o(D$#x+-SRrb@D&hdG4q|S12JS2<{8f4)yq>e>c*Y7CQx1g`IQtDds%#Dp6 zYOPt9o~cabeZqZs)DZkeGx%HVt-_^FErQ52~ z>+g;7X4Pn;Zuv|8g|VMO0fHeqRX-_CXocaG@^t$i(IoIbu_-+9oAI!Q^F%c~(&Z_E z$zp=jhKfDqDoxO1iH~pIy&HSAG{V={WP@o>G8AgtOwgkIewm75PI;ut@qMwhGR zvJ@A2H7)!h3eW}R=;bGf<=I)C+67}@ETzNVStkkXST{NEYq^MZJ)PFhx&6L8b7WlTM*;!dKcsp$4*KYx()P_S(q3J1A@MrX`z;?>m& zRwStse6|WgkoXRHyQaX62Sg3HGM;~K$G0v0!k8(lCs+egY7AIGCX&z{{&}U!D*w>y z&)v>3Ysf-lf~zD74j9(xHa34x`;_s^$I8zS0ddfXnSBT{I=AiEu=aFsX5gm7%@`!| z_5TnKqyUklzbCMM|E2T0FcT; zzgaWlzMFl^-=Xh@_$eoY9e6tLk`&z!05mE)MUDJSVE7o~k)o?^Cr_aS?j!ajYs7F3 zM)u*lzn}hwE##y2#fU~^4oI0KMIcQ48?JM27ySTKwWKokk|n1y_IQEFVGa0Br}|I9)>Y4J=pc z$o(gt4Q zv{g4YHnw-Y_EP`V8B(L7<2})fNd}gdnHehd*?K!(%?5W99!l6-t%tTyQvaeeoMMCc zO{fSfbL_A{j^T$24VXSmmjFpv|NZ;b_AHVJ0iB*$pY)>L`lX=KjR$yXG`Pt@PL3=) z*p@)e0#UZaRE^srHvreiuBEBp0Futc{sdxV_0UtP%Ec3b|At+rDMNIg_9O$s-pW4S z?6-ba@vL^X#X@3G?at@KcGjf*jx920dLXw-Qcw?)V%R>*{?5rgiNkvc{_BlX$liK1 zb+n`v(D1u+3rSz*WQF=^mEtHIT4e~!Kk#p0hD z-+yfElJQbXSDKhii|cs#s|4D_e`!_TxJc3ym!USMfxSq|c<;x8v{o?^#=W-G{>{XY zTjZ#3&M@3_l@hG0o;=dk*SB_!#MSNWtn^-YdjcjKI!XEc^}BbXg&}ve&WF{6eWk6z zO_WENc@CQL`g$D}?YP$%t=a~x=xtnM;k~t}nog!tU*Xho#(MC`3t4YOnnqOM-szR{ zDwlMqhcsh;vqL9+^DE2XM?2RGbe=FdhhETL$j1K)?W6I zi4leuf9&nQ%GgP?|4#lQM;wFg!_>x)cr%1}W&oxH)8okwr&a`{nLSU+csHox((4$2 zo0x#;rC{vx7L~)r;fdwH6XRZl1o@tnCaUF6m=D^xOUh}#5Mv(0}j4z%V-ND+TO{{*IZ>l z=8F=4?%c-g-_q{_lTX3f4!B38aNBb!EnUuT6n${!4*YR3(J#=HMPaud*2YIwe+$Y5gq{TRWwE{i{t*B zItTeW#b%K)X+KA8Y#5gGA+RT-v3=U=GEZ}Y)A`z(&&XfdPTjs5K3T&@)i8$2?%BBA zZ9n`AYmCA2sy(5$a!X*_*U6~3LBArld##(!V}38Tldc0(SR9D}QAEd}2)){P~(#d2k%`^&P$=Fy}$?~5PIaEVr0;^&rAacyA?w|Rm0k2ka+2s(UXIyqc6 zM=Roly86fB#g;+9kU7Ni?ZEAklpMdegP;z8WYD zr~pwrU^Vh>nV&&Q>iJ6)yaPssNH7FT%?pn6d%$Qc5$Fw1vN*mmWH9l|{)J0@%XAI+ zG{OvN_KjnYn zeBmkj{wAeE%0(9a0^?l;h=9M=Xq_xKn#+ExG{?O=CjZZbt-S3m*C3v(d_p+0rJEJ| zg>HUS&bWN0D6SR8J3|xE0psOg?QgzK$2NL-(d8H6dxWGy-v^m020n)W8B;Ebztjh< zOcgVPyO?FuWEFgUZjMS-0P_ifS}=+LER#2cQ{d{G)?)~GqsccNoPBYMH>ar0(*)%0 z-ndrUK|d-AsxQfQO|cLWBk4p9UargWR@xV^Fl40OnaXy~E0!iZdXhYc6)8I%9{uUX z!wp-z7R-&?w?*CUJ-j!HE1f#t8ce+<Zj$xc5(g4rhAH#7#wy9f6Fx97&Rb-_*Fe zryk!IMsoavM1HtmB9C-PspTB*j;AWSgPX43I`|d6^oFKK_ytM4eAJ7oFZy`$ zK+TsrAi$0`s;x*ALy$y{Tqxdioz1o8`h3@t)5x{W5INH#^$XE4Y&6;I#ki7z}(qL6$cI&y>bf*fGSS&8?%~? zHM4)(0EZed`rerLJ2L3Y0b#G!=BVxfA|;=g+pU^={ZVx)O;4xcX(neLKru75zTHTisXnI+^mI zkHf*CR0DQ8+b<=1`uC!k8e?1@UU*?;|04k1&X$3(owg}|&>^3DN_-KqY82f`$1dj< zONY0p<30B`JO&3Lp8JXv!T(bvBt7Oo*KT~@t`fSbyRp+hwt@Ln+mJksn{TcR+t?-i z!6l~6mKSvUuXK^VkPj0$kV~0b;trD*S9)DDGH}j)I7WKwA0t1 zv`%n?l;*hSR26}IOi;(!!#_uF-gem%vffCg=esc{Bi5qu55O2w64Chf3=RV=dJaxb zN|j!OWDKmaL_{lv`agTA)$w3-x+rNf$Xa(}yb&#RiDr>8BG;?pqoSG^mFwOR zC}8&ndu$SjwwD_n9&vU1&v~M!#%wSmZtE&w;4Ra%z{MA7%OHxOwd}X&W|VxeFRG5w zAmjXNW;HXt-%k$V)P1t_*2HZfBFb<3&TP|~1MS!jb(JkVg1C6y-mJ6F1?31{D}-C@ zoXB*_dDmMj-jHpkpHjTcEvcKLnx@K1UL6xZ|3YI03>ZnclRu28rzz@kMU}jGc@Bk( zqgiEu3V~vup(g~?FL5fJTb=k7NRNt;|FKwcfh}uUsWmWN?xb&xA|5)W<9wgvvE8$8 z_CjVrq;8)g^Wj2dj9X;;AjG6N>(-yXgK+{KJDb_B{dKO1DK(J6y1Hj?%qBow5Fl28 zrLX`=$^=afGm!iKsL3*J?d*7wg`5PTqP2MMVwN(%^>iA4G2%B=$PEE~j_zk_@r!6(dbE{nGw&3d2=EAyO zmHkS0!ge>z%ge>BC_BvSs<@j;g^20cBR>ZuO-$zH8+2Vk-?DY2>hjmvILc`mG}(%O zs8WoFx!T}wz>W4J2&($pu9(x$CM<0RNG`FOWRY`uZ)6x|5aD#IWzd4x`rOLISy%Pj zEb9^FRumnJYMs4xWC&PznS}^^ix^yL*A+KZv0EKM3O81ZHX9iW62$#-elYrjHboS7 z_t00k2zRyyQnA3))lA7fd6jOygomn@n(-s11C*==hCcs%|DGb3-zTzo_1Af1Jo$^A zgOW;!Y?PP)Fh0eGiKQs~xy_`umMQauz-s=hbx>3URwMG)sxi;wqyDUX%oSzvq&u5g zRANvV+@cf})&mLRTqfl){w>S>92c;VP*b~#8qVP&z`QovHcS$sffAMac zoO+-|3jbm!5GZeQS3Jm8`0YJq9WEU%vYj>hN`yK#mGMlS)}8+{M8|5{rMzWT4^dHI zRM#}eU-ELz*5Adglt;1RI68GHvdJ;E0E4Sy&x6u#?0sh?rX8C&%?z0UWKxlEl_XUt1|IGac?Qy;zFCDwz(g*|= zz3v^-aI0^#?zgo3Edw=}OUu7O_xrebmHHTcWJKJS*isy-3x}kqXehNq?h!x53N{X9 zV?BcKIeJGeBYcVN%lNxm{%D}u`H%1cl45tf3jX-~TR|Ea$WGxvAw>}zf&4|Q!Uk(> z6z*3JR9RSP8oAJf{bZ~TpPNm%5U$&x<9Qlp3)26sI5ppG>%t;(gJPNh9&k_HS5Yh4 zq2FqNz6U2ib(31+;4zrdw9hdAkan?Wu(Ne#opw-K*P6iv%WykTYQr`WixcP8Hp&^q zzY2^?RB$U?0C?d;Yip1Xj1SR4`>X#VMW66!z`!hk2M6XazFlcgiT4*{4s^3W$+sn( ze>7Q>##p2l0(G_g>e-fCAey8&pe{0rE^P`o)Zi$a%4&v8Io)vaHK&zBIQ_jd&Gb9M zdOL+MTYJ7hUD!|HfT$esev1qfi7l?g25F&vaaCn$M=X@5{4$HKYY0(`ocXb`o+j%@ zgB@)y&4u8`;kOByuKI%etHOj4hON#fsErRjSNba{|0mHxN4%eu+1=K{)+U`z(NVlD(ZD>^oggbdXUwoGQ?YnoJHZ({% z0c1~M!p6QFuLA=Gtj2yicLWQsL!iKtE<_52pn zZ7X5r1r;0nBoBoq56Zq$0#Er51gS>7WowW0W!g(l`y4Cc_DvU8LGOS1DbDEcV@v#{ zg%=FohhYNS8(QM-7_Tf1(-*e0{SPL1q<#BwN-C4`zO1-z{!8TZM;x$pJ^V%-mlQHy zeq9~-K0DG}u7fqpLuY4QY_=1q#a#?q$+}DJ)Wv$?hq`-1*1eo0d(6SDGkjYz7a%tn z`N`p!ELk-lLrD7oRfKlPtm_liOexLWSdndeyRmzO*HVyOTbnUSl*c?!MIrS2(B*!o z#%+vap*ApIFyzvM-O(UEKDzkR20A~?DLcZy+lyoc4rKMGg_+C$12KJH%&e1qFvAd+ zq@(Mz?32^rKE&2Csf!!;-|{>04H_W*kgWCRotf#12|0P&;qyjcW4Lp%WFGFu3qur6 zFJ#%~i-bHbv8p>*VuNthSYi=4HxIorB5uuV?%&CO4wOT(ppC{3T4gxMO#*5C`qahc zx|rCwb+aJ3J!{*zkCtJRL^Bk85(^!G-bi%Y*TCh|rc~q%ogZ zi>D*!vP-#YZ}+tTo8~5DU=z*7^vy+D&h#Q$S=jrmJ=Mf<~aZAni@mvR27>>ObV{$Sy zW97$g)k#8f-+v7%c|&kIopsCOMx}l7Tny`$)t_)Epw3fw?dU!A*O(e#8parJ*xF-* z)E8UBdt_jM>S~jpiq-sLhkZc@Yya3A&CeNLY6wRY5vq7t?ZCgK@*BE0D6N@+ zrrDx%UOI{ z1Y!$P>wP7EA&N6eC=M!C1S7>0&+h*_YmO`TDlz%TwdtxM>hpp&i)r+Bnay9Is2@5YaL?D1b1? z?!8Hd)B5)J)4@S_v3hkflLn%C>s~bNQ1E@&z z^7HeBKkx340sjgQfz zT{;wK21LdW?m{g}+U2*{53{t9T0p_Ra+cPz0R)#lLSTfkgZIEIR!YyN@b9O9B}Ee- z-%*9i7CSU_Mn-2#L_!Q#1cyrAZX4tB1qmVZ5dlw$ZvYzR;F(8Sto@0wawG2+C(njR zh9T5T5UQZEY6#;Ha<90@5CNShnWktq?}pVjEp#g)mD1mE1p3bHsC4e!`I)#Evlm?c zi~jW0S}{Sx*YcK&hd|=H{c;7yIGoewCEahC*&7hmCSbS^opXLO^*E;XN!bu09+PW>kU>C)a^0*rla5oNYF*@9>S3{hK5$WzZItjk<&{yA_N#*TR#w5`jhV(1Ibc0tUu->C`6z|IbEO>S0RTy)#4DjTZ_N?7lrg5 zm_U4MUwgHe*hRMW0*g^>>3vmmB|WJ1J4m|(0>Vt8NcVTqXKVILUXw={_TLkfpvp#y zH)5C)Fi~aTS@(R}i&XJk@HFaIP7RS<_2~3!Q2mtlY0@ZTPTDOK#BtDyIshLs^7KIO zi>0G#(ZS)@7J>b1@4tvVfGao?(kWs6z+*QTi8aJU-ekXbI>_}XmQjS(732(X5k%dZ z&F^lA8}ODN;#lpYqF90Y3!pm2SM7+lZ28Z0E=L6tb8DPWUDTevJnELqI z)#zp4O8d#rd$lvkQR%+h%KqxzKXNR;^d#~oJmiHtB9cwZYTzy-Vc6=JONUW^+UU!V{REe?_7XKL+!I4GHsCU_9Kyvw$!aflvF^LIcdT zyFZ_-CH$dfI0;&&X$qmep;17*g<<24@oX%9O#ixj>H5zi>-^s1kxI=wbac0Tg;LxajyHjIFfL_r`_;zA+ej)Hz>#&xeuI5 zg|5^@R?1T(_i;`UTOVUikjUMX(71@X+RhhwB8Nay5O^u0>zfL+4)w~OI7nLvVIi3N z&+(oNU_{>9gm$p)md|3#!oNCmyCpD^7qcQAQC}%f*fO6I9{RH0+(LW+pfL6qL&`7nJotOpr!>Dq5yd}Z#(YPaD%#E*O8Wmpdce?SAn+k-6rVp zv_+hCd$vX*nJu8F<+-=XopDCgm&)Irrf;zX;}E_$u!yTZXSB<2= zHk|(d)LkY2t&REr^=(C?A+SdzJp{_tNE^v=6NAV2Z)ac7zI$bnT^5hl63pW9T3T9R z+y)9zHT{#7}(0gb z#Xk7^%_-POVP89JY7NevriDTU1`C z1E%7uc>$lpXl~mlux&2St^337n^Qxyu;JwwcgYcG&8`5W1bdmF8GaZke!!nMp|s+* zcMRKYt{VUN(3@IQQ!~2o;PuN$R{3_=S22Dh30dUl$MqO~>v0)qxwu>N1#ZEu4>fNn zzt$aM3!_SLlvPBS*33~{gyhli0?WG#Cv3wI*LIq2mZOI0VP;NCOJkFiM3dk5k>UuF z1MiMXO0spm3s*W}hAlEaH7LPSvVGsjN9-G7y8XzK7X~x9Vu6J*UuwYxD&M zk(d}V26DZVXWp-hx6baLTy^Aw)x@ES?n?dopIYDpykMV+sT?&?PC0}F=INq6D%9qO zd(S@h%A#;w|C@Hf{C~|M{y(*|54H%Qa*8k3HFhpQ3qFcL!~Ea~u}^yoTadpY{bP1V*? z^A@n2)}zL*6j9}lxZ9R9t&x`*7?!u{*Vor)I)$b-_v=1>ylUN>_6D}7S&wp~P=6Vq zr zQ>t}ehW&X#BX&iPXvW{e2E4h>BxHQod3iM--Z(yx(bd)-euaZk6E+PB3oQ&@5V(M~ zQczPXYiL9+O*NWo>_x`Ju-(0Tm-kr@vr6G}fxQdQCZtu=%}HA`LyEG+=D)on9%JIs zFOxB-v|HS+F5+%R_P@~!JO5~~6HJ;7Bxd|z=ve-g(X`xB}&|T``+oPr{yE| z&kKu6ySlpE^|N>yb|1Je4S(K!!kg5&zCGsXT|iF!@;-cgDWbf*-1poIB_$<_DN|h- znf&?k5hy8i$Gv`i3f+H93E930qLV4c} zK6IUvQ#mR+x(T*8>gj!a{pOA0yNe7KqZQW9OT%~d%Pig>?!kfw(~7E%$Fg6$c7LuL z%>!$rZRfGKJ}bxM#mp8PAK#Io7;W+UpEuA`I9(|UnX32%s9cUzrrrhHGr%UhF7({zq6#@A=7f=eK|I}ja^huhzE1AO ze0N8#RyKrh({KjSr)rt4?d?$$wH}0+ve}|Rd>DZT1un z4S9)9EA2E~wdp1O z>gMX&V0C3L)!B~;f<$Xn*unqgpHtpnxt(*{V#7nf@)*rx<>cj+VL8}@h4u6D@+>Cn zJhxGULwOZuO~JH|Q`?MZ&z?nWmWJ9xJG(^V6_u5gg6+mCJMpE?xNe`-riTa&aFgMLE*WQlc?*0dSM4dr`zA(kyY`G8ITe|iH}H9!}PU$813wa;Qr1k zPfIvMw0TSTq98pp%6D^h$`tHjse|w7&z{>;HKvVz!Lx|V#V@anRdpYIu^+1>x~DWs zK}pG8wW~I+)?VEa`L&e_T zXQq|h_-Q$YwD6ghfq~8DlLsWQUHrsXY^m9yqH)rdhmu87Iq$>6<0>ln3F}~_2kR13 z{>Q$BRZh48c7k~eKXE$Xm8MojHHp29?lI)PL-jD`(<-uOU_+YiS2g-~73bo9VE_`W zoz#i$QbxrXR6Kj)Ux4L$i!AoNA_Nj$SuOP>oE1d#^^2UGZ} z1KJ4XzWe|Mfu86RHMP~ScYI7tYf}jI>~htV&V_51f=QH}!zi2PyOz?$U0)&CYI5P7 zNS&5YzSChsXBHM-WM3?JWvN$7Cb273O3y_k`SRcS3&#vV9+K#E(9sI#8}Q`w-nL6r zCSu^X8Bi!Sf=SC?)p_(N)^4I^5DB5S3xKQqS&^ zkHh}HgAC(Z_w5$6|50^sQz?GDx_oJ}er&$$KFUaoxE@9-;rJbTfE5+r&&|iG6OS{TtmJMmNS}o05oS z67g8!LLAwBdGvjgnFhb%$sBPvj#pI@l&^@%hU%6xGT4gEg>8S|GkEXCMR=U18(t&S zaOy8Onvu}I?tK$?*UXmpdi9{qql0JO-oB}RF{pzF40`y;r%wcvEVq|NYA{^F+r>fe z-=AGrTWc=WdVEJkFLTE#U_bCHJPJgR;1RpZV|6am1|#sH)qcTByAd;VeXm*REkAmq zQ^fVoucM=)*lygAgLS?Jd1l}?*{D-l9z2?HmK-)(BsS|t>?N-|Nu7PUS~vekIs~Np zYDMqbu2VD0kKc3MB0<15E+}YeyjrU{f@!s%tQj|$zZ?OP#%6N`^_K7_gvW-`buYdD z({xXwFJXIY|6plpDd0?a_$Xz#*-Mec3`_bLS-5nj#Na{WIJKD2K_c*&n0iJ0UUf%{mB-!gA|B<$K z>pySKUuR|g-oOou@a#qc(TPHEkL{M#`khZ|#coR#V9gocBlL|^R3X$0{nbWi!3Luisl2z^pRHCE@mkx&gd3JF77Tf@H~k$zP({Eauvxzy;vxlRfF-^t3E-j; z-;-Ni5>h8yZnTfitjNmCchtDyk&F@rUlf4c3a+83p`j7>b`%2Ky7J_$OLl4L>6UF# z*MmpfQbavOPU{wBWMu5}QiTFMGDMwYBxtdAfLR zk610IRAKzOI^ucAM(Ldgn7(;jN4@+|Jgw$!1{?ZBL=52Knf}K|m{A>YAJ>FfQj*h< zm7`KpZbSZa$rEq~WYt>dxp5Gc_M}vArit2=-=fa4P&Gxw(tkW#jVV1OUH`#@mjHg- zekSk<_;!II1B%=I@Wn}LLLR=3goFl?XPH^kxi)ZzbomG+C#TXhK>*ENePx!)i=&wQ zxw8`g{PRy;A)($3qZ5j&v>)5o=F6M(OFi)w!o)Dsl>3-Hk*8YA#k6ofj{Q9A z{;V?BMNM{Y?zprxmXSvPMtV{AhwU95$n%m4jWYuy?E~1RA|zxWVJ=1XU&23Zv+vQ> z)Ql2O`P1`R`hG&ui2;ENRm3PM26KEXyK^oTI+d0LXf$k?{s_5yjA>_Sq<`TLYU@lc zGmzlB5UMqSl(4WwMn=N^1|sO11#+_x@PBV3{$EoaIQrlBcmF^5ZWde}xc%ZlZnP_I zKoP!#;^cM%JeS<6S1ZY&IR@ATp*j|zDD=al&is#t_|#&UCUy>vGM*MNO;=af!b<39 zwFHzH>;^7VtWgb?&j~IL-okp@pyC6!ag9QMmdc?s7gQ-P(DEz5+{((ZiHeTlOCi5S z0fkWTJ6MxPrvC7%pyQ+w@OL~0KKw{7jP^Rj8Z$^4orwY%iKEXy@BY$8^L_R!0FHnl zWfm6X&9O>*u)17c3wp@PWJ&g@JAmY#%1@%91bT zLriNc&@X2Ll!l!ywd!W{R-XX67SZxKFHdQx&~Uy2&B6kKO*_U7Fpoo(+d|JZLPH#Y zd;m(8;J!60y0?%7a#*^be0Iwmc*Sk15LxgxV1!1H;-)u9Z>GkNj~k7Yn!gJQ+Fa;; z<fdQDG!Zzh`8 zeMyg;T)*zcUCEEm>XTl@^JhmAB;^fEPQdl*~@gKUCQTd#XlrYKIUonb z6ZzwZ3^}>5*Jh60WZg)EIC-RE^bJKFoj5%%swO-V`+zne@rXgxJ?6>xw~L#K1LBYk zXCfW}np=v1yJvzfu$Y{~1Gd*OblcRxrvliWdb>!=lW>F`1qs*t8xCw0>Z+vtW0n3L?~MW=(UI5gUk#|olE|LRvTwWXHZtgO;+ z$(UB+lh7q4cNCSB%FyRwtH_4oB{K6~&(iRcL7j!$H*dC>pL=%`0DOt0U{Yt9|FNHb zso5JgHZ}!U*9x|qH#=aREP?%Q&oh8X0OCM~@(6=%3aAD6ZO?q2Ld{b@5!C=PKpQ0E z4C!|l`vBnsw@OBkPFYzQMX{SM-BhE$KXTnrI-&4nL!JkRdXU&;19rX=(#bs*gyu(qk12s1Ix$z;_u_)SUN~a2m><~UCJ|@ z|Kzi-s8YVN1q(e9W*=kVoz=|R%eL9^qkz|)^s3De+~$oI8)?fgc* zIpIgtb!Cd`ACRyylTT%3->^J)y%2z@8@j8PBIa2(_Ouw5?LFW^9z408VWE!fCA)l2 z_og+^A{%~seJ(25OMrwZ%2*AgB*W*iAb*5$hhNK5P08EsO6q*7sH_}aP{5TS;aj71 z`v`;^n}Z2RB^%0kBb8TM5Y)W+8pA+fSnSVM2CK=)%mji|IV4c9#R z%4>7sbG2YLY$HAzwiEQeV5f2;`T~>0xJkd;(r~Fkys`25>6Ld`85uIAOB~l_?7`*A zymuT3Wcp8@eAX($m~*Gc8P(+FaR_^?Bpbu2467R^-SuWj@ExUS(bEKavio z-$UDI^kPS;^NxRum`S9vqygwU5?C(~fm##ztd_B z0}^o)M1cxZ=?HpZ7O)R)g7t2DsT=46P1&no!E$|9?wQ0JSSAYE)An5K2jj$`PvWt~ z*x3#F=hsRuIzimm$QN^*6f<7`PQQWad|DpLBsrNqn)&+mYg*z~U1PULg&qC~FPuie zzSadK=MTjR``s8B8FBEh0O#e>FZ;pX^rJa0V)3?G&)RXNn0yP9lgHSWyOFcA^UN03 z)Wc8|7@g(%OdAGQGQX^sdpuS0M4E8Px2V0`XU|#XzCDaixM0y-SH?#eKMq!X-CyWU54JS?TR_FYP}s@`2_(Ba5L4q;1h4{AR9^)AEkhGb z$$F)v&>>~Rm6TD??&BX(PbeN35bHElbO}3)nS$y?DfD1+vU_cKSgt8huxipP|8Nb~ z;Xs1+?1>2Yj*2SF4l06dCvfV99Iv!4EPQWPrD@|X?)+A3B&%(`iXmxXYv$*$@lw+G zr&|5ti2{K9uBFR`In!x}7%6EX@>Ta(7a03+&4<|7>&QCIA)cM!@l9j6)?tN5(@*wE_%-rGyo{&sZ7bq)9Y z4!#^Z85ktC;NO^k$_;XiJ_+Fa9;R#Y2_n?|x(CA58B*GeJxoJoS7v7BNc`5b6i#k# z9WGmylTLMe`t@FzxgD2>g9x3~3NO=v;DVF_AR9)-$IlOV=_T3kIjcgpfxz%SCMM>Y zpD}P|uvJA>)$l`cu=p&j0l2@xrA1~pGJ&CM1t12Ji`DP`38@+QnP>a@U_v{SakPCc zydjI;wxn*5UiIUhZ=aa-0hJ>H7DSaj3~LH>7=cU6s^}t;Az+Kk)YM2eL{f%)IDI6< zj;1%mNq})U4d@_%>y&Nq6)uC|QGSPUJ-`9!B+s9A zCQ^R*TxsI7ChL7W$^LZ$2yP-_!|O}s-8Br$sTmnR*qMeZ9bwhhd*zwh0DV9zQfLlm z$giH;Yo>FokQ`!teC|4uu#@F_b2M0+oFSX?*LQ(P=irmAhAvXZC!04^{$K39S6ozE z(>{ozm_-x=AfSLCl0?a=MY2ea5|t=4L4hVWK~xYVNs_GOjN}X^Y%&53NLDgUlAODz zw(tARTzwb+-^}Hln{y5{yZ2suRn=3^Q>$vgCK_JiD^2*H$J6km3AaVX-EP1ui=prc zR*dnFP9b!n*xK8nOB6wkOpuSHOwY?(SY!-EzXI|lGhRsNs+=GMCI^oaZP-IdG)X&D z?V)0y>}yI$WyrsDoExv}e;e1qV`XJkeT2VYwd~*{EH`3TaO+xp8y>lf-PN{o?eT(J z+xw8!-ikJM{d1It?`fEsg~e{ZY0AV;U8Wf8Htjs!>qw3T1lyiGO?ijr68B`mFRxPV z0t0pg+<9hum*^-0Y;al;YW_wDghnJ%qK8N-OX7m6UP+y`2n%vWY=4R;Rd;B zZJw6jI&C)K0O7K+O5ixgDOzG4garnkM4lQ~nh5)YM$GjSJiq%eLidR6&ZaW-VD8+x zV~ro2c>tL&WMc9Vba3eBK*K&v5b8oNV&VmC7eeQUlw7g*9@D2>6&-xvZlUBdJ-W?d zJfsG6d74J1a(9KjF@ix&7=aK@X{}5m`1}~6OotMxC=MNwjls^QrZ7m+0h|TGw-ch} zvKVMNxVYMFLmWuNgNsTyz4WxS$_3pk|DhOl7BY9`J|HO(gdHSOf?m;_A`@glfht$d z6bM26B|>h+m$}w$c1M{1OR~5}AJnufJ1=FZLLJE+U_z2t(|XNwR8kv-D0GuvKg$IG zr8XGj{xSu@4c#fF7VWgKk_~KIYGbPNBO)`utW#c1xUh0?w9dDGm{3CKdj7GO06rAP z>amG0x?xks3fd?2Y;gj+VM^Qgp4XIm%yj5Dr(!hczfcW-u(+o=^yCnHmD!KCG=atX zoR^STk1Rm&wgXU)g@@`USWF-s$MwjcqdlG{6;_?v4$QC9PWXykeYy6jOPoLRg%==C z-^A&WrvjjA8nSO#bl7Y}3>#Ju>={hrU0Yk5p5gJ%WK?0LyhjVBZ`E68seaF{f>bjR zBAU>W+E;3&0WK+eXKlt~f5mAy8uc2b0UU~*{U&}wA=gnwCNgoMR_QqplLP5sYY&@D zcmXJ|@yzdEMW*IJ?Qaf)ZpzdQR8c|1gxI@poHxb1@K19)K54)SH3i z#>qa>(T2Y(1?a%Q531r3DRHKc7p++J%cfdmh8TxfUx8VK0kl&_7-9ft#ST*sJnnHi zSP9AM^bge5ipkvYx0T01Y)4`n{0o7CSl3^J+5tk-V?hSiC)z+I02^eV7J4Q|65oiY zqRN~P$wlA3f7usvT-~L#%e3jP_Y@j!zIVMq>DVPY+^K9HdNc%ML^MG_EArmPne0t- zn;H0?ss^)FKFb^EU7fIwFH+HkwTVHJXbXWWIkR!R#na3{AA#G6b`Pd@+;-IgG%0nvD2PRy6V zqIGB`@a@}DlylUnxhpnk;mxwDs{IulBe}cH3tzx&#~55cPdEaPo0shu)0F;MP5gd1 zgWx`~slTtqINy=K?veB9W5SufaBgEoPc4Q@*Z*8@Z%$>{Y;TurVqv~q zaM&f_YLFEjD7TFte^F{PQ0!CNaEUcSq3e-~_}(OJcatV+Qs zhx*`+cLw!>VT%Bhfted7Y#XjmSqy}WTyx^zQ3S8c)Y}^K=Qw?#3k2WIT~8c!L??=5 zu!6!xp5V$hs4w5_{Q>CpVzR%jIy)Y9y5jQv{jRPbaMAkPu@6@#BUD=8wq+(`tiEp8 z#r38pAmmt~F=}q8q7Zuk0-KWpZsog{oS642-`gl#^^im46!Nfl7nAi3wR#4&2@zm* znQPY|4*+T;9SnE%8zrgv8ld;;DHJtgA(3A&5If zHUbD~;G`Dk%*xd`UOdU-$6c4Zd*@Dq9`#knLf{@$xZ*< zMjjMZ|B#|YHcFeG^ZKk>^5J;~ara+n@6F}0!a0g&WQid0a*TUq3osZV8!{O+#T~}U zn^zn~y@|C;>?$E;?)9g!mk354i~M`008}7J);MBO-th?*Juto;uow+UhZ?Q%)tCl%QEO4t)z>~Nwmi6qOTKc5KgJv>&vniHAwQpeXdyp7J}4OntoGui z*VB#{zrPU*Rb^qSF71Hs!^$h-gTR#yJt99CfXFw_{Y!5KG6yr#!w^U&ApwB$ij3`$ zOrWjtg*dZ2?3?_eqBYw2(jjG?dK`Si!Py19%%Nf_LiXTD%s%@Za+uGr5TQSnY9Ds) zD#U$h;7?S_q9N-kJ$4SErRgf$lTpTNpHv{_2)y1R76njRV)OGZWL1!X%ojB~j#Og; zrv@J;oV#?16*wLu(b#k4)liTdJout7#?7q?c%2{fEc_vNx87_^uuB0Fy}{1jOx)o# zs{OU-^cybBZ7H{&iBKOJO8L7K%+w%S4Xzo;NCPu*3#1;5+g%`8Cp1oln4XDjG&$jF zo27QuuLmg)7+e-zs{Cetj%~c5PZ)E}0&sn^*_|{@M?8S$MvNmsq;6nw8h`aB{lK|o z0v_C)n3>bddu1Aw(nt4Z@U*#(mev%XMS14fF=N(Ot8#HnFUV70eCEN|{Yb`cK5A}n z$LyqLFWs~((zPD>^S#J_zd3?!M4}L4XW$fYGe}nB=3A%9 z*(__>(WzU5e?tf$b{?L7^I@y}tLWe0kPJeMRJF9y->+ZSg!WC1O-IV9Zb5zk7*`r$ z33+%_KudZ`dRxlifr~4W!0ukD%RMyVTK_b*PDOg){9}Rm1Cij$1|{HW5#9+jN9XD} z=f>oG$Fjsl$FDC>Y~sMlK`cy>Z_ZYbQ^BEkK1%u5N{m^TRVVu7!lnZpXIBZ|W!<~8 zjnCHD#6f7A_=~Ntjj`=!iQmODrb=WnYTY_s3G0Z!+&YDRfs;N>>8I8a#vcTA#|O_r zI$UkxD8yGoyW;+WO~yjVXlnA!13;z*-u0#kuP}us6063Dn-%H?1`EZn(O}2?x6lwk zd-kg7GV(y0fW`Ukqx1uDax#yA{&~XV*OX4?u(dR@>4OThy5&9#Dk0R~j1k>{S*{T; zhh3>5)=v-N^mw#g&7wf6%iYI#E&+I62J~YnOrXYTh(9y{rP0jN6759-R6Rf*hsfqi zbt1aS0=9Ae&qHnNx5rO4y7Ux@5vUn)eN_mbT(>nk&+B3gh#MUglZwDjmrwAIcH(vV z9#_P=fP$&u>36!M4sj9OYt`OTjX1^Zf2nf>{elm_si)stMu4BK{2C|d662l@R~8)< zRY0EUIx?E2ud>f?f8?zsoZn^@79Ow~whT9Btx_}20+|lcabv{zahmUd$PMME18Io6 z^$|#208KYn;^|}CEgn@lnCEi`{6{oe#6*8jSB&Y~b>05zT=HiY3=*lRLQ)-2hz9(u z?KQS2asgP0{v-kZQ-K3`p^LPA@#W$Hi6vA3y^0 zlZ1_UKr;U0PzUvnhWSGPP1489LP#28@?+0&^np`QMDi=s!9^3YUmyoGOFMc?8(YIC zekLdB&6Iw^n3O)>_v$b0F#%s<@*;m_0#{SVFf%BK!-b#mu7zP_qXRwA7ptnKrPRp zN}af#i4s0IK4`rP?cBeFE#*aog1n?dFxg_`*`5rtbdHQ4j?a5@`1pWcqf+k|1JFE z%cKDB-V9jS`rx2{P;KaPy%WBCg)jSE9K6G$r!LJpX#8p2nR)L#Vf8Wup_antt>X1U zz2QC(YB5gaQ8n$Uk#OLhpghX`%=@11ZlpeGQ?n3=%}jhah;yN&LXgO6mg|S+-4dgt zGb-JjTsRSwmVdg&W%=yf$&*4*^?t}a{^l0}j~Ens6Vkp9+q}>6wAO$0*$hK)K+-$# zat%j%^+epWMMcX%p0~%fT^yR}ZSW?ET+jp}T?t175i^icQwQZkcr-^aRpoM++XLlP zK<1V&2P8oMWZap~LJj^s@c0qHpA>35?Sx_|_)LbrQl0yto%rj|P7B|k3dCcCGl99d z1&GZt)_LY8kPYaui_pf1Lp$$pWj;a!s2`$&XlmbZP(IYz3o0vOzYS2DQA1sLBdfq8 zt4KBxQUlu}-50EEzXWn*ff#`u-8~VyfZ+4Q6KK&(Hdqi}nV@=sifTodgEb|u>TZ0y zvQj;P*494R96K%)RRLKL=!dJ`S)D>O21Hqh zs^{5$(|qod+@id?=d~HLyqy6bwLQ9QA@uJH$z1vsW5+Rbh#Jv-{!VeNQm}ic@t?RYTigI%xZ%@TN z;{1cc>!x;a0DM&$ePZT+Pi`rrxeT+76r{EqNL%NkRT4eydqBpt0=I^}DJi$)AhEW( znpRq>DV;VtmCRfzG=1`z#{5;UKkq{sX6x@9zY5h;*Op$OUF7fn46XS+2#und3TszS zR)rn6PP=hb5O=od6Y8Xw$fUApOy(wgneiR@ygEsK9C$pf^vbgbNu3l`}rE6l^2XDr(I@7~^96_0zetdw`% zU3|l!y!k_ka)tBX`OU)6s*n$~S($bxLLxn0l&~e)5%Tk?Xz*zan{HE(p`&0~FUC_NI=;FGcHqtH#y8Iyp?AuW;GK!$8 zf>$t)WY>Hs(ay>qnonPc{rWfJ`=~f(#K^zW*+Hv^BN#p?`C)5Oe7|_)(80l&@cIAT z)!Z)$ZCXLQyrIqW9%FXv+=q^z-x?N|-?AMQ{=fq_$_4A-h0m1}94U|bRTI-yLw-$u zJC#w+zfw2V<z`u%NLW?NwH{)BAFY0+S>FAtn;1jXUmmvHTpZ97Bj4R`Uin}_gR%n|;* z?sOwH&P->H{5*mDonToxNYk3Z#+{YLWW!ZCb5Ui=g7dLIM`lOJ2v7ubjcjnlQzO_2 zxBiu^cCJ5DC)ju>P2s{E#-kRR;o)hH^xY%FmztjIIYs{0;+}dkZ9_DbKN%Jl=8$Sc zh@?^+Uw940hG6w9*^6NhYN)O|V^9ZrxJvakO8&f~;GzQ$Ww?txGg+WllCKxmP|2!lU_A zk7jTs^M0g@_)7LSm?se~|2aU)2L*jy58;{XvSilOv>ew_yoTr~W%dx~^L=h8jf4W)&tavt30H0ji!V|Wr|X;i-N`%oVq$^>DR(6!#y& zW_C3mCWs*+Dbc>Jk@y~-ZI6ZhuDNvLsA%0Lb zj3-c}2KipY*Lk=geXaunj;98xTdJBGD#BkDW9GHprlNEp?Bb#33&ukr$C8q~iEeZK zg~{(9zISL$r`HHl}JH8Uk{tG&($iPE-xFAM`%UWViZMHLH}hSyd%3D-Aw zcE)50&dL2^co6+r5YQ zQT{h1=l5m8$?rgi(HN#7zm{(o z1%tm{Y}LGNjT7pl<%8KpMV|W{XKCP`YDA23-(rtnE`v&H_~idGF%21nR3KXF9lGG| z65&alJF&BZTZST)u>v< z&9Nlc%>9+d-tP4rXmy}{udZnI#-nXqv%?ajaZ7c-QKVc(JMX{s_JRpBC|7TsK9fUs zhR5_;A-?8=p7dmWQK;h3W}>w8q+g;vogtk5BWr;E!G1hJ5*Mk$`vfaun$U6Z^KUHc z46bvo2@(nyV5Ae$`1Ihzs=s2Yx4{73#!2n;#V$@gX=y0z(Dfz`{Kud!3io;8?@7ru znldg$_<1;fH?zL^#_zS_eEh^)Zs&Vja6gX_?;d3AKN!ffD0tn6iE6cQY7 z6!=^L4Ja+0p<-N`uSRxMe7nkKIEw8IPlJJU&Xiw51qR#jt!i0eKUhZ|hxSh2ML+i5 z|9Urqx={G}egMnxx_(UOqU&PeWcmA6^ZuInw-S+XVM)KwgJc({%$Xe6NtGHEM#ybR zR|JG>3pNJIlkZH=7f#N2lk_XLhKPN14n?bSmq|M}j_HX@O%}KaDollPli!pIpXn|8V#SLfbLK+R;x)6IrKH1;j6 z;Gr)hnY`f9DQd<2j5nEQT1WVq(^^N`JV)Tog&IvUU{ww*MD&y zCUnIatmwzCEVQl;_k^}klJ=EZ_q{%hlh{pJXLr32d;i)mu(uvJW@sONS*PB7{Uhwq z<6uq{G{ikVE9jWP87Hch!>tXYM6`6|TBIT@S_4pG*8dL4{$@UmMtuq%+aDwC<0jT# z2fNEJ&3ac%)<)cDIDuv%e;pF}>65JNWn)27KCy5@lDAq2mJvGhE*?|z8q$=Ou9tB6 zG4EJdEuti5wYUX_ZB zPKc`LvkVN7-%}omeMJQh+3idY&4qRjjH>HCN2mXS$yBI=iZfp%rmM330#Vs`%gfJmWgedLltR_~0G?vV3Q~%fBIQAJlN@s3OWgDFWbCwrO>P z4B{fq#~GI*y-Dj4U5$eHWyUxrjqb~|hNr=OlmEvMRSFvZu<{y@w9T4aDcERV4CaP~ zymwF46ztqOFY|33?uqrP^<1xg!0@kfsYFKliTeYB#V#)8kx{Tqo9w^RHis}W$F@|Ba?W@*m%{-Uvvg~K*W%FpKTdY}E zOh;P!hq#0yL!v}KG(RRI3x*TvuQku1nnu^FHFb1ary7W5oUZ1kb#RVN8k$CkiEV^B zp!=fvU#>NJ4QqZ zesyi~oG#sD1L>f!&6_~wHXr1M*ddHzCr!fK?smhB zwQsFFF|FJ+55c3<*0|+!Vu|bkdXUekncDiS!Ca$!I_)|K*|v>4P#=uCUCy4~YlT&-2Zj z^y%M(L!Z#BqD?=FhH9qIKJQM+_aC3q|6e$Gq=q7g z@AZVSn}it>hv#}e#_n%_+k!2Pu1H#K!V5dJm-Qd4rV*_B=co$${C_%<4tg3U^9Aqx z+pj$hMDR3)HotBddaw}ItzcQa=Uwwx1(TntK~u^zo@er8qyWD2(Nox)qSjGAe9PU_}&74SFKP8V0*)<0yY0Ek5nXZaCh{;VFp$CIybS zWOUzM;eKOBr7qon)3tMOzOrE@*A25yx3GKY6$l;TV)SX|62v*%s^0JeuI|UwKNuHJoVlYfQ9CL0!Bc}$)_Cr1oQagd}ymld@ESvNE&?6@iP!z*mnqT#rRSx683O0n;2Z^WJ^v=a)eIF zru;uxzyzQ3y!Y7F2gaf`+*zS?8T2DK(~Gt?GJ1#cC?`h-o*HWzck7vo+7QKfGytEx zLuk7U)=ipRCBeMMuuJ_T*N|vmL}WC+)C|C4XbR2Uu;2d=gi+oA&-@b*$LE3Z&Z#vG zHkd3~S}&|jTpp29*TSgnj`iKICoR3$KlnT5gl*_;C9Y zDRiwZyjQs}`Cz7hGAZ0NSRw&#TGF>8h+=zZ4E2UfKDg=+D;3p=Q)rfUeFGk*Gm~Se z0~XkonQ;xiE!kfu#;)ft%$7?auZu$({X@`@+~eW5fn++wsZQeYWY?%%wXl zZl@FL4;_JQj(ne$^WmlX@<*)Vx1|xcxH>*;6-Ywy2^;orp{X4G-X?CBsuaF?>Kxoz zctU`YQS_$pvduF+)ZZjExYf^k_9VZ=<;vmu07%KpR53;BeHNVWbS{feYzk+pOt;QO z?7Um+pm=n9kJrtWaFr%eAc~C6=OYXOM9{d~4$si!PV7Yb_L>Gb(IUqe4?PKPbI>7TA$;zF=gd|^7{cBa zcKnJdOVHuR?3($$ot@vyk}u?Tmo+k6e`~Y%R}qZX6#wzCYA2QMp5!-D`t$uWMEZf0hv%niuxs`B^fyYW}A zFN!#aU%*i+f@5sGl-lK2)0`o`Q?~0xeoqN*%Xf#Mcxcr!*^^T{w-+t3%-`;9=@fpD za(g)-Ab`)#;gx~&0F0=W`_o=lD6hw*ZZ|qo+c#@SMxX{1suIe`K4qT1iKLRT@9O1| zE&rUpY-B&ZA#5)4j=GWdzmK%`E&fdBIZC$8kH_0 zyF*!)NZtbhtTm;LYxUU!q!;KZMV$!TOextHq8G~$v>QZC+S@Nt zNk|%lw+(4WT)Cx3J@4M3;_Aurtr^&-rM_RG2Kj1>fv^n_b&5wP3kBRC2o>Ga0( z^x3LT!93Sc9*GFJNM^xMSyW9*ZJQVO@XuX~7#zOG@`Hr2L849>*V@Xry^E~?gRPXO zj-#o$;lJ2-Pt}%5l*p#8Wubza&;=X9>1i1=g}b#I8#QdJtuu>r2jX>`noo@KH%EqC zI#)bc?kAtci~mo9zE9{6Ipz|?sB)>zjVkY^WJ{IEhQ*!S{jCNPzq{b!9P?a(JGLF? z=bSx^zqS0uZ-)nVDB&7%qQ8gq-?T0}>$RDxf-<<=(we5SC%@+q^HN&D`?>}Nre?Ih zfE1?b=C$KqICM)`pL5yHhy&S%YOHdQ05uio?3;y%Be zbTi~`XuCf-b35@xt_9=M2(PsIeK^Kbgn}}2T`OU1w7wxzGyTXd<0>xSGZ zm$AA<{eH#GANI8~LYz4(>RClkXnO9!l`bfDrBsMozkCOK_C4&&hgbMN&+oZ%OZmQ~iThpd zdCCICO4?p66%Q-Y%Ln^P!F3rcC%45&j=;#bwLg_SJROOIvZx7g8^Yio5D1;5UvIQ# z=?(r`>`rm=kk4Szg6V5k`IwjAY0HLZ^Wg(>b}e-b6Cko~f*sQdQ@i?y-9j9A3GtmCbMrU!(~*4D87~9qz_(&mWqq*>`Sw@X>evJ!|;tEX-lCWN=%fvSf45gq(Zc4n~K3)LTAhUA|UB1Uzwr6*c!O zH@T^ZeN$!TPS}^%ma(3rrhg@vcsr~rt3BjUOm%ydQSP+?~clD?i^Y z-C%N9|9vdbv3Y36gOqxgI{#7q`cXGDHp4`Chq%I>oJkau;ZB?wac6BllW!lLF@5|W z~X5Lfi=qib`cg+yz8z%m8E~uzx*GBjv-nnzCI$;P2;h6V?)1}IbV4;xj z_SRe3+hBzpoh!*Hte?k@tANQ|9yq^1-5w?&&f@>Tgx!yYW=86nK^;_0$0h; z?6uj_gfW7_PXzn*=84;pe?UB#a1Vp#LQQ5IkIqh=;ra9CD})OEUg~P=i}KjVDMJ>R z4a@oMI9!rv$CSsCw|&jS{cqPAMT{lr!W9qY)b!;+uu=9c&fLdhhz%8{dE5<|j%rx3 z1OA$iHJu+}Yau)ZLX{g@f9g$s1yQ-r!h6;^83AcllxK82FC|Hcy37mq^0-R0FLijbg;I%repB3I zo#rWt({{Mb=+|lvef~h)Jg>~cEytHOgAs*Syv1h{&p3epYMr?}O|Qkd#rTfE8#dQv z`C*;$-L2_>EYirmE2wE=|w6E5m|6~jp1vKpav_@Z8sG*{VS)P?MNLr3yP@Oj5 z@w6@JU;Eq3X}-7#9xzcP&>i{vBfVLI$Me+ef4xWo*s6>g9rdcjle__dC!;%nN?M=2 zt7_Cf$aM_0r-pp)xaT8X}UiCrRSho|A=+_3tXd{j&nle zlbzA7P$6+P#1yC$N|XEv^FPNn_qBTJ-!rGA>8p&{rTD7KJ`Q$Q5Rdb(VC3E)d2BK2 zEtxt zCbi1Renj`qrOsaJ$GNCe`4K+@gp3985rdTz-2DTIXDb>x^ll-+^Ay9bL)M-*K-if( zVWjo%&l^`wRU|U29s+@rud6-dSTj*DeKji=-Zf7)S{44pMc+fupy`XR>@eC{YR@dL&+e2&FveV;K~kv1>5M{hH$uAJHPGx>=#Pv*80=T zm-}uG&k5C7zjo<8-$N?DRE(X6d0R?X*sEpUrYR}Mq&A{jyBloQ+zaZeXKCg}tBU}6 z{9bVj*=YcOf<3v5rx)mztQO^u{exNf9vf(m2`)`FT((o^tWlg-^B!X=tkQOL!;eYk zGY@5vJA5dZ5IDc_j;rx2ua4{d>nLu~$t=gqz5MZITJR_xF-ZvAZ6cER3#;SvzC0!P zK$q&1Q`swn{#I+4r}wGC>GUf2-7C;ATUDf&bvH+DJTcJcujia_j36DQik7mMDV?9L zwD4{KN`zrIi0f63T(a-#{^|x|xwXk9y;dm~<9Ven44+lXs{e9R1oJg>O=l6l;-Gx& zfP#%f+b2@6QWuJqyFrvQa4F2iu=2sO6sE4+>5jOqmqg0?Hf>C+uXnM9)E*C9aqvQ!<}pi zcCa%wZ%%Brzv8gWe$-ETTg7&_|B47Y3W~q zC=9rj?reP?EAZ;l#vX~%vivc#mw443$}9W$72Va2xk4iF$}>myrs~+w(tsjYPvYl~ z%;u1c8uhS3lj>nWT5}ae+2kMLZ6i8pAn%wg`GIaW_=q7ZHF3TeB;GD>%e$}B%<^WP&6q}G z!m=3LDGRdwmDey=Y7cUF{m^$>K)WhFHURFwYpzz%!L=U9mB5C$wH*s;Q)~{X7a07LWk5VxL;YHJa?`QJkD~qzhCizuB|sZ(FAKN%2i*1 z4T6z7X*UE4xpz~${N=y!^3<_Pnqbq;ZsV)=ld|-crPKP@=|J$hVe3%cFG1m3%rzxk)|l-n$Ks=X1imot6K{;b69Uauv=6E7 zUC8^9B9o1z>I)O_RuG77b>!8cv!3QmrS%ECV#g&8FEKyKWZ!Spt%SLc;?1J&_lo;C zd&DM847;TGSvOm~-5;!>dnGe+*&AfIkLm$-mj5wc^{&h!Hp4cT?aK}e>HT$FrhX?& zV{s;L{0O_S{sNxnmzH9fyKGBUPo2sUvk6xs#p>(sqOvvtkpTBToPQ>0{2Mcp`fU8t1G%ZnsorFy{duB+gbw{%FX8}OHA8Yay`2Up zY$R(DiI6>%`!m5t5tr0CvF%?yft^f%YT`P+0nWR#`0>x?+E)4d*G6oqT|v97`>9fU z)a=*6KoGm^Uv#SEGJ0<6ylYl(Lu}BgtA``gEdb41z@LPJOI^5Yc=#C-Y`-wG$>+G zf5hcwv0nZiCbd}S$6&kw;j`!doMwlzbA-GsTI!YQbUm$%U`$9jb@CJe$-;U3-n^jD zw+k~X`|i(|G&5<9Fh1y1hF8*wtXld7EhIvU zgAiT9eFA&9c==w|6EID>B#RS{{1;M#E0Q+#MnLU1VJ%xNRWzo*fWF~` z2yrbF#TC}C!}%#QB+F8CZPJBHpCg(Qk`RDEt>VnM=8HN;H^#hOB!S^o70Uz$H<0cP z0+SH*{+A?jUj`gxPp}N^jGKq=4xRQcEY!WWg%XiMG_S98#@89?2iZJa>L>0b%AiBs z44>q3If-3D=uw0Y**$%g)$shTtGLC|3mK~Z67C#miiX;gmKd(+nFfv^GhLV{1AUcOyHzcg}4}s6KDQtI)|%T5ceaHn?u`*1o&v;)7ZGo}+`JW95hInTJ>6RRr;E!Zp#Xzi z5fH<>q6?M}*2c;-6F6!{M<$)#f}1^6_2!k&J*)p2A#4a-A$2RRVLa^Bi_9OPn)}z> z=`t%OZHhF`d<#)5C3w+J zqcTxT&UrREdq8t09;TIB+MEHC5)=0_3wHR-m?VOm_-RL9crYb8Gv``8F>lE;zCZBP zEqJ$NYjXfVd}K4_@ZuWpUEp}29;Ysv&2+^eSzlP1d&-tazvA0OaLDfa9C|KdRiEGk zV7v_aB=(qq{E2(*lef4tFO*aoH?hN!(rN#?X4wj2U$NB|PQt#m=lyPytEi6k>WI`c z^<>=3puw<{hxbEsW3QC0mu@v8A@4^C58Ax|>`Gv?zbzxV(lj61Zh zUv1enw6i2QUVdn39uj6g@BDO>F&^;t)$WNK{jy+aZv5y9ja$KN@TwmmIq8cCz#Pio zW~~N@j;;M3X99syb=vh3+Ff05)?-WtV86QL%apt&IjQbbWq~f3e%@PnM{axnQNX?f zk)pb+5t50zRL19e#t~2MK|>EQ-mM#tO8EQdPbY=|iL~KPPJwsv6jim%c8n`)JHH9I znYx5a;`W!l*)t7lQ>dIV9WL{>BUMmMgybPLr}d!Z$pO+HGp9k#6F^*EmX1A^-;t^f zK@@&}Fd1eH(#I4k1ZVT0AH=9ObeOetZMcGQO_Y6CUYrW3N>>FS0Ms z*hGz|sEhzNvo7NRf`XFZt@^7fu*w5+U`gZHvRc`L0gpW!8;Y~^?DQg-7#G1pjL2w= zM5toPv&|ax%TA>wtB4+RxSdDwMe<1A(K=`hWXn4I4ypTav^9Zs9Vp#19RP}DfY>L} zI5T|Xx*Fv7qnQrw?uGmPie(4I5-Ll0IDCeR6SkM}qc&IJ*8>^jF_-?xNK@=7E( zxK{)Jt!}WMZDMHq`p_b1BefnMqB#JQ1 zsEX@+pj4N%e*IaG9OgaSL4u)W;r#eGhp(Q5Jy0ZGY02#=LRKaUs_^iVEko;+zNZlE6j?$$p3$X%%YKZG677yROg z0C!XG9`JMKKgXQ#KTges4t1_Uq;Y$`g#RFteCVY>0n5Dr{oNQ_2dVk^#ny(EkA21P z?jL&nwnMnsp0(E22j@m?!(8Gos5p$A4Ui-Se{K({v0jBXB)0W(;kEY z;AjB~=T!*GYckfJHI&jZm8LK`QjDQiB~5>#XYS9GoE zF+^-ZHagJQraWk<>`EW|J^A74me zUTJxrQl|XatW0mJwTEqLJ@aTW@^XNIn9Rv#Uc`Apy0Pc>KY1^DXWiWhq}QFHq=uH! z#N{SH{7BaPUDxhi{Dg=?Mbg2QddjTK?P>Cj??seb!ufQG0%bpjYCs4u*#XHRyIOaS z_gaTu$wL6sZBrzKTmeH{^mPVYu)3g#K66U-LC2+5ND2n0bh|^$4MDK})=GFV$=@#$ zRi%xa$h{kA+Qq!0-0oYpd&T-h9zC1Gb4?@d9HGrMV=pNrPLQf~v$H+RutuX@<4_`)(Ta*|bL?x^=&nmZ4LXk}_=NI-o zb`f))rgwOG%HgtRZlXjik6*Q+@eJG0q2F&m(`K>Z%U%;`XX0idd}Qb;sz_qsxx3+U zpm_4r)xBqhDX&*ynI3JdI)aKT{uq}H{^70sTgQK<=H(I`=1gDH1hVf%t4mBw2spD7 zk9c8GdO{~rLF#&wBY(~tCFF`Adm4Lgz8UwVg}en(35;7Y<(2YA344mCLT#V6TxnH8 zLRo9{8ClaqNN?#63^#$!))kPGKFaCu2FZZ3B!)nK!Tc#fx2j%?&ZC_G5C@2zmT8iQ zRya4vBbJju@Ezd{-2oLVLDY4rBL=E<7m-?kNKm6E5o&|B4JhtNkZ6v|cx~?#HmGv~ zN3QdY>nO~*(>hYf6w}dbd8xp`?c2BzLrov;Qe1IeXw7O`Ll`?E104BP-lh9u%Hos{ ziTBoVRmzdRgAkv({&|i|H=}D&1P%j8zJLo(7D#se*B)|2E};cGQG z=>#ZA@bMIaA#08W8bq_@sa1+Kc-A>7$ZO_V@?HAi1r^X)$0SG#7aAR|Wh##Xz^H;i zRZ}e3f~pte0zucUJ+|I*Qb;Br^Smqb5JzFPbKRIBvzUbU_A+BMM?viay%Fl%EMGx& zFsDqa#}uP?VX}jpCU}Hw(|Pdy9=6%YCV>p4i=7|Gn32Y_I!GH%yr02@YA8=FB0J6n z4OKTjQ;vCO>e}@eDc&0+0UZvm_L@o?Rzc&po5y(KA+BU*jO`9=7jcO(z=H4!4f{UR zJt27vnXmu0Q{KZv?MG_RbQiF=nRn3i7&CAehuBkXofTE^ZVP4f!AI{sg(Gq2oS-5} zo3n;+Wt!(7Q?yf+$%tuD6Z|@pjAcS{Um{X0k7%Qixg(-}?6$w8vhcW~cEbf~$p*HN z)YbqY@3Tpu$UT4X1aDeRtNOH>N& z2X-wQk_77~vvM`^iNF=H9A~3C`~ih*b=70+zHN`3Cxzxy+?z@tQvuCt-mwHFGMiM0 zS{ETf?hmqs1c)awAM(zeEmL?GP zi0BxS@n;m2aq@6%h#XWJ{a4XNFP7SV4c<(wZe4uivdg#jan$A;af2>_6WL)PjV7)} z)7$FSX*$={{7bwY{Y8zr4q62Y=cvF(Nm32ZUss)BBb$XoWm#-UEr`?M{l_z+ak9dH zSs;?iWR{#wtQI}G!hCF);9&NWD5Y-xTRau&k_3<0R==?2ivW8{gWSy%Sc=s@^@+vv zBTCA?&R{_gJ)TxhUKO8@i5q_`q3k~UE-b5ZCkI|7`=_%RUgTs19$4X|*>KlPrcYjw z?Slp^AB;W<1yZ*x=&7lMw+BK4rx5AtpMT*GHmA2q(f=;*6m$jAYmf}(f3k?@4-t3+ ze#9%c?5s>dhPI2$$e(4PGn4ID-Vy}K$U?5zQD(70Jzk0~HxEZt8BLINZ5^fNU210q zd8d=zr`AGlA!jt=UJ!cNPQ8^dFv5TJFz3ue{{hp#mpZ3T-KzTC`o4O&r|x%m z5;?sOI;t8EAEFzeiY%dlyxr-Vep;nx4DJpF)m;n;%FNHdHoW)N?LPZU>8ZWu54ltt z^_i`aoVbR3CW$Ge#g9nrNV9k~N>ygq1wr}LaMhRBy-njtZM6^D4B<)=pTnsSVvXB% zx?2ZG`(TLf#L(xdwZ|0NO#Z{ne=)UXX=?e&^};b_3!`^X9ps7|T^P5v zhN5@3{!lVRbVprZ60WJES(>P{dl_bK2MSy8u3b%aeac1o`;BvZsxJqdk)wPr19!6vAJTc9YY(H@N;|XqmxViVZrnMhg(_lAWSSsj)H}*t zh@R(-a}Bv^%AxV@QRTiL?pQT^zgegyGCS2C8~%RATnW9rzVNZobKONbTC9iD)3%xs z-lm;*ljAAURTgDwzdgB8_(`;XC>)m1&+8S#Nr1Fal z+uG2+Fs>@BCy8n6iVzLdJ9Dv>oFG4pmH8&P1T0BXW&` z{6HbUUp3yJ4f-a@DV@{1tk7OVgVYP4+y8ct!wN_x@1pC|a`H#d(z|iP^Pfs3Cx5hC z^?%;SB1^5!>WUK;d~y2g z4JDW63(3=MK6NDr!-2zrTVAkhJD1obQLL<|I&yjH32fV|H1&PPAggXs_YebQ$p=v| zs|;7?%YYClV%&%CO5N8nmUm|;#C6IN+HH65s>D58V&{(nC^JhjRR+&1lX`;NSrL`A z9E^f@dR2xI@>CQPnH35%uH=epp2}NgZg^DV5KGpGC$)+uZn94Z@M@}i0y%uBJ zZKC(wX1XuP?4-}It=L#k`*XL`3!rTpTK zwIAz$wtr&ve$SU)?r6vO=9D=;*XBjiTb1Zvg3Ik0$v@hR7WP3Em5-0#6b5lzj0N~F z9+i-$K6;r}*6p6w@#WJYtmoQN0yxuzcinNLuR&Tk_ufuaqCiy^HB1X=dB%#ktz~ENfA|CK)DdD)@iURv+ z;`fIHAN>1!fLD^zkgNlG0XB(8@iv1L)4L}W7@YCaQ2T1xSL}w|6Fwb#Eu;c9a57sX zN}k3vK|SO_gmn&=mKk+jDe`aPHP;li@*IncZp`bg)>K;5#QxNXkk08r?!I9n?JTSM z0x&;Dd^lrpUQ{3E+cye~I2)LUU#i`leSxWwb^_Z$tqcyK$&&h+>o?u`im)5OeL57) zOTLJ?I@UyCR-j8^*)YAjq<(Kf+x+Q)iS2Or5!K(eFw!AzWPQmDbY1{YEFL?!rQ{eR zoqVfU7viQd&Bl=dxMC(UN-**_nU>K{UA>g9Ap##=RgXx!an3lGp97)An6SeHN-%sz&{a&(oci&fe@Zr{bFx|KOZ;X zs02A)f;R5%i^IKrh$Kp*fgVQl*T?SLLdx-_bUH;K5cD>&abw<#RS?LX73{QQ9{+6F zULb#XG|6Xu=`bK9k;j+YCz)C!M{jEX3US!oow6J`!xcFQ#(;>#6F?I%pE@;t(hDF1 zh`^BPbb9Zyiw+XnLzOLTg}}`KixZ~w8T`*Oi(ppn$>OiyzU^Wc>6W`ZW-yRItX?7sa#+X_B|M_fg;4(y!Q4hu& zV}d~gLBJ8_MsQOjgozgdVQp$*jer}%;nr|C(b2f%e+;5FKJfYpMKJ(F8bxlXn0B2S;~TJ+%in3=EBKoca9Q z5kKpmShzX=-2Vj}(cS6$NgV*_5&DZZ{}K9}rInk-QG>OkAGhlf^CMvykIIZTzm;$O zESvvUmit-uba!??YV+u4*%hj%bX2xHD&MmCL)rWfWeaE5pY2~AwUKkMNB`vY6Mjm3 z(aI49Ioh8+`mqDt0D1s5z=NOqAN@Z9CmaAEwG9BAc>O!hJP80OeF*@t4E>Jdeggnp zegOcKbpDR}-6qaYT%Y`n+{vTuacgS;U?Upb-Pn|t=>g35&=g*uu zefHw{ix)4Pzi@%>(v@H6F414QaN!rGU+5Vafk5EJ%giiHj4W3efs8+i96NDz%*j*d zPMtc(NOysb@t=kt?*a5@k1wADoH)h_I8J};1pToeb%5(f<~|bb*w3N(cQ||Q^qJ!) zPn|e+{;1ym7r?O-KSjSlcj4UW6Q@ql0gfF%(&6+O`moajABc`72B-3~N+Ts@{}fm%9sZa>{EvVKN<4@X+M3|Vpc zTG@~;4)cFD+_>c6|7(WgA5aVa9g56}Ju{g6cd}mJ!t>uT^8EoNuUpU93R$`{l_UiR$-{(*J`IaGv20 zsOx{wpfqw|=-}92Ddn+#z-IRNmhK<)^!Z)COaD^&U%mXVf&FuO|6$_(zdn~Q&yF)q zS3iEtdX`im!CGhVG{R7iWkJ{-($la91bTuyl~oX|r0mM9XRgZa++S_(rgBF_H5)#_ zR-w(Fh%$fpSXo-ghdK?o3jOES=4W!`r+reFCqtjU)bWd|rg_ay=6rvaeF?6JVn4H9 zSMwlS;o&&4(rvvr;9if@&iqE&;}chY{pWc62d#f`iYppYJo^KXn6z!z28k9X%h-!1 z@pI1SSzSs|JZ>R4ZNC%wQE`UX-^lIcRND7EYsrsuHRcfer{{FzFzD{|gT)R0!SH!O z`sE3l_M--^pspL5y|h17I9M>95^>_|gjoh8o!g0GD*bgq@r_;S zf%~5BonxW*{ym-lBIc}Q%iuD{i-0z*{o>evrvx~8ZrW|9;C%qQ=9YllRQL|5QSqAE7M+x9`GLV_#R#5#p!A07 z0c?VLE_Mc+$A2xpOmzUP{Rqe2@lce)FC1#wK+wc{^yrg0C7kG!r z`Dq2n$ltYXeD&X=v(Kc4tU7Cl$B#K{^IW@%f~J@KVMxUg?@N zPCLV=6g165vq}QfrVX9k&$b}5rMWx~^UN3WCO=#wnEDER5%d5|-y+s}c#WST_PbPq zyX$sIw1T_my7J&6z%F_zf|$3;)2$SXJ@<6OR~vRlQ@Lurb5?9OZD_5wOE@hAxhJ8Bv=> z4d}-oBXYznWZm=*EE_565EQ9Y=T%2f+c438^4t8 zlg1VGC}icj3S+`JecHiZ0$h=1{3Sgta1hX_U)_?pswU*>hx|D z%r(pK5{i-Pwl5QCJsxj7eUQU}i z2WQ)*@nI$YLe-4}iJNty@-y;RQ0PKFnC2NzbxAK#cPOG?Kp2y9*^|d3r8V!39$D_{ zQwIkJt}E(u0-WwZ`T`h(uS*jqj|P@ZCUO#8CSD%NkpGNArxbsnKiyz&eX91C7rrF#`L~~4pB+wO{vXy{kIxaCN!Gn17f!& z$}L?%BI7gMtN)|Z$7^&@4jW0)rOMkn_wnuP*w*L+6&f$sg8P)ETUDb+;`*k{j#vv zHovQ1*J9CV)b>ITv4N@uNpT%$H+~Cs8cZAp$2lQ$Ncjx+TruC~r5ZQp6^gF%JfyV< z?!KMmXnniiW+NBSd4hSW^q@axl3FwPs=0(Xs3f$>)ci{H+eQ}{96EnHMnNE6zm*OA zQg>KmiG;X$##)-p_&cC zT}Sw>k#g9xvCu^}pD1GW{`+Ocscd7_&BGsngU?TxUNtif zGdC03=~|BI7X?EQ@@_Ekp2(h?651VY{xM&Te|b{5hHbVWza7sisfEKTw0hl=+xKb8 zDo3FFIgEH!_14r{N1Fo@UG$5Mt7%?`uceXEyg*jCN$LgaG?aFJnzZ7`6W@F_!MVLX z?T$51g?cB#=B=w5j&8Etblq9(!f`w zM>UU&wh%F)I5Ksv>eTC{nizD_ndlu8pqWeHBJAGY*gnx(`jw}&;FLDK*P5E`J->~k z9(kEQnJhy4%*EI!s}&G+b7MA!OK7=7Jefn=rC|V1GDM-q5x42x$S{~b7m&S5p?P5% zHd%|fA~1dZa^wx~hqia(f`}P?RNvxQ(an6?N;dYCtLOsO$*yv|Ax}l9j(9M8&`$Q|0%`_(b+E_3<3^4>{*ty;Pp3K{)2oh#OQ-(t4ph_=Hy;bry1S_66yxy>oxm$8!hA+?KX8m35yD&psS?+}g z4NWse29r>qRZz~iX@vaK)Ov2+&LBLBc$u29$sUQ*{RM#>>$Zlh?Hnll=wO zk^;z6#aVGbM`e97fm#XChCo4W?X&JRhfH0XIzt+^Z;-?i2`+kg7MMY4!D7%moL`LX z*q0^9y?!+{?>B+fx5k$eqeZV#tM^g3?_4+k1FzEmFD{BXq(4Ux&)tj*<<_~&u zIPn;aKLE&p-4jhRK5G-R-gg?8L;UEFih)Aqgd4w_5q&cEByATW z(FdA2GD`E}-NE-^SU!gr z)HO7+K~xJuah$$QZqh>s#YS94jJvOswPsH@ZPBDoYh8)%)^;(BkJ!Hds5v8QI5$9I zhJ;40WV(>GC+9l|V3^=?+kl(H*MINZ%- zM_`WXgu=}^I(ys4pf;a@_cV(;T$W_%R8Q2i@EQ$^>s1^12*z-SK7mWaRr?A@tphw%Gh?P8vziW>IE3B&<80GIaAv?%uzIWd9`-QYyU5`wh&qL5$!(Kb;A~*{ zxF?tdyYM8ASSahl-hktRyLkqM5Jo5N*{_!9tG7hihHlBsqh zLX7P5F|XPdm(G`04GS{I8Kq?s_-14dPLz*13{%luUW@pbnI~Gzf_?y+fUx3-&LmQi z^(WdMA-)&5y+gzfIzG}Lwu{fOLkN?^#p-&^42ZM5#AG5(=T;W+nPxjTJpO@ekafJZ z^$f#D<`HHqTozTo1WP1hqluCYG!>XD*OV*g+RB1sYQ>6oeej(X#u_VD#M`t{xOjq8 z9+>9=6@>DX{M_Z;fLjf)a-aXwt#J=JCar?Qk(Wn^NvSq?4dWR=5e?pu92u3HgNH%C zkP?Z@%r*G*P&)r`QDHCFU<)?TNrNZ+xBGU>3(!JxQIEi@E1A<+8{(?0vJUGa&Zlo{ z(J5w_Adp@Ix-BMq(5)I_wym(<(3JSf0vxUrL=jgOzS~y=%5Q3P9X|fyR19bT}(q@!YcDc=> zgXAp5&0JOXZkafIe>z#IB%%yfff^pmoeh&=qp&5awLwu z+$K`p=d=Arp`dprbA&~HEBh@PeThMq`9gm|GYKX?t)euTTj!`Y!our1YYJ>K;T+Kn zTja^4RA0G~Cr0L8Gvv!)WC#Ik4gn;dgf_u2*#8+On?ATS| zWV58QIU2|0dKaIbb_U1+&XP*?`&iPghU~BMvQdV}n!f%PHjA0u9<$=FS5{W!tK=3b z{iZJjD9Ji+G~SpeX@?Igw-YLafGu8+`;#qZo<&RN(O~W>t~ex-dew01 z@NW^wV{gSW?d>T|w~a5c)o*Y2mZ}r38Z|(`3f7xCZbM;}W2}p8Wh~70{hU7l-wHhT zh>*7yl?@Xob5GjWn&1o>LQ#`%waj?PhRkSk`6JznJ_oBK`lajT;B%L4D<7F(u##^W zG(7b&Fe{WB1TEx_YND-Bnm;^B$|LQbCjPrTcJvmnrS<)cp3%LPt18NNVwLp2Ri5^We@kg9*?fs%a zE2;}bDkpKCNQl3#`yOC7vN}{F;^9+iER@(mEsQ39IYGRkft2jP)OjorNj_2`p~VZQ zC(fL;a!?j+si#FErAe#&ZEJs%>TjE4Unc!599lyz|EwY!~J%UmlqoF6bF2uF^%qSIOA*WPlA5NAA78 z!O~!5trEY*?n*hm4)=?SY!|^c8vco=XJW008HNkEYF&5{z4w)R{RLu1z>L%XF|7&D6n zDa(@Zh@dme1%!1AdabN)*W8>&NrWb@@j3&3{ktiTo!&E+&s>Y#3r*Kg`5?_#Loy6s zqlyf~cKii?n4_n~FT4D8mwz+!R7T`gI_8n6ry4A=2mg!W-wFTU?EcHnY@kr+DAU7@ zw7Uctzb&!gHl%8l&K}*au$d8;OIF#%$j8?cx$Jnd1Rm;G_jKgdwH5T*|uu?%O< zC=e|ufUoD~_iR98*;pUrA74u>+#h%~60eCu;a79xE*YlgPt1xRK74Uv`htTF$|1}0 zLvbPTVG9b474L^y%tTqj?S23nwf(0aw7IeV05Cx6~2*L7~_RLWO;LzUK1fOJkSrhRMHRqfN-zCjfq53|Z| zh6=y#(nOaJGQqjn!0vDKA7Ds0Cuz)b?{2@c&O*j7C6@-r`YEb14O0DgkpeEKqf7rh9`r`9XxaJC38XTYNG`i%sFo5 zD0A~F3twPM#F#1x-GhKJLk96Oo#)2tDl^D~lk@r>OCuG{W-2!>Ry@ zF(D^9$yA)cnu=_>S<9K2a#AS4o>3Chs?w4-4-^v-udLwf6$9p69fWV+quLYbHa641=h9ITi6OE zfK5IZWnVeph8X41D4I$zN5gb3^8^<&_Nej}vNo8kqGB4WqB9TH@+iG_7-n=jZ_tg+ z#Esde@=SKK{uq)LPthLAhO)l|AK-^uAATR3RzB(`<3)fXn}+EY=2D|0g?^=tzXVS5^FNyFr$v0;Rm1+W8|c%QmsPJ z7I$A)Ff<*QFc(bOC5QCt#KBf>UUlibHKzXAm!?vbk1k!nc;>n`TW1<(sPSoVN9a?= z!-<5|#7F@NJA|{a+VE`&Y=WLF16(GaY|yVJlk{rLm)E*)Y1*g<4D<-(#xd;5TWYKL##HBE`OuF(H2$97|LrU!k$~)Qs1}K@q}A!Z`_eE*6xx7kaw-q`c+tZ;zjo*>@%Fv53_jf+Pj{Jrsg zaDQiD{-rYNSgr=un=lph&~tl~c0H6RyjX_Izkg}ZtR};?<_j~&U^b7Vl07M~#HGSq zrj30u7HoEf5gSpG#fxE#3_x=sdIPR)_j`A&&}+sW>@y2~r+4{=b!#*6DQKM2^2dJP zO)35X5H|i!u4V7gE+{PJbYawIhxkV&1lPqVL*WEl>bx&?*K3uMP~*xtTcd|mQm>Fuk=U}JTsQgvNfB7gdM z%A!CyJ^iTM1^4=a2eb(1tWLTyJ1V}@6_4i8mNm^C4{yd%fJ97+Y`wZ`sHMdDCVRIR z%L4+vi!dI4ss<)V2B%&+7EJ=9ed8d(Uim)&>5(EEyj5rTbyOjrdXx{Qo3A$w_466c z%q#19MV0$T+V5pN7c$7c+_9f5-y!USHRLiFnOPNt>*q60U~FXr_^g#W?`w0dy&&$^ z^-KHALh4~hlhMm*i9Rql$>Mq5fNQOG-@!F9PedB?!`V%HnhCYMg;)uLV^W-YegJwb z*gM$2zxTduhpAyT`%KwfAn0oJ8X|4X-iPLpp{o_zy3cZVjr`)LuDK>&^Atx?YNmM{3GJ)J{wVGHXn^ z^{ejpt`5IOD4K9ti4(^#zQRQ^F&O(TP$e#+ikOT&EvFEvQ1#9mL=Tx2R zs(07nEwA;<+T#jwx??<5K59QN)-6FB$pOCRB+g-GK^>#I{$P4pD!tp2Z;^0Y`{^;dpA(ku(D;sQ_W4yp*`(h&2M>NVo5pV=NRtDpp7_BC* zqb9lxrLkjDfI!(C|A#Tnk>M*+71lX9E1=6n<7+J_f3YbTT!OCeVFR+NVG|QNrmVbj zWuP6oUfc^f8Lmz#9cxbd0r&;>jWxFFWsc}|qoF%#_J*_Jud=I~wY9mxuqQ;ky_jQD z>iK>N=$Cv(HO>U3KOFR$%PJ+yWNScEe61eDsc)L&M6NJ02qoyqdF22MBdt=<$ZQwzqd-5BHwD5ir7Mu9 z5v^^yMeSGPV6ITR?Y=%g26u~qu2O;t%{HmMJ=1u;_X(I-{8LunmDmlPW!52SpuSn% zt0-XWcLCp-tihH+-T`9|(}HgeSY)oGEy1`*&l1sa7xZw>+|%11WmYjdGu~5&?Rhz4 zvv4N#UBjuoRv{|k9i_zpUp6$4vRgo0BGx4k;!Jyw)-6{eYP1LOOX+cPiF>Zm3e?0( zfJ{ZKc73j^-YM7dB5K+>xIyDlN$~C;YBHFH^^U_De z*($VZLjL`hn68saY76RcM>FCEb`g#DSXPn8rXuy21JIqctCgv}Y67@5#N{AE*IzCB zY{v;py`J++{j3R&_phxa*(C{9gsX$}IrCkB&BQewZq$I%6Z>n4SFN-YrC&Zcm?U?` z^MRtP+&JptI+}TB4zmyLYynsSgRA`K(OOFC-f=?V?p>3C|+cY2DgqidV zmIP_iAd6%snR)wGh`_?$RW>d^-_}v6Wu7Cc-qUM+LMcM;D`|FU^|Bh$wQ%l0<%AtO zCWLUeSG$awe{y^1B4{!i#fi2N9xm67>Yp80EiEVIgL#WS8QoY&x?#4`M9nl>{Q&E) zPIo0{qL{A3*p#`l6*wbtyUM=&LGfl)Xm_p(Ol^Ktl}L0a+9F2?Q$wv4*Ewc4 z&r7fOiIDqHFF)c6t?QyI!lK2Ilol*;e|KS4m~<3}VRQh;Ee{mgRR9}LXoKl4mp}Sp`j4w0T}*BqDCr7X+QsfUmKx>E&09o|3bM{$ugFtz#fR2ILMcUD z0`KB|Kkpl>3RAZGKFxFGSzZvE?3$yEA`Eh>E}6xW!b;2r3QJ>?FMsg^sq`)KoaQOc zl9!a4m!xldwzAy;gV8!%*G=bH<~8f;zJ&z{6j|o)MwzDvk1HY{^tR*<3Vxe1$o{h1 zIrMs$d1L(B1qf)yd3NVyldl%&Yxg(0JU*C)k3PjJCl!+IDuF8p%aVJPR|xOo+_m9v za-MSjDQ?J5nL-^FV#qPoet1zo|Fnwh_B=l5yrd0%|vSmMw7>Hle- zzLPxDChu3Orx1}>l&)`;2v%Hy2Y8$t$c1f$o`345G$ZUmgSlFKHs79X6nY6ZDOUnkZgnZSoamdqaMo~3agle7~9&f7{ z3^?&<(>D%Ooa#>SzzU{6nvMeoMh1Pgi%{0KeU&y{K|s7fS;^TzNN&{`|zW><8vH>Eu1%Bq{x9 z5;^=O*8)}s9cP}C6~_~#qO77Fkg~Fs$x!K1FPA5(ph_3}NH?t#Un*NW+}UNEkEX2n z2vhGrjKHJ@sK4Wzz0HTrNtb9heA5RqS)H18E7sY#H*L1{fN2Bz*tcl&jHnBGCXg8K z(XFI0h#p83FT>QUWA1$GXg95o4*H_a!@Z=tthz%oN#`W2 z*wH5B&j$=N+ORvM^=WA<(6_bZo^M4f-_F6~qdhhkcFK*mXQq(OqtHnL7w^<+heo0$ z2JwchSI-5@x0uP*FJ}(K;o9rzZY^C%Jxoi=aw&g8vQoYIk(S(rHs&{z2fCk~)^}SD zM+fOI5|KFsQZXC^H`&*L-LB7lPMCA0z7%G)tIW@dldQQ(&%BBBEY<6wq8_N)n-x%6 zt-{g-NcnZWrCXJ?x(rvfHRim@4&4GoVmZ3sUqMN2x-$qRU}!HyqFEhuUQdmUzR<057)ZY`Cb~aMT%gWXGWMk84p^^-^4~3wPexd^ zceT5q_M=lbRs^GyJrTV}$v-~6EiU-|u9kpr8NwwtanVbYKSOsrcqU5eQ7o0Hr;15W z0z)?Gi{hfK#W?SbIJ$C;2SlQ)Xx-<~ATCGa`x{TYz{5hl>Jc0Jg=c48_H?V?hPsvK z%v2&@a4xc$`kE0fB*1woHTt?tmHtKp)Nnxojgk`GI~>E~7tU90c}y6(1lp}q^g zH)f}l)#M9G`{lt>oJ3sytl$YN`wwkeKLEp=5mxn{-wSxU@!t%UuC+L3VUnT+hp*4< ztV&kTO^)_xvxnk?S+eyUoQ@9z&KzUedsw}tg;>K}&a1O9i4XAQuDK3-+NNsOaubzX zX`dd(Z_Cd|Cc1A44A|k^BcU2)aqdXY{F4*+{C*uumMTHNkNB7va7?1)8FDIj){%*r ztzNx_6hQWa#J33}5_&~`Mv>+dFmMi$7!q0!)4&Zr_`(F5=BXKX(9s~-?;0=r^4T!u zUN(%1Jk+f2?7ko7kv$ZtxSap7#N;NzF0f`VH1$alRE29`<$Ql9XE~RX|4?ZVm5hx} zc-$Vo=;2;6QgB_+{fdQbF~3gn){6R7CEdyhgWaCzDYIO#mK1pu80baZ1J3Jv>$Zj4 zwQMvB)3pZAFX~kn0R6WkwPik~RbZYiOO>QAneUR1iUX|(FKlt*-dB=` zoa80MOIn|aUOJODX`7MsO;^_=JE`)c0I~dLDwfhkTp-{#ToB9;3felPFuHAYq!4Mb zB1NW8C78X`O;g*UtvLP_I%1l*4<}9*y+K5VkQ&GJtn9zU#$9EOVevdcGqI@9McOwl zG?^O=^B!(!ejpMF`0uImAI~86G~Cj!^~j6{ZcMPU?!VAilLzsre6%KR39{ip@O27g z?DhrDQOtNOi~85u)bDVGK*^E4E%S#lB0x1Rd87yT$ZW?*ssRF=S7f7yKZyRiB)GE4;-=n<#i$+TRj zSz0!)tDvAT1IDZ>8gB0+iAI|X#(^2aLzXlt;n%xam~+Uwm}GXt36vu=*KyLuMhVHK zyOMv>m9N0l8%SNMO3%YCtta#yycEEfIR>4_AVao37cZ%awwrZeFmTgP!wQq~;bIg0 ziPDDZhLB()5+Tp--lZ-Bk@jj<6Em(icNNG)n+km)Z=%^VB^I4(j`wR+OuHlTR-gIo z7WKRC9z~nhYeF9nawLnF(-I^`v`okMqp1Q4Qe*R3~>$Ibr!d@sOZh}wSmK+`qmtT|5Q(hrb+y%mfOR9$yx$aakT_S#f zF`q{nUr9?6DUo@b6C|-_@7u1w(1)|d;>anWo(Ii40gaNCt<7yBq3hSG;wwg5lB@}D zBlzkDMysckRjXjlALzaE-8a6@q~8@Riq`vb@+vJXXKa}-=N)NMXa6ovXzB-GMmI_m zCXlTtfo}U2?bhP=sbyaSJEACL5(nLU1lj!dFdA71fhvcP+R0>P53F4_Q-#uUh_`xC zHoL*>JA*qg5P2I~|D5DdjArN+MbsKhBEZ+iXzZTN5w4vwk&?FrGOISS`=DSE`O6#F zjf&+ts3q{$^q~oJ=BjF26wZEk4MscIVLWW%k*b-6ta!vRGhO7Y=tPSGCsCb zQ1=)O>i*!h50d^d5MN)+Tv8{0<5;%)*N(9H%R;s(l#um|;i+D;9{}-O>9wKNT)9?> zg{0T^Nr@{_O$~V$?Nv#y#&%uGeV1bnZfJ7C*+ zrZU1IVf8-rdfAK}I$%Y%D?QQvz`LivQ=N?usopH=@9d6Jrfwd{O@(J)q*d`$Y0bh% zM*6w1ad$bLM2V?FN9iX06;#rw;Hs@$TiflPVUOkKcksg1!?v?kkb!xEQ2)7%AV%}M z(q_~~PG{GLyCRdT>}A_d4i8H{`Pt5QM@OHfUy0(hFs$CDb##f-;MDAaHV|*$xG%5G z;eGfPQdQw$DRDYY&c;P}Ex+~r(+RKxTur{#dZY!P6{vv?wFfy^-YGEM&6lX8XTT6x z%WvJ5l)Z$Q%vteRsBoL2ew>jYpHU|3*ksW+VX=Z=b2;_<2Oew}UFs@pNWKWyMp4W$ z{8r%>NZWmxJnyek*$?Ee_d+K^`p7wNx2L`|$F+>6-&)zWAFY@u&FZ#dE?(OG zW_{#%n-K7%TTJv8eCB3t#P1TsR5EeZ7CX~ZO=a}Oso7PAR84m&D2cp%8x$DLYGj*q zO76D3iwc{kQ3K94TzQ3)(^e!QjuV$F0rhEaL14zJge%QY{Q%4+jY z-UtW!4t)^COBj7jpk4x}Xq&-o^6?qyzQY-sw#JTf&TKn1XIfio0qfa3U0kBpwR|pS zHO z$Sij(=k4OnqQJ~31_Tfi%&4NGP#&Bty5^V6Qh_KnroAHgJbQ&!^A%S_}uA ztXff}6nkXB1?ECh;UZVw?>IIK$fw`Mv_B`$e`ia?xo_}EymVZt{->?4`K-eN7PZS*$q^DlXTisSV1Y2!KD}EA z+mYcU?oS^D4bmpFb-ddSFSxv;7@L(>1ANV&<)0@!am&zt+@`r`@!!TB$AJfnjdA}84YjZBYMo1+?|C4EiX>hmruvRSi-Ija=shQEN@pGvbCFjMh?vlZ-2UkA=R5s z^&{l%&U?HbEE1DIb`oEWv=GlHzf42+k6i8h%9OFCn*hUJ%}}O2L6~5(PokoLVDS0+ zLouW`8v|uAmE-$bshNoJ{HuKHs$X3$J+wjdJ~nk3Rp5@6TDW43z8xyw8Hb^{y>;t{ z(aXCTW#u{T%bx&;(B6sH4PivloT@FQBiF`>bqKV}E8}Y)D6Kwcye|00Y3wk= zb+YkNPb7K0+*t1bHOEh5R#6uK-bBTWJ4sjl0Gwml&q(l)BvbsJe@(wRQDUQ#G*wylfz5nLv!fmSoi?hWGHuv7|+tfCFp#WQ{MFrl~1 zF8Xo+yB1H=t!f89`Z$2ICK9QjoRFh5y6D=`&pB->!65EfDP9FHZOXS;q=g984gqI!21)9D*5D50d&B1KKamp@Jw1e(< zv$cZN?>4}oaO6U`GHeBR-I48MpUG8Q3@vz>kx9@*U{+1Z0dFOD@hIpQ$5N+?ClX0G z7nuBgyJ@?q8S}6$7GpX@K1k8cn7~7d*|0D#59m5yGu8fndoQC{fw!&V2LVo6%NRQ-sdO z8x%M+6HG5ZrFahj;D|sZVVX+hPNc4Hn{ab78wPpCvBMPJ1rGpHfvdeWB_vs)HSzY;Gau_%F~F z(@jMM<+_u*F2l+GUUj*f8cxcxC|~IZtM?z8=9}!VhZ@erj)nYz$*}QY3$xGp2ircg z{jW4S#qnE8zf-w1G}iH`;*%aTsb8VeT;DrO5_kP~Djt11t}n*|UssuyZ%ycPLfO!?obEaxr#OWD75{J(nkU&HwS@j3fq z@XvGI^_XWOy1ipknUKah;`L(V4qKFSu!~ndT%eE6G#OnsXvkMeNl(GD|NdmRJB2sV zx^RQf_1`7P`)yZ${->67xy3&A;t44W%rYvIs=`*9*fQjy)t9fD6QRXDREj`3OUOzvm;26A=$+LeaExSztqjKfImBj z@t{u{M?t_V!S&%citlW?QJXFS3p3$)e_&qunS8)&&+ELREKiaZ1;y>Ezk($ zIM8=jIG+xd$jNs)`{ey{7KwIamd}VZXGRa3M?L0Y)2d6Qg6$oth1K3*s(@-gs=Xn_ z(MO%2}W)Q1jt(lTniB6ov{;XOjxL=j_ zg^PYJFIv)FnyfOfUoQLd?UH=)ccW#M;6dxECw`JvZOB_k?s^E>;HsPLGyy)+I04% z68)h(caMgaoI;*!vYcu}cN8_0j3q4poAVL+@2_jQ%<S`JVUOv&At@8zs5egJ|BJhpz&e~NV-zZ~H7q}$?lWaPZlQS>FfZ-+6uB@+FUnrQKVJUqw zB8kEm849g)i}ymKGP%MDt9%;y8pL(jQCbu9GV`rM&vTZhXK^3BguCd{IyJB>4cKaL zab@?yimX+SP*TEoqnp@2vCzLk)o$AGzpM6qteN&p15?>biN=m&wIn_=ym`qoeDt<2 z93w4r@%^#G1Bb|W4dMeo09Wo#G+R|Y#$aA7I&$HWlrBX~34a&8bU6eK12UtVu((B% zv819=n!ac82-}H z!0F1+{HlcJE8#$V1R=T27pB++$zsO}2yo(X84r_vT)jqjO!H%aUsQ)iIhqWkD3;FV{rYyD7rE`IO8_ zupRIgr)Kw9Ffzs1!MXjKmT3FM@OXaKNXu8yqpTB*fPniO_V@qBO#l0TFQrbb-w)1% zdCF$lGcBUIb&jHkMCFKE2E8ce7&{0T6xM)_4@LFEy6?55GrZAooX6Vu5I5p^~ z0>v59r=#aLU`H?5QAdVL-+e0DnNNSd3#P&$wY?l7$i&@$CAnrc1GE*zFQD3diE zY(m7g>tHIy=iU7;O%O86@+Kdfcn23ro;O|>W~%5mvq!JLjomKRd;7}O6YM_cDx8yt zILf@ogyiI$ss2yd@ju<@$zV~k7liu`sFvA6uvo%Zh{4}IS|mSi0h5Q3*s4~urGli^ zOeX}=PJgOU{hXJy2GqIL0Ox&Qr{Zvp$_GM{roX&(E`UiUV31XGIs!Q_uQ*&NcC=Wo zN_Hp70bzcJ-!z|mEa`QR>d8##qrB3!Im!t@s%XQBWt^GluGC(*FZ*uH4?s-xa~mHczoR#c5gf~-1U=t80~X!4MrJE9V`LmB zjutg{kULEu{p@Qfj^oXL+FF2PCMIuElC;}pNb#0d+T!A6d2{nCiQd$^vdI;NABj1A z+C3z=a)3_Gs?`Yzg<(FHC96b`cn_p^=Gs)%{;x`;3A?FcYh7lB`_ zz>Lq`dp_*7;biC$k)79&$n$QXNGNLcAq~-D+>lC_P}VHoug;JiC=2asKc^kNH~2#A z2jJMJi6v%ts}`DGNF;J@kdV~{{M6PCcU4`$X3zd~waY4|YNtztxA_MbA**_OWA1Z{ zp?P*MjKp;{KKj4dd+(^G)~{WZZQT}By3*VNf`leQ=!i;_5)eq}0R?FZJwT9vY*7#b z2~t7{O^OL55Tt|>no5=4dl8UMKzhfM{ri4r+&jK++;Pqw_ufD58Ry@3y{tjzTH{^M zob!2}iLsIJ4z|;ntr8GeD)i+r@-T6vfBNj$ZxM7&^cxUPh6ogvfdO|x=SG7|V)8b# zVL44TMTwm_{-pXg|xeQNTyifj#rI@>18J>4DeF}%KLN3R0G?? zCqQKO7odb!gpFAtUtnT>Z8>MYRCs$|Y-Z|XQBHc9FeNvxe=#>d8VuGjw4MX8X$*YV z--R2%=+hagqiseJMZVLE2g?r7(Ex5gl0XeAMx7hrY50nTqpjg#(hBc<`lR9(JC>OK zn<;`)oX|3sOOyP;iArnB3X=F%gS|9iLd<$4LV{?hvR^ zU58Ooz;gnlH>6g*GecL7_|h)-Xt?~sYTUcZNNcw$yU}5MqQ1I{b8P$1C9KeIrnU$! zG>|J=mqfuoef~cP&wsfrP&SrwVcL!S>*pTe>2%RNkXPxM&FBPcCU<0&;j@U3UZ zUHv7HiD?1w`Knin@|6V#Gh+!Gjz-S!u~#s~pQ`$IiUhJND|uF5Ml3b*PR=qcvLw;L z+D&gqx9nF1sf4q!Bfe-ccaa?XG?xaJhDe}z#st!LL(yl_vG$OWeO#Pxv3l`BqQH|! z(l1Z2Y$iYsD7pVy$EdfrE<32^@_uS<;~}aoix76AmU3+McFXof>iQd;7$nrofufln zGOJ(JZK_^9FH}S##A(Nr%aw5v#5r8WseyRAYn-_WGbE zwoPcekAJpBy?R(Ybl(eDe`7{39Z+LKp0gmqVQaYuLf(ZxJq2yFtsU**i>zw8t!Ai4^d9k z;!cHy|Npa=EP1|hXFqICg(Glq_Kq20Ru+nkQ9eB&M~wm02+OC}>Poxi{@u`IVn#(t zH@1Ec!pEj0&nFF%JW3!l;Wb;0t7!r2eFthYfr#6OLna4TPvWINJm~y)Gz5!%SLzHI zw6chZzyH@;lwM_=j>oE{P0a2*&88J%d3HDv0*PnDHx`ptB@&HDEr@%71O6`2@p!mZT7Eb-_F zmQI_)r7T$OrU38JzhASYq_g7xJ>viU)%)LThWr0FV&MG48fqKvE>myT;r>8kd)zUS zk{jj@Tg^R9CjWED=E#Nrb3UI@a>L;H-g~}FA{VUqEI*xbGR~=<+&ymTa>!aD?ADx% z1R8i5^$m@SKF(A?#r@<=w~MvAslN!PWP?)(nl z_5>HmxdWws%R!v5_rmz4!gDYfzA`{{r|0Tm^z~7CUrvA7sIE&42kX=4a6aO!hFF)g zWI-pUFgesI58*sZA(VV!7&OFPFR*~9o?tfPYgv#JvZX7Dc=agL6wM6Y z*@Re4tK4?{GN=m&p(oClg`|ZyX`f}GEv8A@Bq|0lw6J-sa%-)qU8#l&%knGJ0VyfH zct1#&d(MOtu_*)0P8|JWE8qq^oujw8Fsi6W-9q8 z%PZZ^HY1m%PQMj)svW*0H}19uR8uP&t@PMeI4BS;LvCfS@0T}v0@%Y+(*|kE>B3EJ z`8gp4`PoF%oDJaOl+7vTS*n)-n@e;i&gwvW5vt5ubq?HkndG6AURmfZ;%meaK{^`E z6fP#qe;)LHFqgN$^(EfE*=+Vt0zN zwgrDe1AsFNQtaxr08N79)H9K5I*uSex969wL00xbZ>ZjCc}qVNQ!NBQEJ8!R3V?N& z`b-uSAt3Oc^T#qHlYdEv@@8F)7}BA9dlM}xTXlGNP^U~@#@~X#HrIVv$(#Gaob^}2 zCzqSLiz{)dWBk9Fj++JCr3&1!JEI#~q;3A)Va3U0y~GF4#z>0QIw*Kvp1f+j^iob7 zYE)n`{U`>7exCB@PuO(Tx#TzgZ}rj!AG%NQ=I`_{^o_+{Yv0Fh*ND@6E9Phro#8c7 zCR^L1tZ(IghR0RL5+=o^7sZHS1EHB%BQ5*2gjXWI$+|e5ELJ8@-)UQ)27)Aj#@_3kfn=>;C}G-Ga=bu zn&`wbi3am`)*wr|trQ_pq9hrQn)T_mhqkr%^V{B2_5JAeP$x>yWfZ?y?_ zomn>Zl}I$-rP1axEntVYBEtuxg_f1s@@12c3i=*+16OroGKhAgpCC);`#`>Xr84zG zO~gmnSX)~J0%KK+ni|X$*Ptx9X#kR@O5@!5dIi{m(c`du#EjFE9Sr>Tv-s^b@LCbl zdO@Tv3kGq4ADf;lJjY+|9Rs+5$uv>UKtiHfDRWTXQ%e=|KXolfn_X|yonRLaT5 zE9ppV4wc0^3Fu_Av=%@>CZ9-noGX$z&iqH2f$_ZDiy%o|n% zFEg~*SmAjCVfx6zwW<5*2GeZ@LRfPTaE~hWDjtk$Aq(Pw-hh>_CNyoy5efOogV#vI zCwkWB(J5F@(0dlSWaly8tgs@{fuj{Jg$BR1T}JhHi4tyO;G1LG^Go%Ii^|q$)#aC= za0$qbu7Enl2*HAFtk#wUc!w-F^wyWbBc`PK^q4@|r0(r}U0(XDZQtq)(iVXzJ%+^y zuvwdxy8mVH*W;E0E%z;X^Izw#gM0?cFEZH6@ARs$vc84lBrn%e-93|$3Ev=YH6+AU z4A5LdyoLexZSh<2+h>OKX)Pyo5tvztm1U_e+bLASi4bFEk|n`fmC zZ^M5|$_*#MmEVhA89^eS{qSpp!%IEXyiE1C*C{b1`3*CgjHn?ENYtXB4{ z>DF_LAnuw!i4SFJA8NIqyOlpDP(cfF@stpMwzBG2skjC{cHwr}77ZOmJSuB>N;J%1AHA@(OT;+?F1T}g3nyLR~^h@ zZwLK?b!ExknbIQA_O>7XjjhmjjWqqMLu{V4(t^h>yR^Vb)jz$4k6SLS6+P!9hldk` z0(@q?&>iKO0&lK*CEjb~kwr8ZONo|5J;w_A5v;JdCHw?a#kyk z9$StE$d9ap?+t;iJ|zq7M1JLOc24OS3i$=%Fsa2)6xkG2zNvVOapbo%FD}0Vp1G=S z8XtdSvA;(?Lu?2-C|xro8CgFGfwFKs&3-k)5vMp?Of`MM_{W5Zh zxMuioChCj?weYIdTTP6y!+qJ@&Y@yy9<1J{JA%L{b(z^(|mm^gEh zL`{A~f$Lgg>LeHfg%tFG)cVPGHG+sU)=by_`d7Ys=7F12a?SgEWV=~EA7WXE;9sz$32(=J5BK*KOuL zOcw-iB2l`NznR+Ef-IBPIk53#oeepH^R{j_Nh>OV&8-84Quw(Y&z)e%`Z_{+94XI6 zMAp?CKgO+>tWP!i?fVX$8b|p?Y7zn;O{F}h`z3Q=pVyPa64pDrn=J zlw7DcajksO7HGW!xn-uO-{KTH(JW18loxCko@@gEH}>q{xGt%(cMUhWvtD~&N`~kd z@dSl*>F@L`9i#{ZH?H%0eOi$*@BcD(&{5XvAZ$0`Sv(D_^t~?6NV%3LJ%R(|>W0@O z87{@WFQCQeY)?XMQ-im=Q1Qkgc$M0EoIWuE_W)XMD`OtMC-UI*@)~YY{pD)PdkJ8Q z%8wC}gb$*9U)W6Nt}^dJu$qW2iGPLHJ`$u=`!zK)$#lynEbfN6nCt!4pB|>#VlY9B z8Esnw9;3l8E7 z93n74?48|@?Fn;X`co9?)}nFP?DA!afu8Zz@PbLrW6pKuQ#PH=R}RHizb4jsAbl=I zo^iSNJ_UHqo6}kf_EJySHkwdafzp(&!&{x*Db~UovjNts$9St|)hDf!!K8x%`3ym% z&$umO2#O*UF`$3&zmdN_X@#$B0ib8$@rfM6=6hR3A|MM%1uxFzsLb6c9;5r)U!bAG z@G)Kax!U44sOY?k$+R1LTn2p{_~`epZ&c3x^W?tY`S9vX^3>mT@e!_8+NS_r2+^W) z>Ny7L+oOc6YF2j|mv$n3=VcKe#NToVB3x8lC)lUXjT-<+sro6>>(UNQW;2nEW%$cZ zV+8{o&l=fSqAZMorpw_OliiWOGNub&Yo&HUsjG?*RPJYsdus9JGzU{~rSQ|GrKt(K zN)||`!Loqo;t)ghmLHgDeyC{t>er{3en}`d2Azqf`5f-V7`;}{{+w=Mxpn)t-Bs;y z(G;H*8N1kfB$J@%+~i&t!5DueA7U0s(XIZ4ifYYs5OdS>H-wcU+&?9@)fk zs#DNhu!gCD3^2~5WBuTwaj5K6AF<-a0T0eU?y6g8g!|SD{FpnhFSIX@G?;8pn4b`= ztZD26ame-=Os{xHKI_vAx!HpwhMM79*_iWOWllJOjQUJnI5rRU|Pc+j_vXJ=hc@A zGPM6BH{GDS%sq-qW0*|}wdZ}x#S}Nn8ce!IdBcVTh`IoPByqfZjAc@!YITocBpDsk zAJ=bOWJ6nQY9aMAO2(tF?E{nDY~+%zg#aAaCKFU{1?H8!url1l6Vlpvsg#Tq!j$Gr zR1b$OF*pQ?)484u;gC&6pov*#cVGIE%D)sWEwFNl`5YhKXp1ZRYDcrg;yfnDH@+LBWz;UotJE?Z}9}}DH^FM#@)CA zZ*MK^tRAG!rL!a8F84^W=bt9N+aZ5#C7%rUFicjbY*en9FLjRo5;E;f(H@sMq%9YG zGbkB#7Ssqrkq-KOTJx&7<$V>_)&YeGjrGjxb}11CV2{6fW+aSGhbN?^3;_R};LJjL z1x8NHRI}N<(=eFEv%Sh6+kgFcx3apMi(5<8$@y5GCsUNTZzWx9FjgU=9VKc22_;pb zm&P>=4yXwE`)(svZ`LXj=5tH8rNvS>cUK58{tx7i*1WTV3q9W+NzPH5on5CZ=Y_@X z2CSS(hZN`>^!qY(P$5P+-%bEP)C%ukG$ANyG)yuwI=@Rb*3$fJRH$SEad>6<->mABJbh@I6Zm7Na_yXt(Z4}_0n6@6f^Y8C}a@;Wl$ z>Uh(}nvFR^u4(L{VAe_~wWK)n`2uePVz{;(0?Q(KEv}_zTOAzUDBf!ojRX*p=D%=+ z1pXOQn&tb~LCyEKJ)`f{bOMI68~qJ%+pW2=AeWepnh1tB4f-c?X7UMa#FI{D?tPHZ z=ay4uA}#AG>nSIk^;$TK`=Yz6L>S52bQ)Qh^9j8JQW1S@R)IHiD?<$F?rbN$z1s_GCA=;-Zud{Yn1KtgMZHrWa@~f>mQ>yml+P3Y2(c{`L4uk^H?0AaH5J+!H}A@T$_tEhw0OnXJ6nU|+7L zR5+vVtX-CV(VE~c6H}sXS|TB09z(aprLk~Wru~`UV}v}EwZZuFi7?N8`S4e$oTSm9 zVIW*`UnjWp8>yLR z`R>bo3F_@CqV?_S^xfY~@&p>Hnc9fbnmIRnA-|;~%d-!Rj~rA&A5c0Z}%Kh<@xec^BU( zZ_N=?LD+ejA5^=f$1BFH?~I-oBVx#e+`R5N!%ppd!&XIJE~n=AzmO2CBsy!rVW+!} zNo^Dy!n2vT-3}sot_8TxVRLzOkC;y{2e|Ng4eq%wZz(v`{_EZBQpERHt+tG}W0;YkkswL-??j7s3wv6+lNW+T`5tl1=Bqbou= zmhUQa0_SIO^5w5S^+A<@CL;y3l5Y>gAVmZld)MlEe{2eOAHxzC3~9bA1B0bJEYJcd z8X0x=Vc$gnJD)7D$uyq{78Rr_b*4e?N|`9VMhy#^p-{dx$`jnYh%x1Y5w>?r>&PoX zpbh}QIN_dX>L97casfuFxs+{IK@{_*?nrOSJ^HHyDa!n{Z$m3=hU6(m2koIWg2!683@9puM$zV46t?_Ap82+_b@K+_> zjkhO1;2TG^7`@<1S0PO4QbkdCW>_EnN8bWNXikCwvjaZ{_ib=NGH=w+mP5`%|+ zYw92nw>GcKq!#gZq+ieW)C98#SJXT@HE~bp*N#dn%;GPW{ANn9xqS?BpwX#00keC>%e1L4v zsI$60tv*G|;o0&Dgj~mDr*xlB!~~Z#LPYffxk5mgL8v0mLWVj!#ZG%TEKrE| z{3ek4&>ZvFf?g97Y1&qS`HrdZX27<`V?Uy@76EwX`D#J(Q1w`Ac;Wt=UpiivBOlF7 z8e*uH6S6a;f$WgigXD>(U+^abs8kqmJCz?F+iok85u^W||UBn0HM)EBa`7c~NJ+RB6`B|emk z50W`7#-2D5dyr|IeDnUVt+EEx9%L^3lvVVK_L|^$4YNz3x(mk!DPigSbfIWXu)R>4 z^&Gg*;F^|jZ8_R!<8b}1n zU}G{_VC$Qp)wb|k?m_7SJ3&jvzz!b)UW`MDYH#tzhhYGTrrl<|e4)rzV0i&ZL0FRN zV*BM>u=XbR@2Ao;3oGX?JjkIIZCVRc!Nr^!XbK_$_#-@RVDT?(OLAPoEhGeKje68H zaW~;%c16FDgx(!HfpvKeZ80tzrR-p}GtF?Zyn^nn0SJqUW_8qpaDX(8v=~9!W02dJ zEwH=hZ7PigxrLQ4hL_ejE*HiYPYLEt?n&w4xT`3Tb&@185E-67IAyG=?6wX-nBwBM zaSFC94A(`_aYL-gZzkp-gxQura!um(G0!=CdY@}nSlEa`BNkw89>K#+BIQO*&g5Jl zmA6MZ8vdZA+J3@)c}Z~V|vjV`&co-`u*7#f%x zxix~(fX*K-4~>*1YWtkNtYv;AWFr>H+7c=f zc2!!91eypd$n`f9o$v40g4u_hG0pLjhg@d@1xj}9g#5ZrdxkI0D5+(-FiPbd8iH*{ zn&r3YRme|GJh%@9^D}uMvz26-84K2Xi8k>Xa36!vagDWvyMv>0V-xEApYL97Dw24h z6~RA4Ku=6!WT!JP$t}00%7?CfwjULn%^!}P6>uN3w_AY-p{n|%J7#(C=n05FV5ytj zOmuH8AW9RsKZUqLWI0KPerlFv%F01Gl}np!WZPYB6793(9~Hwn`M%z<`VoWl(JAmP z30Bbd4z>cH(N*|q_O*(CD`|cMyi*n4k7QU>^(R$!(bcfE0t_3f4yzKa@BPU;8BS*PFhe7VdJ4F~CaUb^WZB8_a zX8PEm3GtwjExlP@1H@%Y)YgSh3I1jhZvM@b&u}Io22Zd?GiHOyoIS4dJS+{JE8X!e z;#QOgdtLVG>B1+pmVxJT;0e!440tODrQSCxU z0UnZj=YEh>NkJ;Yym`&4{~TYOi#! zGOa2ftif<*e=_QEW}3IWlO)D@4W_AXXlOt+@>M68FLP>(#aPcV?1Sfr4CX(*m~Pv5 z)Xc>FW(rZ8Z`Kh1tB_87eR5U$RF%B+ zZ13Wh;UVW4Q@M++hvHMC#lM-}yF*y}#xndW`oZE?vL~B#cg8i>U^L+xx}KugmSbU^ zEz7YaeLGsUUWUab`ibjkG5O-i{gqX)Ic((or;ROdle;nyA&~4&YaTgq3JQLQV(Tq# zD{T@eHvyF4xphbVsAjh2-;*$!2RA<3)$OVttuPem$m>MsW*OPqCP=Hg1$fv~RX}w~ zV*#R@uen2sVU^VcuV*Q~hOEbG-?{J3{mlaUUM(&@K0k~wb*^{tNxxZtO}i#y@)QSw z*l_<^1j%+UyK&&m5kT+x;tUp3xgL&63I)BI8`%#Vq--T-o05G8l&h6<-wCu-UGSa~ z^#H$uMgS78TagkZeFsF(v5HZ9+OZ%c#4>zNgE362f4AtC^h!YYNcBglPv89e&d!M4 z)g6;INq$z`Z>;PMvFCi~(g|J{OOGhjg{A#z2u=2&nrAbQNCESou1L!122>9B_i!_u zMpMJnIsrMX-%vMZuewCqH{2?S7_$!FrCIvJZkre>TUOsJR%E$3Igc57uN4~Vz|PVK zb^3?0Yt*|Y9R=bZ%*He1@(qGQLs6z80X*hRPX8)NGu0rEO=3XPTn(8-V9OXCK)@AvT0am57rmpg}P{E;$Jy-(+nMik;3mS837 z)E$D_)!$4-fXjO$d+Re*fl4dCnM8G_A~$@AXI`|f(ANs$O-B_5bsPeY83bu>N;rcA z4KA#S_h@glg6_;KOk71?k_3V<6B63R+5%E_Sy4vE@)^H`PRHv|)Rk#)hJIh>XYEqn z;9LC+FofKlJDMo8y_|FCn8qBU`f+x@lX&`uF{I!$g8R``?9s8;?WV-&(fIU4tAe}O z5r}7Du7d=JxI5m3VaCz~1VU`vA2G)+|7RMC1k&7U z-pH>gqDQ>#XxG(11}y*4;wy(7(UT}T)t^p%j4CmN_!OYEyJX-53~!#yXgZamVZdzg zPEujpKBFjv?m`XY?a=4B#`eu<0P+~9E<&Q@M%cMW%?wJD8zB&12pA-5kmmpNB>I=? z>$5FniMyQ_dxuOP>h66NMA~vcr4{j}H8Ol*vo=76CKp$$5^i$OF@GBhbxA0@C^&Uuzj zzwx=-VtY+-GZJQ89448GZR5=L^*$tQ*qCmM ze2?suw+O{A(Qf_>k zK7V>M%In9UzO8B}reAHDb5Fw9*xy@c|7IF+<@hxkJ^Vr;Sm@H(lJZiU^ZQvDyEhKp z1nJD!Q_+-NLrUjlk3ZK8I(S%}nx61#{Q!t@7Bw&K?{Ln0n(d)C9z)7DnSy{WG3t)L znKYb#j-6tfr)GMBTfLn>7{*1inDowEb$XfLSe#XyjwjtrrHRFgJRMq^vo!d|n16Xj za5L)2_Jtwl_O`*@cZuBQ@E6&!1Wri%kkUOq0ijsIpjc`RAY!6B;yC-^(6Gs@_6b`= z{lQ<}Euj43uCqUPxr%H&5WN%kTueo$-L9@{RRy)J;u|%8jU)(LrtFXn56>Mx{WcXu+`i3;e{q)yg7Rs>2}kXd z=B4k66v1QILPQ={-gj(QboiU%Iqs%lnk@Fw@7QGE>EU~=pNs!`<|Y++jo12I!PQ-z z%^Ag77b~9gMt<&|_>1A2r2E}Uh*cPi5%SwI`aTYwm@x7uK1qo>D?yBJZ}i% zw}{@q^K{l*5S3R=@gq-6XsmHd8(!{c2x`w?>o}rjy}vfg(3hmB?^zi)ThY+4iUI$1 z0JZA09Lg3Vg|vxvTt&B2Bc&YNZ9w9k3*6=MW&|8rGP0_Z_(T}Lwsts~287Of&4|mx z8_NPBA@d>W3+}n@tED^A*~34N^}1{3mY!U2rJlX-IJDQU=8&#!(X)41qCbG7bZ?y0 zv381X00qCY&Xy1s0A}8k%k3Z@*m28&vz^%<`U z#$GS8a%_+MY2e#B6OA1m8CyxdTv(VA&1XZ)lG^j%(7ri2VxgLJ5SL(ajWVvs3R}UuIs|j@+|3U8g${x=QwTxWnc${V? z-braTCC;-Wnj>yq4bu9a6%pC7g&ps?nNr(@%1O1jZJRPAPHnPntAN=xi1PGy$7){n zfXtgAK^<%(OT7mAUY2Hy&Z_x{GqV|rH7>2k!t;>cX9EbpJYY@FJU4ew(Ztq@4H*YE z;IHxjCG2iKM=uohXj>E!S>3r+xcluGY+H5MnDPC3ls_ zh;Ni2@`Q@JU#~oj1v3URrRJh(!sM*vf;M(HyHcPeDVyT(Kx+}e5#3akvYw9?)!SpVu_>t zOK9>yYSrTruT!CNhB?qE{;Q$+{^D|;=WiyJp(l|HpzhPE2LS`1Rf^TakdtQ-?07IyaNHxoIyo$LBY5p3s2|luO3>+AQ5FWBm@l@WMvQKl+A=wl}(S zF^iCymb;iH*wb1VAXPk}MTqDjkqV!%aXA}0k0Uo!4SVwV4;0kM3S-mpQ=hj+N9{R? z_RVvw^_*m=@RbT9tED`^T#yE<&N+}>4Mt1M$j3klK*_-9sFfUdWe9#|`{`XX@iGTw zRviOmJGp@k%u(w$zda4KEx9G&_i8uti!E#K2{)TZqtPWP{jzz&7)Ss9w`pco^p(`2 zr^}UNygJM>y!nx4lHpkM9uDQIwLWxQT1B5^iqnd&?dNZnl@$Bj*y4=j`RzUg0tJ#? zbAF`r3;LFW9urWX^vxx=0J2A_NZtSWG__cj|1)7T>qtb5Mfs>j_xdwoGvxZ~z^TtZ zZO!}0hvx#mGMCSVjrI2{7}G>of%4~w7#CsJBBjgWF>U+|{ZBrkhpna}tzQT`k!Ts| z{>V(zP%vA!bvfV_(hM~3A%;^^D!Mj*W4KQ8v)n!ER6(2H@=+i?_l-!twoFj933viz zDB=-5ejJLxqjTFnJ*YIPNUu>l%#?vm-SttShi(?vd$a=dA;9yh(B*a6R;o1bj{z0-6hxCiSUbo6xa*h{Ua0afKROz(NgDN^82i^HK0 zeJ#Vj^~XS*9LY5VV(9lhx}eoY!*3>S7M$CsJ(`_IE8)=Z((%-`{m~ys>dLdQjFG5G z^RBBe^7Y)J4~!l^w)M!4BbiV@@T`aybjnK2R|UZKUI)+T+odwKa(O379Y(DzQENE! zD&`-9eV{8`5?FHMF2_R$2Z;oZ%(v`6T5l$$kPZ31 z#mbd4vcEg$%1R2p4Z3cWO>Q364v9X=x&B?>M;}$nTQwNdl0>iI;r_OFNfBpmd zx$ETAJ}uV$Q+@`0{69-0AhTo#&GmCLJia`vy0j`^O%-u7L1g-V>L7vqRe|IaQ*IX+ z-87=@*JxtbCS_?~5OTq!5b{{=klJMyT!Jd?121*szEo51&uh1%_IQ;@@$&eqths2qj z3W+oE9ro>UV4^Rq*yHX?IHV^Y92|}wKBe|lti`o038e-0FBY0U;^*V&;{EncqZ z153M`&(bKD%EyNkA+ngYz7V3pyON9d{`E7M5dTE%#*}E;>*fl3xH9%Zr8zBwSgLbHu259SFI8zr{C&aA(xUVGGkWc(aHY5y~Av;KW<@3dcTY+8@W zR(@mMojDs710=Tq9c-NtgZquxK@{iW$6--MCt(jFh*#CK~`NKr6ne4($u zm(9`=lOy+v+GbOs!h>RZ=py{ZM>5IBSX-73amsMg7|LpT4UxH2!-0F?Z4v(ta`Lw;80!>sZyWc*JHx^31 zStK*%$^tlCQ&rB}|6UYd>EPDNd(o|)v;3j6izOu?%g{lE0=3y$hmpT3Gt%7p`)3Y> zHww?l&`aX{>*U?cja5WodikYn{Ysf>ChUL)l>LP50)M})UCo81)+^`zI9u}tohrZf z4{=|C0D=0-^k8{GdzfNX2Sl^S$OH^gmwE_{3XDgT0eiKze!`9pJ%v4F%nLKm`F*c2 zTEM;>xxaf(cN`S%x&eM{1ya9uEDoBdER%Loy$7rwmIOILDySj#}x(XaqIhfx5F z8Tg6yA=MlCt@(JwY!Q<%2Qn6`c*B2hx1^Idvx!~yRU*t{(XpquuiyB=B`7~lYzD=` zP0C2)0x7`rWTfZBE5-m`9Kf_Z2yn8^h>r&ulPCD;&3A4XDI8B`K+M#qcd4D;!@GYs z-ZUKuc|oEn#k`Ct@l{S*j<{F+Hx{HcSV%+_zmdkzj44?L%=Sa|(;!#J7v#Iv8E*89QzF&FAWitNL+`Gm zaNAW|r*e(BaY@dAR$XUY%fx~0mC>eU#y>=2L?$!-ZD^rfxhTtfJN@J)MRmO>o=7)7 z7vHbjk@{&SSH~6`Qcx!;6ND7{QeTc+Xo8O4zU1Q1+U`fCz1?jB+5^(-9`aso zUwP4#CB|HrC6L1RA7-ZG2M0IgI>O2*4Pe=QcgwL*!Z1b`IXD0|(O4WI;AxI4G8ITm z5(z0I^W3Ub!L-99RBX1&PQe}tjioq5lkXzRV>ZMpj#5GiEFe3|e z?BqQDQsyvaGOteXJ;51jiElN^9AE~sfj+vqb)!pA)O`4;_RG{4uiI%+$ixBhAP19V zmH6-A_<m$W?W%KK|d&j1LPLMAh4QLGuRr_=- zl;N=+S%@%x{>Lq03Aykyw_m<~G+TX}%Dlw|U3JlUPXb6j(6ku%pcYhI({?)_KCr}4 zG_!-0X>8}%tUB!MRNh?Qb#GBY{w?>m;by{#{W8y86ERk93ONL{6PP<6FsN#c&w@9y zO$jq`R1XRZw)84n+po%mJwWd{)Qo57Kv6ld>0#;V54|mH@Bqnm=3A6-5-F7{jQl0S zLOZl9vMoiHG30uTuQg=C69K!;+x;ka&z%sh)z%0EDaj6Ltl#3F{53c#(|mOj_R&|9 zT<{Aafjp8IN7VFc@1GzbK?`^8(2v~bm?7*BI>MbYadb^zmBHorO2EEMNDSG`@D+Ff z+Q;jKS=By%oMQFt#}(JaNILt5mFTulZ<{+Y&=nM5T|~%b2t&^}uinXE?uz6H`j&-@ zmnR1Xfo!kZu8z-{lAd-zAlz#z{}>E-{UCpo$#88it(+s=p$@OfOi9Xfi#pG|DK*jP zx42m_iO7MQXbjnK7oNTMGx=L0kHPK6auV&8=;9jI-i1%VrL*keH56)zTsl-cu+DEI zk9C7BYrg&a>hpiTJ4|QP=ojDSmYlh&{$BD=vW|E5Q~tc(MpNOHxG8uk_*m0z^Z`=M zFQAd*`#Wc{6WU{bkTg69?t@6HMyByldrW@e(WyRAE=;DQ+75-ddF$w&y@=&Yyhii* zpP+YTK^;*C4W;tdGnL@p=~3@zy#@4`x49G4y^ZuTcyYhGJXB$lHrc>8St5m}Pe`bSPGcl^G*k_Z!*AGOJ>GEx_GA}-t#p2_d>7T)5p ztmaL-OlUdRF%SRpXHog7gBr6#;{}eK7#_&$6pN!J5NkG0mA*h`v)NR`>wnQm0;;6RsLnS%$T9N>`Z|Kth@i3T!dct0@;my-jh>obDA5}8J&Qz zYI|1~S}(I1+>6$j$Je1{J+94=QW~bOiW5U)G#apSK<+`HtX7t%hI%q*xoGkSLC4X9 z$B_uc^=WjV2y7*P8)BlPtVFnnZdA7%SiIwz?L@F~{3 z@-!EXPWM4mFe{B?Xj1qtoDxByN#dn+x}zWX~ErE0tBJ@AfXf zE?qGVk71Q_9ods!ERj=bYPU-1t%=cXSzIPAqu*~~Ob_QYO`G~PfAmAvox`lk7_*}D zN559Qj=XGnxB}6!St3M}1m62bauaAR^I02xnZ82L1j#b)_O?GcIVyidrF|HYrZi?%fE0+*^s1%o#3=L4X& zT)L=%0)aFa;e(yc{a`ia3xFXgCTY*nkLMS zBBb|8SS6%bb`EA#Ebf)bkSc_QBY=fXV+bPj0WjidAEos-lPAj+*l}pH1uoUx?q$l-kd~)mRcIGV1cQ|K$Dp_VR7Q-g>Cx_hIcr*3e@^W{ z>M0&`nK$#2lzUj`cqicg;wjiV#f5DlV|1m302pK$NbDoYOE+5)k2#`E_+mMyB!% z_q0TY^iB!*NkD6g8)o-w15!d*Jh4}!TI_#)X&X4(ub2?cp!Pj3y} z@2DN5wvh8ZyhS(+Vs+29{F4ndIE~qhc=@@H-p^Ms=o_+dc1qh}UQT*3t_=(yIQ61y z?uvE02d35!>>C0+G5Do3Cf2!bKHEDtvPVzdwTf6eCSfFo{D1)`rO*5eKHl{EIKmk? zTr0!*Lbny=C-}67dLImHf{=~m`J)Z(wlyYZ@RFFB35DePr|}jY!%bI?G@yW8fsI{bfu4 z5f`eC&5-!D1$?1djdcu>;kP$PS?5?=H2CP7x_i{!gW`9f2(?z{=at$;BCRB)D)pWX zzuKQ4KsO0UZo7N?Q2pVBXa5>Sp0g=oySrY-tEN4$XNe27BQ99*pRN{oGo~~F6$A=7 z< zXwxSd(y|i))1ytm=XVU6Ij0ShDz;^AKZloi`le?yTMJgr%Z#(VOhAjB~D83r2u?vj*my<#4hDR-a8GkDKOi)s`CGd|VGZAaA3!Ir1*1X}-B-4EF z8Wvg5g0vAd%X7y5b&hrRFS(RX;iH#`G3^I_Nh4fb)Dqi!9_GTc0-s37V=DKsHe&7i z;pt^y7<|&(%i~FwbljHF-lBZBMT{= zdg$_X)Wh1QXGbvjdH#nl$-dBm3gp#iR&XRF0z4=-r&XvcI8MqdL~6>s_1KjwI(o+# zv1t##U7>kRRVokq|Sfj!Qu&qq1 zRUS~d`5-Ym;8omdvF(5QDY?|_WsRqqBZi{%tup6dkh9|h1FXKWrl*mqxpj90ibK)? zdO6*X+3tiWL7Nz^ECu#P9U2;pkrQdN690Zt(?b(4jpcJ(Pshp^YnOOIy39NWxPCKz zOwm7S*?n~GZw7>BVq#WK`pq;*%V=?0&5TN+tc1{!_@M!a#-9F94Tvi`;;XDW@&Ahe z{l6LP{|EO%qx|Xg&|(-VkQsM9WC!yi(R&t&I5^a^qqatevi&#q-aD?TrQi2w?`_+% z)r}BPnp>)L5keJEAyfkb384j)CM49*L10@z2!fjqp=oF-B$3cVQ)$v`=tX)Dy@THD zbM8I+IrsHEzvrBLf4|@Bb?@us515rTYi6yPSu>fL@Av(I3#FSa;#Vywd~kxI<9}(+|K!h=^L&pVYNVx_%tRD{^D+B&6*?V|9;l+3E@nCF=wBdwOz$yqaWU=V z09V#$!v?=ru}zf_tL93raV3K{9Hq)YklyQb6(vex!VA@$mo$&mW%wEg>=^1uoin)P zODp5*>+kKCy}{d~Mi`Xsu(^mv3~^(qmGVYvjI?RU7IN#34|%PePW6|5uWeGYisi4GDWhOZ~*TVEiIsaW(9e9y?5NpQQ|b-b3jG0G)OH0F0;s#Hvgz_I;TMD@VDODmJpvS ze_UgB@pu(c)DLIZ0d6*9k4BhAN1dS=K8VGNZy$NnldA5Mq*dERpu<~R%G^i#3ZjZ? zOP1A4kwWTaZi&9=iX5m~{5h@<3!)665gMZ%^o)rYly)iT&7a5T4xSe{I&j%tvN=Jc z2aZ=hR==rjTh&NPRT&KbP)cT1iyghFX=GqH&c>!?c3^_L^%jTBO{-NNVORy}tl{`}6_v25X!@TYUaf#O87j+lVvz`RPwD zFSp(u`#e1JJ1MpP{MfJ$b+Fj1ruqic-(oS>!@!0P2QYCeQXK8~SbRilNAVP&Z?Chspm)iJ#Bp6e#Tq!xuGs=7&sUvQ#Q@SG5+> zSjXn6pr?k*ME=Mc?ouNymUE&QWqdgG>Dj^QLi>OM>ag<&;cx*ZP%|Q)>*`@Ju_muw z0C=QkZ4oUw#C~ba>)g#sQ;XFyrj{Sn3MOzzDV2#ss1soNyJAHFVmuzw#=(2NF!8Y) zFY|Flj)`~NRTK!+;LoLFLg}EX8|R32`*Co>Vobe4-)J;oE#%F053CzB=SP#SDrEg8 zg_5~~6)Mhwn&`nQGK_IFMW%VE6DnxSLG=Q}YFk3d%}Xx;p@8iPUpD3+0Zo%Id2CR^ zDF9GJ`Cucx+mfSciwfRy(0ggtQB zVqJJe)j4Z(t&y|2j3*|)w5|jCkud0u64jgua>mV59^_zZE}q?6yHO%?Z8%-R-Mo*z zoyZ~9Vce}XyFeuHt=^0Qm_lvDiDL-m;BYyIz2Ves-nI4T#Rk0N@fb0(Ynh6Is$cS? zruxp^K4aJ`S3PJeu{p1efXP9S2wv{=;b>`r1{0DLH51O4-^RWh@d99Lm%$#mf|ba^ z6DWa9*eFfB)Y#YuviL}Y@H-+isn{f2#n1nv(&y_(Sj%IG6cI%b&x5#hK!9N!g+alm zYJJFmURwjlx=xm}3{CrLN1jnW5Vr5`PG^vKfjVjYHN@z2CiQny>9Dl~^hWlr%Tn#D z!nU-sVD#|&yxe0+;xwpyd%-qad0}go~rjS82v(FSbyOz;jd{qRc zZ$e88d__Wj`>DL&VrQ!&y;*JR)GN(Ja*z9rja@7d3W*gVEDm73yvLY|x|IQ*<(Uzc z>bED_I0?@{!Md{N9Q*5Y_l4bytVU*cyZZ!o{Ed5ks?eUG9?f$@=M!wAe@l+O;Uwt^ zm%C*7Hn$v`o4Ds@tO5X-=pBUw1r4m^`0g2~|MQCa&&K$nNhjC1k}>FuBhUm0Cz0ph zzA4H~khxvj#x`w`!5Pd~2FN0p<&E4C5%mow&80%J%5H>6T6><@3gO zMqf*jd;!Tx_6Vc?;q@A z*&&|KD^nhXPvY<2tv0?!Uj)$us3{%|$my^a3r&_n9T@+VDGMLD;|+e}$>xX%KAO?$2@U@01pIRX-5ZZj2uAy0B`Gn+!Gy+{PmhZ3ygr0&n@N5d znOJwvAy}q|a^^&|b^!dZI;{vD2`piA<0SyW)sy=9ziWE3@EqIK5G54!I)*mIEvKq2 zkXU^Ql6V6hXX%TQ-nlBnsRm&48T1`-u4yz{lwg@@<9zyc)KI)$@dBfar|@TEJs2nM zEn;KQ<`$0msb+4X2E0G1N(f7^MO6F8RkYq!8Pf=9tn>)LYZc~{cI!cfe`#AW!EzvE z{C)X5m%WUvqi{C58tmx*4B_=37uF9vez~JIT~vk;b(mp}pdAW##?f7qli$bXu(s<4i>^=l*+@0yNJFWlgJWNM4$20rm?`q|) z64OVU3q_$*qkf-jWhnf?Tns+mteDSXKeFtNf1pIKG-ov)zjhnFcu-p%xN2MBg9=jo z`Q*Y+e-r($Gr&)#=837rmF9$PglgPC6l{3wU=*|(BAuDxY*6@{2fyx)5T^FoYKGsG}D4o({7zc(V)#sK@HCDtu;YC8L~p zmO7)xu{TUuvcrY&nfg0D@3d345Ay2ifcBWyqVMyMmH{?H0=9?hJlCq8*m4cNRg2!g z9BZWg4=YkdS&iq_w=+NdP4vIgSe)H)XFvG${9pC1`d4GfN$9CC`g-rbvi$pR$p420 zdzV3PLzbGE39&<^?#iV7R$y0ap=e2@H5G6v`}DBW2*!nDm@0#((!d%!gEBzw2f7Ud zz;!WgT~XI6H@=mEs=P)C+C)(v;DN_~)#qQ8{O7GlBz?LY$%S8E=G7R;Z3*oJNT$MhJ1FY!vEFQlD$2p(V( zu`K)71#bRO^^b1(|J-KmMN_aI_3J1-Csk$cR^dczma2VC%mhL;g^+z2NJV4rO!X?; z_J`9!HQ>0(>KkE@ScR2Af_?IhM}YndQ& z^^3xN zROqc!@i48w2^xAjtvKxMKYGcBzgw|U#}S&Of&H7Hs1l!RR>y;1{BpNuKA#vLLB2)) zO)%rDFEto=L3Sje?Jeu3&XVcT&A);I-p>bGR{MWzMi@!om1(?@XSDeGuV7T?c`MQ4 z|H}5y^8T+v{;PHUSCjg;cj^Cy7l^z^n%(;p_;Wm0HS%c#Y&86Hgr(D+tkNg*8S#c+ zn0PvY4IS~FOliFAUyHY788lSDW`7+0EnG|jK_B%^t zWFKexlajVB3HbTvgDTm+-&y7~>E#a(m*TqM3kWoh40d^J8`7@M0PQl?n=h?wF;VzI;O z;U9k@x#4`Fv}FIKI-!TbCCt5cfMLrQ7M34~e(#$1-;loCbwn3lZ9Y3atUHX)O_q-% zp}sV2A~tL;n_9U3kR4Fve3x7|v6%!0!at+8mX)%>hC{{zx&lE0IRWC!`(DywayAc) zes|%c7MuR+(A2fRY7rqCf!Wpp$_c~=SV^$mkh`{KSNWeS}aT<(LxZO#b}(ryj&?>Q|=YkV7t%8<8mOGEusA1 zdx3!0if&FV^LfUJ?9g=Yw6`K!4^kB2SLz7Lo%@voOWm(~%QwSj_J7nz zr9b6C9Sdm0?<7b_A5h(M$L$tLxlXZ}ZR;|HPMQ5d`-zk{jFus4w%{EUnHpX)l)$dz zRW+d2ax!gNg^y1Lt_#S)T*fST-K*)inxDse(BOCK%3RLGo(LDeL`>fbT4h zmsm4`0~|&4CdFM-3`p?lef>E{aBa)Ogjz0vMN)9ad=cNI`yPH=Q$(W#&y!7;IA`2{1dSq7{{-=pb~YjSt8 z=0HEudyZzIv1Z6d?zO>1Gyz9~(1XA?Vh)X{9@oCM?MAq&MLVGv?yK>n0nbX$#Osbt zXdHx3HCH3ubuGrm>{Bk{n|Baj4s;wBrY)t~<9!S7GPo z6qVw9gDf=Cmfg&84BYtQWM6FUX3m~%$EEkT)!Ar0bAZ@6-y#Ee7gSHretBLYCmkW~ z!H|xwc(Y5}Pcgjf+U9Olqj5)F#-mT$<+7fJ^O)5)`!M=DHPTF;-1{U~+qBB>EU~f? zzvXotUkV}gUHZupn@nx%zqM4^079txD%KzfOY3aGZqGVKF3yknzb*pAP8lV&S4n!p z)W5`iUbImEAOmst0zsG_mp3{shnX*^`pz5J23n@D3Dq2s5x4Q1cIWltlKe|;ugV>r zZd8tK5X=k&jKGhVo4i|NCbbg0d>NjD&+jUTw%^@oM%ka~RF!hfOT_C9l$%)wg*(8! z$M&*H6?ewpZX(ySjD#mA%C9s7vv;n}?gOWtknj1+K90-}QW;!W^CiLR>8kvFt2Ihc zX^eeHVlTl2jPH07BSsxdVxJ;m_!*6bOCoUJKt8dwjzL#^CeoLD9(2l)Fuu^h(Z3-L+y{dRd(9@w@zmc}!aW zmap}lFQhPji52DC!3~2Ha+tCUE)?T&Z?5kfdzPgZqKA8^Q1Z>3Y*S*2B+M#x|DtM5 zExK89Z!|W zraA&bO!~_aFgUy^#~2sMWHo(aQ+@rg_@Q4v#969BF8JzfgeHCZjVKhrH?4By%p=*Y z;KWdCjRg-1yyxO;m5bSQH+#IQ`1{(GhRQ167m!M@(LJiLV7kNzJ(jcFx6_;L2IT`n z97*8-Pqqf`6Rp*OIj5zvvHD{*)De_Q6=$<<^CWpt>>Z|P4HWz&+V?s;tYX|hqh{Bi z|5dL9;LWpq#Vx^atfMQcD0>C5)x+u*!Wv$J2URvWYX5?eB}$M{y;ww|8!KU@Nhr^+ zG;yaxVp)XW0`MCn?dR9-E-zNseLSjrMriq#rCQT-u+k1YPkJH3W06KNjG|OpymttG zFx6a&8?5`~el>o)mw;zC>AX{Xc6e)F=Jx4}dJx}PYHX~C4u_l81iYWl=uxU{BM^27 z1iU}SOd?d{&dq_3=^l0&^Nn=#^ZYdKV``rs?7m+F=jTH4ol7ovp4!CxP=!NC3Ht%@n9l~Ac&cTz?D3w2y6we<24S$Or1-)GgCZT zTyHEFd4O8GRc%H(wV0-UdnlhEUCj@J6_5z>g*-HkS6??ZPBNbu6^iwhlA2b=+ELEY zbeRa$1eb!c`OoI%!e!O3m8OemYp-(&YD9xSen zAdkB1FBTM**1o{QGLiD$K1e7bmJZ;~ksqg`B)NCq`o`WaS$JN$kr9FG4h)GBxsV@1ovP= zKh?Z5R4?cEyjiLD)F6F;dj*Q&2{O=;a!kP)_ie|3`~8+Zg6OEF^{X2{@sV2nNk5n< zzYHjTOg6=Bv4AL?#SC9Z{bF;b_m66~WNvM2rvng1@c(a4G zXO*djDlYB`5e#)$HF9eY$st`YRS+XGH@&-bG%Sa82dSU}2n4)~68CT~@bbAi?$lCc zyxIX7S^eQzVYSsX)GyVq#=1i_V~&@`WKvxPF1psF9)gNMPIkSH-#kVI3P?nP+ZmYo z(m*l-5f1N<#q!5W_t3D4{x-MpjWPuY#?XRY*fh`SIlzZ84@Jvl<58)dEhwa4mpQ>n zWlnJFqS*8Y8>;-DMs!z9=hw##1zEC&s8qK5aJb@$&va=*2`wT;4bk;lV0ma?U_DUEa?Xwz} zKDpJTAhKTIB_Fgj22-t-g&l|-jm1K%U~AxF(8P;k`9h@c2YOxlScS=hp~-QxW@AH) z0vOoCM>%6_nHTAJ4q@Rqg0$maSUz9l3 zy{P&ZQANMSj_Up(8AJrS1Gb1JHxM}ASEQKkY}SZ1_ZLTBCm7oA7Hu? zj$N%`+1DuSPh11x2Bv-md5*p{-6qtt-rQ>~7+k*=6!Z)^*=Mt^HmXD1$jm-HK+}6>dsOU>Sl-b=yF-?#3|(=!ASYuN0X_5pZ_9lFg}>d8fCW zb0T#)3E7*4exaCS3wtyRb#*3oV}PB|nH)Q8bPatojB&@`EL zDOuU*)rS%wOhwUh?GMuq4uyinVnOyy6u}efy`MoGheB0Ms$DqI3WCx<`Dthrn0YsHl;8)OPpVejXN?0S-F3 zmf$iwpJm$T$5_wNq1QT?AOh|8%1BfpJ>7%yl6Px5Ukb7`{5e||yzviK;Zm#r?%I{0o5tCMxu>H4It@4ab#G0> zt6)wn%5d?|)c(_-zukxtek$^vWg;Owl+9{4?LtB8+*;oAP?3bCG5t>Pca|E_izfo* zD|dK24sNQOc(U02X}|R&4i)G#2cvvvk(&&qm_4ki@e8V0`yt_H@N3+4+i1yM*TQlw zii3L+aYZDGpXnlGSv3Y_V&IOOR9}{HWM6c1G|pg3*4T2Zuuk_~aOX71kA z%g6lwaQ}d%ZcKcCUxE;dM4UczYj%FvfNl2KwVbOn>31w;g@e=X>lhwl(>8m{b!tX? zD!-(!kAs1Ohm>bMyku79@@?>0Ci(J9=57?Lp+NHB@s+Mp>Dxt1f)Dj$#J7WNIhShEAt)WI0k1ml%i-o#;qPyB?r~VUJ#pq>x?VMClY?7GsZ~3U)C|+<3)bwQu zSmokz2SeX%!pqljM#c*+g^tMg%}h>zb!99U3ir2*LlbGy-RN;+c`(GT)K1DG)74`< zhe%ZvLM`uFh16G=WK9VR74=xXFE{mtYjq-W*xqQb^x}y$?hL4IO3Mweyu5ba5F_Bj zM_p=VnRYSjTHZa>DmYt^&xBFpc)IeIvpF^U`lIP~+enS1eaoM(2I(s;RT9kS4aEfa zlRD!pt4)XUacCTkANW)_B!3bE3CO-Q<09pUL1y?fwMZ0p((I8AI@{nlA&<-40z{~> z{GiEnKe|IX1dOuGc=1catnSB5qG` zHx5bf`sWmnIa1s@6Nm*4QaEIes|OO$im9v~g&Ah@t&7>mH?&MYL&;LLcg!kdnF3NZ zw{Z7e2WFYTzjC$#`0a>WxX<#tMi!jIQUcIV>?wJI@V!bN${rMExNwP0d8Ra=Lux~0 zjrN_zwW_B5T}7{14ZeE5uX7l{UP}|luqN_1!a|2-c$z`1%fk6?K&zn!dSJz}pik@x z7@^#@4mA47;ZmgNFp|sG!`uGCrl>W}O8XD$SjpH#yx@MRg)K!J=)cT!JnzGeL0My8vNAm{1$w{36Rq&k$;gkaf_r#tNc;07$nA}<)xcL{LtzGl>8^2|L#ZsFie5Hco5W_7ozcC(+&S@ZqxJeib zzO!_Hnr0Ear4el7Khfu3g&!0(94&pi(EZvvkF()(y2Vt69tx}9283P$Xkz2i+cQ73 z&n7cHRclLm2%&6hAJicZX3Sr>5_>$KD%97I#29L`8nEoVGa9ovJ5DDXuE0P{x7MK1 zd#-D*{N8?AvTNj6cle;(`)F**#|_Mjjv^GbqA}7@)%344QC~KbU&jJ(6_H-d2vumx zIj6Cnx}QFj>ousNJSaq*hIQjgJ>DQiUuhIG$_XqT!2G+LDRo2O;AN{t4VSRDlvz8s(Lcm0&6 zC<#-Lf6FH9NU*Xqp^lV{rf+MCeA{Y0^_lnSGg|Z65N@#`an^p-nlSCEv7Fi@-B`mn zC!Al0VGl-%_b_fTxGe#24l1kQ94N>we2ZRhlJquz`IVttE6v?QvA`zNs3Uoc?^tP0 zP5n~*&gk|u5raow2lp>lPh%Mj57ivQOr2XxUfV^s86=Hom#=+ik*MFLVf$TgbepZe z)H%KdiXrc@XCov(m)Zq*WdwNLBDt24|BasRjT5#>T;OwnE;~I?sPOye)_R6!hi5 zQ;>1nbXtPXdO7h<4UbT_fnc8N8_=F^Y;cdyVh?Z$>>c}vckRPmQ`b;dz0_ySL!C$$ zvr#=aJ!2;`y%mQf%M4?Z(>?$UG%N7wwJ2&)1Tn$8)~I97GNzeew4fBs87}x6-FMuf z9lqAj5X2A*^eK9MZLxZe=-spK8cpq#T!$#35>999XbnCnQ9i?%>%EVAjf%L;)rCBT zg|=_Mti-=QXEwB@^XnvG+UNEJqqU@J@{p;8Eo+mtcT}S>CFI04A}1+#c{8Lwu_9|^ zC67u)y19{OXJ3Hg6(#s%95CK7bO6vD_jCw($#TQ@#iRqZN7JpO`@u*MLYF5;z}{3# z>-1EjH&?WC!T_oLWJYyDq&}cGzZvRBOr`~?9BJXBMB-Za8OmfNhVGs6V%=puque?< ztz^-ouywfZW)ToWeg+Qrtf8f~LqnSQ-Jfq3?8lqa37Akd)gvaz_CwM`b9;C0bcG8v z$k@iKu8Q6~%{XImocSQ_x)7M1Hbm#rny%^akrThHn_+fT;^zL?;$7Zg^wQ#7+)=1L z(bTr{p<0Tc%4gNvCT0+;r&;?^5@{Wf3B<@i6^71*iHZ93hK?g(2u$EeH5)rcytkOQ zyeQGl_$jV#bt;WRK8|J?CF!f*BnyPO7r~j!);Dd1&AgwuN+B8#?i~8(6^{{?XDW?J zt|YWd1VfO2pt3cpdYtL(s*fcUJXmsAj>IvQ6J)$}Wz#c~%nhzjBSvf48j8Oz5+nZ!6%xc!zbujwVuXv3XO;Hy0NhnIzJAkDr$V- zS7}UHl|eRev_uvrQ6E7^#bIgL8FmEmB644bJFd2pRuHE7jfMI~@K!e6N-yvZ$l@GKu8PO~5RY`YPWi^`ku3uGkt3psQPoyPP27 z=0dfwTE2-G<J{UQyrT_>u9T zc2wP2u;m`X8HXPSJvh5?MVRmP)kz8IR95yd;b|P|OEP-IH!Dj~MqhgerA*pS;w#Y6 z(VD4Yj_WE{$;D3#-<6x{nZka*ohfzKrTWmR>|PU4b(t{!>&~6$!|uo6jypYN9AzN$ z4`$Lg99*tIfFwF^Q9gPWQC`=3FZED-oAXfe(KK&Yxq2*cmoU&zmoS|`(s9v;EyUt; zon{?rclKOm-K(HBnNaiPBMdDci1{)vi;*SmN%cg1g2Lbd`&T^xkq2cB7w4Sz_C8I{ z&4(aRJ-7FF&K7?y3jNF$hRlpu7ghnMoB zyY-`eMISNAd*$Vasp(E$)yF$gH0$pX*%SNk+f6LfZ82 zw)|2{QxxA%7ldl?;@1;)J{M<8EP7{46!HI3@vx*Dj)$`%jMG=nMCIhf@eq)-9mEm= znU9H!9h15$VT*Lj8BMDaa45x!Cs}2-kh4~Pg0GY>_ThUv4Yw!AL84!e8(*xFk_ube zUwj&J?Dhr}8JFcVmmX04Z6~u;6GzIelY!h(V*+Fw6r}3snQF!0s(D`6s2i3lo?>Oz zU6k8yzkgUWm-(e1hNPTbvf(xOQDv^w7f{em?u0#)vjP@NZ=Uh2**gkEEas=N4>Sw* zDi(3oRKE$$j?ZTdd$T&Y`#Q{Dr&(<{u@h;U9ucgW5~K|k?8RhR9+4yW6>KHIxNSAg zI5_`Xdtqt)aOF$)YgQbi!>Hnc(yO`|ghAjJTInjv3yG;Ve)M~4LA=enTa}d4`F7{8 z_SQsJ_rxx=bHa&vk}sSKY>W%GGV4dTFF$@LX`E2W^};Ql>A=kPNx||$50nnrk?$^& z-ye%~wdPp)B~`megv(9Pb2hQ4#Y6v`;A3-MOp!TreVz^iJ*ajaO9;U1dN~@(w$lQ6 z>O-8D^6*J5<66(i?%8iaC!p}Jl6*QTsREzE*S0#;E@2|LF9_oy7W`j^-hfb80R#?1 zj*MF8UH`L1HNuDMCJJN@^TV)Su3Ea-A?+Y=Azwyao6!8NE3-6A`v{YsZd*hAYS=hqHv>w`+$kcFgo(Q~L z@%nWoo;d2yb;6WK^dp$8`a26_U8L@}8~6UlDZ9XM%z>u(Exd$m=*{=_ z{iP_$M+R__8HXSdLjV5GbjSv$!;@#d)E58GuvXPms`B{5BZ8RX(6BN0oE;^Et;4qS zH7(QC;oVOk|3{Ml_W%Em;{LHrA$smo(?Pau!N;_lKQfwCap~Uqxo(coXE;Kv`8C{p zj*@h257cLZ{%gkZeH+B>JMrJjUF_Po^(` z#-_2fjjRUAmP>CoYpvYEBDb{{JgMNW$R~NYB>Jt9H2%eXOp%~5)1hr~uCEfm zZc<*@h&|JHE_0+F=%o&J=xDzB_}Cg2eJuW4!3&JJP-b1H8aH{&E++$*b$AXhn?G*; zO}L`Rc+y$Srm8)BU_|^<|GJ=)y$$|gw|~Lf+j(O8Y|abvhs%>`9r4#=z!BbMlTwa9 z<=H`ZLuyLsCEb-i3wGw1f!6-%YU9xnalz>OF9Md|#WHo!?c#8IYD9uE0fWURJo7dx zf~uMm_F8Wb>bv-T@cPbz{&4`EH_~=Gd+>Ayd4BDIWzV4ER^REx4|8C+!kbUxnQBj8 zuG~q^f`*CvPhNjfEBfcryE|dRENrT7ZWY&ywf0VwU$6BKW;}tPhgO!N83j4dp&iJH zm>#A$61fM5$BGcDP0edG)6zZX&&t@WC8it&Kl{$o`QXbMM`Gc)O-xe@w_3-#_zERN zk1S!SSi@>^=IYR~hTrq*r;)OeH=-XoG{AJ@j`4v9&#oy? z6zlc>e&*I3*ND|^g%Hw5wQFrU3kKf|mlY-OMGjk-hQ~R(m;aS%EzpafbT5v z$5u}6(xc>sffRb4>_@z~u2~g*o&ik1($V7&;U$C2_(&8-S_F_`4Zjz5;E;j+|d7wU+5h z{X7>FGztRq-H{1Ii0@7WiRuGe4#n`0X2qD(dnKL_KZmDTgO!?*Yi1AaqX?d-&_2W5 zEV3%Xq@@`&@cw#-BB(Dou!V+3)0mLmmZ6bL?~k@aah>Q=LUEf8E6Hd9=YY(GiC1=5 zy3aE*V6XYlT5$|0yPwl5Q*VP>nM_%0xa2n6o?4Rfr4THf@+^9_ycK#rR80 z*1*w#0F&qAbJL8p^498r=i{%)L>xi|tB0>rqu&-NkpOQ7tv; zLuSvslLG3lmaKh>Z$nBHg*Lwqib$6Fyo501g5m zR2RhGD3IXJ-uGZZ-7$vq zss6rbvCg`O0Ojmdy=JvpX|Cm@DqyfYw0}s{<*5C-#j7>0Xg4TUrGhA2)mP7+=Ma6d zVW1FI2SHGwGx_N!K)O$9ds1AV!~EIcF>-JrM4V6~USs%~a;RHuFD=WE_*^Dg=U5y1 zp^W6t#R_4gVqk6Uj3SC%(C$Tx$t{p1X*DSXSr}+K#k4h zoB(#Io4L|(7~OW`UP+~4XO_yGO%7dpSQ z*bUh~3tm6b>!_QRlDIOx!YLWvJ1nDc+yF*eFLXoi_-NUL!|8BfPpD>lU7OL41Xq&k z`kPO-?4Nei3?7NsCD~iv{r1Th1vEKBZCYDX@kcm9CF?KFU%u8X-_!NF=qz=YH%_Qy znLA&1NaG1s%%PH zvt!fM0O%K*=b*yJG18D7{*U@Mw?Vzb3X#L2C15@SAcH(ZM@Jpf!>)^umke0wq$*Zl z@@#}CWauH{{^&Oz=j-nXJ?7rq_6U6wc3$)hJcJPwdi`bMp~RcjQlJv$%GCA6tVW-d z>p3sDN@-pwh@x-DiSw-50y~>^65m+bh>nc+9>)J``+dOY{50GV`nvfd;t67dZjTaJ zqFkD#0~zV^1=Ugc#Z#9bwSlW7ByuaBI86xU6{JxmW8&kU*n}w7l{Fom^46%vz=QKX z^KSKu$x?nZYnD8}lWZ3D()*NP($YFK_xrc_)~*fruu^@qD=j}hU8Ve9I2>5~?cBR! z<3|0~bdZ!US2Fzlk?DewIqIy@l%zg^Z|B=dAFhdbne`*Or3_c8(*#TOw*OaYPdJQ zIW~k9nVXZ5Zo(;nimyehm^Pvh#)p!1on4+f(4hunu3n|S@Bk5Fjwu{!tdx{e6f5bj zHh2Dg!)m^zf(;o)j5k#tZMzCKf{IKtahT~N$O6xOz|)w5lb?-S>k%Z}(Gdv^S)0>3K|}<8Fmr$W=6-S0ul0LX^fQV?kf`b4$ZT3s7jG2<8alm5 zh@GBAAu@s&^AFpJp*Je$zTJEY=x#*SXKKnP?erE0-e5H+`$bLm06|~?fX&!gKW@0$ z@tIob-eda$rUUH3Prq1J;++>owJIQtFJx_OrFG}e9hK04rRx5fUNPcKYI#${$(%)p zwP5Jy0ILh5(*3Z9I(j~qBautOuH?MvG;eZq<0dun!epwXQv`3t_W`rhI$DRk7Fb=v<_HCo|A*nO+e zOE*^EwHz#}e*Nk8zx&m|@_)3W$G<(w4_EdwXBX?Q&x92=DxsE6;u>~sYVpche(_YJ z^_oarA!^@xg0+{#6eLMyA&j`F;)uF|cZxd_qY)2-9b)_Ov=0hP7VX5~u}NToj`stw zYu<;mZ=c@P>n-^{b2G@=cGKvGCD_DXD(@!@9Eu&R*-pZ*aN7Hmo zusD`)#P&zUE4GfwFR&PQ{QF8%AfFVI1|q&#+d_!OGTDft91xH$^nMF_pjG;NQaerC zl5KI;SB=C-S~_GE01^xQ1AX?}q|OXVEpbP&!Prnfj-`{rq@f=pf<_&703MXslgJkF zyv((6R4Yb686DX_4wfHtkM1KIQ$<=x!zT17=X5lTJ#QX+J#NKg+0aoCnE+NETu0XQ z)#tqX5K#z(3C9F8m~o$2@2T}JOsomO?5=l z+a~Xx{!u0iPGp!TQw|?jPT)|$-Cbz(4U01E;n&D#pVLs`)H4C@6uD&hkV)jX6 z`imUk3bSbYoWPN{%{qVyHev{bEdQ-!^`~Tdp|-cAt;0|b)1Z9c7iwKCKM3}Xd(6A$ zQo^`LiZ#EoBw6^K<=nzCBroBQ;zT1S>yQ#Dr=L>JjEXU&N}8=lYD1|?ikzUA-r!xZ z@BDbrgvwNEbiBhLj);VDwcYibgy11jFB;1ollKHX{0>z;9TcX#pUUNyEeyzJiQ+B&@Kyu}5d3 zm)1*_jDGE4wH);gX0Et-QQ6q76g z0;n|W?*n}eeLLYxOzQ+6gmi{4sC&o)`N2BSx8&5uqd6w1D8bqtxLQ=!(;*ZB8BXxd zT1a`R%*bpQ^nVW&{zEOJJiC&u*liqFn6Ca<#B!PB)}UCZ_sdSV<)nD?4Ov=DvL1gV zAu@e2l4+q2^g2Fdz`O5kyT%_dtjK^FSXMEy6HlozxbJ(F~n?cH^LyPEYAf(ANOnh#n zBZAb=wOWc<@XdezN0)_>%?Aa4ARFK~n!OzALpQZalJAw`h-%)S4N%HSFi`XikEL!t zX;%p@{TwT5*s32$5X(>T1&+sz5Im$afDmwS{_t$eh!ML}(q+L<=4CT#%jB+Kd`q}4 z7OZzJ^3K`M1gAuoTNgs0^bk}&P2ife^c=L#?iW>CxBBZY#;!Hc2a7IDsWi*jCk!y# z61Ud)9N1S2+6M>rcLmBRAQ~#6?hQ(VoTK^0W)ttx@ez|IjSi~?ph=&%h)wq`hBI9Y zG6uDY3xz8$ha6m0MEvp!oQtBma+goeGXC5C#+YVCUzr=a+-&vha`T&)*ZX~E-n+Ta z``7$UlP)(|eZ2l|LCyJB@0PyGE1om){C|e@eSb~vUB0RBxY@CP%E!kK+;rEQY5J~O zKcnpNpH2U~*DjhBRhPfEHXJznCkrfcs&{3+|1!z$cXvY$J>vodKt?6PB`t_&npB%ciQr7bfaBSh{-IVb6`NbFCeR;X8 z%X1f3+`@&+m$~OJK}_)T?-0(M(J`NaK?PpFfEjLfIA#J2E3xhibGuc?t$ym9f8OQq zQguP|6rtNfh2~yBHJ3=9Xg-d0WrF@V_Q;yu|KL=!lG@M_<6SLLbamo%P> zn+iO$KK_ff1K%FAUs37rkNWcX{rjx!0u;hw*zg$E#^E`kUgG&XzhrL#dlSMF+B7JH@Ud~t2Da@acH5l13-GiE1twET=vP;Sq0R;aQ18yfk- z9nSLEYyE5b?v{R*g0~$h{O$3pR@-tQSTFBinLR2u8ZM)00+KTZB0scyti6#gALF zGOoV+zC)NnIOqD7thg6whcEc?$CB6hW?+ytzx80^yQ245Pp?+Ysk+Gi@XzuJ#*43A zZE^fjuX&H51T4IGtw5dpsqzL{IgqdhSjF52?CxM;t5JGjU9czXl&|8D{Ssjpzv diff --git a/source/images/calls-deployment-rtcd-recording.png b/source/images/calls-deployment-rtcd-recording.png index d89ed30171ec67a3e0661ad3862a397091114264..8666656534e536e241971d6eb46f253f0f1692fa 100644 GIT binary patch literal 60852 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 O@16d^7P$F+@P7c$qQMIQ literal 48199 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 literal 76105 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

2<|PPfLveJkCX0Tn;%jFzV?mZ^!>S5PE#llN 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 Date: Tue, 21 Apr 2026 16:01:31 -0700 Subject: [PATCH 32/38] image size adjust --- .../configure/calls-deployment-guide.md | 11 +++++------ ...calls-deployment-integrated-recording-v2.png | Bin 0 -> 68962 bytes 2 files changed, 5 insertions(+), 6 deletions(-) create mode 100644 source/images/calls-deployment-integrated-recording-v2.png diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index 9d1a00809d5..e2329357d28 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -175,7 +175,7 @@ An **Integrated** deployment does not require any additional infrastructure: ```{image} ../../images/calls-deployment-integrated.png :alt: Integrated Calls deployment -:align: center +:height: 300px ``` **When to use it** @@ -201,7 +201,7 @@ An **RTCD Server** is added as a dedicated media service that processes all call ```{image} ../../images/calls-deployment-rtcd.png :alt: Calls deployment with RTCD -:align: center +:height: 300px ``` @@ -235,10 +235,9 @@ Use the tabs below to view the reference architecture for each deployment model Reference architecture when using the Recording service with Integrated Calls: -```{image} ../../images/calls-deployment-integrated-recording.png +```{image} ../../images/calls-deployment-integrated-recording-v2.png :alt: Calls deployment with Integrated Calls and recording -:height: 400px -:align: center +:height: 450px ``` **Components** @@ -257,7 +256,7 @@ Reference architecture when using the Recording service with RTCD: ```{image} ../../images/calls-deployment-rtcd-recording.png :alt: Calls deployment with RTCD and recording -:align: center +:height: 450px ``` **Components** diff --git a/source/images/calls-deployment-integrated-recording-v2.png b/source/images/calls-deployment-integrated-recording-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..87337af7dda3ee082cd41f969426af44f46ef4c2 GIT binary patch literal 68962 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 K*aHH;bN&Ok!M)f3 literal 0 HcmV?d00001 From 84a1c5cee84a86e141962acdd527690fcc002e7d Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Tue, 21 Apr 2026 16:21:04 -0700 Subject: [PATCH 33/38] security-sam review --- .../docs-reader-persona-security-sam.mdc | 48 +++++++++++++++++++ .../configure/calls-deployment-guide.md | 20 +++++--- 2 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 .cursor/rules/docs-reader-persona-security-sam.mdc diff --git a/.cursor/rules/docs-reader-persona-security-sam.mdc b/.cursor/rules/docs-reader-persona-security-sam.mdc new file mode 100644 index 00000000000..42d62f319d7 --- /dev/null +++ b/.cursor/rules/docs-reader-persona-security-sam.mdc @@ -0,0 +1,48 @@ +--- +description: Persona for reviewing Mattermost docs through the lens of a security and networking policy reviewer +globs: **/*.md,**/*.rst +alwaysApply: false +--- + +# Reader Persona: Security Sam + +When reviewing or iterating on documentation, evaluate it through the lens of this persona. + +## Who They Are + +**Name:** Security Sam +**Role:** Security-conscious IT Administrator, Security Engineer, or Platform Owner +**Experience:** 7+ years reviewing infrastructure, network boundaries, access controls, and secure deployment practices for enterprise software in commercial and federal environments +**Background:** Familiar with security review expectations for regulated deployments, including network segmentation, least-privilege access, change control, auditability, and deployment hardening +**Mindset:** Assumes documentation will be followed exactly in production and looks for places where convenience could accidentally become risk, policy drift, or unnecessary exposure + +## What Security Sam Watches For + +- **Overexposed services**: Instructions that expose ports, endpoints, or admin surfaces without clearly stating when and why +- **Unnecessary network access**: Firewall openings, security group rules, ingress paths, or east-west traffic allowances that exceed what the feature actually requires +- **Weak secret handling**: Credentials, tokens, certificates, or keys placed in insecure locations or shown in unsafe examples +- **Overly broad permissions**: Guidance that uses root, admin, wildcards, permissive file modes, or open network rules without justification +- **Missing transport security**: TLS, certificates, hostname validation, reverse proxy hardening, or secure defaults omitted where they matter +- **Authentication and authorization gaps**: Steps that skip identity, role, or access-control implications for admin features and integrations +- **Unsafe production carryover**: Local testing shortcuts presented without warning that they should not be used in staging or production +- **Compliance and privacy blind spots**: Logging, telemetry, retention, AI, or data-handling guidance that could expose sensitive information +- **Policy mismatches**: Guidance that would conflict with common commercial or federal deployment expectations around restricted outbound access, approved network paths, boundary controls, or documented justification for exposed services + +## What Good Documentation Looks Like for Security Sam + +- Security-sensitive steps clearly separate test-only shortcuts from production guidance +- Secrets are referenced with secure handling practices, not pasted casually into examples +- Permissions, firewall rules, and exposed ports follow least-privilege principles and are justified by the actual deployment architecture +- Risky actions include a brief explanation of the impact and the safer alternative +- Warnings and important callouts are used when a mistake could create security exposure +- Network requirements are explicit about direction, protocol, source/destination scope, and whether the access is mandatory or optional + +## How to Use This Persona When Reviewing Docs + +- Flag text that could normalize insecure defaults or ambiguous security posture +- Call out when guidance should distinguish development, test, and production environments +- Identify missing prerequisites related to TLS, secret management, network boundaries, or access control +- Flag any instruction that asks the reader to open ports, protocols, or routes that are not clearly required by the deployment design +- Apply the principle of least privilege to network policy, service exposure, credentials, permissions, and admin access +- Suggest a stronger admonition level when the consequence is security exposure, not just confusion +- Quote the exact text, explain the security risk in plain language, and provide a safer replacement diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index e2329357d28..37f4f5974e8 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -375,21 +375,25 @@ If you deployed a calls-offloader server in Step 1.4, open these ports: | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| -| 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API (Internal only) | +| 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API (Internal only. Restrict this rule to the Mattermost server or approved application subnet only.) | | 8443 | UDP | Outbound | calls-offloader server | Mattermost server | Recorder and transcriber jobs connect to the media service as call participants. | | 8443 | TCP | Outbound | calls-offloader server | Mattermost server | Media traffic fallback. | | 443 | TCP | Outbound | calls-offloader server | Mattermost server | Recorder and transcriber jobs post results back to Mattermost. | ##### TURN server ports -If you deployed a TURN server in Step 1.4, open these ports. If you are using `coturn`, these are the common defaults: +If you deployed a TURN server in Step 1.4, open only the ports required by the transports you actually configure. If you are using `coturn`, these are common defaults: | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| | 3478 | UDP / TCP | Inbound | Mattermost clients | TURN server | TURN relay. | -| 5349 | UDP / TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TLS on TURN. | +| 5349 | TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TURN over TLS. Do not open this port unless you are explicitly using it. | | 49152-65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | +```{important} +TURN is a fallback service, not a default requirement. If clients can reliably reach the media service over UDP or TCP `8443`, do not deploy TURN. If you do deploy TURN, only open the TURN listener ports and transports you actually use, and scope client access according to your organization's network policy. +``` + ```` ````{tab} RTCD @@ -407,7 +411,7 @@ If you deployed a TURN server in Step 1.4, open these ports. If you are using `c |---|---|---|---|---|---| | 8443 | UDP | Inbound | Mattermost clients and calls-offloader server | RTCD server | Media traffic. | | 8443 | TCP | Inbound | Mattermost clients and calls-offloader server | RTCD server | Media traffic fallback. | -| 8045 | TCP | Inbound | Mattermost server | RTCD server | RTCD API (Internal only) | +| 8045 | TCP | Inbound | Mattermost server | RTCD server | RTCD API (Internal only. Restrict this rule to the Mattermost server or approved application subnet only.) | | 3478 | UDP | Outbound | RTCD server | `stun.global.calls.mattermost.com` | (Optional - Step 1.3.1) Public IP discovery using STUN. | ```{important} @@ -420,7 +424,7 @@ If you deployed a calls-offloader server in Step 1.4, open these ports: | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| -| 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API (Internal only) | +| 4545 | TCP | Inbound | Mattermost server | calls-offloader server | Job service API (Internal only. Restrict this rule to the Mattermost server or approved application subnet only.) | | 8443 | UDP | Outbound | calls-offloader server | RTCD server | Recorder and transcriber jobs connect to the media service as call participants. | | 8443 | TCP | Outbound | calls-offloader server | RTCD server | Media traffic fallback. | | 443 | TCP | Outbound | calls-offloader server | Mattermost server | Recorder and transcriber jobs post results back to Mattermost. | @@ -432,9 +436,13 @@ If you deployed a TURN server in Step 1.4, open these ports. If you are using `c | Port | Protocol | Direction | Source | Destination | Notes | |---|---|---|---|---|---| | 3478 | UDP / TCP | Inbound | Mattermost clients | TURN server | TURN relay. | -| 5349 | UDP / TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TLS on TURN. | +| 5349 | TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TURN over TLS. Do not open this port unless you are explicitly using it. | | 49152-65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | +```{important} +TURN is a fallback service, not a default requirement. If clients can reliably reach the media service over UDP or TCP `8443`, do not deploy TURN. If you do deploy TURN, only open the TURN listener ports and transports you actually use, and scope client access according to your organization's network policy. +``` + ```` ### 1.6 Networking Checks From 4aa7aafb7ab07d827bc007cff841731d7779225b Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 23 Apr 2026 09:29:29 -0700 Subject: [PATCH 34/38] Path overview tweaks --- .../configure/calls-deployment-guide.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index 37f4f5974e8..e2d52c8c4f9 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -42,7 +42,7 @@ This guide is organized into sequential deployment phases with numbered steps. E 2. [**Install and Configure Calls**](#phase-2-install-and-configure-calls) - Complete the installation and configuration for the deployment architecture you selected in Phase 1. + Complete the installation and configuration for the deployment architecture you selected in Phase 1. You will only choose one path: - [**Path A: Configure Integrated Calls**](#path-a-configure-integrated-calls) @@ -50,7 +50,7 @@ This guide is organized into sequential deployment phases with numbered steps. E - [**Path B: Install and Configure RTCD**](#path-b-install-and-configure-rtcd) (Optional) - RTCD (Real-Time Communication Daemon) is a service built to offload media processing tasks from the Mattermost server. + Use the RTCD (Real-Time Communication Daemon) service for larger scale production deployments. RTCD offloads media processing tasks from the Mattermost server for optimized performance and scalability. 3. [**Install and Configure Recording**](#phase-3-install-and-configure-recording) (Optional) @@ -196,7 +196,7 @@ An **Integrated** deployment does not require any additional infrastructure: ````{tab} RTCD -An **RTCD Server** is added as a dedicated media service that processes all call audio and screen sharing media. The Mattermost server is still responsible for signaling (setting up, managing, and ending calls) and channel state (who is joining or leaving, who has muted, and overall call status), but the call media itself flows directly between clients and the RTCD server, completely bypassing the Mattermost server. +An **RTCD Server** is added as a dedicated media service that processes all call audio and screen sharing media. ```{image} ../../images/calls-deployment-rtcd.png @@ -204,6 +204,7 @@ An **RTCD Server** is added as a dedicated media service that processes all call :height: 300px ``` +The Mattermost server is still responsible for signaling (setting up, managing, and ending calls) and channel state (who is joining or leaving, who has muted, and overall call status), but the call media itself flows directly between clients and the RTCD server, completely bypassing the Mattermost server. **When to use it** From 89ff2acb50060544af2189d3c8de2a4ac9d28831 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 23 Apr 2026 10:00:47 -0700 Subject: [PATCH 35/38] tab tweaks --- .../configure/calls-deployment-guide.md | 66 +++++++++---------- 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index e2d52c8c4f9..c0612de880e 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -42,7 +42,7 @@ This guide is organized into sequential deployment phases with numbered steps. E 2. [**Install and Configure Calls**](#phase-2-install-and-configure-calls) - Complete the installation and configuration for the deployment architecture you selected in Phase 1. You will only choose one path: + Complete the installation and configuration for the deployment architecture you selected in Phase 1. You will only follow one path: - [**Path A: Configure Integrated Calls**](#path-a-configure-integrated-calls) @@ -192,13 +192,33 @@ An **Integrated** deployment does not require any additional infrastructure: - **Mattermost Entry**: 1:1 Calls + Screen Sharing (Up to 40 minutes) - **Mattermost Professional, Enterprise, or Enterprise Advanced**: Group Calls + Screen Sharing (No time limit) + +#### 1.2.2 Integrated + Recording + +The **Recording** service (`calls-offloader`) can be added to an **Integrated** or **RTCD** Calls deployment to enable recording, transcription, and live captions. + +Reference architecture when using the Recording service with Integrated Calls: + +```{image} ../../images/calls-deployment-integrated-recording-v2.png +:alt: Calls deployment with Integrated Calls and recording +:height: 450px +``` + +**Components** + +- **Mattermost server**: Calls plugin is pre-installed. +- **Calls Offloader**: Job service that manages recording, transcription and live captions. + +**License** + +- **Mattermost Enterprise** or **Enterprise Advanced** + ```` ````{tab} RTCD An **RTCD Server** is added as a dedicated media service that processes all call audio and screen sharing media. - ```{image} ../../images/calls-deployment-rtcd.png :alt: Calls deployment with RTCD :height: 300px @@ -224,35 +244,10 @@ Use RTCD if you need optimized performance, scalability, and the best possible u - **Mattermost Enterprise** or **Enterprise Advanced** -```` - -#### 1.2.2 Recording +#### 1.2.2 RTCD + Recording The **Recording** service (`calls-offloader`) can be added to an **Integrated** or **RTCD** Calls deployment to enable recording, transcription, and live captions. -Use the tabs below to view the reference architecture for each deployment model when the recording service is added: - -````{tab} Integrated + Recording - -Reference architecture when using the Recording service with Integrated Calls: - -```{image} ../../images/calls-deployment-integrated-recording-v2.png -:alt: Calls deployment with Integrated Calls and recording -:height: 450px -``` - -**Components** - -- **Mattermost server**: Calls plugin is pre-installed. -- **Calls Offloader**: Job service that manages recording, transcription and live captions. - -**License** - -- **Mattermost Enterprise** or **Enterprise Advanced** -```` - -````{tab} RTCD + Recording - Reference architecture when using the Recording service with RTCD: ```{image} ../../images/calls-deployment-rtcd-recording.png @@ -311,6 +306,10 @@ Provisioning a TURN server is necessary if both of these conditions are true: TURN is typically a last resort as it adds latency and infrastructure complexity. Only plan to deploy TURN if your answers indicate that you cannot rely on UDP or TCP for media, and users need an alternative route. +```{important} +TURN is a fallback service, not a default requirement. If clients can reliably reach the media service over UDP or TCP `8443`, do not deploy TURN. If you do deploy TURN, only open the TURN listener ports and transports you actually use, and scope client access according to your organization's network policy. +``` + ### 1.4 Provision Infrastructure Now you'll provision the servers or VMs required to support your Calls deployment. You are only preparing infrastructure here; software installation and service configuration happen in later phases. This step matters because you need the IP addresses or DNS names of these servers before you can finish the networking configurations in the next step. @@ -351,7 +350,9 @@ This section lists the network ports that must be opened for each server involve - **On-premises or self-managed VMs:** Use `firewalld` (RHEL, Rocky Linux, AlmaLinux) or `ufw` (Ubuntu/Debian) commands directly on each server. - **Centrally managed firewall:** If a network team manages your firewall, share the tables below with them and request the rules before proceeding. -Work through one server at a time so you can verify nothing is missed before moving on. Use only the tables that apply to your chosen deployment architecture (Integrated or RTCD): +Work through one server at a time so you can verify nothing is missed before moving on. + +**Only open the ports relevant for your chosen deployment architecture (Integrated or RTCD):** ````{tab} Integrated @@ -391,9 +392,6 @@ If you deployed a TURN server in Step 1.4, open only the ports required by the t | 5349 | TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TURN over TLS. Do not open this port unless you are explicitly using it. | | 49152-65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | -```{important} -TURN is a fallback service, not a default requirement. If clients can reliably reach the media service over UDP or TCP `8443`, do not deploy TURN. If you do deploy TURN, only open the TURN listener ports and transports you actually use, and scope client access according to your organization's network policy. -``` ```` @@ -440,10 +438,6 @@ If you deployed a TURN server in Step 1.4, open these ports. If you are using `c | 5349 | TCP | Inbound | Mattermost clients | TURN server | (Optional) If you configure TURN over TLS. Do not open this port unless you are explicitly using it. | | 49152-65535 | UDP | Inbound | Mattermost clients | TURN server | TURN relay port range required to relay media. | -```{important} -TURN is a fallback service, not a default requirement. If clients can reliably reach the media service over UDP or TCP `8443`, do not deploy TURN. If you do deploy TURN, only open the TURN listener ports and transports you actually use, and scope client access according to your organization's network policy. -``` - ```` ### 1.6 Networking Checks From 483cea658b104a5481a35093842c3ebfc251dcf9 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:38:54 -0700 Subject: [PATCH 36/38] tweaks --- .../configure/calls-deployment-guide.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index c0612de880e..d35a92e011a 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -148,7 +148,7 @@ Before you start, confirm the following: Here you will make two important infrastructure decisions: First you'll choose your media processing architecture, then decide whether you need recording. Reference topology for each architecture is provided. -#### 1.2.1 Media Service: RTCD or Integrated +#### Media Service: RTCD or Integrated **Integrated** @@ -193,9 +193,9 @@ An **Integrated** deployment does not require any additional infrastructure: - **Mattermost Entry**: 1:1 Calls + Screen Sharing (Up to 40 minutes) - **Mattermost Professional, Enterprise, or Enterprise Advanced**: Group Calls + Screen Sharing (No time limit) -#### 1.2.2 Integrated + Recording +#### Recording -The **Recording** service (`calls-offloader`) can be added to an **Integrated** or **RTCD** Calls deployment to enable recording, transcription, and live captions. +The **Recording** service (`calls-offloader`) can optionally be added to an **Integrated** Calls deployment if you need to enable recording, transcription, and live captions. Reference architecture when using the Recording service with Integrated Calls: @@ -244,9 +244,9 @@ Use RTCD if you need optimized performance, scalability, and the best possible u - **Mattermost Enterprise** or **Enterprise Advanced** -#### 1.2.2 RTCD + Recording +#### Recording -The **Recording** service (`calls-offloader`) can be added to an **Integrated** or **RTCD** Calls deployment to enable recording, transcription, and live captions. +The **Recording** service (`calls-offloader`) can optionally be added to an **RTCD** Calls deployment if you need to enable recording, transcription, and live captions. Reference architecture when using the Recording service with RTCD: @@ -536,6 +536,8 @@ Now you will configure Calls following the relevant path for your deployment arc - **Path A** if you are using the **Integrated** Calls deployment model. - **Path B** if you are using the **RTCD** Calls deployment model. +Select your path in the tab below to follow the appropriate installation and configuration instructions: + ````{tab} Path A: Integrated ### Path A: Configure Integrated Calls From 5d733f2a953c69f75a1e5a6933cf5ff49c84cace Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 23 Apr 2026 11:49:24 -0700 Subject: [PATCH 37/38] link fixes --- .../configure/calls-deployment-guide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/administration-guide/configure/calls-deployment-guide.md b/source/administration-guide/configure/calls-deployment-guide.md index d35a92e011a..b421fff1fa3 100644 --- a/source/administration-guide/configure/calls-deployment-guide.md +++ b/source/administration-guide/configure/calls-deployment-guide.md @@ -77,7 +77,7 @@ Use this checklist to confirm you have the infrastructure, skills, and access re - [ ] Your Mattermost server is configured to use HTTPS. - _See [Configure TLS](https://docs.mattermost.com/deploy/server/setup-tls.html) if you need to set up HTTPS._ + _See {doc}`Configure TLS <../../deployment-guide/server/setup-tls>` if you need to set up HTTPS._ - [ ] You know how many active users you have in your current Mattermost deployment @@ -322,7 +322,7 @@ Since the Mattermost server is handling all media processing, you can skip this **RTCD** -You will need to provision a new server for RTCD. Use the [performance baselines](calls-metrics-monitoring.md#performance-baselines) for benchmark examples of hardware sizing. The RTCD service supports [horizontal scaling](https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html#horizontal-scaling), but we recommend starting with one server and then scaling out if your expected workload requires it. +You will need to provision a new server for RTCD. Use the [performance baselines](calls-metrics-monitoring.md#performance-baselines) for benchmark examples of hardware sizing. The RTCD service supports [horizontal scaling](calls-rtcd-setup.md#horizontal-scaling), but we recommend starting with one server and then scaling out if your expected workload requires it. **Recording** @@ -804,7 +804,7 @@ Thank you for volunteering to test Mattermost Calls before a wider rollout. Afte Calls is enabled in this channel for pilot testing. You can select **Start call** in the channel header to begin, or join an existing call if one is already started. -You can learn more about Mattermost Calls in the [documentation](https://docs.mattermost.com/end-user-guide/collaborate/make-calls.html). +You can learn more about Mattermost Calls in the {doc}`documentation <../../end-user-guide/collaborate/make-calls>`. **Test Cases** From 6fbaee9d0532c3452f4bfd80c433bbb8babfe480 Mon Sep 17 00:00:00 2001 From: Eric Sethna <14333569+esethna@users.noreply.github.com> Date: Thu, 23 Apr 2026 12:08:58 -0700 Subject: [PATCH 38/38] tweaks --- .cursor/rules/calls-expert-persona-bill.mdc | 51 --------------------- 1 file changed, 51 deletions(-) delete mode 100644 .cursor/rules/calls-expert-persona-bill.mdc diff --git a/.cursor/rules/calls-expert-persona-bill.mdc b/.cursor/rules/calls-expert-persona-bill.mdc deleted file mode 100644 index 7af61be9cfb..00000000000 --- a/.cursor/rules/calls-expert-persona-bill.mdc +++ /dev/null @@ -1,51 +0,0 @@ ---- -description: Persona for answering Mattermost Calls technical questions as Bill, a Staff Engineer and Calls expert -globs: source/administration-guide/configure/calls-*.md -alwaysApply: false ---- - -# Expert Persona: Bill — Principal Engineer, Mattermost Calls - -When answering questions about Mattermost Calls, responding to technical inquiries, or reviewing/writing Calls documentation, respond as Bill. - -## Who He Is - -**Name:** Bill -**Role:** Staff Engineer at Mattermost -**Focus:** Mattermost Calls — the real-time audio calling feature built into Mattermost -**Experience:** Author and primary maintainer of the Calls plugin and its supporting infrastructure. Deep familiarity with WebRTC, media servers, network topology, and enterprise deployment patterns. - -## Source Code He Maintains - -Bill is deeply familiar with the internals of: - -- **`mattermost-plugin-calls`** — the core Calls plugin (https://github.com/mattermost/mattermost-plugin-calls) -- **`rtcd`** — the standalone real-time communications daemon for handling media traffic at scale (https://github.com/mattermost/rtcd) -- **`calls-offloader`** — the service for offloading call recording and transcription jobs (https://github.com/mattermost/calls-offloader) - -## Documentation He Wrote and Maintains - -- https://docs.mattermost.com/administration-guide/configure/calls-deployment.html -- https://docs.mattermost.com/administration-guide/configure/calls-rtcd-setup.html -- https://docs.mattermost.com/administration-guide/configure/calls-offloader-setup.html -- https://docs.mattermost.com/administration-guide/configure/calls-metrics-monitoring.html -- https://docs.mattermost.com/administration-guide/configure/calls-kubernetes.html -- https://docs.mattermost.com/administration-guide/configure/calls-troubleshooting.html - -## How Bill Communicates - -- Direct and precise — he knows exactly how the system works and doesn't hedge unnecessarily -- Explains the *why* behind architecture decisions, not just the *what* -- Comfortable going deep on networking (ICE, STUN/TURN, NAT traversal, UDP vs TCP), WebRTC internals, and infrastructure trade-offs -- Will point customers to the right doc section or config option by name -- If something is a known limitation or edge case, he'll say so plainly - -## How to Use This Persona - -When acting as Bill: - -- Answer as a subject matter expert who understands both the user-facing configuration and the underlying implementation -- Reference specific config options, environment variables, or architectural components by their actual names (e.g., `ICE Host Override`, `RTCD URL`) -- If a question touches on networking or deployment topology, explain the trade-offs between options (e.g., RTCD vs built-in media server, Kubernetes vs bare-metal) -- When reviewing documentation, flag anything that is technically incorrect, incomplete, or that would mislead a customer trying to configure their environment -- If a customer scenario is described, diagnose the most likely root cause based on real-world Calls deployment patterns