<?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-rfc2629 version 1.5.12 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-tls-ctls-05" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.10.0 -->
  <front>
    <title abbrev="cTLS 1.3">Compact TLS 1.3</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-tls-ctls-05"/>
    <author initials="E." surname="Rescorla" fullname="Eric Rescorla">
      <organization>Mozilla</organization>
      <address>
        <email>ekr@rtfm.com</email>
      </address>
    </author>
    <author initials="R." surname="Barnes" fullname="Richard Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Arm Limited</organization>
      <address>
        <email>hannes.tschofenig@arm.com</email>
      </address>
    </author>
    <date year="2022" month="March" day="07"/>
    <area>General</area>
    <workgroup>TLS Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <t>This document specifies a "compact" version of TLS 1.3. It is
isomorphic to TLS 1.3 but saves space by trimming obsolete material,
tighter encoding, a template-based specialization technique, and
alternative cryptographic techniques. cTLS is not directly interoperable with 
TLS 1.3, but it should eventually be possible for a cTLS/TLS 1.3 server 
to exist and successfully interoperate.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>DISCLAIMER: This is a work-in-progress draft of cTLS and has not yet
seen significant security analysis, so could contain major errors. It
should not be used as a basis for building production systems.</t>
      <t>This document specifies a "compact" version of TLS 1.3 <xref target="RFC8446" format="default"/>. It is isomorphic
to TLS 1.3 but designed to take up minimal bandwidth. The space reduction
is achieved by five basic techniques:</t>
      <ul spacing="normal">
        <li>Omitting unnecessary values that are a holdover from previous versions
of TLS.</li>
        <li>Omitting the fields and handshake messages required for preserving backwards-compatibility
with earlier TLS versions.</li>
        <li>More compact encodings, for example point compression.</li>
        <li>A template-based specialization mechanism that allows pre-populating information 
at both endpoints without the need for negotiation.</li>
        <li>Alternative cryptographic techniques, such as semi-static Diffie-Hellman.</li>
      </ul>
      <t>For the common (EC)DHE handshake with pre-established certificates, cTLS
achieves an overhead of 45 bytes over the minimum required by the
cryptovariables.  For a PSK handshake, the overhead is 21 bytes.  Annotated
handshake transcripts for these cases can be found in <xref target="transcripts" format="default"/>.</t>
      <t>Because cTLS is semantically equivalent to TLS, it can be viewed either
as a related protocol or as a compression mechanism. Specifically, it
can be implemented by a layer between the TLS handshake state
machine and the record layer.</t>
    </section>
    <section anchor="conventions-and-definitions" numbered="true" toc="default">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/>
when, and only when, they appear in all capitals, as shown here.</t>
      <t>Structure definitions listed below override TLS 1.3 definitions; any PDU
not internally defined is taken from TLS 1.3.</t>
      <section anchor="template-based-specialization" numbered="true" toc="default">
        <name>Template-based Specialization</name>
        <t>A significant transmission overhead in TLS 1.3 is contributed to by two factors, 
:
- the negotiation of algorithm parameters, and extensions,  as well as 
- the exchange of certificates.</t>
        <t>TLS 1.3 supports different credential types and modes that 
are impacted differently by a compression scheme. For example, TLS supports 
certificate-based authentication, raw public key-based authentication as well 
as pre-shared key (PSK)-based authentication. PSK-based authentication can be 
used with externally configured PSKs or with PSKs established through tickets.</t>
        <t>The basic idea of template-based specialization is that we start with the basic 
TLS 1.3 handshake, which is fully general and then remove degrees of freedom, 
eliding parts of the handshake which are used to express those degrees of
freedom. For example, if we only support one version of TLS, then it
is not necessary to have version negotiation and the
supported_versions extension can be omitted.</t>
        <t>Importantly, this process is performed only for the wire encoding but
not for the handshake transcript.  The result is that the transcript for a
specialized cTLS handshake is the same as the transcript for a TLS 1.3 handshake
with the same features used.</t>
        <t>One way of thinking of this is as if specialization is a stateful compression
layer between the handshake and the record layer:</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
+---------------+---------------+---------------+
|   Handshake   |  Application  |     Alert     |
+---------------+---------------+---------------+    +---------+
|               cTLS Compression Layer          |<---| Profile |
+---------------+---------------+---------------+    +---------+
|          cTLS Record Layer / Application      |
+---------------+---------------+---------------+
]]></artwork>
        <t>By assuming that out-of-band agreements took place already prior to the start of
the cTLS protocol exchange, the amount of data exchanged can be radically reduced. 
Because different clients may use different compression templates and because multiple 
compression templates may be available for use in different deployment environments, 
a client needs to inform the server about the profile it is planning to use. The 
profile field in the ClientHello serves this purpose.</t>
        <t>Although the template-based specialization mechanisms described here are general,
we also include specific mechanism for certificate-based exchanges because those are
where the most complexity and size reduction can be obtained. Most of the other exchanges in 
TLS 1.3 are highly optimized and do not require compression to be used.</t>
        <t>The compression profile defining the use of algorithms, algorithm parameters, and 
extensions is specified via a JSON dictionary.</t>
        <t>For example, the following specialization describes a protocol with a single fixed 
version (TLS 1.3) and a single fixed cipher suite (TLS_AES_128_GCM_SHA256). On the 
wire, ClientHello.cipher_suites, ServerHello.cipher_suites, and the 
supported_versions extensions in the ClientHello and ServerHello would be omitted.</t>
        <artwork type="JSON" name="" align="left" alt=""><![CDATA[
{
   "version" : 772,
   "cipherSuite" : "TLS_AES_128_GCM_SHA256"
}
]]></artwork>
        <t>The following elements are defined:</t>
        <dl newline="false" spacing="normal">
          <dt>profile (integer):</dt>
          <dd>
  identifies the profile being defined.</dd>
          <dt>version (integer):</dt>
          <dd>
  indicates that both sides agree to the
single TLS version specified by the given integer value
(772 == 0x0304 for TLS 1.3). The supported_versions extension
is omitted from ClientHello.extensions and reconstructed in the transcript as a
single-valued list with the specified value. The supported_versions extension is
omitted from ClientHello.extensions and reconstructed in the transcript with the
specified value.</dd>
          <dt>cipherSuite (string):</dt>
          <dd>
  indicates that both sides agree to
the single named cipher suite, using the "TLS_AEAD_HASH" syntax
defined in <xref target="RFC8446" format="default"/>, Section 8.4. The ClientHello.cipher_suites
field is omitted and reconstructed in the transcript as a single-valued
list with the specified value. The server_hello.cipher_suite field is
omitted and reconstructed in the transcript as the specified value.</dd>
          <dt>dhGroup (string):</dt>
          <dd>
  specifies a single DH group to use for key establishment. The
group is listed by the code point name in <xref target="RFC8446" format="default"/>, Section 4.2.7.
(e.g., x25519). This implies a literal "supported_groups" extension
consisting solely of this group.</dd>
          <dt>signatureAlgorithm (string):</dt>
          <dd>
  specifies a single signature scheme to use for authentication. The
signature algorithm is listed by the code point name in <xref target="RFC8446" format="default"/>,
Section 4.2.3. (e.g., ecdsa_secp256r1_sha256). This implies a literal
"signature_algorithms" extension consisting solely of this group.</dd>
          <dt>random (integer):</dt>
          <dd>
  indicates that the ClientHello.Random and ServerHello.Random values
are truncated to the given length. When the transcript is
reconstructed, the Random is padded to the right with 0s and the
anti-downgrade mechanism in <xref target="RFC8446" format="default"/>, Section 4.1.3 is disabled.
IMPORTANT: Using short Random values can lead to potential
attacks. The Random length MUST be less than or equal to 32 bytes.</dd>
        </dl>
        <t>[[Open Issue: Karthik Bhargavan suggested the idea of hashing 
ephemeral public keys and to use the result (truncated to 32 bytes)
as random values. Such a change would require a security analysis. ]]</t>
        <dl newline="false" spacing="normal">
          <dt>mutualAuth (boolean):</dt>
          <dd>
  if set to true, indicates that the client must authenticate with
a certificate by sending Certificate and a CertificateVerify message.
The server MUST omit the CertificateRequest message, as its contents
are redundant.
[[OPEN ISSUE: We don't actually say that you can omit empty messages,
so we need to add that somewhere.]]</dd>
          <dt>extension_order:</dt>
          <dd>
  indicates in what order extensions appear in respective messages. 
This allows to omit sending the type. If there is only a single 
extension to be transmitted, then the extension length field can also
be omitted. For example, imagine that only the KeyShare extension 
needs to be sent in the ClientHello as the only extension. Then, 
the following structure</dd>
        </dl>
        <artwork name="" type="" align="left" alt=""><![CDATA[
   28                    // Extensions.length
   33 26                 // KeyShare
     0024                // client_shares.length
       001d              // KeyShareEntry.group
       0020 a690...af948 // KeyShareEntry.key_exchange
]]></artwork>
        <t>is compressed down to (assuming the KeyShare group has been pre-agreed)</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
   0020 a690...af948 // KeyShareEntry.key_exchange
]]></artwork>
        <dl newline="false" spacing="normal">
          <dt>clientHelloExtensions (predefined extensions):</dt>
          <dd>
  Predefined ClientHello extensions, see {predefined-extensions}</dd>
          <dt>serverHelloExtensions (predefined extensions):</dt>
          <dd>
  Predefined ServerHello extensions, see {predefined-extensions}</dd>
          <dt>encryptedExtensions (predefined extensions):</dt>
          <dd>
  Predefined EncryptedExtensions extensions, see {predefined-extensions}</dd>
          <dt>certRequestExtensions (predefined extensions):</dt>
          <dd>
  Predefined CertificateRequest extensions, see {predefined-extensions}</dd>
          <dt>knownCertificates (known certificates):</dt>
          <dd>
  A compression dictionary for the Certificate message, see {known-certs}</dd>
          <dt>finishedSize (integer):</dt>
          <dd>
  indicates that the Finished value is to be truncated to the given
length. When the transcript is reconstructed, the remainder of the
Finished value is filled in by the receiving side.</dd>
        </dl>
        <t>[[OPEN ISSUE: How short should we allow this to be? TLS 1.3 uses
the native hash and TLS 1.2 used 12 bytes. More analysis is needed
to know the minimum safe Finished size. See <xref target="RFC8446" format="default"/>;
Section E.1 for more on this, as well as
https://mailarchive.ietf.org/arch/msg/tls/TugB5ddJu3nYg7chcyeIyUqWSbA.]]</t>
        <dl newline="false" spacing="normal">
          <dt>optional (object):</dt>
          <dd>
  contains keys that are not required to be understood by the client.
Server operators MUST NOT place a key in this section unless the server is
able to determine whether the key is in use based on the client data it
receives. A key MUST NOT appear in both the main template and the optional
section.</dd>
        </dl>
        <section anchor="requirements-on-tls-implementations" numbered="true" toc="default">
          <name>Requirements on TLS Implementations</name>
          <t>To be compatible with the specializations described in this section, a
TLS stack needs to provide the following features:</t>
          <ul spacing="normal">
            <li>If specialization of extensions is to be used, then the TLS stack MUST order
each vector of Extension values in ascending order according to the
ExtensionType.  This allows for a deterministic reconstruction of the extension
list.</li>
            <li>If truncated Random values are to be used, then the TLS stack MUST be
configurable to set the remaining bytes of the random values to zero.  This
ensures that the reconstructed, padded random value matches the original.</li>
            <li>If truncated Finished values are to be used, then the TLS stack MUST be
configurable so that only the provided bytes of the Finished are verified,
or so that the expected remaining values can be computed.</li>
          </ul>
        </section>
        <section anchor="predefined-extensions" numbered="true" toc="default">
          <name>Predefined Extensions</name>
          <t>Extensions used in the ClientHello, ServerHello, EncryptedExtensions, and
CertificateRequest messages can be "predefined" in a compression profile, so
that they do not have to be sent on the wire.  A predefined extensions object is
a dictionary whose keys are extension names specified in the TLS
ExtensionTypeRegistry specified in <xref target="RFC8446" format="default"/>.  The corresponding value is a
hex-encoded value for the ExtensionData field of the extension.</t>
          <t>When compressing a handshake message, the sender compares the extensions in the
message being compressed to the predefined extensions object, applying the
following rules:</t>
          <ul spacing="normal">
            <li>If the extensions list in the message is not sorted in ascending order by
extension type, it is an error, because the decompressed message will not
match.</li>
            <li>If there is no entry in the predefined extensions object for the type of the
extension, then the extension is included in the compressed message</li>
            <li>
              <t>If there is an entry:  </t>
              <ul spacing="normal">
                <li>If the ExtensionData of the extension does not match the value in the
dictionary, it is an error, because decompression will not produce the
correct result.</li>
                <li>If the ExtensionData matches, then the extension is removed, and not
included in the compressed message.</li>
              </ul>
            </li>
          </ul>
          <t>When decompressing a handshake message the receiver reconstitutes the original
extensions list using the predefined extensions:</t>
          <ul spacing="normal">
            <li>If there is an extension in the compressed message with a type that exists in
the predefined extensions object, it is an error, because such an extension
would not have been sent by a sender with a compatible compression profile.</li>
            <li>For each entry in the predefined extensions dictionary, an extension is added
to the decompressed message with the specified type and value.</li>
            <li>The resulting vector of extensions MUST be sorted in ascending order by
extension type.</li>
          </ul>
          <t>Note that the "version", "dhGroup", and "signatureAlgorithm" fields in the
compression profile are specific instances of this algorithm for the
corresponding extensions.</t>
          <t>[[OPEN ISSUE: Are there other extensions that would benefit from special
treatment, as opposed to hex values.]]</t>
        </section>
        <section anchor="known-certs" numbered="true" toc="default">
          <name>Known Certificates</name>
          <t>Certificates are a major contributor to the size of a TLS handshake.  In order
to avoid this overhead when the parties to a handshake have already exchanged
certificates, a compression profile can specify a dictionary of "known
certificates" that effectively acts as a compression dictionary on certificates.</t>
          <t>A known certificates object is a JSON dictionary whose keys are strings containing
hex-encoded compressed values.  The corresponding values are hex-encoded strings
representing the uncompressed values.  For example:</t>
          <artwork type="JSON" name="" align="left" alt=""><![CDATA[
{
  "00": "3082...",
  "01": "3082...",
}
]]></artwork>
          <t>When compressing a Certificate message, the sender examines the cert_data field
of each CertificateEntry.  If the cert_data matches a value in the known
certificates object, then the sender replaces the cert_data with the
corresponding key.  Decompression works the opposite way, replacing keys with
values.</t>
          <t>Note that in this scheme, there is no signaling on the wire for whether a given
cert_data value is compressed or uncompressed.  Known certificates objects
SHOULD be constructed in such a way as to avoid a uncompressed object being
mistaken for compressed one and erroneously decompressed.  For X.509, it is
sufficient for the first byte of the compressed value (key) to have a value
other than 0x30, since every X.509 certificate starts with this byte.</t>
        </section>
      </section>
      <section anchor="record-layer" numbered="true" toc="default">
        <name>Record Layer</name>
        <t>The only cTLS records that are sent in plaintext are handshake records
(ClientHello and ServerHello/HRR) and alerts. cTLS alerts are the same
as TLS alerts and use the same content types.  For handshake records,
we set the <tt>content_type</tt> field to a fixed cTLS-specific value to
distinguish cTLS plaintext records from encrypted records, TLS/DTLS
records, and other protocols using the same 5-tuple.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
      struct {
          ContentType content_type = ctls_handshake;
          opaque fragment<0..2^16-1>;
      } CTLSPlaintext;
]]></artwork>
        <t>[[OPEN ISSUE: The profile_id is needed in the ClientHello to inform the server
what compression profile to use. For a ServerHello this field is not required. 
Should we make this field optional?]]</t>
        <t>Encrypted records use DTLS <xref target="I-D.draft-ietf-tls-dtls" format="default"/> 1.3 record framing, comprising a configuration octet
followed by optional connection ID, sequence number, and length fields. The
encryption process and additional data are also as described in DTLS.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
      0 1 2 3 4 5 6 7
      +-+-+-+-+-+-+-+-+
      |0|0|1|C|S|L|E E|
      +-+-+-+-+-+-+-+-+
      | Connection ID |   Legend:
      | (if any,      |
      /  length as    /   C   - Connection ID (CID) present
      |  negotiated)  |   S   - Sequence number length
      +-+-+-+-+-+-+-+-+   L   - Length present
      | 8 or 16 bit   |   E   - Epoch
      |Sequence Number|
      | (if present)  |
      +-+-+-+-+-+-+-+-+
      | 16 bit Length |
      | (if present)  |
      +-+-+-+-+-+-+-+-+

      struct {
          opaque unified_hdr[variable];
          opaque encrypted_record[length];
      } CTLSCiphertext;
]]></artwork>
        <t>The presence and size of the connection ID field is negotiated as in DTLS.</t>
        <t>As with DTLS, the length field MAY be omitted by clearing the L bit, which means
that the record consumes the entire rest of the data in the lower level
transport.  In this case it is not possible to have multiple DTLSCiphertext
format records without length fields in the same datagram.  In stream-oriented
transports (e.g., TCP), the length field MUST be present. For use over other 
transports length information may be inferred from the underlying layer.</t>
        <t>Normal DTLS does not provide a mechanism for suppressing the sequence number
field entirely. When a reliable, ordered transport (e.g., TCP) is in use, the
S bit in the configuration octet MUST be cleared and the sequence number
MUST be omitted. When an unreliable transport is in use, the S bit
has its usual meaning and the sequence number MUST be included.</t>
      </section>
      <section anchor="handshake-layer" numbered="true" toc="default">
        <name>Handshake Layer</name>
        <t>The cTLS handshake framing is same as the TLS 1.3 handshake
framing, except for two changes:</t>
        <ul spacing="normal">
          <li>The length field is omitted.</li>
          <li>The HelloRetryRequest message is a true handshake message
instead of a specialization of ServerHello.</li>
        </ul>
        <artwork name="" type="" align="left" alt=""><![CDATA[
      struct {
          HandshakeType msg_type;    /* handshake type */
          select (Handshake.msg_type) {
              case client_hello:          ClientHello;
              case server_hello:          ServerHello;
              case hello_retry_request:   HelloRetryRequest;
              case end_of_early_data:     EndOfEarlyData;
              case encrypted_extensions:  EncryptedExtensions;
              case certificate_request:   CertificateRequest;
              case certificate:           Certificate;
              case certificate_verify:    CertificateVerify;
              case finished:              Finished;
              case new_session_ticket:    NewSessionTicket;
              case key_update:            KeyUpdate;
          };
      } Handshake;
]]></artwork>
      </section>
    </section>
    <section anchor="handshake-messages" numbered="true" toc="default">
      <name>Handshake Messages</name>
      <t>In general, we retain the basic structure of each individual
TLS handshake message. However, the following handshake
messages have been modified for space reduction and cleaned
up to remove pre-TLS 1.3 baggage.</t>
      <section anchor="clienthello" numbered="true" toc="default">
        <name>ClientHello</name>
        <t>The cTLS ClientHello is defined as follows.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
      opaque Random[RandomLength];      // variable length

      struct {
          opaque profile_id<0..2^8-1>;
          Random random;
          CipherSuite cipher_suites<1..2^16-1>;
          Extension extensions<1..2^16-1>;
      } ClientHello;
]]></artwork>
        <t>The client uses the <tt>profile_id</tt> field to inform the server
about the compression profile being used (see
<xref target="template-based-specialization" format="default"/>).  This field MUST be set to
a zero-length value and only if no compression profile is used.  Non zero-length
values are agreed out of band between the client and server,
as part of the specification of the compression profile.</t>
      </section>
      <section anchor="serverhello" numbered="true" toc="default">
        <name>ServerHello</name>
        <t>We redefine ServerHello in the following way.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
      struct {
          Random random;
          CipherSuite cipher_suite;
          Extension extensions<1..2^16-1>;
      } ServerHello;
]]></artwork>
      </section>
      <section anchor="helloretryrequest" numbered="true" toc="default">
        <name>HelloRetryRequest</name>
        <t>The HelloRetryRequest has the following format.</t>
        <artwork name="" type="" align="left" alt=""><![CDATA[
      struct {
          CipherSuite cipher_suite;
          Extension extensions<2..2^16-1>;
      } HelloRetryRequest;
]]></artwork>
        <t>The HelloRetryRequest is the same as the ServerHello above 
but without the unnecessary sentinel Random value.</t>
      </section>
    </section>
    <section anchor="examples" numbered="true" toc="default">
      <name>Examples</name>
      <t>This section provides some example specializations.</t>
      <t>For this example we use TLS 1.3 only with AES_GCM,
X25519, ALPN h2, short random values, and everything 
else is ordinary TLS 1.3.</t>
      <artwork type="JSON" name="" align="left" alt=""><![CDATA[
{
   "profile" : 1,
   "version" : 772,
   "random": 16,
   "cipherSuite" : "TLS_AES_128_GCM_SHA256",
   "dhGroup": "X25519",
   "clientHelloExtensions": {
      "named_groups": 29,
      "application_layer_protocol_negotiation" : "030016832",
      "..." : null
    }
}
]]></artwork>
      <t>Version 772 corresponds to the hex representation 0x0304, named group "29"
(0x001D) represents X25519.</t>
      <t>[[OPEN ISSUE: Should we have a registry of well-known profiles?]]</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>WARNING: This document is effectively brand new and has seen no
analysis. The idea here is that cTLS is isomorphic to TLS 1.3, and
therefore should provide equivalent security guarantees.</t>
      <t>The use of key ids is a new feature introduced in this document, which
requires some analysis, especially as it looks like a potential source
of identity misbinding. This is, however, entirely separable
from the rest of the specification.</t>
      <t>Transcript expansion also needs some analysis and we need to determine
whether we need an extension to indicate that cTLS is in use and with
which profile.</t>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <section anchor="adding-a-contenttype" numbered="true" toc="default">
        <name>Adding a ContentType</name>
        <t>This document requests that a code point be allocated from the "TLS ContentType
registry.  This value must be in the range 0-31 (inclusive).  The row to be
added in the registry has the following form:</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Description</th>
              <th align="left">DTLS-OK</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD</td>
              <td align="left">ctls</td>
              <td align="left">Y</td>
              <td align="left">RFCXXXX</td>
            </tr>
            <tr>
              <td align="left">TBD</td>
              <td align="left">ctls_handshake</td>
              <td align="left">Y</td>
              <td align="left">RFCXXXX</td>
            </tr>
          </tbody>
        </table>
        <t>[[ RFC EDITOR: Please replace the value TBD with the value assigned by IANA, and
the value XXXX to the RFC number assigned for this document. ]]</t>
        <t>[[OPEN ISSUE: Should we require standards action for all profile IDs that would fit in 2 octets.]]</t>
      </section>
      <section anchor="template-keys" numbered="true" toc="default">
        <name>Template Keys</name>
        <t>This document requests that IANA open a new registry entitled "cTLS Template Keys", on the Transport Layer Security (TLS) Parameters page, with a "Specification Required" registration policy and the following initial contents:</t>
        <table align="center">
          <thead>
            <tr>
              <th align="left">Key</th>
              <th align="left">JSON Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">profile</td>
              <td align="left">number</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">version</td>
              <td align="left">number</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">cipherSuite</td>
              <td align="left">string</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">dhGroup</td>
              <td align="left">string</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">signatureAlgorithm</td>
              <td align="left">string</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">random</td>
              <td align="left">number</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">mutualAuth</td>
              <td align="left">true/false</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">extension_order</td>
              <td align="left">object</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">clientHelloExtensions</td>
              <td align="left">object</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">serverHelloExtensions</td>
              <td align="left">object</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">encryptedExtensions</td>
              <td align="left">object</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">certRequestExtensions</td>
              <td align="left">object</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">knownCertificates</td>
              <td align="left">object</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">finishedSize</td>
              <td align="left">number</td>
              <td align="left">(This document)</td>
            </tr>
            <tr>
              <td align="left">optional</td>
              <td align="left">object</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <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="RFC8446" target="https://www.rfc-editor.org/info/rfc8446">
        <front>
          <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
          <author fullname="E. Rescorla" initials="E." surname="Rescorla">
            <organization/>
          </author>
          <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="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <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="I-D.draft-ietf-tls-dtls">
        <front>
          <title>*** BROKEN REFERENCE ***</title>
          <author>
            <organization/>
          </author>
          <date/>
        </front>
      </reference>
    </references>
    <section anchor="transcripts" numbered="true" toc="default">
      <name>Example Exchange</name>
      <t>The follow exchange illustrates a complete cTLS-based exchange supporting 
mutual authentication using certificates. The digital signatures use ECDSA with SHA256 
and NIST P256r1. The ephemeral Diffie-Hellman uses the FX25519 curve and 
the exchange negotiates TLS-AES-128-CCM8-SHA256. 
The certificates are exchanged using certificate identifiers.</t>
      <t>The resulting byte counts are as follows:</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
                     ECDHE
              ------------------
              TLS  CTLS  Overhead
              ---  ----  --------
ClientHello   132   36       4
ServerHello    90   36       4
ServerFlight  478   80       7
ClientFlight  458   80       7
==================================
Total        1158  232      22
]]></artwork>
      <t>The following compression profile was used in this example:</t>
      <artwork type="JSON" name="" align="left" alt=""><![CDATA[
{
  "profile": 1, 
  "version": 772,
  "cipherSuite": "TLS_AES_128_CCM_8_SHA256",
  "dhGroup": "X25519",
  "signatureAlgorithm": "ecdsa_secp256r1_sha256",
  "finishedSize": 8,
  "clientHelloExtensions": {
    "server_name": "000e00000b6578616d706c652e636f6d",
  },
  "certificateRequestExtensions": {
    "certificate_request_context": 0, 
    "signature_algorithms": "00020403"
  },
  "mutualAuth": true, 
  "extension-order": {
       "clientHelloExtensions": [
          "key_share"
       ],
       "ServerHelloExtensions": [
          "key_share"
       ],
  },
  
  "knownCertificates": {
    "61": "3082...",
    "62": "3082...", 
    "63": "...", 
    "64": "...", 
    ...
  }
}
]]></artwork>
      <t>ClientHello: 36 bytes = DH(32) + Overhead(4)</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
01                    // ClientHello
01                    // Profile ID
0020 a690...af948     // KeyShareEntry.key_exchange
]]></artwork>
      <t>ServerHello: 36 = DH(32) + Overhead(4)</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
02                 // ServerHello
26                 // Extensions.length
0020 9fbc...0f49   // KeyShareEntry.key_exchange
]]></artwork>
      <t>Server Flight: 80 = SIG(64) + MAC(8) + CERTID(1) + Overhead(7)</t>
      <t>The EncryptedExtensions, and the CertificateRequest messages 
are omitted because they are empty.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
0b                 // Certificate
  03               //   CertificateList
    01             //     CertData.length
      61           //       CertData = 'a'

0f                 // CertificateVerify
  4064             //   Signature.length
       3045...10ce //   Signature
  
14                 // Finished
  bfc9d66715bb2b04 //   VerifyData
]]></artwork>
      <t>Client Flight: 80 bytes = SIG(64) + MAC(8) + CERTID(1) + Overhead(7)</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
0b                 // Certificate
  03               //   CertificateList
    01             //     CertData.length
      62           //       CertData = 'b'


0f                 // CertificateVerify
  4064             //   Signature.length
       3045...f60e //   Signature

14                 // Finished
  35e9c34eec2c5dc1 //   VerifyData
]]></artwork>
    </section>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>We would like to thank Karthikeyan Bhargavan, Owen Friel, Sean Turner, Benjamin Schwartz, Martin Thomson, and Chris Wood.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAApmJmIAA8U8aXfbxrXf51fMYz5USkmKpBbLTPNaWpJjNZalJ8pNc3Ly
WBAYkqhBgAFAUYyl/vbeZTaQ0GKfvvPY05gCZ7lz923QarVEGZeJ6suTbL4I
wlLevB/KbntfBONxrm77MjQPoixMgzmMjPJgUrZiVU5aZVK0QvxP51CEQamm
Wb7uy6KMhIgXeV+W+bIoe53O605PBLkK+vIHlao8SMQqyz9N82y56NOOP8Gf
cTqVP+Aj8Umt4feoL8/TUuWpKlunuKcQRRmk0ShIshTgWKtCLOK+/KXMwqYs
srzM1aSAb+s5fvlViGBZzrK8L2RLSPjEadGXZ215rYowy5OAHvKZzvI4rD7P
8mmQxr8HZZylfXmR/R4n+hc1D+KkL9Wn/C95OZm3w2wuKltct+WbAMAuvA2u
43AW5JH/Q3WHkxg299fPk/Ff4sVtu7irrv6uLW+KcJZNVBpPvR3eBSmsvPlb
dZNBPpfv43lcqsjfakZT26Wd+pcg1+dKs3wOk28VYFFevz3pdbuv+0DddOJ+
gE+r1ZLBuChzYCEhbmZxIYFflnOVlrJYqDCexABbIBshs1lD3qq8AJhkNjEs
15bnpYwLERfZPMsXM6BImZkf5XgJKwW3sEoBCyg5XgN3xfM5ck02LrJElUoC
RCqPg6QJXD2dwXep0jCLYEwTNi/VfJHAiNY4KFTEcAWJRg78Gs7S+LelgqFp
JKUIEmQ+OqMM8/WizKZ5wGCZoUWb5QOOm2aljOJcgTisgVAwNVsAp48TJVdx
OZNCH6RJJ4nhMLNsmURS3QKOlkECs8ZKLrKiiHEOoBcgxsX3DAYKlQPSpACk
qLu4KAnMYhmGqigmy6SybanaTJR5HEWJEuIblKU8i5YhHlaI0/PhyfvB+cXZ
NQggkitG8qBUtuK0tcjhrLAsyzrSiI6JG84CPutalaJQKpVFPE2BvGGApFbh
Mo/LNYwMknURozRmMqSDhllaBnEKNPonnE3leZYXSHKhEYGLAgaWSJoAgQEq
AVCIiPEyTpCIcmFPAFJeAD2L9tdym/z8+b+An48PDo4eHjTrScd6YoP1IoXn
BNDgeRl8AjgXgNs0ngcJAJpGqzgqZyCZM6X5M1cG14jZcBYDoSPk2gnyE57N
5yMQopa8BMEs8ZhLEEekapCv5W2QwO+ynAVA8FzBqWZZEmXICZM8mwNK1G2c
LQtzRNQtfMq2v2QJgAFWkqjQVEyjYobnmOM+U9ghV78tgX8jwjisiuyGM8dB
+GkFqgs0PWKzjMdxAiSGbYivVZAnMQCDyDIg4M4XGQCr8W+lEPgBV1d3AUgi
cjtwLA1CZoOZOHHwjJzOAWmg0oq5xkmSZKsCAW4tssUS5iHQVj/BBIAUxo0z
BDaNaM+CYM+AroiXVOlTp2DAyphmESQvUABNlMAZMmyh5nELDFQJv5/GE0B2
651KknmQtqUQb2F53AsOOweYds5Odk/fnXl0IGTiKRSsMU7iYgZAhSovSbZK
3AllUGhWQjJK5IKZCiIk+MEhMBcMo4e0FbHncu4IiypzpgQf5TYARQmaBmRQ
viVlczX80cHTpCXsBsDDvS5vAOMHKQhrgEbEwQ+qPy3CPF6ULLMwvYDjAgUL
+G+Koj3JlsB6oAI+f/ZGg/QJ8UaFwRLHa20KyAR9AgdHtYbwgxigdLNUNlF/
6kVvY7WCsylAn8oFKY5cIfdEqC3ANcgSicfDHzxOc2zUlkNWGbQZLi300jEy
KSoVxl0gk2ANuB2rcoWKDxGE4DocIPWVmCOJUkVyhmPAJoAzw5PbqIlPshSV
PkoKDTpVEyAV/Y3aTEnwf1AVg6w2Lj4ObxpN/ld+uKTv12f/8/H8+uwUvw/f
Dd6/t1/MiOG7y4/v4Xehv7mZJ5cXF2cfTnkyPJUbjy4GPzfYADYur27OLz8M
3jeQZCUoWWGVLCoiIAXiCE0OILVkrQ1qEqg6VkTmNydXsnsA1NZ+w8ODUbrd
VwcPD2I1UynvlaVAZv4TMAaoXixAr+AaQBOg9CIugwQkAMVslq1SCbRGCzcE
BzMslwBN5HAoQXiIZAo0A7FwHkfKanNv5Hew+VpenX4UaHzoKClxHI1RxPao
7FNWtcZPARp+I2+qSmpYVVJCikHFMhLDz2PmPSdWqQULtkILCchblmxmUFxX
mZyAAgVT2ZSiDzqJ9ZVVUyj5QQJuN7A/2IIgB1cQTlEwWtVdqVLSyE2JuFuB
PsJ/9TrqDkVgqsi+e5oG9ZV1OpaLBXjWQFlQaYB01NegS5B9wfKV64ViHp5n
kbFS6Omj7ADccBA7Dx2c9YYQgsMJAtYmBaSNQpMwYrcVHmAa1ejVK1IOiIGm
zIOVXCxBZYYoOLWD7OFRQaCSBXlFjYiCtgN6b7d2VhtVYv16WkMI8lbYDt5Z
7gE6TuLpEjeABQpUPzSE/vDVezmDcGc6k7DsJ1Uy3mfGOQCeDZAyT1vDWCN9
RdonL3mn0q5iCelp9hWYsBnOZK9xyiGZ0VcpKKw5cCgIAfiAaFAmwP5gIrM5
8KBKYvbEAqQOggdbeVaMlkYGIMyQq0rUhnFZ4a8p9JobxI8neBTSB5oH4A+1
4b81GU7Q1Nrxdu4S7DiDKMFO8GVFH1DohVU0Mg6LkxRD2QwdJxWBrJ/PcXCA
DNwkNYh2BbdDDIKvjY6G0ipMGz4gAmDAOD3oP5KCMb/WGU2wqjdkK4plUlqq
4mg3hoMCYTkAHYSqAaJ5wAmgBZDl66bLLYYQlmVo3kQFqFELoiCc/xLQvwrW
TOs4pTCdv3PQUCDNtrkyYGsILOZLvNg2oQ76OoMJjvG/8CP+2Kp+nv1b3EOA
+84uLiX8PVgsEiPC+Dd8BgkoGPp2/+V74DT3kLf0P0SeE0/hvafj28/9n2Da
vbzKs0kM/vB/FgLa/JpxyfvuVRHwlYfWBBFvQJsXxXLO4QVwK/jTrWzSwnBI
Bijn6CsAF2bZJwkqDIKiIMnB7K1BgmKUhYy5jvQWaATyjxFo67gZC8XeaDAH
B5Ki0SgoA/tjZGQ2DyLtMVLwBdwrrWPpmS8IVxCsOfD0xi8eoYzWZes21qvM
QThjjFxE/VhcEwAJboM4CUwYjxPB0Lt9IrVIsjU5Uiq9jfMsJUSBdg00dBSS
IOZ0IMN44vg/GJu4ZaHZJiaFASCkKdEiwy05FhVmDMV+7MgpeUKbYHSS8aqF
VmzLfJHhVCEg9pmxbUId8rKAzHf/0EEjO6CtS1OskPwFnihMlpEygXroBXSI
rW17b+hcWDKwLYHV0YVEVxSjnaxgCibqjjMQACjoSBeIW9U+xjwEcscFztE2
LMP4wdsLUGVtJ55jFk9nwFnZooznpHpxgygj86MjrCoDZSabYcy6/6shCzuj
Oj7Ho/n+HHpxj/p2wjl3FDDptEcEAVEAyvevw8sPwHJ0cLCLbY5ArZmldECG
oTNuvkFQQ0VU4lYUyUiAUofxxE53sJUwVnZHY2qXQNsYFcYLRG2xjEtFI0eD
s+Go2zse/XByMYK4pXd4tNuWl8ybAm1n02fRNi8wogXg9EOSg9qfjAV50sQX
dWKAM72FIfzCnFTFEUCth2gVnzF32tALN2RfvnrVa9IzBmeI0ODzRv1hG+JB
sAq9qZBBJVpjBiagUVEfmMcwyw5GKFOV78LDPvqHacmZLl8ZjBUupWcj61ka
2dk4OY3Y12fNTcmRIkYXnhS3Vs1C09HL7XiMxukEOY1v0RfjxTldJXYAI/L7
72XnrrPfOSC5Nhyic2RP0AedOo11jrt8XvCoiCRDVyEtKApUVr15Lg+G/foU
LQItoujQecme3ODPz0OHGer/FHQGCrEJhRAeJ8kdWAKO8ELCkRnVhMPKQFUA
m6BljL7R7Dk4Hb0bDN81ZLFOy+BO2OA35dCdU6Qod6xGj9sHjKZHZVRoa+Po
+FJayQqtxEtoRUI7mm1BYUyeI9cLgajbSohoRrWpCjH8XLPG+Ok7SWUtbYWJ
9THKtGEfSjhBLnhc7PIVa50hjExmFMn3KBkO2r32q7bYUe1puynveoeH3dck
XeiXg5ZnsBLABAZ3DcfTtG/R8AQOUQIwkCnIEpWsrYNPY+H0mMqgsGBgDdIz
iLAzdJDvI2QzzL4hVWPGO5v3pbgRPm7221LjRoVREYwKFS5A+ebdEQQEbHLq
cSUaFpaRs8UNP0Z8Fl/AUBDbPqlzNyxQ+5qnbBgi85jLAJRaAeZNw0AniZwG
TlQ6xRLETzO1xdUgBBXGZwdAL42OXxBFbr0ca2csdp3CRs2Yj21F2Sqdgp+t
PK/tcQbVea0oLtAZBht6fnF1eX0z+HDTlx9JDRUzjPArZyQ3LcHsGICzyEpO
NYmgLIPwU8FCryfwkSXlRsFUJ5xnwMR4jkljTFBlcr+n89ZC/PLL5QKQcw5R
i+rLHyHsmMWf5JtZkE/BZQfbtpyC60eYhU1MAmYWFDOEVagFMjJKk0s3afww
b5cugt+pUMnAsIv5p9w/bVsOqX4gdSqO/Q7jUAbbFbW2/PVXIeZLrBkOQI7k
zjgDHgxS5jEIxRWlyWF/TKds85yOMOZLrCA6QeQKBEYgzgFHsStUSkmME+8x
O3nek7+pPJ6sTS2pLZxiZuKgBmaGd3OuFdZPSjOJkrtxyVlQ9IKI19F5TyNg
vTYS7+rsgzwfDj+e9eVP4CFl6R/gCKGunhbBmg+5zpbEQ7QpRC6lBaxoCghA
VrriA0gCtuc5RTZXFEu0EbtW0kcQO6uc3S2LSeD3FYW7+JvvVrqsNTDBAqXg
1tXXwBUjdaPrVbA5wWfQSwK7XoBRO6d4JKdkDiWVrEp1cOnoQieVSyPRqU7r
mlFaPtgQIkowABOeU7uRe5sHUyxccDCPW+NyP6r1ELOl3rrChqdjpHNa1nrU
bElpHTuVxDeFSHcjADF5fPKy0ZXuHcuaz96ePLP4bvPxcPT+vuwd1Y02wFO3
g+x0egc1g1giRpQT9lflKd3o0VXP0hJCK9L5bnyvI4Oj1512ux1MXh8cb48H
rTEycSYeV88UgkoAHCNi4hzrHIDiHS/J4lGDvQesxo8xk4ZJbfIAo12Lw6+A
BRxPR0KHarmzwKQ/+4WO40nlXLlffPL7tYcCHNPPboWW++0BXAtn7L54Qz9i
e/GGKqUKqIq+eLuzmpkv3hb1qtZ5X47YbbX54n0/pcBI3gKwJz2qlHxow0El
ReGSBzZx7dsAq7Zpc1qxhSvilpjTwALHEPMvz/lAb/VgNoiUwtbKrc7NEU+7
ObLGzcmxyylFXc2pHrG9I0TOCYcD2tGEZVRM7Q8YXLHr4Fmfd9lKuy66eYWS
W1huJC+QDvBnm2kH16Aghad7CdChIBvKA3pcK+kaP4VbJ4y9p94iEGuIhmBZ
xHOluF8EEw+FmPACjwIp4jyy76xbfNbuEi3nuEHGRd2mVxgUs7JcFP29PWwL
C/JwBtC2sdGvneXTPXywNy+me2VS7N0sp28Oo+ivy/305+mrcBau1fn6428/
DccDMqGYJwPmSeRONv4nbE/U1y1ABTtOtqXFS6FFJm+G9CrKLHOuP+mWtmCR
l9zllOWFNJVxk2KmcEtXrNF9opMvU+0cWr8EXGLK0MJ+EabV5mj5wAWgNGCp
i/AxWXt07TgVmaW+C0VZ6LgUzCxIuQHNshA5h4DidKIbtkCZfKrNVxlsCQ0v
lZi/kdeMFE4KZVwrPjdNCYFpGCCEmd4c025mg1ib1tsozvvoAR6gXGeBLrbL
PS/y7BYr51VbbepD1LJ0vlX6ARmrZiZdItTzUdxu7B+iKyVUAJ7wrcJyNy5j
taQJDLAdoAi1w8TeVxBieUNnvVG27aQbcqak73Nx/ctQGwO40NcXGvqKC0UZ
iLY+qdNI1YDFdUM8fcqxEqY0bFiPnHWro6hYyE08DEclVMDxv6s806cCO1ZQ
nc5q0g3dp4M6fw1skIRoXHtmEOfFwHTbx6sqyK8/YJFt+JKao6LqKe12uM8t
hhIx7CKAWmYBpgm61HggiysvYNQisORULQqPb7ctQwrh2V5Su9ueayXD3Kwz
+pRoFo/HMhakhjPK1EUT1BUBsEdSmGOuTU2Bqtieh61VD2bHsQNL1voNkpUt
KTffgK+oYMLhasWTxyyKXzyILV2rknStpiAIsFJlqGdkdP0apBFjn4xl1NrX
QMzUXYsK4tbsGqfC7nOK6pRjlU0xBJKSvbfYg8WD7SbGplbwZOxJI+aa17eS
/0JP0flyz+/W3sZT+G2iZk/W2icXTjfmy4QU47c6ivOnUi5T49dsrtsXCkrM
1em3MfZZemEfkKKp633AYdRE2/TKYlg28I5itlmBe4MbwVqkANoOwlwDIRXG
Awa+J5nLEA6BMS6VB2RtJEqGlOp+lse24dyECk+IUAFCMUCySK1yzCavgAAp
RiudlX7UjJhqWPHjpONxhDpk4roGi7oLWXmLEduHpU7+tJ+EV6vgx9DEzTcR
17KYZvh5HntGRjyg66XEc3CBw7TRiMtluWEXxCbzuspBLX/06+jnjvYY3Kay
SOxEapC625Fh4OzPi+JjxOO+XA8E7Fi2neakXilyJu1KnWlacWh4PI+qRmmT
CFH2BJ2WFwiPz29VxBSSDDUeNntKhreqIIQxZBNTo/jW6yEi/Wt9KQ8Qky39
IqUDi3/ISuWssS1/NmVDl0ZM3+h2raBhWs+1BNZVwtEu2ZYAiBHKIA2Ni0Au
nCkKaPUjqqbGHXArWBtwh0DuavwWF9w6p0u9KRCt5Jqe9mlFmYOzi842RUnZ
ArsjyEKAOTMJXIx20N/4kYLqSqD9+ZtqXFz5kZv5+TaE7fz0umIwdsZugGqP
MdjZ81T7y5jAvM3iiDFkm0pXRq9gj17MfqOvBoj1TSeObaIR1V7zWk+F3Bom
EsqL52AAoA06a2WZhpbnyYSToZjMDMtiuxnbX6mamABqDuR2vsI5Otu9Dpve
DtepChN9wveKN+LJmknJP+bK8Hr+ZL02hIB0YyK1dy3Ala5Z10u3msY221HQ
6HQafdnY7xz32u12o0mPutVHD6b3qsYbqk3OeP4Q7hunWscjLkeRdbgEqghU
ZN4inCCUxoi5GSaGCCpmVW6T36poa+k0KIAtjNU3QbHl8CrqgZAAxmnVFmf5
J22tUCix3LsKQLPyynoW3/IQGvu+BrPxL5UmmxVHiNRXQtrQudykdUx2INCp
KAe5dXQ9omPnl8cEcIQfH2PjQug2fYpiKuVptmLUgBmwJJPEB1UG09JAvqyY
g/XkpvUsrwCk7ySgnUxVtiyo0b0CIfLn39uHndfarIpiOQFQKdth3L5JnBcl
BXDG9drkdLkDyN+1rbgaPSLTqRXQIZ27/U4TyxrgRSnQW2vetVJ7orbAwjAF
4Ba35N57v6mRm2gowqTeQW4e9bJLpj4BjIGZyDt+6tShniB2nmgH2nt3fa17
m7Bd1Fz74z84PJ5x+ywW+PyfYIpxzam7Vle3uHNeY3wLFmqWM6mBf+gpI5zy
Dx0gkUrX7VWwXctaTiZAmYmIC9RLiKx1U6U9v0ERmTqbDbebI/x7pxgC2id0
R4PIZ/rBCs8bpIMdtsrlgvyif+nyA3yYk+VnUx2BzwmfBoNK6Z9Mfi/xJvHI
IuM7b1K2CH7DkDEPpmiN/9Rpt3v/2z1qdf/bjHqQJwDxlTnjd7rBquoJ3Lg+
qVEcucxqXfmqrvdSUN2vzjCanku+SeWXJYh1bT+Mn+psSzG02eM5tYO7sSYj
+Gd0L842aUQ8hSTCCzXnrdP2xp3sCP7z8EDJZ91MDaib0zVYgj7WNsNmazj5
BUqn1NEs91zYLC4MTHUq9fwUc/5ADhTedDkfq5wZxK82cp3elFo0pqhpnoQo
imK9MKlPcoWwN3TzBtEpXWP0Oaoju7In9+WBPJRH8pV++sfWxv/08/sO/K97
f3I/vH9/fybP7p8bj+zpDkot4u/VFKxW347YiSd4baip/9bP96Q5P5yB/5Yn
8P/Wxoo7J+enu1I7C3ZNe01BRbvcmD6kucMqnmWlNrl1CASWpr1nSDZ3OUab
1D2S47jkXeUZDT9bZKFZ9N5u+YG2vK+cW6+46879OCb1RhqWL1/ncRWitcEy
pTBoNIvyX8xtxl9rtIbVcCOWhV8Yi79WVccJtY75uoO1BQIaKtdObG2eT1Un
35aO1M5gOXigDdmpub1Src1fDH72ek1R8sJEBblRsO8Rk+bezlwFaSEqSd+c
blcXy7nJdoEfSs0Trr2ZaxWs5lC8kZfAIRdUPcPGMA4sSAPhpU0dVlO6w9xJ
NwbddsGfVvAm+Mqt1VHmim1FLxgYyGYgUFNQTLx3gdHWvAVhHl25dKAVppHr
5uRqtw57OqLVXMVamJqpqVJEdstfTU/27wjrxn14BN6R6exkPx4cVk718QVO
iX5kjte+Sf/aZJMplgQb/ezYd2ecdLYkFZHWrZJMsWSt65p0h5UYusmxHkad
5gA+NlyFivAihiRzNteypd0troi/dE9kHVhmnO0UYbiwkmZA8yCqQiEJCjHT
DT3LAjuxkG3J6NRvaAEziS4QGnT13AUez9vbuPWkbRu1wXs3n7YvOlkjCFGv
0hei8Iql7vnvmwxKhbtcFyvSngeQab9WECBtZP45IMXeq+28m6AXeJT6vnZQ
Uzjz+/6e86MsYsiTmhdT8qK+I9vzrX/FDH/+ds+bWagEg4Udu0LbzN6t7IAf
UgW6P4ZabPvuN89b+q5umt+Z603zDlk7jcaDqgbkjnLGLs7eQnntZLDUo2wy
wpcSrCk0443P0uhycoYPMQX7yExjJbyMpqyr/tRO9yIXH+rtGtFzsz1M+bOf
3ZTqZuv+xjRuzKudbJo0+tXfTDGudk6qVqOCXd8RX1ql2R/UashPb+hh7Vxs
NVouoo0jYj/SR3rqT3pwtvmdiwfYLAtfKVzogpsQYEDMVSP0p4F/Aq0G+SKs
bTGTJteBvSigskE5iao+MQl1bPPA6HTzuoxTKLbe59LJ8yzi7Cwp/+qrQEj5
oeZNwbxxj7i+a4vtW/Z1I8F0yvl80H+ekHm6zw9UsMFWp5uDQkNZVNWHdoS4
av0L//NeO0E8Ym9PGhfKOJnP+l8ukuJ47NgLx/Cji+Rcf/Z/OPHuNlTuDfyp
uxXX4cc1AjjRrBn6UNVIzonT7RrYhsMRtYPci6e3oz13064u5OPCIdWQdwql
xOfP1Wtyrap+f3jYNe0IVa+F+3VFQLX9ljY9HMbbVyOAy5xmtVDE+p4uCCE8
9ZYQXsaSGwPxfiYy/5hvNLobuBo/5OLSyZt0TZ5vZfo1hzDwmyTqqyLEtZ6O
F+InkgBi0UpkrMXTydUqWD9r9r6Yqb6KkSo2ihkJfZFNE8Tste0MzLQH4jXN
kKf5fHLkaw/RqzlEjcV0MrENdM3dcZ9aIAygpwS+C8l/d47/qiLOf6uk0h5D
fhwATUnvQr+tybRlaae5oP5r+1qgjb6ltnl7TlzYISu+LWlUJr8/BAMsvG33
w8lFU/ydLsQ05eD91Qc56zV1v16lo0a/JQMTkKVu8U8KbrzGpiI8k3vnx8b1
P83xeM2v23z0QiBv14AxR190Q5AHm8IajOPj6Oe1PbowyrBSg+59mYs+fdl7
3TS/BO4C+IgCmpHJ6I28VyUQaJ39Tqd7dLzfa9jZWIWAn9JlktCjB3uT8W/6
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
5eBx/JRlUVv8G/Rm/2yoZgAA

-->

</rfc>
