<?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.24 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-gougeon-imap-webpush-02" category="info" submissionType="independent" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title>The IMAP WEBPUSH extension</title>
    <seriesInfo name="Internet-Draft" value="draft-gougeon-imap-webpush-02"/>
    <author fullname="Simon Gougeon">
      <organization/>
      <address>
        <email>ietf@sgougeon.fr</email>
      </address>
    </author>
    <date year="2025" month="March" day="19"/>
    <abstract>
      <?line 55?>

<t>This document defines a WEBPUSH extension of the Internet Message Access Protocol (IMAP) that permits IMAP servers to send WebPush notifications.</t>
    </abstract>
  </front>
  <middle>
    <?line 59?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>WebPush (defined by <xref target="RFC8030"/>, <xref target="RFC8291"/> and <xref target="RFC8292"/>) defines a way for applications to deliver real-time events in a timely fashion, with push notifications. Push notifications allows consolidating all real-time events into a single session which ensures more efficient use of network and radio resources. They are particularly used in mobile environments. Push notifications may also be used for other use cases, for example during the migration to a new server, the new server may subscribe to the old server to be notified when an event is recorded.</t>
      <t>Many use cases have led to a need for real-time events with email. IMAP support for real-time events has been added with the IDLE command (<xref target="RFC2177"/>, <xref target="RFC9051"/>) and the NOTIFY extension (<xref target="RFC5465"/>). These commands require using a persistent connection per account and contribute to unnecessary use of the device radio.</t>
      <t>JMAP (<xref target="RFC8620"/>) has responded to this need by supporting WebPush from the beginning.</t>
      <t>Therefore, this extension permits IMAP servers to send WebPush notifications.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>In examples, "C:" and "S:" indicate lines sent by the client and server, respectively. "Push:" indicates lines send by the server with a push message, and "Push&gt;" indicates lines that are part of the same push message than the previous line. Lines ending in "\" are interrupted for presentation reasons, they would actually be joined to the next line. Note that each other line includes the terminating CRLF.</t>
      <t>User agent, is defined in <xref target="RFC8030"/> as a device and software that is the recipient of push messages. It describes here the mail client.</t>
      <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?>

</section>
    <section anchor="overview">
      <name>Overview</name>
      <t>This extension adds 5 commands: GETVAPID, WEBPUSH, ACKWEBPUSH, LWEBPUSH and SILWEBPUSH. GETVAPID allows to get the server VAPID public key, WEBPUSH to subscribe a new push subscription, ACKWEBPUSH to confirm the subscription information is correct, LWEBPUSH to list current subscriptions and SILWEBPUSH to silence a subscription for a given time. Every time a message is added to a mailbox, the IMAP server sends a push message to the registered push endpoints.</t>
    </section>
    <section anchor="capability-identification">
      <name>CAPABILITY Identification</name>
      <t>IMAP servers that support this extension <bcp14>MUST</bcp14> include "WEBPUSH" in the CAPABILITY command response.</t>
    </section>
    <section anchor="client-commands">
      <name>Client Commands</name>
      <section anchor="getvapid-command">
        <name>GETVAPID Command</name>
        <t>This command is only available in authenticated or selected state.</t>
        <dl>
          <dt>Arguments:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Responses:</dt>
          <dd>
            <dl>
              <dt><bcp14>REQUIRED</bcp14> untagged response:</dt>
              <dd>
                <t>VAPID</t>
              </dd>
            </dl>
          </dd>
          <dt>Result:</dt>
          <dd>
            <dl>
              <dt>OK -</dt>
              <dd>
                <t>capability completed</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>BAD -</dt>
              <dd>
                <t>arguments invalid</t>
              </dd>
            </dl>
          </dd>
        </dl>
        <t>The GETVAPID command requests the VAPID public key (<xref target="RFC8292"/>) of the server. the server <bcp14>MUST</bcp14> send a single untagged VAPID response before the tagged OK response. This is used by clients to request a push endpoint on their push server restricted to this mail server.</t>
        <t>Example:</t>
        <artwork><![CDATA[
C: a1 GETVAPID
S: * VAPID \
    BOniQ9xHBPNY9gnQW4o-16vHqOb40pEIMifyUdFsxAgy\
    zVkFMguxw0QrdbZcq8hRjN2zpeInRvKVPlkzABvuTnI
S: a1 OK GETVAPID completed
]]></artwork>
      </section>
      <section anchor="webpush-command">
        <name>WEBPUSH Command</name>
        <t>This command is only available in authenticated or selected state.</t>
        <dl>
          <dt>Arguments (create/update):</dt>
          <dd>
            <t>subscription ID</t>
          </dd>
          <dt/>
          <dd>
            <t>push endpoint</t>
          </dd>
          <dt/>
          <dd>
            <t>ECDH public key</t>
          </dd>
          <dt/>
          <dd>
            <t>authentication secret</t>
          </dd>
          <dt>Arguments (delete):</dt>
          <dd>
            <t>subscription ID</t>
          </dd>
          <dt/>
          <dd>
            <t>NIL</t>
          </dd>
          <dt>Responses (inactive subscription):</dt>
          <dd>
            <dl>
              <dt>untagged response:</dt>
              <dd>
                <t>WEBPUSH</t>
              </dd>
              <dt/>
              <dd>
                <t>VAPID</t>
              </dd>
            </dl>
          </dd>
          <dt>Responses (active subscription):</dt>
          <dd>
            <dl>
              <dt><bcp14>OPTIONAL</bcp14> untagged response:</dt>
              <dd>
                <t>WEBPUSH</t>
              </dd>
              <dt/>
              <dd>
                <t>VAPID</t>
              </dd>
            </dl>
          </dd>
          <dt>Result:</dt>
          <dd>
            <dl>
              <dt>OK -</dt>
              <dd>
                <t>creation or deletion completed</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>NO -</dt>
              <dd>
                <t>creation failure: can't create webpush subscription with these arguments</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>BAD -</dt>
              <dd>
                <t>command unknown or arguments invalid</t>
              </dd>
            </dl>
          </dd>
        </dl>
        <t>The WEBPUSH command creates, updates or delete a push subscription for the account. New subscriptions and updated subscriptions (with at least one different field) aren't active until the subscription is confirmed with the ACKWEBPUSH command.</t>
        <t>The subscription ID is unique per account and identifies the push subscription. Sending a WEBPUSH command with an existing subscription ID updates the current subscription. Sending a WEBPUSH command with an existing subscription ID following by NIL deletes the subscription.</t>
        <t>If the client tries to delete a subscription with an unknown subscription ID, the server returns a tagged OK response.</t>
        <t>If the subscription is inactive or is deactivated by the command, the server <bcp14>MUST</bcp14> return a single untagged WEBPUSH response before the tagged OK response and <bcp14>MUST</bcp14> return a single untagged VAPID response before the tagged OK response. The VAPID response can be used by the client to check if the server has rotated its VAPID keys.</t>
        <t>If the subscription is still active after the command, the server <bcp14>MAY</bcp14> return a single untagged WEBPUSH response and <bcp14>MAY</bcp14> return a single untagged VAPID response before the tagged OK response.</t>
        <t>If the subscription was activated (i.e. created and then confirmed/acknowledged) with a VAPID key that is not the current VAPID key (due to a key rotation), then subscription <bcp14>MUST</bcp14> be deactivated by this command, and a confirm/acknowledgement is required to activate the subscription again.</t>
        <t>If the updated or created subscription is inactive after the command (this is a new subscription, at least one field is different or the VAPID key has been rotated), the server <bcp14>MUST</bcp14> send an ACKWEBPUSH response with a push notification, encrypted with the new public key, to the new endpoint. The client will have to send a ACKWEBPUSH command to (re-)activate the subscription. The client knows if the subscription is deactivated thanks to the untagged WEBPUSH response.</t>
        <t>The push endpoint <bcp14>MUST</bcp14> be the URI that the mail server sends push messages to. This is defined as the URI for push resource in <xref target="RFC8030"/>. This URI <bcp14>MUST</bcp14> use the "https" scheme.</t>
        <t>The ECDH public key is the user agent public key on the P-256 curve. It <bcp14>MUST</bcp14> be encoded in the uncompressed form <xref target="SEC_1"/> (section 2.3.3, replicated from X9.62), and base64url encoded as described in <xref target="RFC7515"/>. This is used to encrypt push notifications following <xref target="RFC8291"/>.</t>
        <t>The authentication secret is 16 random bytes. It <bcp14>MUST</bcp14> be base64url encoded as described in <xref target="RFC7515"/>. This is used to encrypt push notifications following <xref target="RFC8291"/>.</t>
        <t>The client <bcp14>SHOULD</bcp14> reregister their push subscription from time to time, like every time the client starts, in order to restore subscriptions, in case the endpoint was removed. Subscription may be removed if the push server has been in an inconsistent state, or if the mail server has been restored from a backup.</t>
        <t>The capabilities that were enabled using the ENABLE command at the time of the WEBPUSH command are associated with the subscription. When sending push messages, the untagged messages are formatted according to those capabilities. For example, enabling IMAP4rev2 or UTF8=ACCEPT cause mailboxes to be in UTF-8, and enabling CONDSTORE causes MODSEQ to be added to UIDFETCH responses.</t>
        <t>Example:</t>
        <artwork><![CDATA[
C: a1 LWEBPUSH *
S: a1 OK LWEBPUSH completed
C: a2 WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/random1 \
    BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-JvLexhqUzORcxaOzi6-AYWXvTBHm4bj\
    yPjs7Vd8pZGH6SRpkNtoIAiw4 \
    BTBZMqHH6r4Tts7J_aSIgg
S: * VAPID BOniQ9xHBPNY9gnQW4o-16vHqOb40pEIMifyUdFsxAgy\
    zVkFMguxw0QrdbZcq8hRjN2zpeInRvKVPlkzABvuTnI
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/random1 NIL
S: a2 OK WEBPUSH completed
C: a3 WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV \
    BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-JvLexhqUzORcxaOzi6-AYWXvTBHm4bj\
    yPjs7Vd8pZGH6SRpkNtoIAiw4 \
    BTBZMqHH6r4Tts7J_aSIgg
S: * VAPID BOniQ9xHBPNY9gnQW4o-16vHqOb40pEIMifyUdFsxAgy\
    zVkFMguxw0QrdbZcq8hRjN2zpeInRvKVPlkzABvuTnI
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV NIL
S: a3 OK WEBPUSH completed
C: a4 LWEBPUSH *
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV NIL
S: a4 OK LWEBPUSH completed
C: a5 WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 NIL
S: a5 OK WEBPUSH completed
C: a6 LWEBPUSH *
S: a6 OK LWEBPUSH completed
]]></artwork>
      </section>
      <section anchor="ackwebpush-command">
        <name>ACKWEBPUSH Command</name>
        <t>This command is only available in authenticated or selected state.</t>
        <dl>
          <dt>Arguments:</dt>
          <dd>
            <t>acknowledgement token, send with a push message with a ACKWEBPUSH response by the server</t>
          </dd>
          <dt>Responses:</dt>
          <dd>
            <dl>
              <dt>untagged response:</dt>
              <dd>
                <t>WEBPUSH</t>
              </dd>
            </dl>
          </dd>
          <dt>Result:</dt>
          <dd>
            <dl>
              <dt>OK -</dt>
              <dd>
                <t>The subscription is activated</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>NO -</dt>
              <dd>
                <t>The token doesn't exist or is expired</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>BAD -</dt>
              <dd>
                <t>arguments invalid</t>
              </dd>
            </dl>
          </dd>
        </dl>
        <t>Example to activate a subscription with a valid token:</t>
        <artwork><![CDATA[
C: a1 LWEBPUSH *
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV NIL
S: a1 OK LWEBPUSH completed
C: a2 ACKWEBPUSH 585078c5-fb8b-4ed0-8e77-474ab08f0a30
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/JzLQ3raZJfFBR0aqvOMsLrt54w4rJUsV 0
S: a2 OK ACKWEBPUSH completed
]]></artwork>
        <t>Example with an unknown or expired token:</t>
        <artwork><![CDATA[
C: a1 ACKWEBPUSH 5aa04cf0-f156-406e-84af-3cee534b23b8
S: a1 NO ACKWEBPUSH completed
]]></artwork>
      </section>
      <section anchor="lwebpush-command">
        <name>LWEBPUSH Command</name>
        <t>This command is only available in authenticated or selected state.</t>
        <dl>
          <dt>Arguments:</dt>
          <dd>
            <t>subscription ID with possible wildcards</t>
          </dd>
          <dt>Responses:</dt>
          <dd>
            <dl>
              <dt>untagged response:</dt>
              <dd>
                <t>WEBPUSH</t>
              </dd>
            </dl>
          </dd>
          <dt>Result:</dt>
          <dd>
            <dl>
              <dt>OK -</dt>
              <dd>
                <t>list completed</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>NO -</dt>
              <dd>
                <t>list failure: can't list webpush records</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>BAD -</dt>
              <dd>
                <t>arguments invalid</t>
              </dd>
            </dl>
          </dd>
        </dl>
        <t>The LWEBPUSH command returns a subset of webpush subscriptions from the complete set of all subscriptions available to the client. Zero or more untagged WEBPUSH responses are returned, containing information to identified the subscriptions. The server <bcp14>MUST</bcp14> return the WEBPUSH response for the exact subscription ID if the account has a subscription with this ID. It <bcp14>MUST</bcp14> return all the account's subscriptions if the argument is a wildcard "*".</t>
        <t>Example:</t>
        <artwork><![CDATA[
C: a1 LWEBPUSH *
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.endpoint.tld/random1 0
S: * WEBPUSH 80a3b492-bc9c-46a9-91ab-5866b27073bb \
    https://push.endpoint.tld/random2 NIL
S: * WEBPUSH 28626e4e-37d1-456c-a667-5258b5528508 \
    https://push.endpoint.tld/random3 1112
S: a1 OK LWEBPUSH completed
C: a2 LWEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.endpoint.tld/random1 0
S: a2 OK LWEBPUSH completed
]]></artwork>
      </section>
      <section anchor="silwebpush-command">
        <name>SILWEBPUSH Command</name>
        <t>This command is only available in authenticated or selected state.</t>
        <dl>
          <dt>Arguments:</dt>
          <dd>
            <t>subscription ID</t>
          </dd>
          <dt/>
          <dd>
            <t>duration to silence subscription, in seconds. <bcp14>MUST</bcp14> be equal or higher than 0</t>
          </dd>
          <dt/>
          <dd>
            <t>OR "session" to silence the subscription as long as the connection is alive.</t>
          </dd>
          <dt>Responses:</dt>
          <dd>
            <dl>
              <dt><bcp14>OPTIONAL</bcp14> untagged response:</dt>
              <dd>
                <t>WEBPUSH</t>
              </dd>
            </dl>
          </dd>
          <dt>Result:</dt>
          <dd>
            <dl>
              <dt>OK -</dt>
              <dd>
                <t>create completed</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>NO -</dt>
              <dd>
                <t>the subscription is unknown or inactive</t>
              </dd>
            </dl>
          </dd>
          <dt/>
          <dd>
            <dl>
              <dt>BAD -</dt>
              <dd>
                <t>command unknown or arguments invalid</t>
              </dd>
            </dl>
          </dd>
        </dl>
        <t>The SILWEBPUSH command allows the client to silence a push subscription for a duration. It may be useful for clients synchronizing with the server when they receive a push notification, without parsing it. It may also be useful for clients that support a "do not disturb" period. When the duration is 0, the push subscription is active again and the server will send events for this subscription.</t>
        <t>Clients <bcp14>MAY</bcp14> announce their subscription ID with <tt>SILWEBPUSH subscription-id session</tt>, which causes the server to not send any push notification as long as the connection is alive. This isn't reflected in WEBPUSH responses. A server <bcp14>MAY</bcp14> refuse to silent for the session more than one subscription from the same connection.</t>
        <t>For example, when a client receives a push notification, it may silence the subscription for the duration (or a little less) that it stays connected to the server:</t>
        <t>Example:</t>
        <artwork><![CDATA[
C: a1 SILWEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 10
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.endpoint.tld/random1 10
S: a1 OK SILWEBPUSH completed
C: a2 SILWEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 session
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.endpoint.tld/random1 10
S: a2 OK SILWEBPUSH completed
]]></artwork>
      </section>
    </section>
    <section anchor="server-responses">
      <name>Server Responses</name>
      <section anchor="vapid-response">
        <name>VAPID Response</name>
        <t>The VAPID response occurs as a result of a GETVAPID command. It returns the server VAPID public key (<xref target="RFC8292"/>). This is a public key on the P-256 curve. It <bcp14>MUST</bcp14> be encoded in the uncompressed form <xref target="SEC_1"/> (section 2.3.3, replicated from X9.62), and base64url encoded as described in <xref target="RFC7515"/>. The server <bcp14>MAY</bcp14> use a different key pair for each account.</t>
        <t>Example:</t>
        <artwork><![CDATA[
S: * VAPID BOniQ9xHBPNY9gnQW4o-16vHqOb40pEIMifyUdFsxAgy\
    zVkFMguxw0QrdbZcq8hRjN2zpeInRvKVPlkzABvuTnI
]]></artwork>
      </section>
      <section anchor="webpush-response">
        <name>WEBPUSH Response</name>
        <t>The WEBPUSH response occurs as a result of a LWEBPUSH command. It <bcp14>MAY</bcp14> be returned as a result of a WEBPUSH, or a SILWEBPUSH command too. It contains the subscription ID, the push endpoint of the subscription, and if the subscription is active, the silenced duration in seconds, else nil.</t>
        <t>Example:</t>
        <artwork><![CDATA[
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.endpoint.tld/random1 0
]]></artwork>
      </section>
      <section anchor="select-response">
        <name>SELECT Response</name>
        <t>The SELECT response is sent with a push notification by the server to inform to which mailbox the following events refer to. It may be used by clients to synchronize a mailbox on push, regardless what are the new events.</t>
        <t>Example:</t>
        <artwork><![CDATA[
Push: * SELECT INBOX
]]></artwork>
      </section>
      <section anchor="ackwebpush-response">
        <name>ACKWEBPUSH Response</name>
        <t>The ACKWEBPUSH response is sent with a push notification by the server when a webpush subscription is created or updated (when at least one field is different) with the WEBPUSH command. It contains a random token.</t>
        <t>The random token <bcp14>SHOULD</bcp14> be a UUIDv4 token. The token <bcp14>SHOULD</bcp14> be valid for 10 minutes.</t>
        <t>The token is then send to the server with the ACKWEBPUSH command in order to activate the new or updated subscription.</t>
        <t>Example:</t>
        <artwork><![CDATA[
Push: * ACKWEBPUSH 585078c5-fb8b-4ed0-8e77-474ab08f0a30
]]></artwork>
      </section>
      <section anchor="sync-response">
        <name>SYNC Response</name>
        <t>The SYNC response is sent with a push notification by the server when a response that should be pushed exceed the 3993 bytes limit. It <bcp14>MAY</bcp14> also be used as a generic push event. It is used to inform the client that it <bcp14>SHOULD</bcp14> send a command to retrieve the response.</t>
        <t>It optionally contains the first word of the response in question. It can be used by the client to determine if it synchronize with the server or not.</t>
        <t>For example, if a server has a lot of flags, and the list exceed the limit, the server sends a SYNC for FLAGS.</t>
        <t>Example, instead of sending:</t>
        <artwork><![CDATA[
Push: * SELECT INBOX
Push> * FLAGS (\Answered \Flagged \Draft \Deleted \Seen [Very long \
    list of flags ...])
]]></artwork>
        <t>The server sends:</t>
        <artwork><![CDATA[
Push: * SELECT INBOX
Push> * SYNC FLAGS
]]></artwork>
      </section>
    </section>
    <section anchor="push-notifications">
      <name>Push notifications</name>
      <t>Once an account has one or more push subscription (registered with WEBPUSH command), the server sends a push message for each subscription every time a change is recorded. This can be a change for the account (for example when a new permanent FLAG is added) or for the mailboxes (new mail, deletions, flag changes).</t>
      <t>The notification is encrypted following <xref target="RFC8291"/> specifications, send following <xref target="RFC8030"/> and authorized with <xref target="RFC8292"/>.</t>
      <t>The server <bcp14>MAY</bcp14> not send some events, it determines which mailboxes and events are relevant. For example, the server may choose not to send events for the SPAM mailbox.</t>
      <section anchor="content">
        <name>Content</name>
        <t>The server can send responses at any time. Every response relative to a mailbox <bcp14>MUST</bcp14> be preceded by a SELECT response containing the mailbox name. The server <bcp14>MAY</bcp14> send multiple responses in a single push notification.</t>
        <t>As stated in RFC8291, the cleartext content of push notifications <bcp14>MUST NOT</bcp14> be longer than 3993 bytes. If the server wants to inform the client about a response longer than that, it <bcp14>MAY</bcp14> send a SYNC message.</t>
        <t>When the server receives a new message, to send the content of the message, it <bcp14>MUST</bcp14> send a UIDFETCH response, as defined in <xref target="RFC9586"/>. 
The UIDFETCH response <bcp14>SHOULD</bcp14> contain the the ENVELOPE, and the BINARY if it fits in the message length limits, or <bcp14>SHOULD</bcp14> contain the the ENVELOPE, if it fits in the limits. Instead of sending the content, the server <bcp14>MAY</bcp14> send <tt>SYNC EXISTS</tt> or <tt>SYNC</tt> to synchronize on push.</t>
        <t>When a message is deleted, to send a full-event, the server <bcp14>MUST</bcp14> send a VANISHED response, as defined in <xref target="RFC7162"/>. It <bcp14>MAY</bcp14> send <tt>SYNC EXPUNGE</tt> or <tt>SYNC</tt> response to synchronize on push instead.</t>
        <t>So, when a new mail comes in, the server sends one of the following:</t>
        <ul spacing="normal">
          <li>
            <t>UIDFETCH (ENVELOPE BINARY)</t>
          </li>
          <li>
            <t>UIDFETCH (ENVELOPE)</t>
          </li>
          <li>
            <t>UIDFETCH (UID)</t>
          </li>
        </ul>
        <t>Example of a push notification containing multiple responses for the "INBOX" mailbox, and one for "New Messages":</t>
        <artwork><![CDATA[
Push: * SELECT INBOX
Push> * 20 UIDFETCH (UID 20)
Push> * VANISHED 1,3
Push> * SELECT "New Messages"
Push> * VANISHED 4
]]></artwork>
        <t>Example of a push notification when a new mail arrives in the "New messages" mailbox:</t>
        <artwork><![CDATA[
Push: * SELECT "New Messages"
Push> * 3 UIDFETCH (ENVELOPE \
    ("Mon, 7 Feb 1994 21:52:25 -0800 (PST)" \
    "afternoon meeting" \
    (("Fred Foobar" NIL "foobar" "Blurdybloop.example")) \
    (("Fred Foobar" NIL "foobar" "Blurdybloop.example")) \
    (("Fred Foobar" NIL "foobar" "Blurdybloop.example")) \
    ((NIL NIL "mooch" "owatagu.siam.edu.example")) \
    NIL NIL NIL "<B27397-0100000@Blurdybloop.example>"))
]]></artwork>
        <t>Example of a push notification when a new mail arrives, and the server implements synchronization on push only:</t>
        <artwork><![CDATA[
Push: * SELECT INBOX
Push> * SYNC EXISTS
]]></artwork>
      </section>
      <section anchor="webpush-headers">
        <name>WebPush headers</name>
        <t>Push messages <bcp14>SHOULD</bcp14> have 604800 for the <tt>TTL</tt> header (a week).</t>
        <t>Push messages with a UIDFETCH response <bcp14>SHOULD</bcp14> have <tt>high</tt> for the <tt>Urgency</tt> header, push messages without any SELECT response <bcp14>SHOULD</bcp14> have <tt>low</tt> for the <tt>Urgency</tt> header to <tt>low</tt>, other push messages <bcp14>SHOULD</bcp14> have <tt>normal</tt>for the <tt>Urgency</tt> header.</t>
        <t>Push messages with responses other than a generic SYNC <bcp14>SHOULD NOT</bcp14> contain a <tt>Topic</tt> header.</t>
      </section>
      <section anchor="push-message-processing">
        <name>Push message processing</name>
        <t>Because all responses regarding a specific mailbox, sent by push notifications are preceded with a <tt>SELECT</tt> response, the client <bcp14>MAY</bcp14> parse <tt>SELECT</tt> responses only and choose to synchronize with the server. For example, when the client receives <tt>SELECT INBOX</tt>, it requests the server for new events.</t>
        <t>The client <bcp14>MAY</bcp14> also parse only some other events. For example, a client may parse UIDFETCH responses, so it can directly show important informations on the user interface. And synchronize with the server if it receives another response.</t>
        <t>The client <bcp14>MAY</bcp14> parse the name only of some events too. So when it gets a <tt>KNOWN_NOT_IMPORTANT</tt> response, the client can ignore it, or choose to synchronize this mailbox with the server during the next periodic synchronization.</t>
        <t>The server <bcp14>MAY</bcp14> not send events that it considers not important.</t>
        <t>The client <bcp14>MUST NOT</bcp14> rely exclusively on push notifications to stay synchronized as they may arrive out of order, and delivery isn't guarenteed. Especially if the client uses the contents of the push messages, or if the client performs partial synchronization on push (synchronize a single mailbox), the client <bcp14>MUST</bcp14> rely on another mechanism to be fully synchronized. For example, a periodic synchronization may be used.</t>
      </section>
      <section anchor="push-server-response">
        <name>Push server response</name>
        <t>When the push server returns a <tt>429 Too many requests</tt>, it should have send a <tt>Retry-After</tt> headers <xref target="RFC9110"/> to indicate how long the server has to wait before sending another request. If this header is present, the server <bcp14>MUST</bcp14> follow the period requested. If this header is not present, the mail server <bcp14>SHOULD</bcp14> wait 5 minutes before sending another request to this endpoint.</t>
        <t>When the push server returns another 4XX status code, the mail server <bcp14>MUST</bcp14> removes the subscription.</t>
        <t>When the push server returns a 5XX status code, the mail server <bcp14>SHOULD</bcp14> wait 5 minutes before sending another request to the endpoint.</t>
      </section>
    </section>
    <section anchor="vapid-key-rotation">
      <name>VAPID key rotation</name>
      <t>Server VAPID key rotation may be necessary in some cases.</t>
      <t>When the server rotates the keys, if it still has access to the old VAPID key, the server <bcp14>SHOULD</bcp14> send the new VAPID public key with a VAPID response in a push notification, using the old VAPID key for the authorization.</t>
      <t>The server <bcp14>MAY</bcp14> keep using the old VAPID key for some time. As soon as the old VAPID key is invalidated, old subscriptions activated with this VAPID key <bcp14>MUST</bcp14> be deactivated.</t>
      <t>When the server receives a WEBPUSH command for an activated subscription that has been acknowledged with the old VAPID key, the server <bcp14>MUST</bcp14> deactivate the subscription and <bcp14>MUST</bcp14> reply with an untagged VAPID response and an untagged WEBPUSH response. The server then <bcp14>MUST</bcp14> send the ACKWEBPUSH response with a new token in a push notification.</t>
      <t>All pending acknowledgement tokens must be invalidate when the VAPID key is rotated.</t>
      <t>Example of a client sending a WEBPUSH command for a subscription activated with the old VAPID key:</t>
      <artwork><![CDATA[
C: a1 LWEBPUSH *
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.endpoint.tld/random1 0
S: a1 OK LWEBPUSH completed
C: a2 WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/random1 \
    BCVxsr7N_eNgVRqvHtD0zTZsEc6-VV-JvLexhqUzORcxaOzi6-AYWXvTBHm4bj\
    yPjs7Vd8pZGH6SRpkNtoIAiw4 \
    BTBZMqHH6r4Tts7J_aSIgg
S: * VAPID BOniQ9xHBPNY9gnQW4o-16vHqOb40pEIMifyUdFsxAgy\
    zVkFMguxw0QrdbZcq8hRjN2zpeInRvKVPlkzABvuTnI
S: * WEBPUSH a8282bf9-6102-4e1b-bb61-d26d0e532e65 \
    https://push.example.net/push/random1 NIL
S: a2 OK WEBPUSH completed
]]></artwork>
    </section>
    <section anchor="formal-syntax">
      <name>Formal Syntax</name>
      <t>The following syntax specification uses the Augmented Backus-Naur Form (ABNF) notation as specified in <xref target="RFC5234"/>.</t>
      <t>Non-terminals referenced but not defined below are as defined by <xref target="RFC9051"/> and <xref target="RFC4466"/>.</t>
      <t>capability =/ "WEBPUSH"</t>
      <t>command-auth =/ getvapid / webpush / ackwebpush / lwebpush / silwebpush</t>
      <t>getvapid = "GETVAPID"</t>
      <t>webpush = "WEBPUSH" SP (add-webpush-opt / del-webpush-opt)</t>
      <t>ackwebpush = "ACKWEBPUSH" SP ackwebpush-token</t>
      <t>lwebpush = "LWEBPUSH" SP (list-wildcards / subscription-id)</t>
      <t>silwebpush = "SILWEBPUSH" SP subscription-id SP (duration / "session")</t>
      <t>add-webpush-opt = subscription-id SP endpoint SP pubkey SP auth</t>
      <t>del-webpush-opt = subscription-id SP nil</t>
      <t>response-payload =/ vapid-resp / webpush-resp / ackwebpush-resp / sync-resp</t>
      <t>vapid-resp = "VAPID" SP pubkey</t>
      <t>webpush-resp = "WEBPUSH" SP subscription-id SP endpoint SP (duration / nil)</t>
      <t>select-resp = "SELECT" SP mailbox</t>
      <t>ackwebpush-resp = "ACKWEBPUSH" SP ackwebpush-token</t>
      <t>sync-resp = "SYNC" [SP response-first-word]</t>
      <t>push-content = 1*(response-data)</t>
      <t>response-first-word = &lt;response-payload until first SP&gt;</t>
      <t>subscription-id = atom
; Case sensitive</t>
      <t>endpoint = "https://" text
; Case sensitive</t>
      <t>pubkey = 87(base64url-char)</t>
      <t>auth = 22(base64url-char)</t>
      <t>duration = number</t>
      <t>ackwebpush-token = atom
; UUIDv4 is recommended</t>
      <t>base64url-char = ALPHA / DIGIT / "_" / "-"
; Case sensitive</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The privacy and security considerations of <xref target="RFC8030"/> <xref target="RFC8291"/> and <xref target="RFC8292"/> all apply to the use of this extension.</t>
      <t>WebPush on decentralized applications may be used as a DDOS amplification, by registering multiple time a target as the endpoint, on multiple servers then notifying all the accounts. Requiring the client to acknowledge one push notification (with the ACKWEBPUSH command and response) greatly reduces this risk.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>WEBPUSH capability need to be registered.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4466" target="https://www.rfc-editor.org/info/rfc4466" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4466.xml">
          <front>
            <title>Collected Extensions to IMAP4 ABNF</title>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <author fullname="C. Daboo" initials="C." surname="Daboo"/>
            <date month="April" year="2006"/>
            <abstract>
              <t>Over the years, many documents from IMAPEXT and LEMONADE working groups, as well as many individual documents, have added syntactic extensions to many base IMAP commands described in RFC 3501. For ease of reference, this document collects most of such ABNF changes in one place.</t>
              <t>This document also suggests a set of standard patterns for adding options and extensions to several existing IMAP commands defined in RFC 3501. The patterns provide for compatibility between existing and future extensions.</t>
              <t>This document updates ABNF in RFCs 2088, 2342, 3501, 3502, and 3516. It also includes part of the errata to RFC 3501. This document doesn't specify any semantic changes to the listed RFCs. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4466"/>
          <seriesInfo name="DOI" value="10.17487/RFC4466"/>
        </reference>
        <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
            <author fullname="P. Overell" initials="P." surname="Overell"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC7162" target="https://www.rfc-editor.org/info/rfc7162" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7162.xml">
          <front>
            <title>IMAP Extensions: Quick Flag Changes Resynchronization (CONDSTORE) and Quick Mailbox Resynchronization (QRESYNC)</title>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <author fullname="D. Cridland" initials="D." surname="Cridland"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>Often, multiple IMAP (RFC 3501) clients need to coordinate changes to a common IMAP mailbox. Examples include different clients working on behalf of the same user and multiple users accessing shared mailboxes. These clients need a mechanism to efficiently synchronize state changes for messages within the mailbox.</t>
              <t>Initially defined in RFC 4551, the Conditional Store facility provides a protected update mechanism for message state information and a mechanism for requesting only changes to the message state. This memo updates that mechanism and obsoletes RFC 4551, based on operational experience.</t>
              <t>This document additionally updates another IMAP extension, Quick Resynchronization, which builds on the Conditional STORE extension to provide an IMAP client the ability to fully resynchronize a mailbox as part of the SELECT/EXAMINE command, without the need for additional server-side state or client round trips. Hence, this memo obsoletes RFC 5162.</t>
              <t>Finally, this document also updates the line-length recommendation in Section 3.2.1.5 of RFC 2683.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7162"/>
          <seriesInfo name="DOI" value="10.17487/RFC7162"/>
        </reference>
        <reference anchor="RFC8030" target="https://www.rfc-editor.org/info/rfc8030" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8030.xml">
          <front>
            <title>Generic Event Delivery Using HTTP Push</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="E. Damaggio" initials="E." surname="Damaggio"/>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
            <date month="December" year="2016"/>
            <abstract>
              <t>This document describes a simple protocol for the delivery of real- time events to user agents. This scheme uses HTTP/2 server push.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8030"/>
          <seriesInfo name="DOI" value="10.17487/RFC8030"/>
        </reference>
        <reference anchor="RFC8292" target="https://www.rfc-editor.org/info/rfc8292" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8292.xml">
          <front>
            <title>Voluntary Application Server Identification (VAPID) for Web Push</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="P. Beverloo" initials="P." surname="Beverloo"/>
            <date month="November" year="2017"/>
            <abstract>
              <t>An application server can use the Voluntary Application Server Identification (VAPID) method described in this document to voluntarily identify itself to a push service. The "vapid" authentication scheme allows a client to include its identity in a signed token with requests that it makes. The signature can be used by the push service to attribute requests that are made by the same application server to a single entity. The identification information can allow the operator of a push service to contact the operator of the application server. The signature can be used to restrict the use of a push message subscription to a single application server.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8292"/>
          <seriesInfo name="DOI" value="10.17487/RFC8292"/>
        </reference>
        <reference anchor="RFC8291" target="https://www.rfc-editor.org/info/rfc8291" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8291.xml">
          <front>
            <title>Message Encryption for Web Push</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="November" year="2017"/>
            <abstract>
              <t>This document describes a message encryption scheme for the Web Push protocol. This scheme provides confidentiality and integrity for messages sent from an application server to a user agent.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8291"/>
          <seriesInfo name="DOI" value="10.17487/RFC8291"/>
        </reference>
        <reference anchor="RFC9051" target="https://www.rfc-editor.org/info/rfc9051" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9051.xml">
          <front>
            <title>Internet Message Access Protocol (IMAP) - Version 4rev2</title>
            <author fullname="A. Melnikov" initials="A." role="editor" surname="Melnikov"/>
            <author fullname="B. Leiba" initials="B." role="editor" surname="Leiba"/>
            <date month="August" year="2021"/>
            <abstract>
              <t>The Internet Message Access Protocol Version 4rev2 (IMAP4rev2) allows a client to access and manipulate electronic mail messages on a server. IMAP4rev2 permits manipulation of mailboxes (remote message folders) in a way that is functionally equivalent to local folders. IMAP4rev2 also provides the capability for an offline client to resynchronize with the server.</t>
              <t>IMAP4rev2 includes operations for creating, deleting, and renaming mailboxes; checking for new messages; removing messages permanently; setting and clearing flags; parsing per RFCs 5322, 2045, and 2231; searching; and selective fetching of message attributes, texts, and portions thereof. Messages in IMAP4rev2 are accessed by the use of numbers. These numbers are either message sequence numbers or unique identifiers.</t>
              <t>IMAP4rev2 does not specify a means of posting mail; this function is handled by a mail submission protocol such as the one specified in RFC 6409.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9051"/>
          <seriesInfo name="DOI" value="10.17487/RFC9051"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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>
        <reference anchor="RFC9110" target="https://www.rfc-editor.org/info/rfc9110" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9586" target="https://www.rfc-editor.org/info/rfc9586" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9586.xml">
          <front>
            <title>IMAP Extension for Using and Returning Unique Identifiers (UIDs) Only</title>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <author fullname="A. P. Achuthan" initials="A. P." surname="Achuthan"/>
            <author fullname="V. Nagulakonda" initials="V." surname="Nagulakonda"/>
            <author fullname="A. Singh" initials="A." surname="Singh"/>
            <author fullname="L. Alves" initials="L." surname="Alves"/>
            <date month="May" year="2024"/>
            <abstract>
              <t>The UIDONLY extension to the Internet Message Access Protocol (RFCs 3501 and 9051) allows clients to enable a mode in which information about mailbox changes is returned using only Unique Identifiers (UIDs). Message numbers are not returned in responses and cannot be used in requests once this extension is enabled. This helps both clients and servers to reduce resource usage required to maintain a map between message numbers and UIDs.</t>
              <t>This document defines an experimental IMAP extension.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9586"/>
          <seriesInfo name="DOI" value="10.17487/RFC9586"/>
        </reference>
        <reference anchor="SEC_1" target="https://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC7515" target="https://www.rfc-editor.org/info/rfc7515" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7515.xml">
          <front>
            <title>JSON Web Signature (JWS)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Signature (JWS) represents content secured with digital signatures or Message Authentication Codes (MACs) using JSON-based data structures. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and an IANA registry defined by that specification. Related encryption capabilities are described in the separate JSON Web Encryption (JWE) specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7515"/>
          <seriesInfo name="DOI" value="10.17487/RFC7515"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC2177" target="https://www.rfc-editor.org/info/rfc2177" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2177.xml">
          <front>
            <title>IMAP4 IDLE command</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="June" year="1997"/>
            <abstract>
              <t>This document specifies the syntax of an IDLE command, which will allow a client to tell the server that it's ready to accept such real-time updates. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2177"/>
          <seriesInfo name="DOI" value="10.17487/RFC2177"/>
        </reference>
        <reference anchor="RFC8620" target="https://www.rfc-editor.org/info/rfc8620" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8620.xml">
          <front>
            <title>The JSON Meta Application Protocol (JMAP)</title>
            <author fullname="N. Jenkins" initials="N." surname="Jenkins"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2019"/>
            <abstract>
              <t>This document specifies a protocol for clients to efficiently query, fetch, and modify JSON-based data objects, with support for push notification of changes and fast resynchronisation and for out-of- band binary data upload/download.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8620"/>
          <seriesInfo name="DOI" value="10.17487/RFC8620"/>
        </reference>
        <reference anchor="RFC5465" target="https://www.rfc-editor.org/info/rfc5465" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5465.xml">
          <front>
            <title>The IMAP NOTIFY Extension</title>
            <author fullname="A. Gulbrandsen" initials="A." surname="Gulbrandsen"/>
            <author fullname="C. King" initials="C." surname="King"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="February" year="2009"/>
            <abstract>
              <t>This document defines an IMAP extension that allows a client to request specific kinds of unsolicited notifications for specified mailboxes, such as messages being added to or deleted from such mailboxes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5465"/>
          <seriesInfo name="DOI" value="10.17487/RFC5465"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+092XbbxpLv/Ioe+uFSOQRNUhS13Nh3qC1moi1aHDuxT9QE
mhQiEKCxSKbv8b/Mt8yXTVX1gsZCycrEuZk51ycnBoFeqmuv6uq24ziNZ8+e
NZ6xcZiKOBSpsx/zacqOeXzrRfchuxTzRcBT0cBG5yLkc8HSGz9hUz8QbBpH
c+ZhDyeNvMhZRlmMTZxFHKWRGwWducfSiM1EypKUx6nwOjCOnIPGmkbxnKcM
BmzKcb7VY7x0vr2P4ttZHGULeKZXMFyzQ6AcRjHzQz/1ecASkWaLNoOOLAqD
JQuFoFmF56cALEzix0nKJkHk3rJoCj9F4CUIyCk2b6Z+GogmdUuw30Qw94aH
M+H9nXkiEKlgTT6ZxOKuyfwpzhMz6oNgJzdRnOJYo3DJIpgtZm4EyAxT5vIQ
x0IwhNdmkyyloXksplnAwijFyfwwjSMvc6FdHEcxgXURIWYISnbvBwF2g0Uy
nqURYMt3eQBwe1nshzO5eoQL5l4yGJxloQJfomo/Cv8GGA7dIPNgJU6322SA
vaaDdE1SWFOosBQQfRGCIz4RQWK+AJHYF5BHjSiBSIAIkyWMhSOkURQQbmHt
gCF4wLduFseIqDsRJ34U/h3WAgB6kYujNXFaJj5yYEAhV3KJjJcqjsQZEnYb
8zkyqhNP3R12k6aLZOf585mf3mSTjhvNn7t8Ej23W8E4b4FTkDixgJFcQbAA
HH4skaCIzBYSWM48fwoPCKlkV8TQHqHYIA4ABZrjKnBx0Ma9MagD/m51Ps4D
WtCb46M2E6nb6XTWcFEgfcRLO6x5Ce3Hx6Mz9tPB7tnVxat8zGbDhRXPoni5
AzSZRg1/Ee+wNM6StN/tbnf7jYbC2o6i0yzKZiIKHX/OF869mCyy5MaBdkk2
mfsJjpkuFwJH88RCwP/CtNEA/gJu3mkwp8HgD3BpIMe88OewsO/kmPRNzLkf
QHeRTv8zUZN1pnGjEdKC/TsBw7Dzw73BYDhUjxv99YF63OwN++pxq7ve1Y/9
7X7+2FOP290N/bjV29QjbPd6utv2xhZNcXGwx6glY6BrQOfkDHF/f99JhDvr
RPHsOTz0nLt+Z+FNZWOFf9mfHQSBvwAhY3tZfCfYXrxcpNEs5oubZVNBv9Hb
2Gk0kBLFxfZ7m5sa1GFfw7cxGGJzx3EYnyRpzF3ANfEyEC2bI195YuqHwM68
SnvUWMhJWkOzY5EkHFhv5LrwxM6UqmUt5J01aAv8thDx3E8TyU6JiFHCkDET
IDX7SUzOgB1QA/lTUCYpzAJ6hwCc+54XiIa0CKSY8Gujofu0JKQo2uyf/1Tk
+/y5rX4A1T5/Zhwm0b/7nz+vWcu750sSA75YBHpqBAz0LKAxBpHkgZP6oP/E
HSCGVBBn+AI03pQnN9ChDUoxvWGL6hpYdV0MdGV0n6BSTqLA9+AtKE14WTcV
AMJZAg0CVLgkJuz+xgdZBlpkMaxgHoGSEFMY3ke6gQ5C+gBZUBnSwmPu+ajn
ElCUQKAOaC2llxdgAH03C3gMayH9CIubRxNSH+GdH0chMkP9MuaAOB4kZJ2o
L2JR2hsEwuUAb9tWmdo+IO/MfeDfVCknDuDeK6Zo0+f8N00DOiJxY38itJ6O
Ak9/l+ZRggZA3N8IoE8oMYjmMBZuFHtoehrHPFzmsLEbDsIUSMvMpY1GaCtU
INqSeuko9s0WC7Cx9a1veAIAIRCeh/BgZ5KW/aMDoPl8jiRpETOicBpORaWC
nImfsf3J6eX48K0ldbIPii40IyLiSuSAuMwPmU9WjrgJ5S3xE2n1ozAUJDX4
lnHXjTJ4jROhYwB4zVLCbIbtUJbjpeYjhMQTdz7YJGIjwOL3iAIJDKoUhBnX
DPy1iEJPopMcMsLoZKnRhXBpoSU3DceeiJkfhvCpgwoITBrgVLRl/3zpv0t5
gEWMQqSJFDpouY9C79PvRmMcar4ELm3u7TSpSfNiB90PD8cB5iAdkSASYR3k
IAQkZdhU8ysuHNF7Bwqhw5oIizVGkg/i6UEU5xJrcKk15lKFtiUQOMbL6hik
SLXcauok6LTaY2Az6SWBu3DnR5ns3mFHNAjAgZQAQW++e9ek4XxU5HG2SJUE
QD9cs5RPYPAEENaW3tx9lIHogb3IyOMDyfstIu2rBDMEoqnpTqJUSJAFB30l
NQN+0p5fIh0xpG0oleDe+dEhUO4qQTadAQhtlGCt4AFkS8Ezjtpb8SbRI5qm
97gcmtOXo4P0+wsiGaDLxhLotDFaOalXQGxFLH0nlHNFZsmT7JbWHYOQNY+v
Li6bbfk3Sig+nx/8eDU+P9jH54tXo6Mj89BQLS5enV4d7edPec+90+Pjg5N9
2RnessKrRvN49LapeOL07HJ8ejI6Ut6xbatp0aQGiZJAPqQkTxp6eYS73b2z
//6v3gBw+B+ke3rbgET5A70Y+IG6U85GUYv8iWRvgHEUPCbTB3bK5Qs/BdXf
RhpAuAFRGaIP0PXNL4iZ9zvs24m76A1eqhe44MJLjbPCS8JZ9U2ls0Rizaua
aQw2C+9LmC7CO3pb+K3xbr389h/Exk5v6x8vGw3UNKcgz3e+uFdeVK65wAgk
bMOo6R323cHl69HZeL+t/ao2G+39YJ6PtLeFVLgY658d0097DyqGtdSJ/LzI
JuDGIM+aGUhTGgsqjS2Jgnq5SMmFycHADmAZIEiVStpux4yPic/oxUDE5KYW
5NA5AMtjYim7d1JaF4GGUR7KcHEe8snYDNRqSN5Whx3AKpf0DB+0sgMQpKEl
I47CO4k+SifCshakfpOSstU6KwYbBJYyhkHoMzRdgFJLlREZnY12x0fjy7ds
jEGJsTFgQgrmCLWO9gxK9otkwMS7au0mzLVm0P6BNKaJkBBIm7OneAhePcvZ
Qb1VjKf7wyOJML8DhPAJRpAhBus3uAA0KR4G3IkIgHTwnICux7lG8Yw0SrLT
2AF7GoLbfa4goVdabMFTSPkM4nkDqAxydiQTUq8sSLHL6Q8qdttBtcHBtfTT
JcK5wDSGBy12R/umCdcAALx3HJxjqYHNanP8fMggrpc6vsz42jlRrr62k0Sn
ji0xRBYyzMbHNguTg+rlgW5Fx0QaLNkAFmaoJPMA8J/KMSj7ofILBKrmPc1c
LCLi+7ESRQkRjAj+GNFEe1FkjxTwjcaBdFkgeCOM7QHKegY99Opih32joH9H
L/DP7mno/7j98dXu2cnb7Vn440+DyOkN7159OJ0MuouD8bE/XV55h8nH0WyZ
9/r0+vbweJZ9vO/+GHuTn90PWzfnv530Py3EODy/++H1WXD7abR7l12GYz01
QAOIseml6Excq6X+6zAta7ngrKTiebaAoEqsIfsVVApgaKdIBfh9sLf/ymIe
eGNNib0gOAeDWphH5uBWTHAyPrLEhrXAuSHvsNCU+q6UIoWnikzpIVcNqG3V
00eukVbEJUX7scw54rMttyen1bZToBxEpSjrmOKT9GAq21PElQ6MQLiM1Je0
gWaMLLwN0clAi1CvIDRj6R5yYnBQJCskZhFCy2HF1qBoq9AIfFeMPyt2Sw7m
lb60pB8Pbi94yijXwk7PYc50DT00xIeiG0wBMl21rIm2unbcaJlltTrllpY4
j9RP6IOyqUR5vrJbyuOurL/DLlRUwCuYlIvDWAlsJGV3S9NqDNvp0z9s8GmE
3g5+AaUKgqWImFSQBzgZT+0IDdSo0HkcSfYq98HMmrVKE7dtMwHSn8XIAnWq
38xbJqURe9wXwCCGfhL/6FhSYqFdMUlywhqjpPH3ZWaJaP/wgE+1cqLcQ+0o
aLtnEwB8yBvh3qqNAL1AShVEKeEBQ3o5HijeZDUqgTcg6lDo5NNUxKvxN3r7
BPQRgh7q8ST81MN/j3GqIX3L7wAipXrydK4nzOX+OXeRIQPhwehrOkVgkGRi
W9qrsSQub9HyMiGdYfxFqEbz0JYTFUAj3piIKm/mRlmGg1wDaIM3Nwk2yjxJ
D1yNU0UDn3HfklKtSkE4NDJWClCF4qyVKn9LZQ4LcUxBE5P+JfkzKlnp+hxj
JmOn+HKtKpHSSQxtZWyYwk7j2DmoNngZLqbqbW0uY688RDNpk3vjk0g5U1JE
m22UqNTpLl5jEfBjKxbO2kr8FwZFEiZGLktot5kBM0m3iQZypRwpg1T0bzVz
Yc+r87HkXJNgKYRlhbwMzJb70zr1wxMzDiWosINOaJfyQqozNiUQMJGJfZu0
89JkCWiluQa55PzprFFmElD2R+mxszOnvzFEwbsTlEPSCwVqR55MtUhsobME
QKrU+ByApP2cz59ZK1H52H5nvbPepm0/5eFSZvTNdmfYX5OyN+GJGA6yODAT
8IQVEju0eNwBMovXkQhuOUserNmbsIyrtVWiEFPrA+O4vSGLASwAcrJMVRZN
Y+BfA6piapUCioUO5wvhVcHbo+QzphGQseHvNgv8W0rg6/yCZceoSgA8SR/9
T09uOGCYhoag4AhSE9xZULu3Sg7uKTc+j+6EB66QDQfubEyE/qjl0Q4HjWby
aU/DD3HPSGX1Kfxpk3cxrchVrtIkpIqvOJDIvc0WGnM6IPd1cvkes6AixODL
U1sJOPTByWjX2r1QgkyYUtF1WSFhSpInSeT6vKD/ijrpJzJJyj0saIF2UeMY
5YDjyvwT2U8X93YISlRRUVJcU4eKMlSWvy3XhY0xbzOIxV0fsXd1ebj1YrS3
d3B2CZ1RW6gkkkhMUhUbOVtSHs0oe6cn+xeXp+cHslvCjk/3Lw5+VJ1MUupq
vH94cLmXa8ukEMbnUbzJiX1TDKaPLNyq4Et36hu8863+Vn8y3XaGvW7fGYje
xJlMhj3H6w+9rthY74vhhpUP0LvQiPOOrmgIRUovnksB79n5g73XH5N48+RX
cTJ7ff7h7lW63/10+XNy4A6d16+d7++OxMebD1efTs/dj/z0kz90Rm9/enN3
uftqPpj8lo+zPPst2XztbS1+/u7V8OJ8cXuSRuORfz+w57rc/fn4w6tXw3hw
mSab3//KL8azWTm38adlNL75ujjGbIEmdx/JvZra618Hku8/Hf24HvOfv58e
7p53+Ye70+PkKE43BveD+Pur5PW/2eArssGjyLf5Y/1h/hjUqJC/AtiDR7TY
xtNgtIfeeBgjwzqlOlwBDiYoLdf66yXWyzFUGt3iRht59zV7wvpdXexR2FAu
JesfzQHW5/0qqSXfil+Lab9LqqMD4JkXiQQTXJTIURkP8XGBYeHjGX5lDAvx
Y226hlEHOeUjpvOvwPePW2+LpBtbG93NLXfDmU62JgCm13W2xOamM9gc8El3
a9rl691/9eK6RUtVjEO1FGlqljNs5IktVKKgTEAbEZx3B+6060x7G0Nn0B0K
Z2vAp866K2BBg0l/fbJloRjYsR4OkOajry/L5YSlrAOLksSfEA4Cz+Ux7tn9
EaIpt1XrU/D0rZR+p3c6+S7roMop9hX59KOyP5/nQHHFgsop6tL6SV7aowFl
qjlWDpRy6gbxuvxWll2wn0UcIe6ptm1l2kFGAxIyLGfGYibuh7K6Jd+kxpJm
nQD3KkGILIerS7/aYY1RuHqnAITHTasp+Km9jUBRWJ0io+zVeD+PnXX+MQjs
/n9LSvjSwyuayQSY5jHW/Kb5xZHFH6RBdMYqDTzj0NZoqS1QXpPBdt+ZuNuu
MxjybWe7xyfOxtZwOOlvdjfXJ5MnzNG3tWw+S39r2B+KgXDWN72eM9gYug4f
Djedjf7G1mRjow8KdusJs6yzXq/Xf4IyP3oKSv9MQkhtvcLjsWox/jQtCW+8
LC//1AUgxTSuT1mnKPRAQk2K7UPGA5zuxp/dUIYHDEwXleQ5a6ry2KY9ZDUN
nbAgwr0otWGVl0aiMGHFb6ekq798T/WBfVSxSm3XZWAti6lz4L97Y9Qir0nN
qAKiwlZNXoRTvzvKDcVIa6nUVZbQwRFsoCsekmXo3sRR6H9CPZznfVTJIyZ8
qJAQzJGg5H5d4hy7RVmKdY6Ug/JTM6tVcVyeulCBw/HYBm2TeGAFs3jSxG1R
P/JU1okKWzUTAtK77fq9UeP+CrmFYepzTREnmjV03VX9r7QQflLentxTUOJ+
Ew9DUPCSP/243om4tkhnN3B8T1eCX7dVLbhKQFlgpXLtat9iWUXyl0iCztCi
LxGLqZJwwEHFEnfYqLgDN6W0u+Kr1JhNXcI+l9toIL24SVOTndWFrTlYgMJC
Nk8WemsWVuyU1POTL3lnpVbQ4BmGaBHLB36KZ6oCAFqdYvAp77pMNFx54atc
/U69AbZI+UVqvvdHu/p19iGfRBq3oqqomLenrkGR+s9dSH/lQvAQm2RQo93J
/sk0kn4nlWZp1zdy3SxOZL1xTCqe3NlKVRrpKO0oP1CYWaxPy/dB+P/BzabC
xjvKvH02Ddex4KDg6BAIFoHrApuymPypGT27Eq1I+Iq7v4r0ZaMqaQMomOQB
SbWXqfIl7VJjmtMoopFUJFMtczGlKaVawupWrqTnij1eadDUNrdUip5lDY3n
1WYiACyEflBPsa/ou5JvenB0sHdZopF6aUjkqwMaq7bhS4cu6IArSQg8Seup
9nuoVb7RqMy5Ph5acnvKVZ652yPyMmQUYoQHZW4GIRoaEphTHeIw+/40UQXB
dI4EcKzWOz7ZPX1TzlEWMVOXIHwidpRRrS3Yw5hAlWoA/+oCjpbs8nDNxVru
CNYJjmF3rveWKUOkdintV3qXl+rYr67G+3cD1dZKRuZtZL4QtU+vy+Z+mKW0
+5Y3lfv9cg+yaMkfKsAr7AUXSi6QnhZySi5gPYGfmgQkyXh7sleWC3z1v6S7
6S5d6Rs67DOR2gaWIz66QqVQ1re312UFAHhJc+Wfk2trnwgkDTgTITjerlJZ
d5TgGaf2xr8WSCsiUc6WIqUqfLGqXUDJxr64E6qAP6/AAhYkdNPxpIIelWfu
8SCP1pc5tkJGRdo6vHmwqs0T8sgSncpGh9AS/XK8A7wAWC+7rj4aA2unHjzN
iJT4NOCzpG1CDMrfWUgnTBeKk/SxBiI+8vnh0ei7i5zVMIxOUsFpyWqj/SH9
oj+8hA80FGu9G4XJPR2OeHcYyAD4nbwu4d0+lVbC7wssNfjlNZZPUEyRq3pa
gl4Z63Q679dU9aq1gC+FiFZJYNGhm+qpv0bjlILYsJCCQ52kk4lVtdayjn8Q
+UrCvlaL8MIGjXFvCgNb5SRcXd9QOI8q/T7FaqZFqRSZtewDtEpMqYgMeJCH
yJKIEHMMZg1XqsfICxla2AV/tk0tN57NBaKoeZM1pRcLSgJ3cUwNW20NDsOz
jzkB1C5Wuak6sIdCTAf6QVQUsi1PuFNgDNQlJoJNInO+loI5I4JJ0YQLWaet
TLfMDgfijqPKKUigRVG06e5NhLUj6gKMajQP2vVsdKxn6ZAK3pN3ahSARmJS
bytFnVL8bZ9gMmoHgKOz+oWzS8bFX2BM60kNxCtuj5XstkhNV5hU/HICaQ5u
qI9MlMPmWyWvFQuBObxEpvPI4CmSt5U2FHh3ysfUXC2ij1cW67b04T9cD2oG
nbPLzQfo20J98D1XHlXVKPAJ5oQsK2WPiBaDeMMsWGlFJaSwHJP3MXXdJmdA
4qGP4GoWUGkRvTxCs27jp4XTQ5Uin7YMnMzB1V/UrRDvO4wYptJBmzpFV1lg
RaVXrw+OTs8OcquwOz4Znb9Vxmfqp+ZSFK2OwJ+fgWiRtUgo2Hh07OpgsjdQ
p2I/bLxUaq8JH9eE+IM344vLi2ucn15cl/1k5R1ryhTO9MmqfS8nBqfLPxwS
y1X1uRBBnowvXh3sP0gGvOnjvfFXCgCfXZ18d2BDnDtEtaBr6wpLuIjatnqW
p4hBbSFCaywI2aRpMeTAGzlyxmhp6iiCr9V+LL6Fp7V8B5ZizqrnZ2mOGp2g
FV6TzG8zP1EpjwVLA9XE8zHq1o+kqQ+jPWq/+90irPBirdDA0K/XXi9afjlk
cd76roPGoxgo04nHMekBxfo0i644NBiod1IegGi9jpa5Z9RqHmOUvskOxYT1
trcHrN/b2ejv9DeY093qdlnr7OJyrWn1aFIhfBhh/lQIPC9jf221mofowxxG
0YTHTTot05yqH83dIIu95SSIooXe+G+urf2FumMH6jSPIvcG+kT3POWzrJP4
fN4RXlbfUXejrt/u9jfXtzedbq+Lf/6zZtqX0P338ke7nPv3cZB5adtDHZpT
CgK3zp7k3kqtKXNU6mKLG9AwIgbn9qxQJ6+UOh0OGHYHyDJaeK8vL4+uVT/W
wnhe3KKDVxxAxYYrTRGNfI1bbdf5yFcxxHPuUo/eLhXv650b9HnKLkthWFB5
q0dFdUst2uraiMXKlV/T9U7B9aqh6led6zs5PrkQeahKlMjvFDCGkwNmo4Xv
WoM/U3GItl2LOMIrVEA4G41dIQuK5d0+ekaZC5IH4rT3nKtZfdlIjTNFN39o
p1AR71oi+dqyeJbHhAYO99BEtZ3e1cXDktL7LZm4UihbcqD1Rl5l/+XaZu9r
cpQKh7WV6CC5CsmvyyLUlEaQoBOcFAFIWqkuRXjMRhC687JftfAasBshQOim
ez5eW4Aj30T3KMlRnHKsqcgrRxKdhKfjIHS1xpS74F6PMCR5IOqX3lTuXoYS
8NJxmQqNKIGEm160YnS48rBHpoYvIol4GH0mMMJh1z+cnP508isw6a/j47PT
88vRySpmwFX7sxCjYMwi4MZpLeHNqXOMJ8pLs65woqte5J4qMHBJAT4QzOkF
qRQPHWlA/UYtDCFKSNJxRIy3bomPbpAldOGOUbRFUcElpbjjl69LHyJaym1k
UukMVRUgmpJ5Ur2ra7+WattzluHR3VRgvH5A0kqJJb9w1tRsviqvONGuXelI
Q35WQ3UE7CG3JfIiLrw4coUZaRXzyypmU0RaK8q8LCiSqNGsNxcY5vvJXJ1O
QF+6iJ2KPK2irJ0Et/RffoGBykmaaKt4v4EuI7se9LfZZYQ3E4ZLoyKkwlCJ
R9LvyrO/PhdpvHRG6AFp7Zuoi7N6PcwuUMio7m1CkaZElMW5mAnClD/3U32O
Uwc0uYASFCok9RNtjeBJXYlUjTyk9y4XShjToyBKq+MgjxfGsk/tKItDIG7o
fPUjwJp7Isw+ymOoV/0Hb95QdJ/hZrYnqtAoRsLDSbXnrR8h8MZj4//+1Qp7
sc+sk5z6tCuEY/bWq/1Js29+0xlud6GipUvh6tIEdCpUogDPKetoWZ5Kpvyt
vPfQupvOzFtgGDubrXcLKpvDhSO/doa6trIhP6NVmDZPI6p82wqlfCvE4sEx
CDMyeYXZoEgWjlTb+qbuiFPYThf0FYs9zanSvAYy719zFPnhjE15S4aKlEJr
lkIuloxNfjOfdcY6t3Cr6UbA5ZBVt1Stg/aLYGmVPtcfI+fyMPHq87R2Ao/2
p/IkR2lHqnwKGVlKbW3Vcgxm9YBrF1q86o4igPXPklSefNMkzR2+As3VielO
KaTSRydXXvwgS8qKOCzzR4kif4GK1n+fx/v/exDrCefxGvK2b4g62cUSZPij
VKv5pkdCb4tbI7mTOMpmKGvA6Lt4GDdxTngW04CsNdo9OVxDgTU1emqQPH2J
dxa/B4E7iUJH3Z0YqDIFWceBt3pT3aO+F1eggyIP5DLrstxf1KWj70kf/aJu
RsahrYu6XjzP7yuDD1J8HbQq+AmCkDu+8D323JQMPEedkv8I8sfE1z8aDdPx
BWvqMioYXzd+YV2SdnHGWtzzzJXR0SKFwcBNt9+sNRrWtNA9V5E0Qv7RIRXX
aARW46PCZLhl6ZiTGwh4sfoS5sqXgt3zQh4aoFysiWOa2prneZ0ywlxa14u6
zqbKB57BT0DNiysCEjQaJTTUDxD6QaOhDYWz4Msg4h6Sj0jg4JecgPqnhTH1
BuMAem40rI6wfkm9HDxDR9PiEfTYK7RRBYAjsqm03Iwl8ws0lIp/bNqbZo8y
gFkODfr2ZK/JfoGGBk9ULuBgucD7RoM66r2gF6z3Tcu0A+vI1yz85v2g4btv
K3iXlz/JYoSLs3cvG40yRl4wnkbzxt/ZHl4mkOAdglQD3jB4eqFuswBt1mS4
DVfTWLHKC7a12TJlfQ6EgfGavFcdPvX71U8G/y9YmM0neKywjLwcQlWCo7a1
53O8tx0UZHFQaD46Ons1Aoruj78bX6IQ/NrE/zvNGsCxUNPNYtQ+eyo3oHf3
Uc0uIHDn7lJdwasauoWG6ITYG88P3AROuTm8+ntpbjnRFx/bNzh28vvGATMe
uKFhGoNrRGkF++Jwu0KMKjv2908vGNoay2mfLM2dk4VdGFUrIK+K1362Jnob
ZzZN81sngRzk4C31LeJW9UDSYed0O4/ZtjNVLJbnR9s61Sx466EKKPuSyjU2
w7qwAFeF/25EIpEX+8ktxWfj0cmoQkozYG5r9L+SMbGv5FS3wOO9FY3/AVyE
IkgdZAAA

-->

</rfc>
