<?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.31 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tls-pake-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="TLS 1.3 PAKE">A Password Authenticated Key Exchange Extension for TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tls-pake-01"/>
    <author initials="L." surname="Bauman" fullname="Laura Bauman">
      <organization>Apple, Inc.</organization>
      <address>
        <email>l_bauman@apple.com</email>
      </address>
    </author>
    <author initials="D." surname="Benjamin" fullname="David Benjamin">
      <organization>Google LLC</organization>
      <address>
        <email>davidben@google.com</email>
      </address>
    </author>
    <author initials="S." surname="Menon" fullname="Samir Menon">
      <organization>Apple, Inc.</organization>
      <address>
        <email>samir_menon@apple.com</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Apple, Inc.</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>Security</area>
    <workgroup>Transport Layer Security</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 43?>

<t>The pre-shared key mechanism available in TLS 1.3 is not suitable
for usage with low-entropy keys, such as passwords entered by users.
This document describes an extension that enables the use of
password-authenticated key exchange protocols with TLS 1.3.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://tlswg.org/tls-pake/draft-ietf-tls-pake.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-tls-pake/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Transport Layer Security Working Group mailing list (<eref target="mailto:tls@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tls/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tls/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/tlswg/tls-pake"/>.</t>
    </note>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>DISCLAIMER: Much of this text is copied from <xref target="FIRST-DRAFT"/>
and is in the process of being updated. This is a work-in-progress draft and has
not yet seen significant security analysis. See <xref target="security"/> and <xref target="spake2plus-sec"/>
for more information.</t>
      <t>In some applications, it is desirable to enable a client and server
to authenticate to one another using a low-entropy pre-shared value,
such as a user-entered password.</t>
      <t>In prior versions of TLS, this functionality has been provided by
the integration of the Secure Remote Password PAKE protocol (SRP)
<xref target="RFC5054"/>. The specific SRP integration described in RFC 5054
does not immediately extend to TLS 1.3 because it relies on the
Client Key Exchange and Server Key Exchange messages, which no
longer exist in 1.3.</t>
      <t>TLS 1.3 itself provides a mechanism for authentication with
pre-shared keys (PSKs). However, PSKs used with this protocol need
to be "full-entropy", because the binder values used for
authentication can be used to mount a dictionary attack on the PSK.
So while the TLS 1.3 PSK mechanism is suitable for the session
resumption cases for which it is specified, it cannot be used when
the client and server share only a low-entropy secret.</t>
      <t>Enabling TLS to address this use case effectively requires the TLS
handshake to execute a password-authenticated key establishment
(PAKE) protocol. This document describes a TLS extension <tt>pake</tt>
that can carry data necessary to execute a PAKE.</t>
      <t>This extension is generic, in that it can be used to carry key
exchange information for multiple different PAKEs. We assume that
prior to the TLS handshake the client and server will both have
knowledge of the password or PAKE-specific values derived from the
password (e.g. augmented PAKEs only require one party to know the
actual password). The choice of PAKE and any required parameters will
be explicitly specified using IANA assigned values.
This document defines concrete protocols for executing the
SPAKE2+ <xref target="RFC9383"/> and CPACE <xref target="CPACE"/> PAKE protocols.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</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?>

<t>The mechanisms described in this document also apply to DTLS 1.3
<xref target="RFC9147"/>, but for brevity, we will refer only to TLS
throughout.</t>
    </section>
    <section anchor="setup">
      <name>Setup</name>
      <t>In order to use the extension specified in this document, a TLS client
and server need to have pre-provisioned a password (or derived values
as described by the desired PAKE protocol(s)). The details of this
pre-provisioned information are specific to each PAKE algorithm and
are not specified here.</t>
      <t>Servers will of course have multiple instances of this configuration
information for different clients. Clients may also have multiple
identities, even within a given server.</t>
    </section>
    <section anchor="pake-integration-in-tls">
      <name>PAKE Integration in TLS</name>
      <t>This section describes how the PAKE protocol is integrated and executed
in the TLS handshake.</t>
      <section anchor="client-behavior">
        <name>Client Behavior</name>
        <t>To offer support for a PAKE protocol, the client sends a <tt>pake</tt> extension
in the ClientHello carrying a <tt>PAKEClientHello</tt> value:</t>
        <artwork><![CDATA[
enum {
    pake(0xTODO), (65535)
} ExtensionType;
]]></artwork>
        <t>The payload of the client extension has the following <tt>PAKEClientHello</tt>
structure:</t>
        <artwork><![CDATA[
enum {
    SPAKE2PLUS_V1 (0xXXXX),
    CPACE_X25519_SHA512 (0xXXXX),
} PAKEScheme;

struct {
    PAKEScheme   pake_scheme;
    opaque       pake_message<1..2^16-1>;
} PAKEShare;

struct {
    opaque    client_identity<0..2^16-1>;
    opaque    server_identity<0..2^16-1>;
    PAKEShare client_shares<0..2^16-1>;
} PAKEClientHello;
]]></artwork>
        <t>The <tt>PAKEClientHello</tt> structure consists of an identity pair under which the
client can authenticate alongside a list of PAKE algorithms and the
client's first message for each underlying PAKE protocol.
Concretely, these structure fields are defined as follows:</t>
        <dl>
          <dt>client_shares</dt>
          <dd>
            <t>A list of PAKEShare values, each one with a distinct PAKEScheme algorithm.</t>
          </dd>
          <dt>client_identity</dt>
          <dd>
            <t>The client identity used for the PAKE. It may be empty.</t>
          </dd>
          <dt>server_identity</dt>
          <dd>
            <t>The server identity used for the PAKE. It may be empty.</t>
          </dd>
          <dt>pake_scheme</dt>
          <dd>
            <t>The 2-byte identifier of the PAKE algorithm.</t>
          </dd>
          <dt>pake_message</dt>
          <dd>
            <t>The client PAKE message used to initialize the protocol.</t>
          </dd>
        </dl>
        <t>The client and server identity fields are common to all PAKEShares to prevent
client enumeration attacks; see <xref target="security"/>.</t>
        <t>The <tt>PAKEScheme</tt> field in the <tt>PAKEShare</tt> allows implementations to
support multiple PAKEs and negotiate which to use in the context of
the handshake. For instance, if a client knows a password but not which
PAKE the server supports it could send corresponding PAKEShares for each
PAKE. If the client sends multiple PAKEShare values, then they <bcp14>MUST</bcp14>
be sorted in monotonically increasing order by the NamedPAKE value. Moreover,
the client <bcp14>MUST NOT</bcp14> send more than one PAKEShare with the same NamedPAKE value.</t>
        <t><xref section="9.2" sectionFormat="of" target="TLS13"/> specifies that a valid ClientHello
must include either a <tt>pre_shared_key</tt> extension or both
a <tt>signature_algorithms</tt> and <tt>supported_groups</tt> extension. With the
addition of the <tt>pake</tt> extension specified here, the new requirement
is that a valid ClientHello must satisfy at least one of the
following options:</t>
        <ul spacing="normal">
          <li>
            <t>includes a <tt>pre_shared_key</tt> extension</t>
          </li>
          <li>
            <t>includes <tt>signature_algorithms</tt>, <tt>supported_groups</tt>, and <tt>key_share</tt>  extensions</t>
          </li>
          <li>
            <t>includes <tt>pake</tt>, <tt>supported_groups</tt>, and <tt>key_share</tt> extensions</t>
          </li>
        </ul>
        <t>If a client sends the <tt>pake</tt> extension, then it <bcp14>MUST</bcp14> also send a <tt>supported_groups</tt> and
<tt>key_share</tt> extension. Like PSK-based authentication in psk_dhe_ke mode as defined in
<xref section="4.2.0" sectionFormat="of" target="TLS13"/>, authentication with the <tt>pake</tt> extension
is always combined with the normal TLS key exchange mechanism. See <xref target="key-sched-mods"/> for details.</t>
        <t>Combining the <tt>pake</tt> extension with the normal TLS key exchange mechanism
using a hybrid or PQ key agreement protects against Harvest Now Decrypt
Later Attacks where traffic recorded today may be decrypted by a Cryptographically
Relevant Quantum Computer (CRQC) in the future.</t>
        <t>A client which sends both a <tt>pake</tt> and <tt>signature_algorithms</tt> extension indicates the client
requires both PAKE authentication and standard server certificate authentication.</t>
        <t>The client <bcp14>MAY</bcp14> also send a <tt>pre_shared_key</tt> extension along with the <tt>pake</tt> extension,
to allow the server to choose an authentication mode.</t>
        <t>The server identity value provided in the PAKEClientHello structure
are disjoint from that which the client may provide in the
ServerNameIndication (SNI) field.</t>
      </section>
      <section anchor="server-behavior">
        <name>Server Behavior</name>
        <t>If a server receives a ClientHello with a <tt>pake</tt> extension, but without both
a<tt>supported_group</tt> and <tt>key_share</tt> extension it <bcp14>MUST</bcp14> abort the connection with a
"missing_extension" alert.</t>
        <t>If a server receives a ClientHello with a <tt>pake</tt> extension and <tt>pre_shared_key</tt>
extension then it must choose an authentication mechanism. In cases where client
enumeration is a risk, servers <bcp14>SHOULD NOT</bcp14> inspect the offered <tt>client_identity</tt> fields
in the <tt>pake</tt> extension when deciding between PAKE or PSK authentication since this
could be used as an client enumeration tool.</t>
        <t>A server that receives a <tt>pake</tt> extension examines its contents to determine
if it is well-formed. In particular, if the list of PAKEShare values is not
sorted in monotonically increasing order by PAKEScheme values, or if there are
duplicate PAKEScheme entries in this list, the server aborts the handshake with
an "illegal_parameter" alert.</t>
        <t>If the list of PAKEShare values is well-formed, the server then scans the list
of PAKEShare values to determine if there is one corresponding to a server
supported PAKEScheme. If the server does not support any of the offered PAKESchemes
in the client PAKEShares then the server <bcp14>MUST</bcp14> abort the protocol
with an "illegal_parameter" alert.</t>
        <t>If the server has a PAKEScheme in common with the client then the server uses
the client_identity and server_identity alongside its local database of PAKE
registration information to determine if the request corresponds to a legitimate
client registration record. If one does not
exist, the server <bcp14>MAY</bcp14> simulate a PAKE response as described in <xref target="simulation"/>.
Simulating a response prevents client enumeration attacks on the server's
PAKE database; see <xref target="security"/>.</t>
        <t>If there exists a valid PAKE registration, the server indicates its selection
by including a <tt>pake</tt> extension in its ServerHello. The content of this extension
is a <tt>PAKEServerHello</tt> value, specifying the PAKE the server has selected, and the
server's first message in the PAKE protocol. The format of this structure is as follows:</t>
        <artwork><![CDATA[
struct {
    PAKEShare server_share;
} PAKEServerHello;
]]></artwork>
        <t>The server_share value of this structure is a <tt>PAKEShare</tt>, which echoes
back the PAKE algorithm chosen and the server's PAKE message generated
in response to the client's PAKE message.</t>
        <t>If a server uses PAKE authentication, then it <bcp14>MUST NOT</bcp14> send an
extension of type <tt>pre_shared_key</tt>, or <tt>early_data</tt>.</t>
        <t>Use of PAKE authentication <bcp14>MAY</bcp14> be used with
certificate-based authentication of both clients and servers.
If use of a PAKE is negotiated and the client included the <tt>signature_algorithms</tt> extension,
then servers <bcp14>MUST</bcp14> include Certificate and CertificateVerify messages in the handshake.
The server <bcp14>MAY</bcp14> send a CertificateRequest for client certificate authentication.
See <xref target="security"/> for a discussion on different security considerations
depending on if certificates are used or not.</t>
      </section>
      <section anchor="key-sched-mods">
        <name>Key Schedule Modifications</name>
        <t>When the client and server agree on a PAKE to use, a shared secret derived
from the PAKE protocol is concatenated with the regular <tt>ECDH(E)</tt>
input and used as part of the <tt>ECDH(E)</tt> input to the TLS 1.3
key schedule. Details for the shared secret computation are left to the
specific PAKE algorithm. See <xref target="spake2plus"/> and <xref target="cpace"/> for information about how
the SPAKE2+ and CPace variants operate, respectively.</t>
        <t>As with client authentication via certificates, the server has not
authenticated the client until after it has received the client's
Finished message. When a server negotiates the use of this
mechanism for authentication, it <bcp14>SHOULD NOT</bcp14> send application data
before it has received the client's Finished message, as it would
otherwise be sending data to an unauthenticated client.</t>
      </section>
      <section anchor="simulation">
        <name>Server Simulation</name>
        <t>To simulate a fake PAKE response, the server does the following:</t>
        <ul spacing="normal">
          <li>
            <t>Select a PAKEScheme supported by the client and server, as normal.</t>
          </li>
          <li>
            <t>Include the <tt>pake</tt> extension in its ServerHello, containing a PAKEShare value with
the selected PAKEScheme and corresponding <tt>pake_message</tt>. To generate the <tt>pake_message</tt>
for this <tt>PAKEShare</tt> value, the server selects a value uniformly at random from
the set of possible values of the PAKE algorithm shares.</t>
          </li>
          <li>
            <t>Perform the rest of the protocol as normal.</t>
          </li>
        </ul>
        <t>Because the server's share was selected uniformly at random, the server will reject
the client's Finished message with overwhelming probability.</t>
        <t>A server that performs the simulation of the protocol acts only
as an all-or-nothing oracle for whether a given (identity, password) pair
is correct. If an attacker does not supply a correct pair, they do not learn
anything beyond this fact.</t>
      </section>
    </section>
    <section anchor="compatible-pake-protocols">
      <name>Compatible PAKE Protocols</name>
      <t>In order to be usable with the <tt>pake</tt> extension, a PAKE protocol
must specify some syntax for its messages, and the PAKE protocol
<bcp14>MUST</bcp14> produce a shared secret in exactly two messages carried in the ClientHello
and ServerHello. PAKE protocols that require more than two messages to derive a shared secret
are not compatible with this extension.</t>
      <t>In addition, to be compatible with the security requirements of TLS
1.3, PAKE protocols defined for use with TLS 1.3 <bcp14>MUST</bcp14> provide
forward secrecy and <bcp14>MUST</bcp14> be able to achieve key confirmation via TLS 1.3
Finished messages.</t>
      <t>A specification describing the use of a particular PAKE protocol with
TLS must provide the following details:</t>
      <ul spacing="normal">
        <li>
          <t>A <tt>PAKEScheme</tt> registered value indicating pre-provisioned parameters;</t>
        </li>
        <li>
          <t>Content of the <tt>pake_message</tt> field in a ClientHello;</t>
        </li>
        <li>
          <t>Content of the <tt>pake_message</tt> field in a ServerHello;</t>
        </li>
        <li>
          <t>How the PAKE protocol is executed based on those messages; and</t>
        </li>
        <li>
          <t>How the outputs of the PAKE protocol are used to create the PAKE portion of the<tt>(EC)DHE</tt> input to the TLS key schedule.</t>
        </li>
      </ul>
      <t>Several current PAKE protocols satisfy these requirements, for
example:</t>
      <ul spacing="normal">
        <li>
          <t>CPace <xref target="CPACE"/></t>
        </li>
        <li>
          <t>SPAKE2+ (described in <xref target="spake2plus"/>) <xref target="RFC9383"/></t>
        </li>
        <li>
          <t>OPAQUE <xref target="OPAQUE"/></t>
        </li>
      </ul>
    </section>
    <section anchor="spake2plus">
      <name>SPAKE2+ Integration</name>
      <t>This section describes the SPAKE2+ instantiation of the <tt>pake</tt> extension for TLS.
The SPAKE2+ protocol is described in <xref target="SPAKE2PLUS"/>.
<xref target="spake2plus-setup"/> describes the setup required before the protocol runs,
and <xref target="spake2plus-run"/> describes the protocol execution in TLS.</t>
      <section anchor="spake2plus-setup">
        <name>Protocol Setup</name>
        <t>The TLS client and server roles map to the <tt>Prover</tt> and <tt>Verifier</tt> roles in the
SPAKE2+ specification, respectively. Clients are configured with a client
identity, server identity, and password verifier (w0 and w1 according to <xref target="SPAKE2PLUS"/>).
Similarly, servers are configured with a list of client identity, server identity,
and password registration values (w0 and L according to <xref target="SPAKE2PLUS"/>). Servers
use this list when completing the SPAKE2+ protocol. The values for the password
verifiers and registration records (w0, w1, and L) are not specified here; see
<xref section="3.2" sectionFormat="of" target="SPAKE2PLUS"/> for more information.</t>
        <t>The PAKEScheme value for SPAKE2+ fully defines the parameters associated with
the protocol, including the prime-order group <tt>G</tt>, cryptographic hash function <tt>Hash</tt>,
key derivation function <tt>KDF</tt>, and message authentication code <tt>MAC</tt>. Additionally,
the PAKEScheme value for SPAKE2+ fully defines the constants for M and N
as needed for the protocol; see <xref section="4" sectionFormat="of" target="SPAKE2PLUS"/>.</t>
      </section>
      <section anchor="spake2plus-run">
        <name>Protocol Execution</name>
        <t>The content of one PAKEShare value in the PAKEClientHello structure consists
of the PAKEScheme value <tt>SPAKE2PLUS_V1</tt> and the value <tt>shareP</tt> as computed in
<xref section="3.3" sectionFormat="of" target="SPAKE2PLUS"/>.</t>
        <t>The content of the server PAKEShare value in the PAKEServerHello structure
consists of the PAKEScheme value <tt>SPAKE2PLUS_V1</tt> and the value <tt>shareV || confirmV</tt>,
i.e., <tt>shareV</tt> and <tt>confirmV</tt> concatenated, as computed in <xref section="3.3" sectionFormat="of" target="SPAKE2PLUS"/>.</t>
        <t>Given <tt>shareP</tt> and <tt>shareV</tt>, the client and server can then both compute
K_main, the root secret in the protocol as described in <xref section="3.4" sectionFormat="of" target="SPAKE2PLUS"/>.
The "Context" value for SPAKE2+ is equal to <tt>tls || application_context</tt> where
<tt>application_context</tt> is either an empty string or a string that may be specified by
the protocol using tls to include additional context in the protocol transcript.
See <xref section="3" sectionFormat="of" target="SPAKE2PLUS"/>. The rest of
the values needed for the transcript derivation are as configured in <xref target="spake2plus-setup"/>,
exchanged over the wire, or computed by client and server.</t>
        <t>Using <tt>K_main</tt>, the client and server both compute <tt>K_shared</tt> which is combined with the
<tt>(EC)DHE</tt> shared secret as input to the TLS 1.3 key schedule, where the (EC)DHE shared
secret is as specified in <xref section="7.1" sectionFormat="of" target="TLS13"/> or as the <tt>concatenated_shared_secret</tt>
as specified in <xref section="3.3" sectionFormat="of" target="I-D.ietf-tls-hybrid-design"/>. Specifically, <tt>K_shared || (EC)DHE</tt> is used
as the <tt>(EC)DHE</tt> input to the key schedule in <xref section="7.1" sectionFormat="of" target="TLS13"/>, as shown below.</t>
        <artwork><![CDATA[
                                    0
                                    |
                                    v
                        0 ->  HKDF-Extract = Early Secret
                                    |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    |
                                    v
                              Derive-Secret(., "derived", "")
                                    |
                                    v
                K_shared || (EC)DHE -> HKDF-Extract = Handshake Secret
                ^^^^^^^^^^^         |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    |
                                    v
                              Derive-Secret(., "derived", "")
                                    |
                                    v
                         0 -> HKDF-Extract = Master Secret
                                    |
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
                                    +-----> Derive-Secret(...)
]]></artwork>
        <t>Note that the server does compute and send confirmV as defined in <xref section="3.4" sectionFormat="of" target="SPAKE2PLUS"/>
since it can do so within the structure of the TLS 1.3 handshake and the client <bcp14>MUST</bcp14> verify it.
If verification of confirmV fails, clients <bcp14>SHOULD</bcp14> abort the handshake with a "decrypt_error" alert.
The client and server do not additionally compute or verify confirmP
as described in <xref section="3.4" sectionFormat="of" target="SPAKE2PLUS"/>.
See <xref target="spake2plus-sec"/> for more information about the safety of this approach.</t>
      </section>
    </section>
    <section anchor="cpace">
      <name>CPace Integration</name>
      <t>This section describes the CPace instantiation of the <tt>pake</tt> extension for TLS.
The CPace protocol is described in <xref target="CPACE"/>.
<xref target="cpace-setup"/> describes the setup required before the protocol runs, and
<xref target="cpace-run"/> describes the protocol execution in TLS.</t>
      <section anchor="cpace-setup">
        <name>Protocol Setup</name>
        <t>The TLS client and server roles map to the 'initiator' and 'responder' roles in
the CPace specification, respectively. The client and server must share a
password-related string (PRS). The associated data for both parties (<tt>ADa</tt> and
<tt>ADb</tt>) is unused. The client and server may optionally be configured with party
identification strings, a channel identifier, and/or a session identifier, as
described in <xref section="3.1" sectionFormat="of" target="CPACE"/>.</t>
        <t>The PAKEScheme value for CPace specifies a cipher suite for the protocol,
consisting of a group environment <tt>G</tt> and cryptographic hash function <tt>H</tt>.</t>
      </section>
      <section anchor="cpace-run">
        <name>Protocol Execution</name>
        <t>The content of one PAKEShare value in the PAKEClientHello structure consists of
the PAKEScheme value <tt>CPACE_X25519_SHA512</tt> and the value <tt>Ya</tt> as computed in
<xref section="6.2" sectionFormat="of" target="CPACE"/>.</t>
        <t>The content of the server PAKEShare value in the PAKEServerHello structure
consists of the PAKEScheme value <tt>CPACE_X25519_SHA512</tt> and the value <tt>Yb</tt> as
computed in <xref section="6.2" sectionFormat="of" target="CPACE"/>.</t>
        <t>Given <tt>Ya</tt> and <tt>Yb</tt>, the client and server can then both compute <tt>ISK</tt>, the main output
secret of the protocol as described in <xref section="6.2" sectionFormat="of" target="CPACE"/>.
The various optional CPace inputs (party identification strings, channel
identifiers, and session identifiers) may be specified by the application, and
will contribute to the derivation of <tt>ISK</tt>.</t>
        <t>The client and server both combine <tt>ISK</tt> with the <tt>(EC)DHE</tt> shared secret as
input to the TLS 1.3 key schedule, where the (EC)DHE shared secret is as
specified in <xref section="7.1" sectionFormat="of" target="TLS13"/> or as the
<tt>concatenated_shared_secret</tt> as specified in <xref section="3.3" sectionFormat="of" target="I-D.ietf-tls-hybrid-design"/>.
Specifically, <tt>ISK || (EC)DHE</tt> is used as the <tt>(EC)DHE</tt> input to the key
schedule in <xref section="7.1" sectionFormat="of" target="TLS13"/>, as shown above in <xref target="spake2plus-run"/>.</t>
      </section>
    </section>
    <section anchor="privacy">
      <name>Privacy Considerations</name>
      <t>Client and server identities are sent in the clear in the PAKEClientHello extension.
While normally the TLS server identity is already in the clear -- carried in
the SNI extension -- TLS client identities are encrypted under the TLS handshake
secrets. Thus, the PAKEClientHello extension reveals more information to a passive
network attacker than normal, mutually-authenticated TLS handshakes.</t>
      <t>The implications of leaking the client identity to a passive network attacker vary.
For instance, a successful TLS handshake after negotiating use of a PAKE indicates
that the chosen client identity is valid. This is relevant in settings where
client enumeration may be a concern.</t>
      <t>Applications for which this leak is a problem can use the TLS Encrypted ClientHello
(ECH) extension to encrypt the PAKEClientHello extension in transit to the server
<xref target="ECH"/>.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="dictionary-attack-mitigation">
        <name>Dictionary attack mitigation</name>
        <t>Because PAKE security is based on knowledge of a low-entropy secret,
an attacker can perform a "dictionary attack" by repeatedly attempting to
guess the low-entropy secret.</t>
        <t>Clients and servers <bcp14>SHOULD</bcp14> apply mitigations against dictionary attacks.
Reasonable mitigations include rate-limiting authentication attempts,
imposing a backoff time between attempts, limiting the
number of failed attempts, or limiting the total number
of attempts.</t>
        <t>Clients <bcp14>SHOULD</bcp14> treat each time they receive an invalid PAKEServerHello
as a failed authentication attempt for the identity in the previously sent PAKEClientHello.
Servers <bcp14>SHOULD</bcp14> treat each time they send a PAKEServerHello extension as a failed
authentication attempt for the selected identity, until they receive a correct Finished
message from the client. Once the server receives a correct Finished message,
the authentication attempt <bcp14>MAY</bcp14> be treated as successful.</t>
      </section>
      <section anchor="protection-of-client-identities">
        <name>Protection of client identities</name>
        <t>Many of the security properties of this protocol will derive from
the PAKE protocol being used. Security considerations for PAKE
protocols are noted in <xref target="compatible-pake-protocols"/>.</t>
        <t>If a server doesn't recognize the identity supplied by the
client in the ClientHello <tt>pake</tt> extension, the server <bcp14>MAY</bcp14> abort the handshake with an
"illegal_parameter" alert. In this case, the server acts as an oracle
for identities, in which each handshake allows an attacker
to learn whether the server recognizes a given identity.</t>
        <t>Alternatively, if the server wishes to hide the fact that a client
identity is unrecognized, the server <bcp14>MAY</bcp14> simulate the protocol as
if an identity was recognized, but the password was incorrect.
This is similar to the procedure outlined in <xref target="RFC5054"/>.
The simulation mechanism is described in <xref target="simulation"/>.</t>
      </section>
      <section anchor="ramifications-of-low-entropy-secret-compromise">
        <name>Ramifications of low entropy secret compromise</name>
        <t>As with PSK based authentication, if only PAKE authentication is in use,
then an attacker that learns the low entropy secret could impersonate
either the client or the server. In situations where a notion of stable identity
is available, then certificate-based authentication <bcp14>MAY</bcp14> be used as well to
reduce this risk. For example, requiring the server to authenticate with
a certificate in addition to PAKE authentication means an attacker
that learns the password could only impersonate a client to a server, but could not impersonate a server to a client.
This is an important distinction in situations where
the client sends sensitive data to the server.</t>
      </section>
      <section anchor="spake2plus-sec">
        <name>SPAKE2+ Security Considerations</name>
        <t><xref target="spake2plus"/> describes how to integrate SPAKE2+ into TLS using the <tt>pake</tt>
extension in this document. This integration deviates from the SPAKE2+
protocol in <xref target="SPAKE2PLUS"/> in one important way: the explicit key confirmation
checks required in <xref target="SPAKE2PLUS"/> are replaced with the TLS Finished messages.
This is because the TLS Finished messages compute a MAC over the TLS transcript,
which includes both the <tt>shareP</tt> and <tt>shareV</tt> values exchanged for SPAKE2+.</t>
        <t>[[OPEN ISSUE: this requires formal analysis to confirm.]]</t>
      </section>
      <section anchor="cpace-sec">
        <name>CPace Security Considerations</name>
        <t><xref target="cpace"/> describes how to integrate CPace into TLS using the <tt>pake</tt>
extension in this document. Key confirmation is provided via TLS 1.3 Finished messages,
satisfying the requirements in <xref section="9.4" sectionFormat="of" target="CPACE"/>.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document requests that IANA add a value to the TLS
ExtensionType Registry with the following contents:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Value</th>
            <th align="left">Extension Name</th>
            <th align="center">TLS 1.3</th>
            <th align="center">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">0xTODO</td>
            <td align="left">pake</td>
            <td align="center">CH, SH</td>
            <td align="center">(this document)</td>
          </tr>
        </tbody>
      </table>
      <t>[[ RFC EDITOR: Please replace "TODO" in the above table with the
value assigned by IANA, and replace "(this document)" with the
RFC number assigned to this document. ]]</t>
      <section anchor="pake-scheme-registry">
        <name>PAKE Scheme registry</name>
        <t>This document requests that IANA create a new registry called
"PAKE Schemes" with the following contents:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">PAKEScheme</th>
              <th align="center">Reference</th>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0xTODO</td>
              <td align="left">SPAKE2PLUS_V1</td>
              <td align="center">(this document)</td>
              <td align="left">N/A</td>
            </tr>
            <tr>
              <td align="left">0xTODO</td>
              <td align="left">CPACE_X25519_SHA512</td>
              <td align="center">(this document)</td>
              <td align="left">N/A</td>
            </tr>
          </tbody>
        </table>
        <t>The SPAKE2PLUS_V1 PAKEScheme variant has the following parameters associated with it:</t>
        <ul spacing="normal">
          <li>
            <t>G: P-256</t>
          </li>
          <li>
            <t>Hash: SHA256</t>
          </li>
          <li>
            <t>KDF: HKDF-SHA256</t>
          </li>
          <li>
            <t>MAC: HMAC-SHA256</t>
          </li>
        </ul>
        <t>Additionally, it uses the M and N values from <xref section="4" sectionFormat="of" target="SPAKE2PLUS"/>, included
below, as compressed points on the P-256 curve, for completeness.</t>
        <artwork><![CDATA[
M =
02886e2f97ace46e55ba9dd7242579f2993b64e16ef3dcab95afd497333d8fa12f

N =
03d8bbd6c639c62937b04d997f38c3770719c629d7014d49a24b4f98baa1292b49
]]></artwork>
        <t>The CPACE_X25519_SHA512 PAKEScheme variant has the parameters for 'CPACE-X25519-SHA512'
as specified in <xref section="4" sectionFormat="of" target="CPACE"/>.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the original authors of <xref target="FIRST-DRAFT"/>
for providing a firm basis for the extension mechanism specified in this
document.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change Log</name>
      <t>Since draft-ietf-tls-pake-00</t>
      <ul spacing="normal">
        <li>
          <t>Add CPace as a second PAKE instantiation</t>
        </li>
        <li>
          <t>Require PAKE protocols to complete in exactly two messages
(ClientHello and ServerHello)</t>
        </li>
        <li>
          <t>Require PAKE protocols to support key confirmation via TLS 1.3
Finished messages</t>
        </li>
        <li>
          <t>Clarify server behavior when both pake and pre_shared_key
extensions are present: server <bcp14>MUST</bcp14> select authentication
mechanism based on preference, not client identity recognition</t>
        </li>
        <li>
          <t>Add explicit requirement that server <bcp14>MUST</bcp14> send missing_extension
alert if pake extension is present without key_share and
supported_groups extensions</t>
        </li>
        <li>
          <t>Specify that SPAKE2+ Context string <bcp14>MUST</bcp14> be prefixed with "tls"
to prevent cross-protocol attacks</t>
        </li>
      </ul>
      <t>Since draft-bmw-tls-pake13-02</t>
      <ul spacing="normal">
        <li>
          <t>Updated boilerplate after WG adoption</t>
        </li>
      </ul>
      <t>Since draft-bmw-tls-pake13-01</t>
      <ul spacing="normal">
        <li>
          <t>Require standard TLS Key exchange to be combined with pake</t>
        </li>
        <li>
          <t>Allow combining PAKEs and certificates</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9383">
          <front>
            <title>SPAKE2+, an Augmented Password-Authenticated Key Exchange (PAKE) Protocol</title>
            <author fullname="T. Taubert" initials="T." surname="Taubert"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes SPAKE2+, a Password-Authenticated Key Exchange (PAKE) protocol run between two parties for deriving a strong shared key with no risk of disclosing the password. SPAKE2+ is an augmented PAKE protocol, as only one party has knowledge of the password. This method is simple to implement, compatible with any prime-order group, and computationally efficient.</t>
              <t>This document was produced outside of the IETF and IRTF and represents the opinions of the authors. Publication of this document as an RFC in the Independent Submissions Stream does not imply endorsement of SPAKE2+ by the IETF or IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9383"/>
          <seriesInfo name="DOI" value="10.17487/RFC9383"/>
        </reference>
        <reference anchor="CPACE">
          <front>
            <title>CPace, a balanced composable PAKE</title>
            <author fullname="Michel Abdalla" initials="M." surname="Abdalla">
              <organization>Nexus - San Francisco</organization>
            </author>
            <author fullname="Björn Haase" initials="B." surname="Haase">
              <organization>Endress + Hauser Liquid Analysis - Gerlingen</organization>
            </author>
            <author fullname="Julia Hesse" initials="J." surname="Hesse">
              <organization>IBM Research Europe - Zurich</organization>
            </author>
            <date day="1" month="February" year="2026"/>
            <abstract>
              <t>   This document describes CPace which is a protocol that allows two
   parties that share a low-entropy secret (password) to derive a strong
   shared key without disclosing the secret to offline dictionary
   attacks.  The CPace protocol was tailored for constrained devices and
   can be used on groups of prime- and non-prime order.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-cpace-18"/>
        </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>
        <reference anchor="RFC9147">
          <front>
            <title>The Datagram Transport Layer Security (DTLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <author fullname="N. Modadugu" initials="N." surname="Modadugu"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>This document specifies version 1.3 of the Datagram Transport Layer Security (DTLS) protocol. DTLS 1.3 allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>The DTLS 1.3 protocol is based on the Transport Layer Security (TLS) 1.3 protocol and provides equivalent security guarantees with the exception of order protection / non-replayability. Datagram semantics of the underlying transport are preserved by the DTLS protocol.</t>
              <t>This document obsoletes RFC 6347.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9147"/>
          <seriesInfo name="DOI" value="10.17487/RFC9147"/>
        </reference>
        <reference anchor="TLS13">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="SPAKE2PLUS">
          <front>
            <title>SPAKE2+, an Augmented Password-Authenticated Key Exchange (PAKE) Protocol</title>
            <author fullname="T. Taubert" initials="T." surname="Taubert"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>This document describes SPAKE2+, a Password-Authenticated Key Exchange (PAKE) protocol run between two parties for deriving a strong shared key with no risk of disclosing the password. SPAKE2+ is an augmented PAKE protocol, as only one party has knowledge of the password. This method is simple to implement, compatible with any prime-order group, and computationally efficient.</t>
              <t>This document was produced outside of the IETF and IRTF and represents the opinions of the authors. Publication of this document as an RFC in the Independent Submissions Stream does not imply endorsement of SPAKE2+ by the IETF or IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9383"/>
          <seriesInfo name="DOI" value="10.17487/RFC9383"/>
        </reference>
        <reference anchor="I-D.ietf-tls-hybrid-design">
          <front>
            <title>Hybrid key exchange in TLS 1.3</title>
            <author fullname="Douglas Stebila" initials="D." surname="Stebila">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Scott Fluhrer" initials="S." surname="Fluhrer">
              <organization>Cisco Systems</organization>
            </author>
            <author fullname="Shay Gueron" initials="S." surname="Gueron">
              <organization>University of Haifa and Meta</organization>
            </author>
            <date day="7" month="September" year="2025"/>
            <abstract>
              <t>   Hybrid key exchange refers to using multiple key exchange algorithms
   simultaneously and combining the result with the goal of providing
   security even if a way is found to defeat the encryption for all but
   one of the component algorithms.  It is motivated by transition to
   post-quantum cryptography.  This document provides a construction for
   hybrid key exchange in the Transport Layer Security (TLS) protocol
   version 1.3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-hybrid-design-16"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="FIRST-DRAFT">
          <front>
            <title>Usage of PAKE with TLS 1.3</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Owen Friel" initials="O." surname="Friel">
              <organization>Cisco</organization>
            </author>
            <date day="16" month="July" year="2018"/>
            <abstract>
              <t>   The pre-shared key mechanism available in TLS 1.3 is not suitable for
   usage with low-entropy keys, such as passwords entered by users.
   This document describes an extension that enables the use of
   password-authenticated key exchange protocols with TLS 1.3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-barnes-tls-pake-04"/>
        </reference>
        <reference anchor="RFC5054">
          <front>
            <title>Using the Secure Remote Password (SRP) Protocol for TLS Authentication</title>
            <author fullname="D. Taylor" initials="D." surname="Taylor"/>
            <author fullname="T. Wu" initials="T." surname="Wu"/>
            <author fullname="N. Mavrogiannopoulos" initials="N." surname="Mavrogiannopoulos"/>
            <author fullname="T. Perrin" initials="T." surname="Perrin"/>
            <date month="November" year="2007"/>
            <abstract>
              <t>This memo presents a technique for using the Secure Remote Password protocol as an authentication method for the Transport Layer Security protocol. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5054"/>
          <seriesInfo name="DOI" value="10.17487/RFC5054"/>
        </reference>
        <reference anchor="OPAQUE">
          <front>
            <title>The OPAQUE Augmented PAKE Protocol</title>
            <author fullname="Daniel Bourdrez" initials="D." surname="Bourdrez">
         </author>
            <author fullname="Hugo Krawczyk" initials="H." surname="Krawczyk">
              <organization>AWS</organization>
            </author>
            <author fullname="Kevin Lewi" initials="K." surname="Lewi">
              <organization>Meta</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="21" month="November" year="2024"/>
            <abstract>
              <t>   This document describes the OPAQUE protocol, an augmented (or
   asymmetric) password-authenticated key exchange (aPAKE) that supports
   mutual authentication in a client-server setting without reliance on
   PKI and with security against pre-computation attacks upon server
   compromise.  In addition, the protocol provides forward secrecy and
   the ability to hide the password from the server, even during
   password registration.  This document specifies the core OPAQUE
   protocol and one instantiation based on 3DH.  This document is a
   product of the Crypto Forum Research Group (CFRG) in the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-opaque-18"/>
        </reference>
        <reference anchor="ECH">
          <front>
            <title>TLS Encrypted Client Hello</title>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Independent</organization>
            </author>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cryptography Consulting LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="14" month="June" year="2025"/>
            <abstract>
              <t>   This document describes a mechanism in Transport Layer Security (TLS)
   for encrypting a ClientHello message under a server public key.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tlswg/draft-ietf-tls-esni
   (https://github.com/tlswg/draft-ietf-tls-esni).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tls-esni-25"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1d63IbN7L+j6dAlB+RdklaF18i5aqV5Fhl2VYkJdlUKiuC
HJCc9XCGOxhK5treZznPcp7s9AXX4Uh2sjmn6lSta2sjzWCARqPR/fUFUL/f
F03eFPpAHspzZcxtVWfycNnMdNnkY9XoTD7XK3nyZjxT5VTDD40uTV6VclLV
8ursUu4M9oQajWp9c+B+l+eHz09EVo1LNYees1pNmn6um0m/KUx/oV7r/vaO
MMvRPDfYV7NaQLPTk6unAoecVvXqQOblpBIiX9QHsqmXptnd3t7f3hWq1upA
Xurxss6blQB6X0/rark4kBtXtSrNoqobeaZWuvaNNsSNLpf6QEj49+HG2Iop
2vgJes/LqfwOP+I3c5UX8AYm8i3OaFDVU36h6vEMXsyaZmEOHjzAdvgov9ED
1/ABPngwqqtbox9ADw/4y2nezJYj7vR2+sDxiF8WwBDTRB1TI+rNNXzQweDB
rJkXMPEDuS1e6xUuK3C4bHRd6qZ/jB8IYRpVZteqqEqY7EobscgP5C9NNe5J
A5yp9cTAT6s5/vCrEArEoqqBjX0Jq2MO5NlA/kUt56okSnmxz9SyVvFjoFSV
+T9VAwsNUrZYFLoHlIwH9FYzP4vrEX3xrcL3g3E1x1FokI1jGEWXf1fzvCSW
8Dgbx+omz9I36VAb31XVtNDy7OyI3tqhMvxupMtvp/Q6GetyIF/osirDMJfQ
eR0e3jsZO4DBT67n+EnHdI4G8nAgf6qqLAxyNKtz01SLGchh9PJjBhur229n
Wi1ASkd5YwawukKIfr8v1cg0tRrDr1czLRe17psZbJ5MgjjIucb9nJu5VDco
qCPgU176/ZsbWVaNNMu8wVcC9/rSKNj/tyCrsqhu+6Af6mqxwt5QSJbjmVRG
LqwKMVKjrMFooxV8qWszADKgW1AKS2BNIzNtxnU+0kaqUmqvVZqZauBbHNXA
Lxo/ltVEuI77KtFNOBftdNOirkB2q8IwlXYyA8uPeZ5lMBXxKW6DusqWY+Sr
EMenl0dnh6cvTi4O5AucRjWBgYHUBqhCToyrRQ5DTepqLt++/ebp6cXlVf/4
4vDp1Ven/ePBSMGWMn7jvX8vYFPhd3lJEwCqxtoY7HakUZksFxnSPpDEEPif
kqjF+nnZh7bTGhvTjpbY0UwZgWux0rAeWpfS5NMyn8D8S3zASgtaqmJlcjMA
PaaBSvfi/XvqBB4gbbuLYmn68A6IxCWdV7UmPVvPSciAVacwQDXXEgUXeQxP
YXlzYgQsWV6TqDSVXSOgfVzkuJ44DKzzja4FvI1XCVuDhoEWVYMSvjTIBZVI
USSeN6pY6p5wEqVIfPpOnJwcMKmLOodpwJgoO8RiWPQeL99kWdIKqwIZBGwE
9mv8pIL9T4IpcHly6Hha00R55TWbAi0v9LwC6r1VRKPmZUxuXl6cbwmQh4un
R4+2Hz18/x4XVEuz0GNcHgnvk86dwGcoGPCRxK/ASGrea/l8rrMc2FWseDtk
yDe3IUd6rHAnwELUGhgOcyXpEkfM/cRG41Jc0lKkz+cgWbCHYT1vZzlwt6wE
qP4pNNNvQP8gXbxfvBpojC4mjmW4FkFvoPxEq4wzxF0nUkVj5Ob55XOzNZDP
qlsNFPUk/o5rmvEupbXyXC21zlB+RlpuTJZF4QRko+dZgCs0yssMyCZRsZ0B
PaJFD2wR7IheQ5/zaolyKrOc5aKGbdM0avza8hIpG4jLCrlT8Dgez1w+j6YO
BDvNSGzAlkYTkhGwe5fzhR0eHlIDZjdvIisfOqNdBSTi4jsqb4F8ksq1TSWJ
p0ApiEe6dWA717qBVTvBHYlbC6nGPZhlpEuIw8g5JEjqyUTD/G9Qzmr9j2Ve
W0ULXwmYYAYDveYd/gb2QYNb/D7la5APuZmhUhebuEe2/HJaFdel84nIoPaH
qJ6GgrQ/LttY1bA8oCcViASqT1ythCYcCUUVBwj9wC9TXeo6BwiTW2vCbI4l
gXsH8oW3HZEWpCWbL4smB4ML0gIMq5F6HBEU7E8wuoFF1tS7YBUEnTp5iXjY
uZC3eVHIEahCaHmjxeuyui10NtVO+zhmg/mnIfteo1hxB8mH5bMGCXWA/2JT
D6YD2JVT5LZmjWVYZuxSkyJeqLohbuLY1APAhKUq/NBbrMrGsyofE12k+nAO
qvRdoS6uAb6AXjY0KQEc1m/QbIBDsQqCbhX+6eHLQ+QcmC+n5TtAwSQHYwom
t0Shjk06LgqvPnaGRF8iVbt/BuP2CajT/b3P96y1Ozo/PDrBx/QDGem8Bmw8
ntTT/nihxmCkU20OhAAuuNI1IMmqqKYrBk0o4IxmNl78cHkFSoj+K1++op8v
Tr7/4fTi5Bh/vnx2eHbmfxC2xeWzVz+cHYefwpdHr168OHl5zB/DU5k8Ehsv
Dn+GNzibjVfnV6evXh6ebbBEx/xClcDaEi1NvUCewSIZkRibvxyd//d/7Ty0
jNrd2dmH+fMvn+88ActFeodHI2HhX4HHKwE4QKsae1EgtmMAmo0qwIKAOTWz
6raUYNE1cO9PvyBnfj2QX47Gi52HX9sHOOHkoeNZ8pB4tv5k7WNmYsejjmE8
N5PnLU6n9B7+nPzu+B49/PIbULBa9nc+/+ZrwTLizYJJLXxroQpTEaaifXfs
/GYrujsPn7x/DxZu2ZCYoy8NmAXMtGZtAf4XKA5aGsYEoCjBI53OqmVDknup
m+WCEBFIqyZ15Exl0I1hQ7bJ61l9zMpKRMoK7TH2hqqKQBphAewO5Szoqk0g
2+kl3tpCxQwBLwCJIQSpW1Bq02xZhZPpBpwR4xC4aA8YK2kUfa8Z0TIoMLGs
p4ppBdh3NkeBxngB+zJ+9lZiGSGx6sIRx9WyBp7RTL32B5cNfOSx9jShaprk
0yWDOtE2G8FaMC/BXjBCM3KuViwGyQgCgBUY1CZHWAYAiVEUbjc5zfFXXgha
ZZrdaQQp2WOzRtDocYIzjZyxdm8BV/JMuA9cQ1hra1QzYT2WxIrhyJ/aSYC3
DcSDvYMhAdPjVAEJLSiKQngwHaoXW0ADiBbtPlv6IJZuUB7hmS4Ka5/ZSRhi
j9G7IYvXgRD/+te/hC6X4JNRIAG73dx+c/Xq+NVWT24+fvRo79GWeB8CVler
hf6CvmKHWK2KSmXO6loqw25BhwFfTCoY9RaJWSNFgIMNXiT4CkxOShCbp/Oz
Hy6vf9yRQNpf4d9Wj96RYbr+6+6jRzv716DrHu3sRi3YOF2OZ3oOFNtRbK/h
jZ3ztbHtKNayUP9Y4hvHkWuL+b/cGQx2/7bzuL/z9ReufwSU7e5DB8yQayue
qy+3ow7Sliyhd7f0g7k+CcqapB2TFDH3C8tQWqt1IfCcx/0Ifm9DGxRQnqMC
Zp+Dq0luAsNvhAx2lREOJh4qhsCmBr5FbI2ukMc8TpcY2imhj88AkeQ1tLQM
ZnyCOojGLEh8k90wEEcW1RQr2hmgbMI0QDMVuD9qbUEQmnErfAbEK2GdwGht
TCezlxVvj8lAoEcOFjo8BkDTuImFx09s4Pt2rIPer8KO8Ax1XpZXKQN52pBW
Q9wHPs8KumrJgu3KGpPf1lUk3Lab3f5oBYvF3QDDard506Vy39qVSadDTd2a
OX8gL0EBqyL/p3YRG7ti4qoTwvuJRKs2ruZz9CMrAkp+UQw+ATt2g4bVKRlQ
EtqqcPZAzRcY20niNoNI9HnNhjyciysN/RhDHBLEROZzsCho0DluA0MLp569
RWOfACdT6mnVYMTBbRAGDbZ72FcUAKsm5JAGeyCfVrW3i+BlTUIMCP0JE8MC
RDRofGkAQbxvgjxY2gx5aNWyyMhIwI818G1RlZnbQ5aTbosJKzKTdfuSTDPd
FbjdCdNKBKborGCMm9EQrBwseQnKoACMleM2VeS0MJyy6OUleDsZTYL6HMgX
Va0rDGrEPruDvTwZCrGBo1jShgxU2diHxmjxes8CkOGltef7g12U80/AKu/s
fYWY/eHDx4DZHaAx7OUq/DTPYjsq5kuK6oyLJWg2nVP0DS1wrVmRZNfg4US2
GF1O9EwFNEI/TaFqug46cEhyM7TrBp9TMsVEPYB7bCcmVJblcVStbfhbiIzB
QqlvnX9JAYX87tlJmp0BUTcTjOTIAtasITbziCKY7ooiMqhH/+T4Ye7lRNyu
mxW9Dj6wCzWErrjXoQw9mqRL4sXHdRH1IE6jzcYC38VZK+u5lUUCnSSMqmvt
ECR3jjeQZ/lrior1Rwo1ZSu8BvtmYV5fZzMNzANBR+tpvPXKy0iGHw52B9td
UtzriiF2TgpFQRW3aoUQfD6iMXzjEkF4QcA1yQh458zFxeFtH21K1gd6Dewi
Au3sdsCuO6KebYBhXWI/fjzhgtyz1ajOOZbzPbVV01qTbJOZAf7AtKYK9al8
pkAtwn9fAm4/1uN6tWjEGejnWh6ylUDHHNVJrSbo9dR6jPoJTVgGttPaz4y/
ZKdLySP8pQK0v5ixehMXutA3mD34fgn/D3gVZr1Y4jCbRxffH205CzBZoswD
Vw6dyLGdYMGjCJaH86wXOlVGFJwDjY5wy0R6W/gYJHXIljwVCTK8mKlUtbfA
Y103lARB8JY0T402+PSp/N+t+wgD3i1/PcGm3fpUlg4MJs6qymDQvU037ghL
TRs3kJYPqQjL8BbKDeiQnFhAcX+vwHNzcT/VBGDrposiYHu1nVo3Fw3MKbMf
Sdu8fHm6xXCC/TubLgj+HWkaSzbImQZfFDVmTJ5Fl+vaB60+vqzgv2xO2mpn
eLeWC2prhLjFQpHSKhIeU2xQ4UA5vfafbcDagEwM/h3KmaiWhIg4N8lalQzP
3csedM6pSwLwvrUSH8M/yv7VuXndsyQbGSJaiLLARjITyNsGWRm20LpFhcb5
0etKC6kGpZATnBrp5hbTYLTRUCtdPm9PABg71hyAYVTmIueKcrUdILapCCwf
+l2Bwhnxfo0m/QZz9hqRn2GkiRES2EwZhpPxlQBcyQmTW1iyPkZZMGWKOT8F
W3+8LFRN4BPnfJcrZPPY4rcAvchHcsgR8S4NBB1D5yJbcm5Ux40xHYNgzMXW
kKZerCpInln1hRQBpcyAqRt5UeipKq59TD0R6A9NMuJRMiZJrAF31/guRFcX
MefDXHNDaCrF46gFXaLX7+qIER6XWxJ8gtN5IphCsJDQyXT42otx5K45P8ri
d9dxS0k4p03w5v4oltqeZpRmjtYSaLDunDcHlp42EbAvTAT+/a6MvMXomY8y
oNgXFQghpbgQXbmVBXs4zbFww0KsEF7sWCOCyogYwhIZXiCYOYBv+NLHPJJ+
GTnQUuEKuzUSlAdOJAgNqMnBrVI+6yZ5KGPhXhTzBv+Vm8IY6MFe2t8ICfmv
rDdsujSJdYddRpaJ+Myw6+h41eksnzqppTkY7zFYisPkk+kFSIJLYgAZcVXI
aGXBuo1CthVYXtIHbDbJqNiUGesyHy1O4av12cNHNprZs77QyiHPtqeMEsrE
4QZ3kSjHnVYkKkITSSaWYlQgEp64EH1C4uJoE8fe1gOPpDOsWBuOH9pgYphT
ErmL21rU0z16HM5w9QlgSEEwxQhT9OthHrTAgOocN7yspCEeygYrG9z2ImjT
tT6UF3/SghC4w7tgacvJ8g6/KiPEgHNdLfQaqCCbMtSqLlbXKNVDGPQHE6Va
U4uMm9CXCKDFiOBvt2+GxUaIp20WIlJH4ObA9Liqym1oNJMuGJR5hroAIDut
/OxDGJ8iIaXHMsQaF4A4ijE7pmnD7z/qGqTfF6g4EY6SEFctlcRwPuriwqpC
dOhcmPceJ2GtTIrzFwCyx0vDa1dG2RxfaEXh5syqK8yzLjTbRVQKk3hIDgvS
mkHXoF0ZaWNFDpqZbFlo+aLKuDWF695+2nJPhfjJ2Zv1ICQ5kjisXUQO32Eq
z5bfcGGIS8sJVy6wng7CbDsQXNLqe4sHOhNBlhyeHB0/2zzZGsIOAjeRSHBw
ELGYj++4dpLbRSURmOpE39fYeQ/AveVMny+fSUgek0Ma8nyFnrj+hM/5tYK+
rvDN17n50jeX8Z9Q3DLKII7QQZlVt2TAXTUBFxDAF6Cu6lzh5qkWpEJ6pD9c
8QziXVto6NYm3YI3uUrEoddW6Ghw04KaaKGX8LCQaoJuOegYbG8BdZaoLvE0
B18D2OrVlySZ8frLb+y4nJLR/X3FXFSdFLkivOFCUSAZYzHSEyohvIdA2SaQ
agfgi1v0LQSVBN7mQBUGZO1eorofxDEl8CFlEXebOK2XHnPADooACCUpI+wy
QcCdAJhkSQgEJRk/ChdektlN8WHAvTYyvLY7aZIcJRpAJ6dWBXY6aOtYokc4
QnEkSrXhOpsAppwhQZLYWYugD+NsyBCQQOWtYiDIvxe8JUEtxAkGC1Pi4D2N
bXEWELUsc9xaBYVia6ACtA2qHEsoqYlFBaoVq+as29GZvmFdYJBt57rGPq06
Ml7VeOUVMVn8JaoP9FiAgcdtBJ+6CE0mZisu/g6txb2CzJsf4//gYhdzZDUQ
NlKjHCtO1/zhBU+GZSyI6fqckKtY6yHY3wZPtV/VfSyeZUdVjW3dIQxrQ/pc
KrDpPI1eqOSiPKggJQ8yMW4I8ysHtNv+GRUX2pb0JVcBQSNqUgBiKcFdXTEp
I72qCCtgtS2QTUUKGEyEiY1sDkaeuxKrtDyF4AxVUN4dcWvXE3A+w0JlLlM2
K9gnb1i1Y42Fr3B1ICbtgPDIgoq/9ZqhzCkuMcbatea2CmAEqxHyEKWLEyyh
0tb6AGlVmQuEcOldSAUl3ZNfhya6TZAvXRkHloaS2RCmJ8a6bEvPMnf9Gx1A
TJRhcUXTAmx0r02+i+Vz+b9Oyuql4yUGG1Fp3HJ4Figfs/tLDYAUVzGuxrMc
PD+KglMVjTPEaCkdTGhvMozK40ayVj8ppXbekgezITTUAjmkMXEIkiAXIU2U
vcsCkNI/TPOu7D5qX53u3Ebe8mmNUiiK/AI6Oor9wbaqDfncJDz5m75LHK8/
YZV1N8ZzNT6S3QXyrzF+6dj8BeWBQgcAjQCCpSo6qKg6qqWttTMk3AgMY1Br
w82To63jZycdoDABhFiOBfNQhQQR9dW2kSi6PF9DdROxAPeo9BsjiotC0+ox
fLu//hMtu0V8m+0YRgQht5LqUvjo1fnh9z9gcek3/FOrd66KgZZYlGf7jyu2
AKCE3u8s3IrxKGfaEcHdl0u1h/HYT3KfxuvfmuMnoTrpKz+9gWidE2mWC8DN
KV30NNQAWwSYWLB6WZqeWDt3Ao/XevPf2NJeX9TGCM8ZDy5wTLhnyeMwQyhe
jD2kusJDRHO1cGI3hP7ghc0+kNOZ46/c0CVMLPcSldPC/r6ojys/uCLQOU8u
QyuCOW7lf9g8+SqJG0uI3Lzdpje3O6AsMUJnA65v34blApmkwBqeLixWIW3Q
TYkLGreKedYpEglFSbDQgjVH3Nn9tFmNZARjMRsJ5ywEGqVCuwLuNTnlIJUd
znmGjibhuMTBjI5wJpHYA+Yxe8+2ZHftJ4UPo+T0HhdYxNOQd5yOupolMX82
BtjWTQXPrKx8GTvT74vkYSbVOPdetog3QC+KN/LzfK77DJcoZSaH3w3BL4iz
ueh0zfw5Jzl8Br8Oe+RpE6KwZan+/fPjp7a+wCHY9oEZzOEPXxwegZdwaAEF
Jkq4vuU3ThwjJQ35z9juBY37EjEt1hRH9V+OAy6q62sG2ovSUgknXmMkagG1
jE0BBxua1t44G35/0tVXForIBibzHyYlnkOPOe1bAnPnQ3RSOKDRrorYAxS1
Pse1MLL3TO6ZQQQDorRxXBv5u2fwo3z3zuG1H0G88oEe9Nw7q0r96ySW1GtN
XX5o6t+RGxMYR0UFPE5SSxzpeCzlpJAjhzt5MPH8eg7eM39TV1UTQfy2/9gy
jIHADvnDpdk44sK4jY5NgDjrH3iQBvTisAHUApyLYibXtqZuyPlgMex8h53Y
Uq2SiyFxRdn1QxeBfybPwlZ8BPVmzzT6+XEVClJCVY4chFB+Z/sivzZfGjwc
D2xZNC5S6vmyxhVS2tY7F01Q4K1tHrqMlRMKszKx4WpBMIdCev6oVkYuN/V5
m2PdGAZ8nZCNVusyQrF1CoSwWNwpS7EIYWP2xobu+F5H4ZEI+Db1JTHE1REF
TUBvz5XzwHvbje1FOHGltExybiOsxJPBTmddIEqJrQuLN6NLP3DXQ3F3x3Zv
fkLI1t0pwHVMfTzAMcXcnrx08AjtQ+AWinzA/Hw2Uzh6up2BmCcfNcXo9NFI
g/c24MMA8iP+bX9Uq3cf1ermzlbbsv+1lM/A3vZP3tAhfPmVPEG8hmeL0bX/
46j4cx//fS2PKYbQ5/43B4PB1v+Dz/9dRvO/1uA9uWFzHni2buN/l5IOucfF
b639M1/wccf6/y38+40k/WcB/yBKtjvW7YXCsM9/Nu3Hfk55/5dVw2ej17Ir
zrayzaVEBePGtHD4fhgmuD7NnurOAO9W7swcjefxuwW9zvSGoqtWgpvilDec
gc4bSo+zrxly6Z7OCYYIez6tbhNkoQoprewCuLZhy3GvdV1XoQLpqhOA2DC7
ilwvzzO+5wJptMSci9+IXtsJUr4IpNPVtblR4qea6GblqzYAstaVGs841k+B
tjS+xfG1e0Nb/NnvCGzxh/eFte6J+GF0i378NwNbFCh1Xf0RMa2YqN8UzvqM
zy01Vf0ZtfvMJv00/O5CWiIw/N6AVrdAcsKFXE4VruCpdUFBDOuKbJ5fXNoD
vFGEg3K4E3ughCPzGEQaHh4re+bg8Hg03CKMWCJKvJMGcHL4/Abth9F6mIvu
MxDuWJirYiXicLkk+g2lLqKDY7SID9if4os70petA/TxxmJEeq+c3R0mShaC
SmPHOd36hPeJ6LWQSM958OT9YYaDQ0G6vMnrqqRTBMPv2FG+PzI0vCd4EiT5
j42bOH9wPerQcfx1Lfbws7oncvLYnon68DL8n0VSPmpOI5yT6A6JfNycbIjk
Z2XDI9DlbwqNyOHp5XP7CTrDNtHjPM6OBPsdO+GjyOV4bp1XS+P3sFf/lF/a
5MtI7tq8duuKsDttbnd925qtrngITSeKs7D6phw/igZMbNn4esAoMAFTI07d
eQbUMRUDAtw0ymTfGRUQ/0ZUQMZRAfF7owLivqjAPeGGj4oKiFZUANjSFRCQ
HwwIiN8bEADgcqPXgkhkpvkOBVzh8QoTrFEdH2jBBb8AHXh013nf3Nb0GS6L
tNvOXo/SpROjHP1PdKcUF6sUK7/67YNBdMit1ipbpQP0+1EZAtervTyNYBK8
j0BDi15duhNhfB7eDe7Bqt39Bk3w0haq3TkXieXbqjDroJEqzxElgI4SpW7w
VrtQaEKVD8yAHgALvHCoWLVulEqoMnbv4almXyMJqw8Mee3SJO1D6jEJco0E
UEWrgUjPLyu8uxBvmJosi9b9TVx95wro6Oq+tGzWFY8L7+3YmuQ2WbCsVI0e
7vyr3SG8HKtlG+zdHhPqOiVuFZui8LquMRV1GF3QF10yxhk34BBXVWNBUqHn
ZAtccRRO8sSLRFzOAtvx2VZ8GWPlZOcDIoGyivHd3O9he0Lk7dtvoM+vEqWh
TZnb3eguXV3fjr4yl3DL8dqVbXMQ7ynfweIrv2hRfJELzN/XOiSXbHVdn4b5
zyAnyC1brkUuXHv0DTQstV5g5UNGhWQNBuo5IyqmS751TXdf0+ZTx6Ek2/uR
VIEVphaOhq6RAJvjQitT8S2M8ScuzI/1ff0ix1dYRdg6U8kUm56A3VXZs6pY
aF9NAAHkc+0PivmW0veFVgSEc8QXMKBLjCrdtwNZjJsCSxqw+vwB5tJcy4gX
dv4N1pLw9RVEA9We2apSutyjDGc6IpxGhXKejs6JemgdtqRLeegbhCd4YZkr
O4lkfOCvCbqPRFuN3oaP0cHCQGD7ksI2gb5OMeTquRY4ZYav0nMFU8JfROLq
vG2prHzFx/k8+I0O5rU78TW6ZGLuoNSeRiBOsC0PGjS4GdZir9UegFES4kV0
CMxvWNBVC81uoos2RAVcANhsmZyvKk2LkuzlquRJXnaX6xOT6ZRVKCyyNQIO
7oS6Ob6n2jd0h4xUHNEqP6NzjtW0dHeHePmicsqAQZ1W77jtqPP4fnzY4e7w
UinuPuWGZyX5xirVqnSmClMuLuVqUqr5jS+iykt3BAcFPbKIfM9IpCvxVDSV
hfpq1FTSmDXG16g6/qAFK/A2asURCH+W01fhgjxS2nLmS/UUHYWl2yBaFTYc
RfDDZXcfYWt5N3jMNL416JbL2H03IxsF85Uxt5TZc8W0wplzwwU5zvrRnb8Z
BSGXTRHCmtFlsXyiJZQBJ9eL3nuqDnfYhZpHB0cQFFW3MjU15PHBVsmNDkcV
8Lhv14EhYj9dMNd1/ogvM8bTJXy8J7aVtCAkAd7mrROCp4jB0IAerdDtEDbB
HSG4KhYckl0AE0s7P/aIFO5Tq1MM377q7xlCsOMusrYnsz54Rio+VaX4DC2a
b3CHlvb8M53M5gtvbH1hzwYInW0L1wAk90nxsd7kAFIeanSxeReb5xoP6iab
q8VcL4bMUlqwiK/hcpDolC4LMX/AFw3H7aMJ+LMV/l7qEhuD7kGc6i6RsnCv
vTrxDTh8QYRBbYab2x/niBaYz2/Ysol7UGAarBaidcCnddddFW62i+on7TXK
thbCB5lFCl/j+xAdTE9ub77hQzTevNoBRAhHl61iOHyCEbTAxFu1OqCP3T2p
a8XQAvxePADr49DrvaLFAvBZqHF8XAun2FE87dYyvj25s2lIzsDGOAo1FnSZ
sK/d6AlbDOFusqEwCDG1q2rH1YKE2o2oXAaE4JdfXp2fvJSnl5c/nBzYLefu
A5nwHSvuZnOqNWZGDX79lS8lpEDS3dLjAussOO4Y2D0y4yJTv0dinrer2hm+
8AUfUYX7Oud7whY3u9GS8vwk/rHPeZ0PxAg/5bt2U36I1lW79ui4PaPAl/Nm
mT/OEyJUIrlBUV5w4eUqSF4ooXc3ORwI8U7+SP28i/5iCF5CAg8cI95BX3S8
Enj+Trw7oLRi3/3X//MPDqJXB/CB5NsepYSecH2iFOU7efSsB5Adf9pMFmoL
U7Qgd3QD+8nx6dWriwN5jldH+U0lN7DbDQfVOKLUJGdVBDPJ32YMGA852LOl
qbab1sgb4XMc3HpQvg/ieCJSVszJVNhgsy17XX3EatrCfGXv1LKrhpE5cBY2
ok7NxkeuJXIzCnwn6ycx62uidWytZLJ2bqmjNXzXui9zfd1giAeHMv2m6x7N
u7+MiuPdMEkcn457dlz8eXcJr8wbOnHwHchQf/fRYzxAoczsAETvkH99fvz0
gKsK/CNQr/AI/t89EkmtLWa26dA5EmHLZn1RNP8NijtLZF0VMawwVUb5Cky8
CB4Pp+AFQv52BSIZD1zc6B6fm+b6bF1Ca1tU9UJ+JbZ3P//8sd6d7D8BsX74
WD96NFL7WfZk9+Huoyf7k939/b3R44d657Ge7GVjNdp/pCbZw/0ne3t72ecT
tbM7EeIl9gO/jkbZ4/Hjvf3x4939vSej7YfZ/v6Tyd7n470nT7af7NDz7Mn2
zkPoQO0+HD2c7H8+UtDH/u7o4X64vrVr5e9ZzGgJcaKf0ed9/rzPn392T0nc
x2ndw7GLM5HqFm8PeI/r7KuNiSqM3rAZNv5DOoaPwMoif231rSr5ooOqzqc5
pkpcQxj97dvoD4/Yv9/B9oWDN2h4ENrnoXQ+mKvgXKxdAi28vqGMPt9jdlZN
u6m/pNqLzj/otE0HpzJ3eppCHmB78YSgjZZG+X5oemGPxbWPzFVeDO86kSek
3Iwd6NYpvK17O3fX0Nx7Ck2uW2k8VwQeHp08tBkge1kWn22waW5bXpLe9yDi
ewAJv+GGBPoPkstsjD1qnHgF8G1YPR/QXNRO9fb4iGAr4Gx9WMtqXBWPOCN0
wdYiJQFPB7Qv1wIaKKaATiJNMfmDC3Yu/sovf6sXpdqkbF85mN6JeGmPcxIp
DrTbGmtXYeBOEuKs8zdO9+Kfy8I/7BQuWAWbVxnTD/49h0pFKrej+a0X2529
/vYuCu4P/Ed5YBlzmOmCj4xT/P+n7wAYcfLy/n52RCR4/sI6FKnn8R2B/nxm
VEqMXeA60fVyY38J4bm/qzW+SED8D+hsIbK1bQAA

-->

</rfc>
