<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-unencoded-digest-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="HTTP Unencoded Digest">HTTP Unencoded Digest</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-unencoded-digest-00"/>
    <author fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <author fullname="Mike West">
      <organization>Google</organization>
      <address>
        <email>mkwst@google.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>HTTP</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 42?>

<t>The Repr-Digest and Content-Digest integrity fields are subject to HTTP content
coding considerations. There are some use cases that benefit from the
unambiguous exchange of integrity digests of unencoded representation. The
Unencoded-Digest and Want-Unencoded-Digest fields complement existing integrity
fields for this purpose.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-unencoded-digest/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        HTTP Working Group mailing list (<eref target="mailto:ietf-http-wg@w3.org"/>),
        which is archived at <eref target="https://lists.w3.org/Archives/Public/ietf-http-wg/"/>.
        Working Group information can be found at <eref target="https://httpwg.org/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions/labels/unecoded-digest"/>.</t>
    </note>
  </front>
  <middle>
    <?line 51?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The <tt>Repr-Digest</tt> and <tt>Content-Digest</tt> integrity fields defined in
<xref target="DIGEST-FIELDS"/> are suitable for a range of use cases. However,
because the fields are subject to HTTP content coding considerations, it is
difficult to support use cases that could benefit from the exchange of integrity
digests of the unencoded representation.</t>
      <t>As a simple example, an application using HTTP might be presented with request
or response representation data that has been transparently decoded.  Attempting
to verify the integrity of the data against the <tt>Repr-Digest</tt> would first require
re-encoding that data using the same coding indicated by the Content-Encoding
header field (<xref section="8.4" sectionFormat="of" target="HTTP"/>), which is not always possible
(see <xref section="6.5" sectionFormat="of" target="DIGEST-FIELDS"/>).</t>
      <t>Although receivers could feasibly re-encode data in order to carry out
<tt>Repr-Digest</tt> validation, it might be impractical for certain kinds of
environments. For instance, browsers tend to provide built-in support for
transparent decoding but little support for encoding; while this could be done
via the use of additional libraries it would create work in JavaScript that
could contend with other activities. Even on the server side, the re-encoding of
received data might not be acceptable; some coding algorithms are optimized
towards efficient decoding at the cost of complex encoding. A Content-Encoding
field value that indicates a series of encodings adds further complexity.</t>
      <t>A more complex example involves HTTP Range Requests (<xref section="14" sectionFormat="of" target="HTTP"/>), where a client fetches multiple partial representations from
different origins and "stitches" them back into a whole. Unfortunately, if the
origins apply different content coding, the <tt>Repr-Digest</tt> field will vary by the
server's selected encoding (i.e. the Content-Encoding header field, <xref section="8.4" sectionFormat="of" target="HTTP"/>). This provides a challenge for a client - in order to verify the
integrity of the pieced-together whole it would need to remove the encoding of
each part, combine them, and then encode the result in order to compare against
one or more <tt>Repr-Digest</tt>s.</t>
      <t>The Accept-Encoding header field (<xref section="12.5.3" sectionFormat="of" target="HTTP"/>) provides the means
to indicate preferences for content coding. It is possible for an endpoint to
indicate a preference for no encoding, for example by sending the "identity"
token. However, codings often provide data compression that is advantageous.
Disabling content coding in order to simplify integrity checking is possibly an
unacceptable trade off.</t>
      <t>For a variety of reasons, decoding and re-encoding content in order to benefit
from HTTP integrity fields is not preferable. This specification defines the
Unencoded-Digest and Want-Unencoded-Digest fields to support a simpler validation
workflow in some scenarios where content coding is applied. These fields
complement the other integrity fields defined in <xref target="DIGEST-FIELDS"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This document uses the Augmented BNF defined in <xref target="RFC5234"/> and updated by
<xref target="RFC7405"/>. This includes the rules: LF (line feed)</t>
      <t>This document uses the following terminology from <xref section="3" sectionFormat="of" target="STRUCTURED-FIELDS"/> to specify syntax and parsing: Byte Sequence,
Dictionary, and Integer.</t>
      <t>The definitions "representation", "selected representation", "representation
data", "representation metadata", and "content" in this document are to be
interpreted as described in <xref target="HTTP"/>.</t>
      <t>"Integrity fields" is the collective term for <tt>Content-Digest</tt>, <tt>Repr-Digest</tt>,
and <tt>Unencoded-Digest</tt>.</t>
      <t>"Integrity preference fields" is the collective term for <tt>Want-Repr-Digest</tt>,
<tt>Want-Content-Digest</tt>, and <tt>Want-Unencoded-Digest</tt>.</t>
    </section>
    <section anchor="unencoded-digest">
      <name>The Unencoded-Digest Field</name>
      <t>The <tt>Unencoded-Digest</tt> HTTP field can be used in requests and responses to
communicate digests that are calculated using a hashing algorithm applied to the
representation with no content coding (<xref section="8.4.1" sectionFormat="of" target="HTTP"/>).</t>
      <t>Apart from the content coding concerns, <tt>Unencoded-Digest</tt> behaves similarly
to <tt>Repr-Digest</tt> (<xref section="3" sectionFormat="of" target="DIGEST-FIELDS"/>). In the absence of content
coding, <tt>Unencoded-Digest</tt> is identical to <tt>Repr-Digest</tt>.</t>
      <t><tt>Unencoded-Digest</tt> is a <tt>Dictionary</tt> (see <xref section="3.2" sectionFormat="of" target="STRUCTURED-FIELDS"/>)
where each:</t>
      <ul spacing="normal">
        <li>
          <t>key conveys the hashing algorithm (see <xref section="5" sectionFormat="of" target="DIGEST-FIELDS"/>) used to
compute the digest;</t>
        </li>
        <li>
          <t>value is a <tt>Byte Sequence</tt> (<xref section="3.3.5" sectionFormat="of" target="STRUCTURED-FIELDS"/>), that
conveys an encoded version of the byte output produced by the digest
calculation.</t>
        </li>
      </ul>
      <t>For example:</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Unencoded-Digest: \
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
]]></sourcecode>
      <t>The <tt>Dictionary</tt> type can be used, for example, to attach multiple digests
calculated using different hashing algorithms in order to support a population
of endpoints with different or evolving capabilities. Such an approach could
support transitions away from weaker algorithms (see
<xref section="6.6" sectionFormat="of" target="DIGEST-FIELDS"/>).</t>
      <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

Unencoded-Digest: \
  sha-256=:d435Qo+nKZ+gLcUHn7GQtQ72hiBVAgqoLsZnZPiTGPk=:,\
  sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4yP+pgk4vf2aCs\
  yRZOtw8MjkM7iw7yZ/WkppmM44T3qg==:
]]></sourcecode>
      <t>A recipient <bcp14>MAY</bcp14> ignore any or all digests. Application-specific behavior or
local policy <bcp14>MAY</bcp14> set additional constraints on the processing and validation
practices of the conveyed digests. The security considerations cover some of
the issues related to ignoring digests (see <xref section="6.6" sectionFormat="of" target="DIGEST-FIELDS"/>)
and validating multiple digests (see <xref section="6.7" sectionFormat="of" target="DIGEST-FIELDS"/>).</t>
      <t>A sender <bcp14>MAY</bcp14> send a digest without knowing whether the recipient supports a
given hashing algorithm. A sender <bcp14>MAY</bcp14> send a digest if it knows the recipient
will ignore it.</t>
      <t><tt>Unencoded-Digest</tt> can be sent in a trailer section. In this case,
<tt>Unencoded-Digest</tt> <bcp14>MAY</bcp14> be merged into the header section; see <xref section="6.5.1" sectionFormat="of" target="HTTP"/>.</t>
    </section>
    <section anchor="want-unencoded-digest">
      <name>The Want-Unencoded-Digest Field</name>
      <t><tt>Want-Unencoded-Digest</tt> is an integrity preference field; see <xref section="4" sectionFormat="of" target="DIGEST-FIELDS"/>. It indicates that the sender would like to receive (via the
<tt>Unencoded-Digest</tt> field) a representation digest on messages associated with the
request URI and representation metadata where no content coding is applied.</t>
      <t>If <tt>Want-Unencoded-Digest</tt> is used in a response, it indicates that the server
would like the client to provide the <tt>Unencoded-Digest</tt> field on future requests.</t>
      <t><tt>Want-Unencoded-Digest</tt> is only a hint. The receiver of the field can ignore it
and send an <tt>Unencoded-Digest</tt> field using any algorithm or omit one entirely. It
is not a protocol error if preferences are ignored. Applications that use
<tt>Unencoded-Digest</tt> and <tt>Want-Unencoded-Digest</tt> can define expectations or
constraints that operate in addition to this specification.</t>
      <t><tt>Want-Unencoded-Digest</tt> is of type <tt>Dictionary</tt> where each:</t>
      <ul spacing="normal">
        <li>
          <t>key conveys the hashing algorithm;</t>
        </li>
        <li>
          <t>value is an <tt>Integer</tt> (<xref section="3.3.1" sectionFormat="of" target="STRUCTURED-FIELDS"/>) that conveys an
ascending, relative, weighted preference. It must be in the range 0 to 10
inclusive. 1 is the least preferred, 10 is the most preferred, and a value of
0 means "not acceptable".</t>
        </li>
      </ul>
      <t>Examples:</t>
      <sourcecode type="http-message"><![CDATA[
Want-Unencoded-Digest: sha-256=1
Want-Unencoded-Digest: sha-512=3, sha-256=10, unixsum=0
]]></sourcecode>
    </section>
    <section anchor="encoding-and-unencoded">
      <name>Messages containing both Unencoded-Digest and Content-Encoding</name>
      <t>Digests delivered through <tt>Unencoded-Digest</tt> apply to the unencoded representation. If a message is
received with content coding, a recipient needs to decode the message in order
to calculate the digest that can subsequently be used for validation. If
multiple content codings are applied, the recipient needs to decode all
encodings in order before validation.</t>
    </section>
    <section anchor="integrity-fields-are-complementary">
      <name>Integrity Fields are Complementary</name>
      <t>Integrity fields can be used in combination to address different and
complementary needs, particularly the cases described in <xref target="introduction"/>.</t>
      <t>In the following examples, the unencoded response data is the string "An
unexceptional string" following by an LF.</t>
      <t>The first example demonstrates a request that uses content negotiation.</t>
      <figure>
        <name>GET request with content negotiation</name>
        <sourcecode type="http-message"><![CDATA[
GET /boringstring HTTP/1.1
Host: example.org
Accept-Encoding: gzip

]]></sourcecode>
      </figure>
      <t>The server responds with the full GZIP-encoded representation. The <tt>Repr-Digest</tt>
and <tt>Unencoded-Digest</tt> therefore differ.</t>
      <figure>
        <name>GET response with GZIP-encoded content</name>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 200 OK
Content-Encoding: gzip
Repr-Digest: \
  sha-256=:XyjvEuFb1P5rqc2le3vQm7M96DwZhvmOwqHLu2xVpY4=:
Unencoded-Digest: \
  sha-256=:5Bv3NIx05BPnh0jMph6v1RJ5Q7kl9LKMtQxmvc9+Z7Y=:

1f 8b 08 00 79 1f 08 64 00 ff
73 cc 53 28 cd 4b ad 48 4e 2d
28 c9 cc cf 4b cc 51 28 2e 29
ca cc 4b e7 02 00 7e af 07 44
18 00 00 00

]]></sourcecode>
      </figure>
      <t>The second example demonstrates a range request with content negotiation.</t>
      <figure>
        <name>Range request with content negotiation</name>
        <sourcecode type="http-message"><![CDATA[
GET /boringstring HTTP/1.1
Host: example.org
Accept-Encoding: gzip
Range: bytes=0-10

]]></sourcecode>
      </figure>
      <t>The server responds with a 206 Partial Content response using GZIP encoding, it
has three different Integrity fields. The <tt>Content-Digest</tt> relates to the
response message content that can be used to validate the integrity of the
received part. <tt>Repr-Digest</tt> and <tt>Unencoded-Digest</tt> can be used later once the
entire object is reconstructed. The choice of which to use is left to the
application that would consider a range of factors outside the scope of
this document.</t>
      <figure>
        <name>Partial response with GZIP encoding</name>
        <sourcecode type="http-message"><![CDATA[
NOTE: '\' line wrapping per RFC 8792

HTTP/1.1 206 Partial Content
Content-Encoding: gzip
Content-Range: bytes 0-9/44
Content-Digest: \
  sha-256=:SotB7Pa5A7iHSBdh9mg1Ev/ktAzrxU4Z8ldcCIUyfI4=:
Repr-Digest: \
  sha-256=:XyjvEuFb1P5rqc2le3vQm7M96DwZhvmOwqHLu2xVpY4=:
Unencoded-Digest: \
  sha-256=:5Bv3NIx05BPnh0jMph6v1RJ5Q7kl9LKMtQxmvc9+Z7Y=:

1f 8b 08 00 79 1f 08 64 00 ff
]]></sourcecode>
      </figure>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>All the same considerations documented in <xref target="DIGEST-FIELDS"/> apply.</t>
      <t>This document introduces a further consideration related to the process of
validation when an HTTP message contains both Content-Encoding and
Unencoded-Digest (<xref target="encoding-and-unencoded"/>). In order to validate the
Unencoded-Digest, encoded content needs to be decoded. This provides an
opportunity for an attacker to direct malicious data into a decoder. One
possible mitigation would be to also provide a Content-Digest or Repr-Digest in
the message, allowing for validation of the received bytes before further
processing. An attacker that can substitute various parts of an HTTP message
presents several risks, Sections <xref target="DIGEST-FIELDS" section="6.1" sectionFormat="bare"/>, <xref target="DIGEST-FIELDS" section="6.2" sectionFormat="bare"/> and <xref target="DIGEST-FIELDS" section="6.3" sectionFormat="bare"/> of <xref target="DIGEST-FIELDS"/>
describe relevant considerations and mitigations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>Should this document be adopted and achieve working group consensus, IANA is
asked to update the "Hypertext Transfer Protocol (HTTP) Field Name Registry"
<xref target="HTTP"/> as shown in the table below:</t>
      <table anchor="iana-field-name-table">
        <name>Hypertext Transfer Protocol (HTTP) Field Name Registry Update</name>
        <thead>
          <tr>
            <th align="left">Field Name</th>
            <th align="left">Status</th>
            <th align="left">Structured Type</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Unencoded-Digest</td>
            <td align="left">permanent</td>
            <td align="left">Dictionary</td>
            <td align="left">
              <xref target="unencoded-digest"/> of this document</td>
          </tr>
          <tr>
            <td align="left">Want-Unencoded-Digest</td>
            <td align="left">permanent</td>
            <td align="left">Dictionary</td>
            <td align="left">
              <xref target="want-unencoded-digest"/> of this document</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="DIGEST-FIELDS">
        <front>
          <title>Digest Fields</title>
          <author fullname="R. Polli" initials="R." surname="Polli"/>
          <author fullname="L. Pardue" initials="L." surname="Pardue"/>
          <date month="February" year="2024"/>
          <abstract>
            <t>This document defines HTTP fields that support integrity digests. The Content-Digest field can be used for the integrity of HTTP message content. The Repr-Digest field can be used for the integrity of HTTP representations. Want-Content-Digest and Want-Repr-Digest can be used to indicate a sender's interest and preferences for receiving the respective Integrity fields.</t>
            <t>This document obsoletes RFC 3230 and the Digest and Want-Digest HTTP fields.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9530"/>
        <seriesInfo name="DOI" value="10.17487/RFC9530"/>
      </reference>
      <reference anchor="HTTP">
        <front>
          <title>HTTP Semantics</title>
          <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
          <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
          <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
          <date month="June" year="2022"/>
          <abstract>
            <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
            <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="97"/>
        <seriesInfo name="RFC" value="9110"/>
        <seriesInfo name="DOI" value="10.17487/RFC9110"/>
      </reference>
      <reference anchor="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="RFC5234">
        <front>
          <title>Augmented BNF for Syntax Specifications: ABNF</title>
          <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
          <author fullname="P. Overell" initials="P." surname="Overell"/>
          <date month="January" year="2008"/>
          <abstract>
            <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="68"/>
        <seriesInfo name="RFC" value="5234"/>
        <seriesInfo name="DOI" value="10.17487/RFC5234"/>
      </reference>
      <reference anchor="RFC7405">
        <front>
          <title>Case-Sensitive String Support in ABNF</title>
          <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
          <date month="December" year="2014"/>
          <abstract>
            <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7405"/>
        <seriesInfo name="DOI" value="10.17487/RFC7405"/>
      </reference>
      <reference anchor="STRUCTURED-FIELDS">
        <front>
          <title>Structured Field Values for HTTP</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
          <author fullname="P-H. Kamp" surname="P-H. Kamp"/>
          <date month="September" year="2024"/>
          <abstract>
            <t>This document describes a set of data types and associated algorithms that are intended to make it easier and safer to define and handle HTTP header and trailer fields, known as "Structured Fields", "Structured Headers", or "Structured Trailers". It is intended for use by specifications of new HTTP fields.</t>
            <t>This document obsoletes RFC 8941.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9651"/>
        <seriesInfo name="DOI" value="10.17487/RFC9651"/>
      </reference>
    </references>
    <?line 346?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Early drafts of <xref target="DIGEST-FIELDS"/> included a mechanism to support the exchange
of digests where no content coding is applied, which was removed before
publication. While the design here is different, it is motivated by discussion
of the previous design in the HTTP WG. The motivating use cases still mostly
apply identically.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
11XsivdoiT24E4q1gKWTIY4qr7BiIkor/Bl1zQNc2e86VOdiaiG/Mk5bLqF6
RRzpYFpxzHHpQE4sEm4wgf8TWLlTItwzvnNzhoh7hPwEUweGjvX6g318UsmN
mnblZaxFedYEhbAZeSUVB+Po8chWtb5aPqyMmevHmU0saky8TaTXUbYmqS6K
+RLuXDB6LuytK6oeJIrr+vLq9B0+SxsbdBiElkm4ySXtkomF50h0XgophLzb
2DtbOwNl5V6318b/thho97rr9pPKAwLkbJoOvyx7N71badK6ExNnhy8PV2Lk
Zsxabu6x0nm+MJnyxiqVnMHYQF4+Z0hq5B8I8JQ6tjnE55FROSl75zzfbY27
cz6nKOvTjH6XwD9hQJKTV0U/4zFp5zvfhXtJYXqtR/TThEVL3N//2NzCrY4t
+OranckZaFgX4PK5s/7f5wc+P3TlC/8+i891WWv/PssbMF+Y3n+m3JZTeXpL
TY3PWFbRHvzqv89/1UpWwMSvBOaaqJj84LOsujHF3fv7lTbpby6S6h5UrOSB
tuvXJ1nfkF0z01+kLiSmR0bFqsOcrEM/2Oj4M2EuX/05N5evOVI4k2EePspJ
sXoYUN+dfpnDR5QxvfvFkA6ftoYAQ37jmEtj/hkSo81qFvOHUEJucNCxe2Mn
9W24+nl82oYr9ii+3uItjoXPlfXnJUOPnGLKv9/xdeAbf9CZsog1I3fkiMYp
+a7/SYGcgGfPipProbFBzsf8RHF2M9Uzl0PcOB4DGF7fvHAs0g9Bkla/RQA4
gwdQKy3iE1FQWbmrTin+fwDS+glGIjYAAA==

-->

</rfc>
