<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mls-targeted-messages-00" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>Messaging Layer Security (MLS) Targeted Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mls-targeted-messages-00"/>
    <author fullname="Raphael Robert">
      <organization>Phoenix R&amp;D GmbH</organization>
      <address>
        <email>ietf@raphaelrobert.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>Security</area>
    <workgroup>Messaging Layer Security</workgroup>
    <keyword>MLS</keyword>
    <abstract>
      <?line 33?>

<t>This document defines targeted messages for the Messaging Layer Security
(MLS) protocol. A targeted message allows a member of an MLS group to
send an encrypted and authenticated message to another member of the same
group without creating a new group. The mechanism reuses Hybrid Public Key
Encryption (HPKE) and the MLS key schedule to provide confidentiality,
authentication, and binding to the group state.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://raphaelrobert.github.io/mls-targeted-messages/draft-robert-mls-targeted-messages.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-mls-targeted-messages/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Messaging Layer Security Working Group mailing list (<eref target="mailto:mls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/raphaelrobert/mls-targeted-messages"/>.</t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>MLS application messages make sending encrypted messages to all group members
easy and efficient. Sometimes application protocols require that a group member
sends a message only to specific members of the same group, either for privacy
or for efficiency reasons.</t>
      <t>Targeted messages are a way to achieve this without having to create a new group
with the sender and the specific recipients, which might not be possible or
desired. Instead, this document defines the format and encryption of a message
that is sent from a member of an existing group to another member of that group.</t>
      <t>The goal is to provide a one-shot messaging mechanism offering confidentiality
and authentication, reusing mechanisms from <xref target="RFC9420"/> and <xref target="RFC9180"/>.
Targeted messages can be used as a building block for more complex messaging
protocols.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions 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?>

</section>
    <section anchor="format">
      <name>Format</name>
      <t>This document defines the <tt>mls_targeted_message</tt> WireFormat, where the content
is a <tt>TargetedMessage</tt>.</t>
      <t>A <tt>TargetedMessage</tt> is carried in the <tt>MLSMessage</tt> envelope defined in
<xref section="6" sectionFormat="of" target="RFC9420"/>:</t>
      <sourcecode type="tls"><![CDATA[
case mls_targeted_message:
    TargetedMessage targeted_message;
]]></sourcecode>
      <sourcecode type="tls"><![CDATA[
struct {
  opaque group_id<V>;
  uint64 epoch;
  uint32 recipient_leaf_index;
  opaque authenticated_data<V>;
  opaque encrypted_sender_auth_data<V>;
  opaque ciphertext<V>;
} TargetedMessage;

struct {
  uint32 sender_leaf_index;
  opaque signature<V>;
  opaque kem_output<V>;
} TargetedMessageSenderAuthData;

struct {
  opaque group_id<V>;
  uint64 epoch;
  uint32 recipient_leaf_index;
  opaque authenticated_data<V>;
  TargetedMessageSenderAuthData sender_auth_data;
} TargetedMessageTBM;

struct {
  ProtocolVersion version = mls10;
  WireFormat wire_format = mls_targeted_message;
  opaque group_id<V>;
  uint64 epoch;
  uint32 recipient_leaf_index;
  opaque authenticated_data<V>;
  uint32 sender_leaf_index;
  opaque kem_output<V>;
} TargetedMessageTBS;

struct {
  opaque group_id<V>;
  uint64 epoch;
  opaque label<V> = "MLS 1.0 targeted message psk";
} PSKId;

struct {
  opaque application_data<V>;
  opaque padding[length_of_padding];
} TargetedMessageContent;
]]></sourcecode>
    </section>
    <section anchor="authentication">
      <name>Authentication</name>
      <t>A targeted message is authenticated by the sender's signature. The sender uses
the signature key of its <tt>LeafNode</tt>. The signature scheme is determined by the
cipher suite of the MLS group. The signature
is computed over the serialized <tt>TargetedMessageTBS</tt> struct and is included in
the <tt>TargetedMessageSenderAuthData.signature</tt> field:</t>
      <sourcecode type="tls"><![CDATA[
signature = SignWithLabel(sender_leaf_node_signature_private_key,
              "TargetedMessageTBS", targeted_message_tbs)
]]></sourcecode>
      <t>The recipient <bcp14>MUST</bcp14> verify the signature:</t>
      <sourcecode type="tls"><![CDATA[
VerifyWithLabel(sender_leaf_node.signature_key,
                "TargetedMessageTBS",
                targeted_message_tbs,
                signature)
]]></sourcecode>
      <t>In addition, targeted messages are authenticated using a pre-shared key (PSK),
exported through the MLS exporter for the epoch specified in the
<tt>TargetedMessage</tt>:</t>
      <sourcecode type="tls"><![CDATA[
targeted_message_psk =
  MLS-Exporter("targeted message", "psk", KDF.Nh)
]]></sourcecode>
      <t>The <tt>targeted_message_psk</tt> is used as the <tt>psk</tt> parameter in the Hybrid
Public Key Encryption (HPKE) encryption.
The corresponding <tt>psk_id</tt> parameter is the serialized <tt>PSKId</tt> struct.</t>
      <section anchor="additional-authenticated-data-aad">
        <name>Additional Authenticated Data (AAD)</name>
        <t>Targeted messages can include additional authenticated data (AAD) in the
<tt>TargetedMessage.authenticated_data</tt> field. This field is used to carry
application-specific data that is authenticated but not encrypted. The AAD is
included in the <tt>TargetedMessageTBM</tt> struct.</t>
      </section>
    </section>
    <section anchor="encryption">
      <name>Encryption</name>
      <t>Targeted messages use HPKE to encrypt the message content to a specific group
member.</t>
      <t>Unlike the HPKE Base mode used in <xref target="RFC9420"/>, targeted messages use HPKE PSK
mode (<xref section="5.1.3" sectionFormat="of" target="RFC9180"/>). The PSK is derived from the MLS group key
schedule, binding the encryption to the group state and providing authentication
that the sender holds the group's PSK.</t>
      <section anchor="padding">
        <name>Padding</name>
        <t>The TargetedMessageContent.padding field is set by the sender, by first encoding
the application data and then appending the chosen number of zero bytes. A
receiver identifies the padding field in a plaintext decoded from
TargetedMessage.ciphertext by first decoding the application data; then the
padding field comprises any remaining octets of plaintext. The padding field
<bcp14>MUST</bcp14> be filled with all zero bytes. A receiver <bcp14>MUST</bcp14> verify that there are no
non-zero bytes in the padding field, and if this check fails, the enclosing
TargetedMessage <bcp14>MUST</bcp14> be rejected as malformed. This check ensures that the
padding process is deterministic, so that, for example, padding cannot be used
as a covert channel.</t>
      </section>
      <section anchor="application-data-encryption">
        <name>Application Data Encryption</name>
        <t>The <tt>TargetedMessageContent</tt> struct is serialized and encrypted using HPKE.</t>
        <t>The HPKE context is a <tt>TargetedMessageContext</tt> struct with the
following content, where <tt>group_context</tt> is the serialized context of the MLS
group:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque label<V>;
  opaque context<V>;
} TargetedMessageContext;

label = "MLS 1.0 TargetedMessageData"
context = group_context
]]></sourcecode>
        <t>The <tt>TargetedMessageContext</tt> struct follows the same structure as <tt>EncryptContext</tt>
in <xref section="5.1.3" sectionFormat="of" target="RFC9420"/>, but uses PSK mode rather than Base mode.</t>
        <t>The <tt>TargetedMessageContext</tt> struct is serialized as <tt>hpke_context</tt> and is used
by both the sender and the recipient. The recipient's leaf node HPKE encryption
key from the MLS group is used as the recipient's public key
<tt>recipient_node_public_key</tt> for the HPKE encryption.</t>
        <t>The <tt>TargetedMessageTBM</tt> struct is serialized as <tt>targeted_message_tbm</tt>, and is
used as the <tt>aad</tt> parameter for the HPKE encryption.</t>
        <t>The sender computes <tt>TargetedMessageSenderAuthData.kem_output</tt> and
<tt>TargetedMessage.ciphertext</tt>:</t>
        <sourcecode type="tls"><![CDATA[
(kem_output, ciphertext) = SealPSK(
                                        /* pkR */
                                        recipient_node_public_key,
                                        /* info */
                                        hpke_context,
                                        /* aad */
                                        targeted_message_tbm,
                                        /* pt */
                                        targeted_message_content,
                                        /* psk */
                                        targeted_message_psk,
                                        /* psk_id */
                                        psk_id)
]]></sourcecode>
        <t>The recipient decrypts the content as follows:</t>
        <sourcecode type="tls"><![CDATA[
targeted_message_content = OpenPSK(kem_output,
                  recipient_node_private_key,
                  hpke_context,
                  targeted_message_tbm,
                  ciphertext,
                  targeted_message_psk,
                  psk_id)
]]></sourcecode>
        <t>The functions <tt>SealPSK</tt> and <tt>OpenPSK</tt> are defined in <xref target="RFC9180"/>.</t>
      </section>
      <section anchor="sender-data-encryption">
        <name>Sender Data Encryption</name>
        <t><tt>TargetedMessageSenderAuthData</tt> is encrypted similarly to <tt>MLSSenderData</tt> as
described in <xref section="6.3.2" sectionFormat="of" target="RFC9420"/>. It contains the sender's leaf
index, the signature over <tt>TargetedMessageTBS</tt>, and the Key Encapsulation
Mechanism (KEM) output of the HPKE encryption.</t>
        <t>The key and nonce provided to the Authenticated Encryption with Associated
Data (AEAD) are computed as the Key Derivation Function (KDF) of the first
KDF.Nh bytes of the <tt>ciphertext</tt> generated in <xref target="application-data-encryption"/>.
If the length of the ciphertext is less than KDF.Nh, the whole ciphertext is
used. In pseudocode, the key and nonce are derived as:</t>
        <sourcecode type="tls"><![CDATA[
sender_auth_data_secret =
  MLS-Exporter("targeted message", "sender auth data secret", KDF.Nh)

ciphertext_sample = ciphertext[0..KDF.Nh-1]

sender_auth_data_key = ExpandWithLabel(sender_auth_data_secret,
                           "key", ciphertext_sample, AEAD.Nk)
sender_auth_data_nonce = ExpandWithLabel(sender_auth_data_secret,
                             "nonce", ciphertext_sample, AEAD.Nn)
]]></sourcecode>
        <t>The Additional Authenticated Data (AAD) for the <tt>encrypted_sender_auth_data</tt>
ciphertext is the first three fields of <tt>TargetedMessage</tt>:</t>
        <sourcecode type="tls"><![CDATA[
struct {
  opaque group_id<V>;
  uint64 epoch;
  uint32 recipient_leaf_index;
} SenderAuthDataAAD;
]]></sourcecode>
      </section>
    </section>
    <section anchor="recipient-validation">
      <name>Recipient Validation</name>
      <t>Upon receiving a <tt>TargetedMessage</tt>, the recipient <bcp14>MUST</bcp14> perform the following
validation steps:</t>
      <ul spacing="normal">
        <li>
          <t>Verify that <tt>group_id</tt> matches a group the recipient is a member of.</t>
        </li>
        <li>
          <t>Verify that <tt>epoch</tt> corresponds to the current epoch or a past epoch for which
the recipient still has the necessary key material.</t>
        </li>
        <li>
          <t>Verify that <tt>recipient_leaf_index</tt> matches the recipient's own leaf index in
the specified epoch.</t>
        </li>
        <li>
          <t>After decrypting <tt>TargetedMessageSenderAuthData</tt>, verify that
<tt>sender_leaf_index</tt> refers to a non-blank leaf in the ratchet tree of the
specified epoch.</t>
        </li>
        <li>
          <t>Verify the signature as described in <xref target="authentication"/>.</t>
        </li>
      </ul>
      <t>The recipient <bcp14>MUST NOT</bcp14> process or act on the decrypted
<tt>TargetedMessageContent</tt> until all of the above validation steps have
completed successfully. In particular, the content <bcp14>MUST NOT</bcp14> be passed to
the application before the sender's signature has been verified.</t>
      <t>If any of these checks fail, the <tt>TargetedMessage</tt> <bcp14>MUST</bcp14> be rejected.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section describes the security properties of targeted messages and their
limitations relative to MLS application messages <xref target="RFC9420"/>.</t>
      <section anchor="authentication-1">
        <name>Authentication</name>
        <t>Targeted messages use two complementary authentication mechanisms. The sender's
signature (<xref target="authentication"/>) binds the message to the sender's identity:
the recipient verifies the signature against the sender's <tt>LeafNode</tt> signature
key, confirming that the holder of that key produced the message. The PSK
exported from the group key schedule provides a second layer that proves group
membership. Per <xref section="9.1" sectionFormat="of" target="RFC9180"/>, HPKE PSK mode provides outsider
authentication, ensuring that an entity that does not know the PSK cannot forge
a valid ciphertext. It does not, however, authenticate which PSK holder
produced the message. Sender identity relies entirely on the signature.</t>
        <t>Because the PSK is derived from the MLS key schedule, it is only valid for a
specific group and epoch. The Forward Secrecy and Post-Compromise Security
guarantees of the group key schedule therefore extend to targeted messages. The
PSK also ensures that an attacker needs access to the private group state in
addition to the HPKE and signature private keys, improving confidentiality
guarantees against passive attackers and authentication guarantees against active
attackers.</t>
      </section>
      <section anchor="signature-verification-before-processing">
        <name>Signature Verification Before Processing</name>
        <t>The decryption flow necessarily produces plaintext before the signature can be
verified: the recipient first decrypts the sender authentication data
(<xref target="sender-data-encryption"/>) to obtain the sender's leaf index, KEM output,
and signature, then decrypts the HPKE ciphertext to obtain the
<tt>TargetedMessageContent</tt>, and finally verifies the signature over the
<tt>TargetedMessageTBS</tt> structure.</t>
        <t>Because the PSK is shared among all group members and each member's HPKE
public key is available in the ratchet tree, any group member can construct
HPKE ciphertext that decrypts successfully while claiming a different sender
identity. The signature is the sole mechanism that binds the message to the
claimed sender. <xref target="recipient-validation"/> requires that the recipient not act on
the decrypted content until signature verification has succeeded.</t>
      </section>
      <section anchor="forward-secrecy">
        <name>Forward Secrecy</name>
        <t>Targeted messages encrypt directly to the recipient's leaf node HPKE encryption
key. Unlike application messages in <xref target="RFC9420"/>, which derive per-message keys
from a secret tree, targeted messages have no per-message key derivation.
Compromising the recipient's leaf private key therefore exposes all targeted
messages encrypted to that key within the epoch. Forward secrecy is at epoch
granularity only: it depends on the key schedule advancing to a new epoch and on
the recipient deleting the previous epoch's leaf private key. Applications that
require stronger forward secrecy guarantees <bcp14>SHOULD</bcp14> advance the epoch frequently.</t>
      </section>
      <section anchor="sender-identity-confidentiality">
        <name>Sender Identity Confidentiality</name>
        <t>The <tt>sender_auth_data_secret</tt> used to encrypt the
<tt>TargetedMessageSenderAuthData</tt> is derived from the MLS exporter
(<xref target="sender-data-encryption"/>) and is available to all group members. Sender
identity is therefore protected from the Delivery Service and from entities
outside the group, but not from other group members who obtain the encrypted
message.</t>
      </section>
      <section anchor="replay-protection">
        <name>Replay Protection</name>
        <t>Targeted messages do not include a generation counter or nonce at the protocol
level. A captured targeted message can therefore be replayed within the same
epoch and will pass all validation checks. However, targeted messages are a
stateless one-shot mechanism: replaying a message causes the recipient to see
duplicate content but does not change any group state. Applications that require
replay detection <bcp14>SHOULD</bcp14> include a unique nonce in the <tt>authenticated_data</tt>
field and track previously seen values.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="mls-wire-formats">
        <name>MLS Wire Formats</name>
        <t>The <tt>mls_targeted_message</tt> MLS Wire Format is used to send a message to a subset
of members of an MLS group.</t>
        <ul spacing="normal">
          <li>
            <t>Value: 0x0006 (suggested)</t>
          </li>
          <li>
            <t>Name: mls_targeted_message</t>
          </li>
          <li>
            <t>Recommended: Y</t>
          </li>
          <li>
            <t>Reference: RFC XXXX</t>
          </li>
        </ul>
      </section>
      <section anchor="mls-signature-labels">
        <name>MLS Signature Labels</name>
        <section anchor="targetedmessagetbs">
          <name>TargetedMessageTBS</name>
          <ul spacing="normal">
            <li>
              <t>Label: "TargetedMessageTBS"</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="mls-exporter-labels">
        <name>MLS Exporter Labels</name>
        <section anchor="targeted-message">
          <name>targeted message</name>
          <ul spacing="normal">
            <li>
              <t>Label: "targeted message"</t>
            </li>
            <li>
              <t>Recommended: Y</t>
            </li>
            <li>
              <t>Reference: RFC XXXX</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC9420">
        <front>
          <title>The Messaging Layer Security (MLS) Protocol</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes"/>
          <author fullname="B. Beurdouche" initials="B." surname="Beurdouche"/>
          <author fullname="R. Robert" initials="R." surname="Robert"/>
          <author fullname="J. Millican" initials="J." surname="Millican"/>
          <author fullname="E. Omara" initials="E." surname="Omara"/>
          <author fullname="K. Cohn-Gordon" initials="K." surname="Cohn-Gordon"/>
          <date month="July" year="2023"/>
          <abstract>
            <t>Messaging applications are increasingly making use of end-to-end security mechanisms to ensure that messages are only accessible to the communicating endpoints, and not to any servers involved in delivering messages. Establishing keys to provide such protections is challenging for group chat settings, in which more than two clients need to agree on a key but may not be online at the same time. In this document, we specify a key establishment protocol that provides efficient asynchronous group key establishment with forward secrecy (FS) and post-compromise security (PCS) for groups in size ranging from two to thousands.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9420"/>
        <seriesInfo name="DOI" value="10.17487/RFC9420"/>
      </reference>
      <reference anchor="RFC9180">
        <front>
          <title>Hybrid Public Key Encryption</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes"/>
          <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
          <author fullname="B. Lipp" initials="B." surname="Lipp"/>
          <author fullname="C. Wood" initials="C." surname="Wood"/>
          <date month="February" year="2022"/>
          <abstract>
            <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
            <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9180"/>
        <seriesInfo name="DOI" value="10.17487/RFC9180"/>
      </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>
    <?line 428?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
    </section>
  </back>
  <!-- ##markdown-source:
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
1Mn1901BIgayean8RRUqGTnzOr04SGLngNTBj6vE5t7+iQejj6QUKSCkipcG
+ildGURL2nnPLGzu2k5R51BwuO9c3eb2gg5emUAHbBtRcE8oPBj8U3gYtte3
vH1q85pWG9sGDK8wbnRW25loRwarNdM19xVivKq9RnMCGZwZIjjnu1DYflv5
Jh31iINbVxhqCrrEp+OQU9/Xbo6UfHfCd7SbW4YW12EABU1DbJQpXcYkGvgS
XoXNerNOiqk8gxENtP1hetRuro99K55bO54I4E6yu94FRmpJ+u3SrU2ULv+M
c5iKDcbrLL+ljeDKtukIvrTSQrETBymdwLWbOQbp3eob7IOHJyX2yh2uxtIV
wxK1dYPTORo1qhh/wZ9bF4GaU2ghnupIkYl+5pAhVMZYJpTL6P4U7wdTkBLt
YxPue1J0JV2/yMtbVcbo3WCHjDbPclNNnmHnO98kwIa/W7uqVakgWjUIesAo
qGdNQQoEiddo0fq7HkjEBe4N75O3m8qgQFVVKroGqWVa4/1NCqHOjWwl2jow
gQznjtbcMLIi3E7jSG4m8GtAXhsyrYHbg8E+ne9hRMZI5Dgz3QvBSHlgHuQY
mCb8NFtLepYov7n5T1luZ5yi/MGNS84wYgnwx0OGJPVebIKjkTBFeDp8Z1G4
vDDrYBJ/RtJ0F4KyINgiwlEBYY/f9iujfRR/vsCqtF+USluUQhkpXeOhpaEx
n8O0+OBOfIN/W+vvTNdc0EI5Dwl7uyuwumsVvVWCuxQ7PdIew6tNjmC2e5OZ
/UzhnVx6ABLAjYimfUvA8wa/IsA7ugO4aEx5O1yVtIjfTxBnoicZindOdiHw
wFiFVSfYyIaxd5zg1VmCo6Qh4eJT9z6LO6TAqrW5eEukdiU6QXQQ+9DSU4j2
3tImDV769Mld3W5OkwKTxPjMCE20EJoHTAzIGk5vQldCJEQS0DHjlwfdUDeE
C9wZdAxMRRV3abrY+t5m/lTa0+hBqNI7iuYUwrEdCx33jQZFKGEvVttink2i
D50QbwI/3em8quKejA/m7gC0t6EgNLYieJHT4SeYt6MsutJyfR2LK7CHY63Z
5hkneGNzDBq+LZPECgImYmHMjJi6ZpjG+NMi41JjK72o+EZlkb01z9flueDi
y8MdRBVrQOFu00Wpb5K8NjxhYOfT8JCRjVK4rwvA58DR+UyjtZsg6Nu7wMyi
bkQAWRtWAX6gBAh7iacOEzzrJCA+pNnRoZj7Cx7BlYkvaUMOYgh3Rej+oG7P
wJp4NfT1hsM6PpbY4GGNCe++8+GyZ+AEsBC47RYmljdJxBcf6C0tABFbWNTX
oI2xv6FCA/mrgnbsvV23cpC3U2e6rIRzDTlzS9dDdbSrUohzIuXv77g2Ifp1
lNd46R1LSdugq6yd8YVTkQJqpE+QIlVgiIr7txMxojciopoLubKXBVwSxQ+J
Giu/xf4BAhJSQVCAcmk3lS8dXt1xtUwQaKL+ZPB5hY3tM8sC54mGTzpwbXsX
fkijtYhrdpqmlkUNeeCN6+JXVz6Z8XdFfV9z6UAwA3SNgIsE61iNFuoswQYW
i91dRRq4ICX4GgeVlyUgMB8DILYbKpRVWmv+GuP0+O1xr7gFO0EvwQvC9q69
/TRjx7X6zuDwOhZ/U9b6bAxS1MLoSgCaDj5ECj9GA87kQ2yj1XomD+8ODw+/
k3umXoEuge4+vnxLH+0NsYNvz6Ew22zQLwH0/cJPKPNH+KXfi2fyv+E/v88G
mFKTlATwYOBSsRAPecRs8J6k6NG9n6xrULeodo03pNnrY38xRfyWbQGWQLeH
IywKUx2vsAVgxMcZ31HS8ZPREgoTPfok/g9QVcA+gzsAAA==

-->

</rfc>
