<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.23 (Ruby 3.3.6) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-pehlivanoglu-moq-shareplay-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.27.0 -->
  <front>
    <title abbrev="moq-shareplay">Synchronized Video-on-Demand (VoD) Viewing with Media over QUIC Transport</title>
    <seriesInfo name="Internet-Draft" value="draft-pehlivanoglu-moq-shareplay-00"/>
    <author initials="A." surname="Pehlivanoglu" fullname="Ahmet Pehlivanoglu">
      <organization>Ozyegin University</organization>
      <address>
        <email>ahmet.pehlivanoglu@ozu.edu.tr</email>
      </address>
    </author>
    <author initials="K." surname="Bekmez" fullname="Kerem Bekmez">
      <organization>Ozyegin University</organization>
      <address>
        <email>kerem.bekmez@ozu.edu.tr</email>
      </address>
    </author>
    <author initials="B." surname="Yumakogullari" fullname="Basar Yumakogullari">
      <organization>Ozyegin University</organization>
      <address>
        <email>basar.yumakogullari@ozu.edu.tr</email>
      </address>
    </author>
    <author initials="Z." surname="Gurel" fullname="Zafer Gurel">
      <organization>Ozyegin University</organization>
      <address>
        <email>zafer.gurel@ozu.edu.tr</email>
      </address>
    </author>
    <author initials="A." surname="Begen" fullname="Ali Begen">
      <organization>Ozyegin University</organization>
      <address>
        <email>ali.begen@networked.media</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>MOQ</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 58?>

<t>This draft presents an approach for synchronized video-on-demand (VoD) viewing with Media over QUIC Transport (MOQT). It extends the current MOQT protocol to enable synchronized VoD functionality. This approach adapts MOQ’s push-content architecture to include interactive features such as pause, resume and seek.</t>
    </abstract>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media over QUIC Transport (MOQT) is a novel protocol designed for efficient media streaming over the QUIC transport protocol (<xref target="RFC9000"/>). While MOQT has shown promise for live-edge streaming, its current design lacks support for essential VoD functionalities, such as pause, resume and seek, leaving gaps in its applicability for interactive media consumption. This document extends MOQT to enable synchronized VoD playback, introducing mechanisms that allow users to have more control over the media playback.</t>
      <t>This document outlines the architectural design, control mechanisms and synchronization logic implemented to achieve these objectives. This document's innovations include new MOQT tracks for synchronization control, an example media publisher model for serving on-demand video and a Leader-Follower model to demonstrate the potential of MOQT for enhancing synchronized VoD consumption.</t>
      <section anchor="terms-and-definitions">
        <name>Terms and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

<dl>
          <dt>Client:</dt>
          <dd>
            <t>The party initiating a Transport Session.</t>
          </dd>
          <dt>Server:</dt>
          <dd>
            <t>The party accepting an incoming Transport Session.</t>
          </dd>
          <dt>Endpoint:</dt>
          <dd>
            <t>A Client or Server.</t>
          </dd>
          <dt>Publisher:</dt>
          <dd>
            <t>An endpoint that handles subscriptions by sending
    requested Objects from the requested track.</t>
          </dd>
          <dt>Subscriber:</dt>
          <dd>
            <t>An endpoint that subscribes to and receives tracks.</t>
          </dd>
          <dt>Original Publisher:</dt>
          <dd>
            <t>The initial publisher of a given track.</t>
          </dd>
          <dt>Relay:</dt>
          <dd>
            <t>An entity that is both a Publisher and a Subscriber, but not
    the Original Publisher or End Subscriber.</t>
          </dd>
          <dt>Group:</dt>
          <dd>
            <t>A temporal sequence of objects.  A group represents a join
    point in a track.  See (<xref section="2.3" sectionFormat="comma" target="MoQTransport"/>).</t>
          </dd>
          <dt>Object:</dt>
          <dd>
            <t>An object is an addressable unit whose payload is a sequence
    of bytes.  Objects form the base element in the MOQT data model.
    See (<xref section="2.1" sectionFormat="comma" target="MoQTransport"/>).</t>
          </dd>
          <dt>Track:</dt>
          <dd>
            <t>An encoded bitstream.  Tracks contain a sequential series of
    one or more groups and are the subscribable entity with MOQT. See (<xref section="2.4" sectionFormat="comma" target="MoQTransport"/>).</t>
          </dd>
          <dt>Sync-Track:</dt>
          <dd>
            <t>A dedicated track used to synchronize playback across multiple clients by transmitting PLAY, PAUSE and SEEK commands.</t>
          </dd>
          <dt>Leader Client:</dt>
          <dd>
            <t>The designated control authority within a synchronized playback session. The Leader client issues playback control messages (<xref section="7" sectionFormat="comma" target="MoQTransport"/>) that all subscribers must follow.</t>
          </dd>
          <dt>Follower Client:</dt>
          <dd>
            <t>A subscriber that follows playback instructions from the Leader client to maintain synchronization.</t>
          </dd>
          <dt>Video-on-Demand (VoD) Session:</dt>
          <dd>
            <t>A session where pre-recorded media is streamed with user-controlled playback features.</t>
          </dd>
        </dl>
      </section>
      <section anchor="notational-conventions">
        <name>Notational Conventions</name>
        <t>This document uses the conventions detailed in (<xref section="1.3" sectionFormat="comma" target="RFC9000"/>)
when describing the binary encoding.</t>
        <t>As a quick reference, the following list provides a non-normative summary
of the parts of RFC9000 field syntax that are used in this specification.</t>
        <dl>
          <dt>x (..):</dt>
          <dd>
            <t>Indicates that x can be any length, including zero bits.  Values
 in this format always end on a byte boundary.</t>
          </dd>
          <dt>x (i):</dt>
          <dd>
            <t>Indicates that x holds an integer value using the variable-length
encoding as described in (<xref section="16" sectionFormat="comma" target="RFC9000"/>).</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="synchronized-playback-control">
      <name>Synchronized Playback Control</name>
      <t>The MOQT protocol does not explicitly define dedicated control messages for PLAY, PAUSE or SEEK operations. Instead, these functionalities are achieved through subscription-based messaging.</t>
      <section anchor="playback-control-mechanisms">
        <name>Playback Control Mechanisms</name>
        <t>Playback is initiated by sending a SUBSCRIBE (<xref section="7.4" sectionFormat="comma" target="MoQTransport"/>) control message for the desired media track. The SUBSCRIBE message specifies the track namespace, track name and a filter type (e.g., Latest Group or Absolute Start) to determine the starting point of the media delivery. Pausing playback is accomplished by sending a specific PAUSE message with its corresponding Group ID via Sync-Track. This stops the original publisher from sending further objects for the specified track. To resume playback, the client issues a PLAY message again via Sync-Track. In the case of staying inactive for an extended period of time, the client will be unsubscribed automatically via MOQT's UNSUBSCRIBE (<xref section="7.6" sectionFormat="comma" target="MoQTransport"/>). To start the playback again, the client sends a SUBSCRIBE message.</t>
        <t>Seeking to a specific position within a track is supported using the SEEK message via Sync-Track, with the corresponding Group ID. This allows the client to request media starting from a specific group and continuing in a push-content fashion. However, this functionality requires that the original publisher supports the ability to serve media from arbitrary positions within the track, which may not be universally available in all implementations. This is discussed in Section 4 in detail.</t>
        <t>This document introduces new Sync-Track messages, which can only be sent by the Leader client. When the Leader client sends these messages, a compatible publisher will respond by playing, pausing or seeking as instructed. Upon receiving a PAUSE command, the original publisher halts broadcasting at the specified Group ID, freezing playback until a PLAY command resumes it from the paused position. A SEEK command directs the original publisher to calculate the frame corresponding to the provided Group ID and restart broadcasting from that frame. This mechanism ensures all subscribers remain synchronized, allowing them to watch the stream simultaneously from the adjusted playback point.</t>
        <section anchor="decoupling-seek-from-playpause">
          <name>Decoupling Seek from Play/Pause</name>
          <t>The SEEK operation functions independently of PLAY and PAUSE commands. A client can issue a SEEK command regardless of the current playback state. This means a client may seek to a different position while paused and later resume playback from the new position. Likewise, if a client is currently playing, a SEEK command will override the current playback position without requiring a PAUSE beforehand.</t>
        </section>
      </section>
      <section anchor="sync-track-messages">
        <name>Sync-Track Messages</name>
        <t>Every single message on the Sync-Track is a MOQT object, which is transmitted using the MOQT streaming architecture. These messages encapsulate playback control commands (PLAY, PAUSE, SEEK) within MOQT objects, ensuring they are processed and relayed consistently across the session. The Sync-Track operates as a track within the MOQT session, where control messages are formatted as follows:</t>
        <figure anchor="shareplay-moq-message-format">
          <name>Overall Sync-Track message format</name>
          <artwork><![CDATA[
Sync-Track Message {
  Message Type (i),
  Message Length (i),
  Message Payload (..),
}
]]></artwork>
        </figure>
        <t>Each message type (PLAY, PAUSE, SEEK) is identified by its unique Message Type ID and follows a structured format to ensure integration with the MOQT transport mechanisms. These messages are reliably delivered, maintaining synchronization among all session participants. Since the Sync-Track messages are standard MOQT objects, they leverage the existing MOQT stream handling mechanisms.</t>
        <table>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Messages</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x1</td>
              <td align="left">PLAY (<xref target="message-play"/>)</td>
            </tr>
            <tr>
              <td align="right">0x2</td>
              <td align="left">PAUSE (<xref target="message-pause"/>)</td>
            </tr>
            <tr>
              <td align="right">0x3</td>
              <td align="left">SEEK (<xref target="message-seek"/>)</td>
            </tr>
            <tr>
              <td align="right">0x4</td>
              <td align="left">STATUS (<xref target="message-status"/>)</td>
            </tr>
          </tbody>
        </table>
        <section anchor="message-play">
          <name>PLAY</name>
          <figure anchor="shareplay-moq-play-format">
            <name>Sync-Track PLAY message</name>
            <artwork><![CDATA[
PLAY Message {
  Type (i) = 0x1,
  Length (i),
  Timestamp (i),
}
]]></artwork>
          </figure>
        </section>
        <section anchor="message-pause">
          <name>PAUSE</name>
          <figure anchor="shareplay-moq-pause-format">
            <name>Sync-Track PAUSE message</name>
            <artwork><![CDATA[
PAUSE Message {
  Type (i) = 0x2,
  Length (i),
  Timestamp (i),
  Group ID (i),
}
]]></artwork>
          </figure>
        </section>
        <section anchor="message-seek">
          <name>SEEK</name>
          <figure anchor="shareplay-moq-seek-format">
            <name>Sync-Track SEEK message</name>
            <artwork><![CDATA[
SEEK Message {
  Type (i) = 0x3,
  Length (i),
  Timestamp (i),
  Group ID (i),
}
]]></artwork>
          </figure>
        </section>
        <section anchor="message-status">
          <name>STATUS</name>
          <t>The Playing state is represented by 1, the Paused state is represented by 0 in the PlaybackState parameter.</t>
          <figure anchor="shareplay-moq-status-format">
            <name>Sync-Track STATUS message</name>
            <artwork><![CDATA[
STATUS Message {
  Type (i) = 0x4,
  Length (i),
  Timestamp (i),
  Group ID (i),
  PlaybackState (i),
}
]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="timestamp-for-playback-synchronization">
        <name>Timestamp for Playback Synchronization</name>
        <t>Each Sync-Track control message (PLAY, PAUSE, SEEK) contains a timestamp field, which represents the intended media position when the action is triggered. This timestamp ensures that playback actions (especially SEEK) are synchronized across clients, preventing head-of-line blocking due to out-of-order commands. The original publisher uses this timestamp to adjust the playback position accordingly.</t>
      </section>
      <section anchor="grouping-of-playback-control-messages">
        <name>Grouping of Playback Control Messages</name>
        <t>The PLAY and PAUSE commands must be treated as dependent operations and thus belong to the same control subgroup. However, SEEK operates independently and belongs to a separate subgroup. This separation ensures that PLAY/PAUSE messages are processed sequentially within their stream, while the SEEK commands are handled in a separate stream to avoid blocking the playback state transitions.</t>
      </section>
      <section anchor="playback-status">
        <name>Playback Status</name>
        <t>To achieve better synchronization, a new status reporting message is introduced. This stream carries periodic updates from the original publisher, indicating the current playback position, current PlaybackState (Playing/Paused), and last acknowledged seek position. Clients can subscribe to this stream to get notified of every playback state change.</t>
      </section>
      <section anchor="playback-message-flow">
        <name>Playback Message Flow</name>
        <t>The following message flow illustrates how the playback operations (PLAY, PAUSE and SEEK) are used through the relay servers, thus enabling clients to stay in a synchronized playback.</t>
        <figure anchor="shareplay-moq-message-flow-example">
          <name>Sync-Track Message Flow and Playback Example Scenario</name>
          <artwork><![CDATA[
Leader Client             Relay Server(s)          Original Publisher   Follower Clients
     |                          |                          |               |
     |---------- PLAY --------->|                          |               |
     |                          |---------- PLAY --------->|               |
     |                          |<----- Media Stream ------|               |
     |<----- Media Stream ------|-------------- Media Stream ------------->|
     |<----- Media Stream ------|-------------- Media Stream ------------->|
     |<----- Media Stream ------|-------------- Media Stream ------------->|
     |---- SEEK {Group 10} ---->|                          |               |
     |                          |---- SEEK {Group 10} ---->|               |
     |<-- Media Obj from G10 ---|-----------  Media Obj from G10 --------->|
     |<----- Media Stream ------|-------------- Media Stream ------------->|
     |<----- Media Stream ------|-------------- Media Stream ------------->|
     |---- PAUSE {Group 18} --->|                          |               |
     |                          |---- PAUSE {Group 18} --->|               |
     |                          |<--- Stop Media At G18 ---|               |
     |                          |                          |               |
]]></artwork>
        </figure>
        <section anchor="message-semantics">
          <name>Message Semantics</name>
          <t>These messages <bcp14>MUST</bcp14> be sent exclusively by the Leader client (Client ID 0).
Relay servers <bcp14>MUST</bcp14> discard such messages if received from non-Leader clients.</t>
        </section>
      </section>
    </section>
    <section anchor="leader-follower-client-model">
      <name>Leader-Follower Client Model</name>
      <t>The Leader-Follower client model is a subscriber coordination mechanism designed to enforce synchronized media playback across multiple clients. This model ensures deterministic control over playback operations to prevent conflicting actions and maintain synchronization.</t>
      <section anchor="role-assignment">
        <name>Role Assignment</name>
        <t>For simplicity, no Leader election algorithm is implemented in this model. The first subscriber to join a session is automatically designated as the Leader client (Client ID 0). Subsequent subscribers are assigned incremental Follower client IDs (e.g., 1, 2, ...) and inherit the playback state from the Leader. This ensures straightforward session initiation without requiring complex coordination mechanisms.</t>
      </section>
      <section anchor="playback-control">
        <name>Playback Control</name>
        <dl>
          <dt>Exclusive Control:</dt>
          <dd>
            <t>Only the Leader client may issue playback Sync-Track messages (PLAY, PAUSE, SEEK).</t>
          </dd>
          <dt/>
          <dd>
            <t>The Sync-Track message requests that are coming from the Follower clients will be forwarded to the Leader Client for review.</t>
          </dd>
          <dt>State Propagation:</dt>
          <dd>
            <t>Control messages from the Leader client are distributed to all Follower clients via the relay servers, ensuring synchronized execution.</t>
          </dd>
          <dt>Leader Failure Handling:</dt>
          <dd>
            <t>If the Leader Client disconnects or becomes unresponsive, the lowest-ID active Follower client assumes the Leader role. The new Leader client inherits Client ID 0, but the other Follower IDs do not change.</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="heartbeat-based-session-management-and-advanced-synchronization">
      <name>Heartbeat-Based Session Management and Advanced Synchronization</name>
      <t>While the Leader-Follower paradigm handles playback control, additional functionality is needed for:</t>
      <ol spacing="normal" type="1"><li>
          <t>Monitoring client synchronization and connectivity.</t>
        </li>
        <li>
          <t>Handling clients that wish to get out of synchronization or rejoin later.</t>
        </li>
        <li>
          <t>Making group-level decisions in the face of network issues.</t>
        </li>
      </ol>
      <t>This section defines a “heartbeat” mechanism and outlines how clients can join, leave and optionally “fall behind” or “skip ahead”.</t>
      <section anchor="heartbeat-messages">
        <name>Heartbeat Messages</name>
        <t>Every client (Leader or Follower) periodically sends a <strong>heartbeat</strong> message to the relay (or or the original publisher, depending on implementation). The relay aggregates these messages to maintain an up-to-date view of each client’s playback status and connectivity. A heartbeat message contains at least:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Local Playback Time</strong>: The client’s current playback position (e.g., Group ID or time offset (PTS) in the video).</t>
          </li>
          <li>
            <t><strong>Current Global Time</strong>: The client’s global timestamp, allowing the relay (and/or Leader) to account for the delay in message transmission.</t>
          </li>
        </ol>
        <section anchor="new-client-announcement">
          <name>New Client Announcement</name>
          <t>When a new client joins the session, the <strong>first</strong> heartbeat message includes an additional “New-Client-Join” indicator. This allows the relay (and indirectly the Leader) to:</t>
          <ul spacing="normal">
            <li>
              <t>Recognize a new participant in the session.</t>
            </li>
            <li>
              <t>Potentially notify other participants (if needed).</t>
            </li>
          </ul>
        </section>
        <section anchor="heartbeat-timeouts-and-disconnections">
          <name>Heartbeat Timeouts and Disconnections</name>
          <t>Each client is expected to send heartbeat messages within a pre-decided interval. If a heartbeat is not received for a duration exceeding that interval (plus some tolerance), the relay assumes the client has become inactive or disconnected. This triggers either:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Temporary Removal</strong>: The relay marks the client as “inactive” but does not remove them from the session state immediately.</t>
            </li>
            <li>
              <t><strong>Full Removal</strong>: If no further heartbeat arrives within a longer grace period, the client is marked as “disconnected” and removed from the synchronized group.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="out-of-sync-and-re-syncing">
        <name>Out of Sync and Re-Syncing</name>
        <t>A client may decide to pause or seek independently of the group or otherwise desynchronize its playback. For instance, a user might rewind to re-watch a scene without causing the entire group to follow. Such actions are handled as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Local-Only Rewind/Seek</strong>:  </t>
            <t>
The client can apply a local override of its playback buffer. It continues to send heartbeats but indicates via a flag (e.g., “Out-of-Sync”) that it is not following the group.</t>
          </li>
          <li>
            <t><strong>Resuming Sync</strong>:  </t>
            <t>
Once the client is ready to rejoin synchronized playback, it sends a heartbeat with a special “Re-Sync Request” flag or re-subscribes to the Sync-Track. The Leader (or relay) then supplies the necessary offset or group position so the client can jump to the current playback point and synchronize with others.</t>
          </li>
        </ol>
      </section>
      <section anchor="handling-network-issues-and-group-policy">
        <name>Handling Network Issues and Group Policy</name>
        <t>Clients experiencing connection issues (e.g., low bandwidth or high latency) can degrade the overall group experience if every other client must wait. To mitigate this:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Adaptive Bitrate (ABR) at the Relay</strong>:  </t>
            <t>
The relay can detect from heartbeat messages that a client is consistently behind or losing packets. It may choose to deliver lower-resolution encodings to that specific client (if available) to help it catch up.</t>
          </li>
          <li>
            <t><strong>Lobby Policy: Wait vs. Continue</strong>:  </t>
            <t>
An initial session-level policy can determine if the group is willing to wait for slow clients or not. If the policy is set to “continue,” the lagging client might partially skip forward (or remain unsynchronized) until network conditions improve. If the policy is set to “wait,” the group collectively applies additional buffering or pause states to allow the slow client to keep up.</t>
          </li>
        </ol>
      </section>
      <section anchor="fetch-based-architecture">
        <name>Fetch-Based Architecture</name>
        <t>The current design builds on MOQ’s push-based content delivery. The current revision introduces a more scalable, fetch-oriented mechanism for client synchronization. This approach will further refine:</t>
        <ul spacing="normal">
          <li>
            <t>The structure of heartbeat/status messages.</t>
          </li>
          <li>
            <t>How the group membership is signaled and updated.</t>
          </li>
          <li>
            <t>Interaction between “push” and “fetch” paradigms for adaptive VoD synchronization.</t>
          </li>
          <li>
            <t>More effective use of relays for more scalable systems.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>TODO.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>TODO.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="MoQTransport">
          <front>
            <title>Media over QUIC Transport</title>
            <author fullname="Luke Curley" initials="L." surname="Curley">
              <organization>Discord</organization>
            </author>
            <author fullname="Kirill Pugin" initials="K." surname="Pugin">
              <organization>Meta</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <date day="12" month="February" year="2025"/>
            <abstract>
              <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-08"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
      </references>
    </references>
    <?line 412?>

<section anchor="example-publisher-model">
      <name>Example Publisher Model</name>
      <t>This section defines an example architecture for adapting MOQT to VoD use cases. The model enables efficient retrieval and streaming of archived fragmented MP4 (fMP4) content through a specialized publisher (<tt>moq-pub</tt>), while maintaining compatibility with live-edge workflows.</t>
      <section anchor="media-preparation">
        <name>Media Preparation</name>
        <dl>
          <dt>Encoding:</dt>
          <dd>
            <t>Media is encoded in H.264 (AVC) format.</t>
          </dd>
          <dt>Containerization:</dt>
          <dd>
            <t>Media is packaged in fragmented MP4 (fMP4) format, where content is divided into discrete "moof" (Movie Fragment) and "mdat" (Media Data) atom pairs.</t>
          </dd>
          <dt>Initialization Segments:</dt>
          <dd>
            <t>The <tt>ftyp</tt> (File Type) and <tt>moov</tt> (Movie Metadata) atoms are prepended to the media file. These provide global metadata (e.g., codec information, track layouts) and are transmitted once per session.</t>
          </dd>
        </dl>
      </section>
      <section anchor="publisher-moq-pub-responsibilities">
        <name>Publisher (<tt>moq-pub</tt>) Responsibilities</name>
        <dl>
          <dt>Storage Integration:</dt>
          <dd>
            <t>Stream archived fMP4 content directly from original publisher's local storage, eliminating the need for real-time transcoding.</t>
          </dd>
          <dt>Efficient Retrieval of Media:</dt>
          <dd>
            <t>Support arbitrary access to media fragments (moof+mdat pairs) for low-latency seek operations.</t>
          </dd>
        </dl>
        <t>Media Codec: <tt>moq-pub</tt> supports H.264 encapsulated in fMP4.</t>
      </section>
      <section anchor="streaming-mechanism">
        <name>Streaming Mechanism</name>
        <dl>
          <dt>Atomic Units:</dt>
          <dd>
            <t>Media is streamed as sequential "moof+mdat" atom pairs, each representing a MOQT <em>object</em>. The <tt>moof</tt> atom precedes its corresponding <tt>mdat</tt> atom to ensure decodability.</t>
          </dd>
          <dt>Group Mapping:</dt>
          <dd>
            <t>Each moof+mdat pair corresponds to a frame in the H.264 stream. A group of frames form a Group of Pictures (GOP). A GOP begins with an intra-coded frame (I-frame), followed by predictively-encoded frames (P/B-frames).
The <tt>Group ID</tt> parameter in MOQT aligns with the GOP index in H.264. This ensures that seeking to a specific <tt>Group ID</tt> starts playback from the I-frame at the beginning of the requested GOP, enabling correct decoder initialization.
The original publisher maintains an internal index mapping <tt>Group ID</tt> to the byte offset of the corresponding GOP’s moof+mdat pair.</t>
          </dd>
        </dl>
        <section anchor="session-initialization">
          <name>Session Initialization</name>
          <dl>
            <dt>At the start of a streaming session:</dt>
            <dd>
              <ol spacing="normal" type="1"><li>
                  <t>The original publisher transmits the <tt>ftyp</tt> and <tt>moov</tt> atoms as an initialization segment.</t>
                </li>
                <li>
                  <t>Subsequent objects (moof+mdat pairs) are transmitted incrementally, adhering to the subscriber’s playback state.</t>
                </li>
              </ol>
            </dd>
          </dl>
        </section>
      </section>
      <section anchor="dynamic-playback-control">
        <name>Dynamic Playback Control</name>
        <t>The original publisher asynchronously monitors a dedicated <tt>Sync-Track</tt> for control messages (e.g., <tt>PLAY</tt>, <tt>PAUSE</tt>, <tt>SEEK</tt>) issued by the <em>Leader Client</em>.</t>
        <section anchor="command-processing">
          <name>Command Processing</name>
          <dl>
            <dt>Seek Operations: On receiving a <tt>SEEK</tt> command:</dt>
            <dd>
              <ol spacing="normal" type="1"><li>
                  <t>The original publisher identifies the start of the nearest GOP boundary for the requested <tt>Group ID</tt>, and resumes publishing from the corresponding frame.</t>
                </li>
                <li>
                  <t>Streaming resumes from the start of the GOP containing the target I-frame, ensuring all dependent P/B-frames are included for seamless decoding.</t>
                </li>
                <li>
                  <t>Subscribers receive the full GOP sequence, eliminating decoder errors caused by missing reference frames.
Pause/Resume:</t>
                </li>
              </ol>
            </dd>
            <dt/>
            <dd>
              <t>A <tt>PAUSE</tt> command halts the transmission according to the Group ID specified in the PAUSE message, where the Group ID corresponds to the current group of the playback. A subsequent <tt>PLAY</tt> command resumes streaming from the next sequential object.</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9Vc63IbuZX+z6fAyj8iakla8niTiSrJRJbksRLLUix5piap
VAR2gyTGzQan0S2JvqTyGlu1W7XPso+SJ9lzAxrNi8bOZWvXVTMim93AwcG5
fOeCHg6HvdrWhTlUO1fLMptVrrTvTK6+sblxQ1cOT8xcl7na/cad9OGqubPl
VN3ZeqbOTW61cremUr97c3asritd+oWr6p2eHo8rc3uo5u6HoZ/pyiwKvezl
Liv1HKbKKz2phwszK+ytLt20aIadO4f7+71c1+awp9TS6OpQPdl/8m/wZe7K
enaonptx1ehqCVdyvTxUBz/rZXD71FXwxZYTpx6Z+4VylfJ1PqArAzXOFl/1
enYBo9VV4+sn+/s/33/Sgyn1ofrWjBUu86ysTVWaul1MzzfjufXeuvJ6uQDi
z06vn/fuXPV2WrlmcajOL37Xe2uWcCU/jM8PT3CJvZ6vYdQ/6cKV8OTS+J6f
66r+0w+Nq40/VKXrLeyh+kPtsoHyMFtlJh4+Lef8ATg214sFsPyPvZ5u6pmr
kCdD+E/BsmCEo5G6TPhIPzCTj2ZzWMfaj66aathiXcOCDtXFu6WZ2lK9KS3s
o7f1km6CPbfFodI4xCjdp1+7d83I5M2ornpdQn47Us/M27l5l5DwW1OZeXr5
cyZ/iw+PxvTw9mmfjdR3zVy/ddOmKHRlk9mfaa+rDb9+DhFjHGO0TMfYTsvv
R+rrpjJFQsPv9QTUo736OXO/w2dHU3x2+5xHyPapKdONL2xy7bP2u7DAcHjy
1yDCKOImH81Ry3vwr3TVHEa5Ja08d7+LGgJSPzwZWVNPSIvrqDm93nA4VHrs
4VIGX69n1rPuq0VlvClrD0qnQMArp7OZmqDCpkboNhihPDVCt59khNQuKOZ1
f6TOamXua1PmXtUzo7KmqmBmVNtrIMOB6rlC1U6ZUo8L0yUA5lOTpsyQecCc
ejlStIhIss71AlYBg/31L//u1aLxs2EGRgpn0FU2s7XJathBnMCWWdHkBv6C
jQCGACvVxGj82Svf4Ggwgm68GSi41MwNmSRvzNsRs3Ju87wwvd4jtDOVyxsi
rNf7MSYoJBmMza0p2iXnxttpCYtEtpvJxGYWqab9BrsJZnGOXKZRkXE0ctzc
dpzd9++/ev38+Of7+/sfPwK/v51ZYCOxdwYL8jN3V+LdYEQNzQXGxAxNPjXt
LGCjgYtha5gyVejsLTJmQfMRlR6FxupibWOsQbP5IA8HqjD6Fpc01QsPu0Bz
wk4WNtNji7tLk6Tbw8yADYWRFjiX7D/YZRi6bCWLlvuAEKFXG8N60BnxziEh
c5PNQDn9HEVTg8QUhbtTQHzlcbCZRhIcSA+KVAW8jpvBhIVRR0G3AlmuqQtb
Gpb4RA512PZBHDKhgTgVKSeLoQo3tZmy80VhcGRYDhAGkm8N0Aajw5668feG
2OVXuPMT5DJIHY3ko/yX5k74VdEOd9WepxXqBmgfzL3G6cOam3Fh/Qz4MHc5
yDM9bSra2NZSkOWgBWn10ujcVMPnDrkbn4NlwL1AF1BR01LUwtUiXm7CFJLQ
lcAf2q61XU0FA7Tykbo2lfDxxExsaWnhuDkG3NlSIUbwauf8zdX1zoD/qlcX
9Pn1KejX69MT/Hz14ujly/ihJ3dcvbh48/Kk/dQ+eXxxfn766oQfhquqc6m3
c3703c6AqNq5uLw+u3h19HIH5b/uyIxmKzUWAwUWGndb+x5ITFbZMXyBZ54d
X/73fx08Ve/f/wso/ZODg59//Chfvjz42VP4cjczJc/mymIpX4G9yx7oGoA5
HAUEXWV6YWtdgN5GKwG7aoCRe39AzvzxUP0CMNvB01/JBVxw52LgWeci8Wz9
ytrDzMQNlzZME7nZub7C6S69R991vge+Jxd/8RWqqBoefPnVr8BVHhdofg97
vUOF4rIAmLhUJEKgESB8OrHqV4bwKLDqCiTfVCtP6SwzC36oRK1zZMg3PX5a
5gtnZdojxTQgbuZx4Y7LoG58C2ijPMIWC1QDPBJa6TEKyYI1fbwElSxzmJXQ
hQJT/ENjPMrTBRkLUHpwCKR07U9kDnBNPNZ425w+/E5GEgWtMplB+yMWBca4
qCzAHNDkLv3II+ZpkRgS0HatpjBAGWl4bcC0ttPX6BxoctCYsQPcoduRxcy0
ZEOs0dTgbmtZPS5znSBkM/A/eQ7m/ZpiCt6N2sxhu+ARjywqM4OEsrEFSws3
UAACi2/BlPoe2CSzMsdQ2WRVCnbVoLtOwdsALpIXVU9GX6D/Bt7RFGHxPCEh
CBgqz2EuTz6uAT6CdjuPYrcsnM4ZZgRqhQygebys0Te0ew9IkpgC6Noow56F
DZIABwj+NNvpkQzzI6QfMOnXuNB22zIYIVdj8PMENICEa3Y56F40sYapJYEA
LwIwAggOlIN2uoodMLGaLTvZSSA0iCExQ0SEISmsYPRjBD9lgjHmHiZUg0/K
Lcayog4IBsjlJr4nun1Q9Mp5r+ZNUVv0kBnpL+kfAbW5rckMXL48+m6gLo/e
XJ3SEq5OT38LPJijq0RtYQ+pVkwQIwWiJYAFDkHDSpmBqVOMlHkxMTSQDM/U
gZB4UPj21haIgGBN4ZetXPsZ8CwCpdYMVMgBjwgRHTwsJ3r6ZEFHyf08Bt+e
EGIRCzCkTuxTl3jYCQiVWHhWMAtMvDlpIuY2kMHf0C+CIIHqDsF6AS4A7jHA
ASVicYUrJE+IB4fCpSJlcggeGHu8crVmOKyOXXmLEingI/XyMJjEQe09sNOw
oIIdfALnW84fkG3ooS9XAgdQrkiHwapVS1Y2uAa0HKEV+KGxQGFlIIRFY0AI
QFiOT4IJpBACcRrHJuUwBpiwVSCa1bIHtqMWr4Z6qYQuNbGmIKha63sRCOAl
qUqANX5hMjtBVeKtuVe7o1Gf9uCsZBUT0H0PSKRE2KPLJYQI5bSeDQSrIqXv
TOXIhID1+EYXILq9OMmEKAZpvNNLj14KbAYsBu0deImmzGERPLfdMvXMFbln
N11D4F2pW5wClhLYe6srixZmyJSBaQqcRtjUgWabd+6nbGgeqU567zLI0DHL
FWPUbkycO6ATvBgAcIyRbA1oLkdYaxIrtaa9CJlTe4NgAs2NW0BUReIGITlo
GqjVQAKIlUCONlNCDLB9QHMznXUQxhAdRy5zstCBAqyuSZ3H0AZwTNRyH1AV
uoYIVNCBv3l2dfz67NnpAxaI7PbqomnNtVjMKiqyeF1kbDt0eETkU5SRbT2m
b/xCk7bEC4IuJrao0XItF+BWzGg6GqiXKEi1IsiAbD4ae1c0IHpXNShMnyMc
eGiOO0YeC6/jWhkaiHYxseBqMSO0HKlLzdK3SDgGiNJBDIa4ZYVpQc9kt8Py
yHBRTO8gpgcu8v1M69kJxGdatb5P4kZfuwXzwwW01II0Mshh3klT1QShWkTB
KxSu5pH5LqQB2gicrF/HF2mS2Ei8nqJ5XyXxjPFJhpgFWAfMXCIpQKakclzF
0SpmBNBMA5xwOXHZzk1n2jsL/muMECo6pRx9q0P7l4FzW9LsqI4QQ7959UmS
SYqOC6ZtZsMZgQKuqEOCp7SFXpdMCirMW7I/Lt3ghfMUz7aun4XUxhwNLKI1
XKT0gaNdXg5YPNgLbRKPkGVjB51QXbsQL8Q8lYg0iUdCLWNj1B1UVls2vFdK
d3N0E+1nhFNeAGC4RejOhj3N+dGUtgpGe4t8Cg8k5SL5JARuGEkJtUxkBd6k
Qp8ZOOoDS6MpAA7NbDYDrLEkC0yyQhlbEg59C+6acKfE0jE/Eyws8Q/9vvVZ
48UxBll5il/Y569ljkJ6Ck2/uUs2LVr4QBt6TYrwgTgMPwh1rgImTAeacgOQ
8iEh600yMuba5gtYBK6t5S3pi8gJToNyTVnDhdgqygGx0GofgZzJR+oNPCPx
IRsstlMCfgfbdnOmC8TRFUQ1oPAcS9crJiZI6wD21Zh3HZvZgMwVwa7IZGKJ
gL66hZeUq8yjKIwAIaboHDawIgu3hU4QMLAXWVOEHNakQp/RVSu4iaZiuNUS
LrEz24vOWoU8RMk4nshTTBUCBvGUtV7F4RUWEspOTDBgNRazMEdi7nSdzcQj
IdBV3mIIo0vjGg8CFZmj8+8bSg1EvpLnInf/SJ0Abm7AKcHIaLH4MfTzj9GF
GYY0XewRFRuFJDcLtNQl4hqw0rRVyJGOhHjcEZFZlHjyGGg3002qzFRXmAfx
wamGVHYbEIFqtnwE842yzsOikqP0sr3N7YQwc50YXMqoi6TgfLjb1apja9mG
itsK1Ev71txZTIjbSTupjen2ItGnlXWR3mHOuQK52byujldwTS3GMtW1sQHX
aDBTxDgtsSnnovm93imCD4XKXESDgGiaXEn7AGUYCKay6w/GyPo24u24Ibq3
rWakNRmCZon5QWStF551aS08DfKgdhN0OyB+9YP9TggDY0ZKInQsCdSCBmbG
h12sMMfEENpDOMRbISE9KUcaQyc8YGlG7fPRCScOhFfMzw4kzFxD6UgNRy+c
5A3RMEQpf/7zn3vrW6TeY9VPPl8TCrX9QXLtJcUnq1cvJTOEwdeg95EGf3+o
HrWlfiwZCllDiaeoIeGXOxcgEmhg1n2QkL7zEeQGq3DhMqPjDfuDzhA1nQ03
eBCEpuBRAUp0FyVGMeQGqBDWkLTkIdqjKg+aP47ZxLBERBMqG5Jrbcsra+KG
ewAygOHdMuBvtJchwdAtOfA0eu5QitHsSh4Bg2MIzha6xBD1ymKecEVpOjNS
RwJYqxVhJRktEAIRI2EAc2/ZGSQqxPnebukKlLr3Ycj/wt/P+/eh9wEZD/8+
RIugPuPfhzD/4YfDv3X+/fsDmp+8AKDsIJIooxjyfdL8f8f69++f8PxkMlMC
0Ow/TME/Zv4vaH6y/8n06Jj+d9b/lOe/Prp+c9WhADxn4x+i4e+fnwEF7f37
R52tJ4tFP6SGMBhA9UsUHDR4XfN3DREf0D1f8IVtdo8+dI1eorZpTIqmjkgk
8UhoJOlgIumnrVQ++VEqVQsMH6Ya53yA7DQREOgmsWrJJqkSV4O/bKX6i38Y
1TjldqLTaBVpZqJZFhOyWRQZWV4yaGJkhx4mFmLYxRxwcHHJsG3bXfuh7hES
VFd0I1h1wN011YSIS0zKVj49/Ww+qZUZH2YeLfwB9jF5XQYmFFBSMCCqq65P
YxeeDLaaXdvk0KWAQwConQXTwgERJmWxesa+umyT7Am2lvBUc2xMQNJOp+iK
Ba63E4SwhyKjpArDEcWuodiQInSmkvxtmnYVdCd1mgGm/ykJD2I0g/B46CZD
KgqPC5dRNJs3VJQHYI2/YZmgSiKT681BoeT4O6RjbEHRVDcxFPmAGb4Ko8Vi
ySidpIVi68mmzKrgdlKEzYETF2XGmNEwWlBmDLmSdDA9Ws8aCLdN4dpw1XMg
yxNCkEkZnSRRk0R2ZjWcwyF5NC9ZLIMaVZtkIE458nXkQGdzcU2PO5bMryD4
tnBYLBP4bSuBSgMJ22IuLPIFx+G6ea6kBhmIY5CFFN86m7di0NkzNiUEMTl9
tJL+viJl7V23fTpjU2PAuAImMdzDUJGVGxXGcS4tKB6lyiUdlMccLZGY6YqK
pZzktJlqFjntQwxC1+USqypUNggr2hpMDuJPKzZKbC4H+Hl/INEwyBncU7q7
AtvKuN0riYCPpSyK8XvMVrCYtSuCr1NDVXsOEkDsDcWkK3xH2EtZ0pTlwS4/
h6iBdKKtdMWQBVu7IJ5uuOHIqxl87+xrohK7myq2/bbKFYoi3EBRUAIBGzYI
yDee29Bw9lARriktvFTbS7biaDql4A7KopYIaQzZ9Qka29DaoNRKDdZzTf3D
AyDy03/6IIO1CI5tUPz6q79hsAee+PR5PmGwX/BA3LJ5xbInMHTLYA880cWx
m26JlP6fH4zuY5zISOVg/6P6J+3mp82TLFMWcDH+ni3c1wf7amWZass9/782
QAIM4cyXxJl/xgZ80jyfqE6wLLeQFR7VwPcvaW8+f7BP/+nDj2WywPgNQ+Pq
Ol5O/QVDp+AETuWZqwxsOPjWEECFJ66ws6S2GUGvNJtEHZKhFGPuM3A09tZg
eWZDWUbtioGHaGC/P+J2t+BDeCisHGGaiJqq4yx2EprtchZybNzoDE1oZK3n
VqY7x5auXtsT1N4QcuHUm8t9ZG2/TuYImzJOa6sQsYOdUnIQY2QrcLvbJb2t
XSpk5WnqgAJD5RxzYFm3/3qTwwYKBMvjvZPCZlwzylqI+0DfEOzvawcEHXlc
ENbhes+xpIVlPWy8WA6Az2EHTSFlPF1MsRdrNieglnRoh/YUbqCjKGFiK193
WqAc9QoS+uREIjK9U4JO+r+0/1EZoj5GxsSdkhA1c3jZKFtmFdcpC7W69Wcn
PnQ2QOj8ZKBGo1GfOGdLwBS23oSCV9q0ZCvDJiLUstNZDaJxR7IclipttRvL
FtTpYO63CN0q2I79M6dB5cIlavi5wALpOuuw5MOVpEUaFa/mazdEviNpztuQ
FJfKeDhLQGn/eVLNM6ss97ERQRjEqpSQKzuM4TtItzXYXcdQ/LJyCz3lU0W4
0OO1PqDNDXRIFpgWiLHHTThNUKwJg6eOgQ3oNtZUOnpu7k3WiC7JdM+1LTBH
/0IS1tx+NdmwODR0riypygrrHBvgmsHqAFdQcUs5k4ME+nqIJQLu+FiVYBBz
qu8mcwBLuM5EkdZKIySLtVeJHnHrMMVP1OASp0DtyB01A7QRiHphdFWPIbwe
PqOOKGk1VOe6hE3gtn5QoKP8VpcZ/r6Seul9G2PUVYOMIWlup/PY4r1aERtg
N7CVjsNuw4TF5gGTc80EOH8wAssPOueqNiZZL21wr0ZJZ0nwqFWv92QU96+N
ZFC47yDMCBEbai/246wMRyJLJo6qpTDaF0CFpnCaMgBDrHbgeZjMeqkIcwVd
c6e1HIGTHiGsckjGgK0vd8Kho/rrX/5jFvbhr3/5z8RB0SGIcBQH470siUSR
Nj6TxD1ebsEMBIMBI040aeYMQmYcE1YDF/1bu1AaM0VwbcRJtigCa8XUYKZF
6lwrTf0Yt9N0oRdoby+uY2+vLaq5RBF3HQ20LcDnHAwfxVlpSumzGvAwejrF
mjk3QnZgTNpgC0yCbardEFMLdOyPonJMF/La+Mxd6hEavy5H6kjFdcVVtQnE
GvfA1yyme3svXYahbBgUc5h7e2xzk0m318HFhcVkK3ILxgDKJx6kdffy+qof
RI1OKfVZ0Pf2jmXMrws3BhK2zDzlX2Nmr9tfEbYJmPAYZuat7/OZrcw1Ysu5
V7HgfEDcZ66fh6MhhDpfAcvFOh2VJTyf0Yai3TClpI9EzFCcO3VrNpp7ewQ9
QJ7W90AOhIWTBcGWgKDDvEOed/gbGBc1QHJHrlpvDmvXTHdhw0zH6+L6YXuH
6jXY9im10DPpSe00bEkouuPtl+E8WLHkvNBSrHJac1W7diLWri+NKa1K4h6C
AZAjYdHRcGP2aSvIaDHN/cJk4hJRI9cZ5tvWO+wbR8uVE6gC+3arAemdYYNH
+5jl9t0WsGOHosqbkPC8z4BsFhxdx2HU7gKAjPLgBYGUAiAu7Hp/kHA69XNC
P570ZM/ZNkTCbK1vbbPpnF2H9dqaj+UMQUiu+awLWK3XZu6AiiD5PONcV287
88F0ICZhKpQP9JuxY7nCQQw3HEUgEtCflGLmFB3UhhLeSMPzBkxuMj1wE1B3
aDVt2Yqpz9t0MzDPDHdMK/QcbFlXukxpAYyjgeyUK0g6N4MgxXlCbQpwOGXN
Bv+C/R26cnrytRniZzxs1TtKASbLB4UmmC4NTXLrnU843TR0EZOEY78Q4v/k
0AkClZgrVM/poCz2EmC3sqYzCmqOWBtWAsYo51bNIbd6QZAB4ayJYDvTbYMO
alg4YIMPySkOCCfwwRA/JSnzTrNKa7KHBLVf0+SPsR8MthDPyif2k9wuHvhd
0qahnY/NTcCGdIUgTtiGRafHpYGUnVNXMz2JnY1d/YhatZoUehr8AGz3BRdv
cJNgt+UEi43q2aaK4z4Ej/AaO7yovw2eDeu5CB0erXRVYOaWzHFCPBsTvHjG
Orr6VpqpcUUaZ9n4ikABLymeQAmlFRGiGnZP33U7TTrHfXbpfpgcV2xKapAt
QsM7CD/atGoZ/KKrRASiI/UuXSUhpoYLWVtqB1bQbiq1tDoSaR/wUgCUrwTf
nUkPeBkaIy8dBN3LcCKTDXMFHzOODoMFD83jstGYyRnDIHc2xynBYIA2EPYs
M2AB0p9jt5A00jlpbuJFxykMZli47sCuJugz1tLutK2pw3sOHJpyx6eNWnCE
ryJAu/vM8pHm3aNnr/uhbZUyPKlKsGFlsrAhji3PBp/D0WTaN5j2qzFExfUW
jo8NwGYYTKqcsRXKZg6PCNJhBGpxojiqGkJ0hacVuPLGJ1pEovCIZ2jjDhgW
WxdD0zPBmZkpFijQGRmYVmVeuvF4KVt4qL4FjqlbIOZYdDhw4CgkAWIjlYQD
C3oy8oUPT9jURloOm6WxFveEz6AXCb6H76DaoxBwyqAUPVADGWhZsCoD1C8K
LwEUJ+ERG1NCGgzSEfuHRAbrFvXaNmWq7X3pPA7BS4YtwNLwOscGYPMgUbia
SBAvN8NDZ+Rl0WyKCidojQ2lNGGzoyEH6yW0lypXwh784a0xCxVd2nMDmygh
7FHSocmNFiuvhRg3Fs9MubL71g0+EhT6+tvjLOkImMOQBFDsctd8wNODN0Dh
GqgJEeNQHWvKIYZoDnd5c+y6+lYQSqsE4FBRoEg455pbnrmhEF1OVLfHErwE
rSNI8kJ4xxsxN3NMqM0siSCl5grpJOXia04PnYXXVzg81FbfGTC9sLPIo4A1
MLzEReL3EObzGRodbAi+3WA9TzmEMB4IN7DjDPEaPgtDtoRH6DAThgA7wS2C
j/D4QUNnR4/RgOQxd/r+kZdfsLPm4uSCUhtnR6+O1u+0utTtXZj7R+OP94fE
eVuE5GTzlqi9fa1E5zUtLRNC4yMIKzIDV4pHf6TrIiSLcZU+eXtKZQDfGkTR
5Inat6hMeB6GeHoqmdrzy6dqdwL/70fJDaXd6JLZicdV7d5QD1YzvumHFoO0
YTScn+DzJ+T+2vetoEnAyoQkMbliclnFHojeqVjiw96h/ErZVD5HDcbmxejJ
T4Hio2+O+9IOCyMdcygNRkDeMpQ+jO5AT/npzQvncdJOZfEzub0N8Y2jSALf
SKF25s5NdtTuubu1Rj2XITlRvDMHPcDfaPYTXWv0f+DWFtoSADhjmx9yRFeG
HvaHklS9mdTLxY3afY5cxf4qHhY47m5vwpTnptZ5HDq0hTCijvlTOe9ji9hl
LqcvQvw+l1ECfEAWZ/SmMjoES+EzZXdBszCC7Ldnz5M+d1dyxJGErZic3iQs
gAA4nUmiAUa8dwXBNIbhZ20bMzJCaoStuOJeRbsaomtCC+spoJ94AdaeBx8o
MMRzyqILwMVQWRLKANopNUIriseHT6MyvY7KhO9jQY4SffJCoPYcFb7vwnPq
SI5ZsVAANkNh+VeUChaBPr+AyN0NBZhxRJScTQ0vUzrG/ThUkX/t+S7WgeSs
AMs2cEmON0Slj+dPITADUQE48wbkz3f0Ix71xpegtO8i2ImE7yQSPODkV2xt
41MWZKb2uJN7j80TSuzkRp7E+D+nY0erxzFvcAK5rW1rh4W7XE6whVdSqHN+
DR3Szi33HcYm40rDFZ9DkqQKsyy8hCG8uAI2le6SF0LocJJ1oi5txm/F2v36
4rKPT8Bf8GZTK2fl5MR0pYdsmni23bMhfQDDyEEVt1gCA3IrCGYYjJnMvHv5
+Bk/5PsjQhs3IXN30zZhqnC2A0zHNJCAC0OyMJy+j8ZxpQLFaHbjecpkIjqB
5Tec5JEFBRBPHCjFn3A+Jrw8BSgZJG0/uB1ZzVtJ9Kd2jxe6oXEwOJJ4Ir3C
33mB8h7ClGyxdXTcPYRxk03HOi8uCad1ZUaSZaFk0TXNoDByQAzPptELWlpn
6sMLFQ7VwdYmyGAmOd4Uy55YczHestSOW/DsFkYYUSRVzXDYeN2orJrlpMxZ
LLFOMmOEHDobY3l0PYEtnWUny1KjwVirM25ZrQ5gjU/Qzbnagui2Pap/0wbq
Nwxm1968wb7oBsuON/gXC4/4AUuPN32OePPQUbDXqaPtyX4ey9mxS+6UxLQU
nc67iDYWq6KdI5k8fGiQfHhb4zEe35UPdi26ohPxaCzk9Qsx392qSivBg3AC
ktKZMkmnYtoVZD4MCfEjCkYUx/B8m7pLiUJipNgQXCD8jIUrUe6kqIkJgbZF
tjVNJGCSLc/ljWd6TucNScPJcSr1xSh5mZAPeV8uamFuE0kJb+fpOuZgJ0xV
odRk3LMO+0z1AFqjvMhDDOeoRy2YjylDZQ7pzSYiLvH0IJ+hpQUnpYW20zio
QyyVtEdrQ0982oAbEGLnkRW/k2aGopNJ2wZG8iIYUWmW9LUDuq2pSc5U3tep
g2ZjMOr9D71WLHVBVwAA

-->

</rfc>
