<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-kleidl-digest-fields-problem-types-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title>HTTP Problem Types for Digest Fields</title>
    <seriesInfo name="Internet-Draft" value="draft-kleidl-digest-fields-problem-types-01"/>
    <author fullname="Marius Kleidl">
      <organization>Transloadit</organization>
      <address>
        <email>marius@transloadit.com</email>
      </address>
    </author>
    <author fullname="Lucas Pardue">
      <organization>Cloudflare</organization>
      <address>
        <email>lucas@lucaspardue.com</email>
      </address>
    </author>
    <author initials="R." surname="Polli" fullname="Roberto Polli">
      <organization>Par-Tec</organization>
      <address>
        <postal>
          <country>Italy</country>
        </postal>
        <email>robipolli@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="October" day="21"/>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 50?>

<t>This document specifies problem types that servers can use in responses to problems encountered while dealing with a request carrying integrity fields and integrity preference fields.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://tus.github.io/draft-digest-fields-problem-types/draft-kleidl-digest-fields-problem-types.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-kleidl-digest-fields-problem-types/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/tus/draft-digest-fields-problem-types"/>.</t>
    </note>
  </front>
  <middle>
    <?line 54?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="DIGEST"/> by design does not define, require or recommend any specific behavior for error handling relating to integrity. The responsibility is instead delegated to applications. This draft defines a set of problem types (<xref target="PROBLEM"/>) that can be used by server applications to indicate that a problem was encountered while dealing with a request carrying integrity fields and integrity preference fields.</t>
      <t>For example, a request message may include content alongside <tt>Content-Digest</tt> and <tt>Repr-Digest</tt> fields that use a digest algorithm the server does not support. An application could decide to reject this request because it cannot validate the integrity. Using a problem type, the server can provide machine-readable error details to aid debugging or error reporting, as shown in the following example.</t>
      <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
Want-Content-Digest: sha-512=3, sha-256=10

{
  "type": "https://iana.org/assignments/http-problem-types#digest-unsupported-algorithm",
  "title": "hashing algorithm is not supported",
  "unsupported-algorithm": "foo"
}
]]></sourcecode>
    </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>The terms "integrity fields" and "integrity preference fields" in this document are to be
interpreted as described in <xref target="DIGEST"/>.</t>
      <t>The term "problem type" in this document is to be
interpreted as described in <xref target="PROBLEM"/>.</t>
      <t>The term "request", "response", "intermediary", "sender", and "server" are from <xref target="HTTP"/>.</t>
    </section>
    <section anchor="problem-types">
      <name>Problem Types</name>
      <section anchor="unsupported-hashing-algorithm">
        <name>Unsupported Hashing Algorithm</name>
        <t>This section defines the "https://iana.org/assignments/http-problem-types#digest-unsupported-algorithm" problem type.
A server <bcp14>MAY</bcp14> use this problem type if it wants to communicate to the client that
one of the hashing algorithms referenced in the integrity or integrity preference fields present in the request
is not supported.</t>
        <t>For this problem type, <tt>unsupported-algorithm</tt> is defined as the only extension member.
It <bcp14>SHOULD</bcp14> be populated in a response using this problem type, with its value being the algorithm key of the unsupported algorithm from the request.
The response can include the corresponding integrity preference field to indicate the server's algorithm support and preference.</t>
        <t>Example:</t>
        <figure>
          <name>A request with a sha-256 integrity field, which is not supported by the server</name>
          <sourcecode type="http-message"><![CDATA[
POST /books HTTP/1.1
Host: foo.example
Content-Type: application/json
Accept: application/json
Accept-Encoding: identity
Repr-Digest: sha-256=:mEkdbO7Srd9LIOegftO0aBX+VPTVz7/CSHes2Z27gc4=:

{"title": "New Title"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response Advertising the Supported Algorithms</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
Want-Repr-Digest: sha-512=10, sha-256=0

{
  "type": "https://iana.org/assignments/http-problem-types#digest-unsupported-algorithm",
  "title": "Unsupported hashing algorithm",
  "unsupported-algorithm": "sha-256"
}
]]></sourcecode>
        </figure>
        <t>This problem type is a hint to the client about algorithm support, which the client could use to retry the request with a different, supported, algorithm.
Note that a request may contain more than one integrity field.</t>
        <t>This problem type can also be used when a request contains an integrity preference field. For example:</t>
        <figure>
          <name>GET Request with Want-Repr-Digest</name>
          <sourcecode type="http-message"><![CDATA[
GET /items/123 HTTP/1.1
Host: foo.example
Want-Repr-Digest: sha=10

]]></sourcecode>
        </figure>
        <figure>
          <name>Response Advertising the Supported Algorithms</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{
  "type": "https://iana.org/assignments/http-problem-types#digest-unsupported-algorithm",
  "title": "Unsupported hashing algorithm",
  "unsupported-algorithm": "sha"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="invalid-digest-value">
        <name>Invalid Digest Value</name>
        <t>This section defines the "https://iana.org/assignments/http-problem-types#digest-invalid-value" problem type. A server <bcp14>MAY</bcp14> use this problem type when responding to a request, whose integrity fields include a digest value, that cannot be generated by the corresponding hashing algorithm. For example, if the digest value of the <tt>sha-512</tt> hashing algorithm is not 64 bytes long, it cannot be a valid digest value and the server can skip computing the digest value. This problem type <bcp14>MUST NOT</bcp14> be used if the server is not able to parse the integrity fields according to <xref section="4.5" sectionFormat="of" target="STRUCTURED-FIELDS"/>, for example because of a syntax error in the field value.</t>
        <t>The server <bcp14>SHOULD</bcp14> include a human-readable description why the value is considered invalid in the <tt>title</tt> member.</t>
        <t>The following example shows a request with the content <tt>{"hello": "world"}</tt> (plus LF), but the digest has been truncated. The subsequent response indicates the invalid SHA-512 digest.</t>
        <figure>
          <name>A request with a sha-512 integrity field, whose digest has been truncated</name>
          <sourcecode type="http-message"><![CDATA[
PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Repr-Digest: sha-512=:YMAam51Jz/jOATT6/zvHrLVgOYTGFy1d6GJiOHTohq4:

{"hello": "world"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response indicating that the provided digest is too short</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{
  "type": "https://iana.org/assignments/http-problem-types#digest-invalid-value",
  "title": "digest value for sha-512 is not 64 bytes long"
}
]]></sourcecode>
        </figure>
        <t>This problem type indicates a fault in the sender's calculation or encoding of the digest value. A retry of the same request without modification will likely not yield a successful response.</t>
      </section>
      <section anchor="mismatching-digest-value">
        <name>Mismatching Digest Value</name>
        <t>This section defines the "https://iana.org/assignments/http-problem-types#digest-mismatching-value" problem type. A server <bcp14>MAY</bcp14> use this problem type when responding to a request, whose integrity fields include a digest value that does not match the digest value that the server calculated for the request content or representation.</t>
        <t>Three problem type extension members are defined: the <tt>algorithm</tt>, <tt>provided-digest</tt>, and <tt>calculated-digest</tt> members. A response using this problem type <bcp14>SHOULD</bcp14> populate all members, with the value of <tt>algorithm</tt> being the algorithm key of the used hashing algorithm, with the value of <tt>provided-digest</tt> being the digest value taken from the request's integrity fields, and the value of <tt>calculated-digest</tt> being the calculated digest. The digest values <bcp14>MUST</bcp14> BE serialized as byte sequences as described in <xref section="4.1.8" sectionFormat="of" target="STRUCTURED-FIELDS"/>.</t>
        <t>The following example shows a request with the content <tt>{"hello": "woXYZ"}</tt> (plus LF), but the representation digest for <tt>{"hello": "world"}</tt> (plus LF). The subsequent response indicates the mismatching SHA-256 digest values.</t>
        <figure>
          <name>A request with a sha-256 integrity field, which does not match the representation</name>
          <sourcecode type="http-message"><![CDATA[
PUT /items/123 HTTP/1.1
Host: foo.example
Content-Type: application/json
Repr-Digest: sha-256=:RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:

{"hello": "woXYZ"}
]]></sourcecode>
        </figure>
        <figure>
          <name>Response indicating the mismatching digests</name>
          <sourcecode type="http-message"><![CDATA[
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json

{
  "type": "https://iana.org/assignments/http-problem-types#digest-mismatching-value",
  "title": "digest value fromr request does not match expected value",
  "algorithm": "sha-256",
  "provided-digest": ":RK/0qy18MlBSVnWgjwz6lZEWjP/lF5HF9bvEF8FabDg=:",
  "calculated-digest": ":8vXo+0QVwf2woEblm4hTAftp0/K5fWSMZG4CKtplwjc=:"
}
]]></sourcecode>
        </figure>
        <t>If the sender receives this problem type, the request might be modified unintentionally by an intermediary. The sender could use this information to retry the request without modification to address temporary transmission issues.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Disclosing error details could leak information
such as the presence of intermediaries or the server's implementation details.
Moreover, they can be used to fingerprint the server.</t>
      <t>To mitigate these risks, a server could assess the risk of disclosing error details
and prefer a general problem type over a more specific one.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA is asked to register the following entries in the "HTTP Problem Types" registry at <eref target="https://www.iana.org/assignments/http-problem-types">https://www.iana.org/assignments/http-problem-types</eref>.</t>
      <section anchor="registration-of-digest-unsupported-algorithm-problem-type">
        <name>Registration of "digest-unsupported-algorithm" Problem Type</name>
        <dl>
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#digest-unsupported-algorithm</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Unsupported Hashing Algorithm</t>
          </dd>
          <dt>Recommended HTTP status code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="unsupported-hashing-algorithm"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="registration-of-digest-invalid-value-problem-type">
        <name>Registration of "digest-invalid-value" Problem Type</name>
        <dl>
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#digest-invalid-value</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Invalid Digest Value</t>
          </dd>
          <dt>Recommended HTTP status code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="invalid-digest-value"/> of this document</t>
          </dd>
        </dl>
      </section>
      <section anchor="registration-of-digest-mismatching-value-problem-type">
        <name>Registration of "digest-mismatching-value" Problem Type</name>
        <dl>
          <dt>Type URI:</dt>
          <dd>
            <t>https://iana.org/assignments/http-problem-types#digest-mismatching-value</t>
          </dd>
          <dt>Title:</dt>
          <dd>
            <t>Mismatching Digest Value</t>
          </dd>
          <dt>Recommended HTTP status code:</dt>
          <dd>
            <t>400</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t><xref target="mismatching-digest-value"/> of this document</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="DIGEST">
        <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="PROBLEM">
        <front>
          <title>Problem Details for HTTP APIs</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
          <author fullname="E. Wilde" initials="E." surname="Wilde"/>
          <author fullname="S. Dalal" initials="S." surname="Dalal"/>
          <date month="July" year="2023"/>
          <abstract>
            <t>This document defines a "problem detail" to carry machine-readable details of errors in HTTP response content to avoid the need to define new error response formats for HTTP APIs.</t>
            <t>This document obsoletes RFC 7807.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9457"/>
        <seriesInfo name="DOI" value="10.17487/RFC9457"/>
      </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="February" year="2021"/>
          <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 that wish to use a common syntax that is more restrictive than traditional HTTP field values.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8941"/>
        <seriesInfo name="DOI" value="10.17487/RFC8941"/>
      </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>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9Va63bbNhL+z6fA0j+63epiOXbi6DRtZFu21diRK8tJkz17
jiASkhCRBAuQVhQd91n2WfbJdgYAb5LsuN2kp5sfjggSM4O5fHMh6/W6k/Ak
YG3ing+HV+RKinHAQjJcxkyRiZDkhE+ZSsgpZ4GvXMejCZsKuWwTHk2E4/jC
i2gI+31JJ0l9HjDuB3Vfb6pP9KZ6bIjWEyRa3205Kh2HXCkuIlxqk153eErI
DqGBEiAJj3wWM/gTJW6NuMzniZCcBnjR6xzBfyCX2xsMT10nSsMxk23HB7na
jicixSKVqjZJZMqc2zZ54gBdyWibdAbdDlwshJxPpUjjNnl7Rt7CFY+m5AxX
nDlbwm2/7ZA6idjHhExZxCRNQFJcSiPuCal/qpjKeYA7fa4SycdpwnwSMH/K
pHPLohSk2SEkZ4QX5rBVjrAcUh7gIy/ZRxrGAWt4IsR1Kr1Zm8ySJFbtZrN0
swnkgDRPZukY1JWkqmm0/4DaXdgRgI5UAjsymrCzYcg0uPg8jeZjbdyYJWHg
Og5Nk5mQqE3gTsgkDQLjLO4llTxV5JUm5eq7Qk5pxD9pZbfJUNJIBYKC7fVd
ZrTkhnrjy6S4jRpxt7C4SD2qyBWVfsq2cTgOROpPAvCNCoMAt73Uf2O9t0Kf
R+Bagwa5EkHA1zkOBLhiIszNbSxBmPqQeRV+oDce44aXU1yx3OCfJ9IowUDr
JTRYOk4kZAh0bsGxCDnpnXWvhyDK6fHzgye7sHI16B9ddC/N0v7BM1i6Hg5u
joc3g+5J/bTXvTi51jcPn++34CaGu3m41dp1HIzmnL7j1Ot1Qsfg2NRLHGc4
44pApKchhCS4PvM4mF0Ra3Tt2IokMwo3mbxlUhGPRiRVDBRGJFMxxiU8IbIt
irBIH5BJCJvFjAeM+IzqgFqARxIK235NEXk8KuUS1zk8PZU8WRLjc4RGfmkx
lmwC1CKP2fsNc4yQ+37AHIioHuhT+Kmnw9lZrYwS7+7IeAnMFZ9GcEgQMxIJ
XE94xGpaCi4ZIo5kYBvQgA+Ml5kWPDJmM3rL4T6iJZMS/s5AMn0UySDm8Aec
PJe0QYYzlmmFj3mA0oOCwbcSRn1gHbApRTiBXTSOA+5p/1G4EQ2BUWgFBCWA
yhMiJmvG+PtqZT3i7u5bYxo0yZihVXw8sbFUhYER08dLZvbQnOyC/kk2O0U1
GrCrlUiGTCk6ZYCWoKzIC1KfQYgAJfBIGohoqjisjI7NUt2krZHmNxqwWOYr
VhB9PPRQSgySARVIbHAOUCHYx6ondwiVxrGQSYN0orLOMEwDtJmH7EF/kn1g
XgIkwFKZ7GPmUR0M2ghI7RbU5hsts7Jn3CjUGq0Ys1aWB40IN2+RW0i9GfhA
HbKbT+Fx630+SwBItDEpR9HG6XSKZHP/lAyPAkugYEXUTCwiDFRkMwEoEgt8
Oks4jvPbb7/pNFS3NnAQO5qtRovs7+6SI3DZgTmok2l/qDNdSU1Ne6DvPiiI
vbcUnqlaqg1i0PpBa+/Fk5r+uXfw9AUC0wqwykU1uKXExWlEG4CtTaowbBGW
VFOLWMlDOzZHpZG1HvPruZXdmqaM1Y8mTdVM6z73Al4xPPPNhu20gMBECNe5
Q2Uh1sDpoAowUYU+eILhyvU14ikjUGpgKQKe6F7eXA+xtsH/yeu+/j3o/nzT
A+TG39fnnYuL/Idjn7g+799cnBS/ip3H/cvL7usTsxlWSWXJcS877+AOSuX2
r4a9/uvOhWvsX4Z5SIzoQmPjnxJCFSGJKgeg0oOCh2Egk6Pjq//8u7VPVqu/
QS7Za7WeA56ai8PWs324WMxYZLiJKFjaS3C1pQP+wahEKjQIwLNjDplOlXxy
BtgA/vePf6Jm/tUm34+9uLX/g13AA1cWM51VFrXONlc2NhslblnawibXZmV9
TdNVeTvvKteZ3kuL3/8ISMpIvXX44w+O8RFQO2RKdx1EXWO7B2D0IXM6VXOS
ijmLpNgoRCBuGY620ObqUaTzhFShbUESfTWrFPC3JhVC7U/lEq8VNgQy81uD
hq4+1USKEKgjKGnSO9UuBhZ2yE0RteTcRnoni15b4CimK4M8syIcflnEqcB6
w+lkoA7eoVOR1mr5GcInmDQWgJdaxViAYBOiM4fQEnoBRxNgOnME+A9UAri8
AWeYjayT+BnYFx4k5ENZGVeUNrTZZ03mrCOkzd4bx6iR0VaFjNBzjLq1vyBt
DRLQekEbh8YIGfZ3DaeXEBuOAEixiNNAV0iIHXmBCTrUtdYme12ecNAh5N2U
AQnzHCuhPeKx1V1J1tID2s1Kp284pTKO6cSc1SXaLkKae361DlpX7lrNlSX6
b1SJtRVHu36xH7TdNTm6vSVHX/UBIZtjIeaKZPnaOReYaSFTNWx2fyBj60zd
8TwWJ/feqHehIsQDtgnHdh0O6JSKrXaeydthd+6P+8+upf/8otdn00nS36VH
v3z35mr45tOz5vH1OVN77/eeTb39F3CcVZGYX7MFGeoLk1xX0Nvj5Qu3kxdY
tvy03NarzhoWq95sI6FjFVxoHMh/pUpnQyNY5rR2izrnTyxzykC4gRGfqXCs
uFmVUxhikAVBxwdFJlxl4XWd88rBVqGeDeBWkQ5bGRAnWQM2OhZpshkLmU1L
T5pKXOMoluHQO5fDNfMRn090/ACF/Ji1gn7DeS2K5idvPqDpwGaDAt6EQur7
EUG4XXO1xrajITTgaCvvvrAGKndLhjIWig8ARYOUOqNtEX/WhYDnCTTXzdbe
k4eCfqtX6mq7alekOCirb33jV4mZ/5dY+AJxsINDCd0LZnPWN5igvkJBwg2b
uk6Aa4UIeUQhol22lNCwucwcGGNRqI1YUHk+zFtszb2WjyMQjSEm7JC1AORq
7twwTSUSalgj4aYyiyyTjyzajjaJZNng6T5wTUC7OEOolVr0McptbFMhjUl4
rSFXcx5jbRanSWbx8hY7t6noM2tgckywp7BUrXC6q8epGZVqbVaQD1Q80FZm
ktXq2vrMfuMAlbAxAry7q5lBldFePpqAZyF/LgGIPtohQTYQ0EWKOYcp262I
thwrbDxLQxoVwwhT/MdamsXMGNZoEA6Hg3qoGKQu4YySLb+RjqVRXvhplhtT
Cd0gqhKGangyvmNmQqOVO2OwC4MV+uzAd+9G5O9xkCpycfptjYzTpGwo8A/Q
Bfh4ItMIazHfjOlUOlbIAijmpV5WrilrESM/tJXoapbgtrHJ1c1jAfozVdnW
gqL97rJDw4PWT5+aH/qd4fBp89Ptubx4M+2/G56dLlv+07OfeP98KGa/7usK
a109j6mu8IBbqiuM/nsV+ddNElVQrCaHSsxjxOTH34IbD6QC6ywGF6jxOTvA
y4FF988CfVrqlLqlOspdjpIJTYO8FTNt8Tc4cA88bIow3DC+bWGeIWEVjzq2
PrI3FQ2rdRKWXCHsn2RTzgUPAhLwOYPmDE+/1KgAPpFCH6DUJA3y8GjotHbJ
VUgTT2PuV05tYcHqr5DejJnzubEWbTNB5b6QpxFjPnCKiW6hWaU8RPwxg1vT
iWuraHCUjFWPst47Kz0ksV1222Bs0YFDa555o32jNzIjllEhUXYjI2j85+Ge
O0sPWauuR3x2f61A6zxbl0T6bHuuttVrW4muH61EumoNOgf7r3f436gNm9fy
9F8w2aKogk3JrjYx6LRS5q5MMXDURV/gAEifzDQE4YWY5ONh4G/M04pc32oc
3pPtv1QC/eXd+3sSaNUns5OhEz+cgh+bX0vhrXMsNvgV9f25qVZPMwavmru/
LluHl8HR9Zvo7fTD4tPT4H337YerZnB6cH76fHzbPT08peOT6Yv1XKs1+T9O
MragS9UMf92cu4nWD+VdiEiZ62bt1OxjDAHAbHFqyGydV+g7a1CA93+fGQ2Z
jWDXhA5vfxHf7f78ZjHZW4juOAj3Z8POJIl3m68OJm+vL9+f7R+/SuJg8cED
Qo8sFqqub7jprrE3KaV+fC3N+K0Olo25ZzmNhHw6012NSeygtzTi2u5gaEDn
JXZfdgKRDd5tjBpGpfnKTL+utl8MQNDfO3DZKCQwsfo+eCrIy0Joiinuwq85
7BdBUAwpE9Q7BAAu1c5/bNsFal+gnXDlBUJnnuo7TyNjwOi8LJ8DZcosGzCb
MPE0dpfOit8z2MSbT2A5IkRYQJth0nAuhWQCHjHvsSov1uF8kGin+BZEz7Jy
cgjEAoyQ8Kmd9IIiJVdzzCl5FaDFh0DS+pmZB1BQ/54DO8VIGKiYRjqoJmKh
3/KbsVX+0YKIdJ1Gep3XnQ3t6kWcx6m5OZFkU65AU+tviKNEq82Wolu+IHPt
VrAxlDvfZ5CxWCwaj4SNH0w5OTBkbHk7yWDivvcsZSFA76iGm0Gv7RSfU32J
cRJQ1t/OAdnPvF8aZJ+O4G3UkgKXStFdfb0dABkfsvM+XFmtyixttVOwvrsz
1VDpLdyDelob/3xx/VTol/Syfbr1R9SRcbAMNaPfq4UtncIX18QGj5I27m+K
/ohGypw+qxX8EmpMvbnzX/6vhF7zKQAA

-->

</rfc>
