<?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.17 (Ruby 3.3.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-connect-tcp-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="Templated CONNECT-TCP">Template-Driven HTTP CONNECT Proxying for TCP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-connect-tcp-03"/>
    <author initials="B. M." surname="Schwartz" fullname="Benjamin M. Schwartz">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <date year="2024" month="July" day="01"/>
    <area>art</area>
    <workgroup>httpbis</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 35?>

<t>TCP proxying using HTTP CONNECT has long been part of the core HTTP specification.  However, this proxying functionality has several important deficiencies in modern HTTP environments.  This specification defines an alternative HTTP proxy service configuration for TCP connections.  This configuration is described by a URI Template, similar to the CONNECT-UDP and CONNECT-IP protocols.</t>
    </abstract>
  </front>
  <middle>
    <?line 39?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="history">
        <name>History</name>
        <t>HTTP has used the CONNECT method for proxying TCP connections since HTTP/1.1.  When using CONNECT, the request target specifies a host and port number, and the proxy forwards TCP payloads between the client and this destination (<xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>).  To date, this is the only mechanism defined for proxying TCP over HTTP.  In this specification, this is referred to as a "classic HTTP CONNECT proxy".</t>
        <t>HTTP/3 uses a UDP transport, so it cannot be forwarded using the pre-existing CONNECT mechanism.  To enable forward proxying of HTTP/3, the MASQUE effort has defined proxy mechanisms that are capable of proxying UDP datagrams <xref target="CONNECT-UDP"/>, and more generally IP datagrams <xref target="CONNECT-IP"/>.  The destination host and port number (if applicable) are encoded into the HTTP resource path, and end-to-end datagrams are wrapped into HTTP Datagrams <xref target="RFC9297"/> on the client-proxy path.</t>
      </section>
      <section anchor="problems">
        <name>Problems</name>
        <t>HTTP clients can be configured to use proxies by selecting a proxy hostname, a port, and whether to use a security protocol. However, CONNECT requests using the proxy do not carry this configuration information. Instead, they only indicate the hostname and port of the target. This prevents any HTTP server from hosting multiple distinct proxy services, as the server cannot distinguish them by path (as with distinct resources) or by origin (as in "virtual hosting").</t>
        <t>The absence of an explicit origin for the proxy also rules out the usual defenses against server port misdirection attacks (see <xref section="7.4" sectionFormat="of" target="RFC9110"/>) and creates ambiguity about the use of origin-scoped response header fields (e.g., "Alt-Svc" <xref target="RFC7838"/>, "Strict-Transport-Security" <xref target="RFC6797"/>).</t>
        <t>Classic HTTP CONNECT proxies can be used to reach a target host that is specified as a domain name or an IP address.  However, because only a single target host can be specified, proxy-driven Happy Eyeballs and cross-IP fallback can only be used when the host is a domain name.  For IP-targeted requests to succeed, the client must know which address families are supported by the proxy via some out-of-band mechanism, or open multiple independent CONNECT requests and abandon any that prove unnecessary.</t>
      </section>
      <section anchor="overview">
        <name>Overview</name>
        <t>This specification describes an alternative mechanism for proxying TCP in HTTP.  Like <xref target="CONNECT-UDP"/> and <xref target="CONNECT-IP"/>, the proxy service is identified by a URI Template.  Proxy interactions reuse standard HTTP components and semantics, avoiding changes to the core HTTP protocol.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="specification">
      <name>Specification</name>
      <t>A template-driven TCP transport proxy for HTTP is identified by a URI Template <xref target="RFC6570"/> containing variables named "target_host" and "tcp_port".  The client substitutes the destination host and port number into these variables to produce the request URI.</t>
      <t>The "target_host" variable <bcp14>MUST</bcp14> be a domain name, an IP address literal, or a list of IP addresses.  The "tcp_port" variable <bcp14>MUST</bcp14> be a single integer.  If "target_host" is a list (as in <xref section="3.2.1" sectionFormat="of" target="RFC6570"/>), the server <bcp14>SHOULD</bcp14> perform the same connection procedure as if these IP addresses had been returned in response to A and AAAA queries for a domain name.</t>
      <section anchor="in-http11">
        <name>In HTTP/1.1</name>
        <t>In HTTP/1.1, the client uses the proxy by issuing a request as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The method <bcp14>SHALL</bcp14> be "GET".</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include a single "Host" header field containing the origin of the proxy.</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include a "Connection" header field with the value "Upgrade".  (Note that this requirement is case-insensitive as per <xref section="7.6.1" sectionFormat="of" target="RFC9110"/>.)</t>
          </li>
          <li>
            <t>The request <bcp14>SHALL</bcp14> include an "Upgrade" header field with the value "connect-tcp".</t>
          </li>
          <li>
            <t>The request's target <bcp14>SHALL</bcp14> correspond to the URI derived from expansion of the proxy's URI Template.</t>
          </li>
        </ul>
        <t>If the request is well-formed and permissible, the proxy <bcp14>MUST</bcp14> attempt the TCP connection before sending any response status code other than "100 (Continue)" (see <xref target="conveying-metadata"/>).  If the TCP connection is successful, the response <bcp14>SHALL</bcp14> be as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The HTTP status code <bcp14>SHALL</bcp14> be "101 (Switching Protocols)".</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> include a "Connection" header field with the value "Upgrade".</t>
          </li>
          <li>
            <t>The response <bcp14>SHALL</bcp14> include a single "Upgrade" header field with the value "connect-tcp".</t>
          </li>
        </ul>
        <t>If the request is malformed or impermissible, the proxy <bcp14>MUST</bcp14> return a 4XX error code.  If a TCP connection was not established, the proxy <bcp14>MUST NOT</bcp14> switch protocols to "connect-tcp", and the client <bcp14>MAY</bcp14> reuse this connection for additional HTTP requests.</t>
        <t>After a success response is returned, the connection <bcp14>SHALL</bcp14> conform to all the usual requirements for classic CONNECT proxies in HTTP/1.1 (<xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>).  Additionally, if the proxy observes a connection error from the client (e.g., a TCP RST, TCP timeout, or TLS error), it <bcp14>SHOULD</bcp14> send a TCP RST to the target.  If the proxy observes a connection error from the target, it <bcp14>SHOULD</bcp14> send a TLS "internal_error" alert to the client, or set the TCP RST bit if TLS is not in use.  These behaviors avoid truncation of transfers between the client and the target on vulnerable protocols (e.g., HTTP/1.1 without TLS) while preserving the confidentiality and integrity guarantees of the "https" scheme.</t>
        <figure>
          <name>Templated TCP proxy example in HTTP/1.1</name>
          <artwork><![CDATA[
Client                                                 Proxy

GET /proxy?target_host=192.0.2.1&tcp_port=443 HTTP/1.1
Host: example.com
Connection: Upgrade
Upgrade: connect-tcp

** Proxy establishes a TCP connection to 192.0.2.1:443 **

                            HTTP/1.1 101 Switching Protocols
                            Connection: Upgrade
                            Upgrade: connect-tcp
]]></artwork>
        </figure>
      </section>
      <section anchor="in-http2-and-http3">
        <name>In HTTP/2 and HTTP/3</name>
        <t>In HTTP/2 and HTTP/3, the proxy <bcp14>MUST</bcp14> include SETTINGS_ENABLE_CONNECT_PROTOCOL in its SETTINGS frame <xref target="RFC8441"/><xref target="RFC9220"/>.  The client uses the proxy by issuing an "extended CONNECT" request as follows:</t>
        <ul spacing="normal">
          <li>
            <t>The :method pseudo-header field <bcp14>SHALL</bcp14> be "CONNECT".</t>
          </li>
          <li>
            <t>The :protocol pseudo-header field <bcp14>SHALL</bcp14> be "connect-tcp".</t>
          </li>
          <li>
            <t>The :authority pseudo-header field <bcp14>SHALL</bcp14> contain the authority of the proxy.</t>
          </li>
          <li>
            <t>The :path and :scheme pseudo-header fields <bcp14>SHALL</bcp14> contain the path and scheme of the request URI derived from the proxy's URI Template.</t>
          </li>
        </ul>
        <t>From this point on, the request and response <bcp14>SHALL</bcp14> conform to all the usual requirements for classic CONNECT proxies in this HTTP version (see <xref section="8.5" sectionFormat="of" target="RFC9113"/> and <xref section="4.4" sectionFormat="of" target="RFC9114"/>).</t>
        <t>A templated TCP proxying request that does not conform to all of these requirements represents a client error (see <xref section="15.5" sectionFormat="comma" target="RFC9110"/>) and may be malformed (see <xref section="8.1.1" sectionFormat="of" target="RFC9113"/> and <xref section="4.1.2" sectionFormat="of" target="RFC9114"/>).</t>
        <figure>
          <name>Templated TCP proxy example in HTTP/2</name>
          <artwork><![CDATA[
HEADERS
:method = CONNECT
:scheme = https
:authority = request-proxy.example
:path = /proxy?target_host=192.0.2.1,2001:db8::1&tcp_port=443
:protocol = connect-tcp
...
]]></artwork>
        </figure>
      </section>
      <section anchor="use-of-relevant-headers">
        <name>Use of Relevant Headers</name>
        <section anchor="origin-scoped-headers">
          <name>Origin-scoped Headers</name>
          <t>Ordinary HTTP headers apply only to the single resource identified in the request or response.  An origin-scoped HTTP header is a special response header that is intended to change the client's behavior for subsequent requests to any resource on this origin.</t>
          <t>Unlike classic HTTP CONNECT proxies, a templated TCP proxy has an unambiguous origin of its own.  Origin-scoped headers apply to this origin when they are associated with a templated TCP proxy response.  Here are some origin-scoped headers that could potentially be sent by a templated TCP proxy:</t>
          <ul spacing="normal">
            <li>
              <t>"Alt-Svc" <xref target="RFC7838"/></t>
            </li>
            <li>
              <t>"Strict-Transport-Security" <xref target="RFC6797"/></t>
            </li>
            <li>
              <t>"Public-Key-Pins" <xref target="RFC7469"/></t>
            </li>
            <li>
              <t>"Accept-CH" <xref target="RFC8942"/></t>
            </li>
            <li>
              <t>"Set-Cookie" <xref target="RFC6265"/>, which has configurable scope.</t>
            </li>
            <li>
              <t>"Clear-Site-Data" <xref target="CLEAR-SITE-DATA"/></t>
            </li>
          </ul>
        </section>
        <section anchor="authentication-headers">
          <name>Authentication Headers</name>
          <t>Authentication to a templated TCP proxy normally uses ordinary HTTP authentication via the "401 (Unauthorized)" response code, the "WWW-Authenticate" response header field, and the "Authorization" request header field (<xref section="11.6" sectionFormat="comma" target="RFC9110"/>).  A templated TCP proxy does not use the "407 (Proxy Authentication Required)" response code and related header fields (<xref section="11.7" sectionFormat="comma" target="RFC9110"/>) because they do not traverse HTTP gateways (see <xref target="operational-considerations"/>).</t>
          <t>Clients <bcp14>SHOULD</bcp14> assume that all proxy resources generated by a single template share a protection space (i.e., a realm) (<xref section="11.5" sectionFormat="comma" target="RFC9110"/>).  For many authentication schemes, this will allow the client to avoid waiting for a "401 (Unauthorized)" response before each new connection through the proxy.</t>
        </section>
      </section>
      <section anchor="relationship-to-the-capsule-protocol">
        <name>Relationship to the Capsule Protocol</name>
        <t>Unlike the datagram-oriented templated HTTP proxying specifications <xref target="CONNECT-UDP"/><xref target="CONNECT-IP"/>, this specification does not make use of the Capsule Protocol <xref target="RFC9297"/>.  A future specification could define a procedure for performing TCP proxying using the Capsule Protocol, but no such procedure is defined here.</t>
        <t>When implementing this specification, clients and servers <bcp14>MUST NOT</bcp14> send a "Capsule-Protocol: ?1" header field.</t>
      </section>
    </section>
    <section anchor="additional-connection-setup-behaviors">
      <name>Additional Connection Setup Behaviors</name>
      <t>This section discusses some behaviors that are permitted or recommended in order to enhance the performance or functionality of connection setup.</t>
      <section anchor="latency-optimizations">
        <name>Latency optimizations</name>
        <t>When using this specification in HTTP/2 or HTTP/3, clients <bcp14>MAY</bcp14> start sending TCP stream content optimistically, subject to flow control limits (<xref section="5.2" sectionFormat="of" target="RFC9113"/> or <xref section="4.1" sectionFormat="of" target="RFC9000"/>).  Proxies <bcp14>MUST</bcp14> buffer this "optimistic" content until the TCP stream becomes writable, and discard it if the TCP connection fails.  (Clients <bcp14>MUST NOT</bcp14> use "optimistic" behavior in HTTP/1.1, as this would interfere with reuse of the connection after an error response such as "401 (Unauthorized)".)</t>
        <t>Servers that host a proxy under this specification <bcp14>MAY</bcp14> offer support for TLS early data in accordance with <xref target="RFC8470"/>.  Clients <bcp14>MAY</bcp14> send "connect-tcp" requests in early data, and <bcp14>MAY</bcp14> include "optimistic" TCP content in early data (in HTTP/2 and HTTP/3).  At the TLS layer, proxies <bcp14>MAY</bcp14> ignore, reject, or accept the <tt>early_data</tt> extension (<xref section="4.2.10" sectionFormat="comma" target="RFC8446"/>).  At the HTTP layer, proxies <bcp14>MAY</bcp14> process the request immediately, return a "425 (Too Early)" response (<xref section="5.2" sectionFormat="comma" target="RFC8470"/>), or delay some or all processing of the request until the handshake completes.  For example, a proxy with limited anti-replay defenses might choose to perform DNS resolution of the <tt>target_host</tt> when a request arrives in early data, but delay the TCP connection until the TLS handshake completes.</t>
      </section>
      <section anchor="conveying-metadata">
        <name>Conveying metadata</name>
        <t>This specification supports the "Expect: 100-continue" request header (<xref section="10.1.1" sectionFormat="comma" target="RFC9110"/>) in any HTTP version.  The "100 (Continue)" status code confirms receipt of a request at the proxy without waiting for the proxy-destination TCP handshake to succeed or fail.  This might be particularly helpful when the destination host is not responding, as TCP handshakes can hang for several minutes before failing.  Clients <bcp14>MAY</bcp14> send "Expect: 100-continue", and proxies <bcp14>MUST</bcp14> respect it by returning "100 (Continue)" if the request is not immediately rejected.</t>
        <t>Proxies implementing this specification <bcp14>SHOULD</bcp14> include a "Proxy-Status" response header <xref target="RFC9209"/> in any success or failure response (i.e., status codes 101, 2XX, 4XX, or 5XX) to support advanced client behaviors and diagnostics.  In HTTP/2 or HTTP/3, proxies <bcp14>MAY</bcp14> additionally send a "Proxy-Status" trailer in the event of an unclean shutdown.</t>
      </section>
    </section>
    <section anchor="applicability">
      <name>Applicability</name>
      <section anchor="servers">
        <name>Servers</name>
        <t>For server operators, template-driven TCP proxies are particularly valuable in situations where virtual-hosting is needed, or where multiple proxies must share an origin.  For example, the proxy might benefit from sharing an HTTP gateway that provides DDoS defense, performs request sanitization, or enforces user authorization.</t>
        <t>The URI template can also be structured to generate high-entropy Capability URLs <xref target="CAPABILITY"/>, so that only authorized users can discover the proxy service.</t>
      </section>
      <section anchor="clients">
        <name>Clients</name>
        <t>Clients that support both classic HTTP CONNECT proxies and template-driven TCP proxies <bcp14>MAY</bcp14> accept both types via a single configuration string.  If the configuration string can be parsed as a URI Template containing the required variables, it is a template-driven TCP proxy.  Otherwise, it is presumed to represent a classic HTTP CONNECT proxy.</t>
        <t>In some cases, it is valuable to allow "connect-tcp" clients to reach "connect-tcp"-only proxies when using a legacy configuration method that cannot convey a URI template.  To support this arrangement, clients <bcp14>SHOULD</bcp14> treat certain errors during classic HTTP CONNECT as indications that the proxy might only support "connect-tcp":</t>
        <ul spacing="normal">
          <li>
            <t>In HTTP/1.1: the response status code is "426 (Upgrade Required)", with an "Upgrade: connect-tcp" response header.</t>
          </li>
          <li>
            <t>In any HTTP version: the response status code is "501 (Not Implemented)".
            </t>
            <ul spacing="normal">
              <li>
                <t>Requires SETTINGS_ENABLE_CONNECT_PROTOCOL to have been negotiated in HTTP/2 or HTTP/3.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>If the client infers that classic HTTP CONNECT is not supported, it <bcp14>SHOULD</bcp14> retry the request using the registered default template for "connect-tcp":</t>
        <figure>
          <name>Registered default template</name>
          <artwork><![CDATA[
https://$PROXY_HOST:$PROXY_PORT/.well-known/masque
                    /tcp/{target_host}/{tcp_port}/
]]></artwork>
        </figure>
        <t>If this request succeeds, the client <bcp14>SHOULD</bcp14> record a preference for "connect-tcp" to avoid further retry delays.</t>
      </section>
      <section anchor="multi-purpose-proxies">
        <name>Multi-purpose proxies</name>
        <t>The names of the variables in the URI Template uniquely identify the capabilities of the proxy.  Undefined variables are permitted in URI Templates, so a single template can be used for multiple purposes.</t>
        <t>Multipurpose templates can be useful when a single client may benefit from access to multiple complementary services (e.g., TCP and UDP), or when the proxy is used by a variety of clients with different needs.</t>
        <figure>
          <name>Example multipurpose template for a combined TCP, UDP, and IP proxy and DoH server</name>
          <artwork><![CDATA[
https://proxy.example/{?target_host,tcp_port,target_port,
                        target,ipproto,dns}
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Template-driven TCP proxying is largely subject to the same security risks as classic HTTP CONNECT.  For example, any restrictions on authorized use of the proxy (see <xref section="9.3.6" sectionFormat="comma" target="RFC9110"/>) apply equally to both.</t>
      <t>A small additional risk is posed by the use of a URI Template parser on the client side.  The template input string could be crafted to exploit any vulnerabilities in the parser implementation.  Client implementers should apply their usual precautions for code that processes untrusted inputs.</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>Templated TCP proxies can make use of standard HTTP gateways and path-routing to ease implementation and allow use of shared infrastructure.  However, current gateways might need modifications to support TCP proxy services.  To be compatible, a gateway must:</t>
      <ul spacing="normal">
        <li>
          <t>support Extended CONNECT (if acting as an HTTP/2 or HTTP/3 server).</t>
        </li>
        <li>
          <t>support HTTP/1.1 Upgrade to "connect-tcp" (if acting as an HTTP/1.1 server)
          </t>
          <ul spacing="normal">
            <li>
              <t>only after forwarding the upgrade request to the origin and observing a success response.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>forward the "connect-tcp" protocol to the origin.</t>
        </li>
        <li>
          <t>convert "connect-tcp" requests between all supported HTTP server and client versions.</t>
        </li>
        <li>
          <t>allow any "Proxy-Status" headers to traverse the gateway.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="new-upgrade-token">
        <name>New Upgrade Token</name>
        <t>IF APPROVED, IANA is requested to add the following entry to the HTTP Upgrade Token Registry:</t>
        <ul spacing="normal">
          <li>
            <t>Value: "connect-tcp"</t>
          </li>
          <li>
            <t>Description: Proxying of TCP payloads</t>
          </li>
          <li>
            <t>Reference: (This document)</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-template">
        <name>New MASQUE Default Template</name>
        <t>IF APPROVED, IANA is requested to add the following entry to the "MASQUE URI Suffixes" registry:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Path Segment</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">tcp</td>
              <td align="left">TCP Proxying</td>
              <td align="left">(This document)</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC9110">
          <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="RFC6570">
          <front>
            <title>URI Template</title>
            <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="M. Hadley" initials="M." surname="Hadley"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="D. Orchard" initials="D." surname="Orchard"/>
            <date month="March" year="2012"/>
            <abstract>
              <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6570"/>
          <seriesInfo name="DOI" value="10.17487/RFC6570"/>
        </reference>
        <reference anchor="RFC8441">
          <front>
            <title>Bootstrapping WebSockets with HTTP/2</title>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>This document defines a mechanism for running the WebSocket Protocol (RFC 6455) over a single stream of an HTTP/2 connection.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8441"/>
          <seriesInfo name="DOI" value="10.17487/RFC8441"/>
        </reference>
        <reference anchor="RFC9220">
          <front>
            <title>Bootstrapping WebSockets with HTTP/3</title>
            <author fullname="R. Hamilton" initials="R." surname="Hamilton"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The mechanism for running the WebSocket Protocol over a single stream of an HTTP/2 connection is equally applicable to HTTP/3, but the HTTP-version-specific details need to be specified. This document describes how the mechanism is adapted for HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9220"/>
          <seriesInfo name="DOI" value="10.17487/RFC9220"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC8470">
          <front>
            <title>Using Early Data in HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="W. Tarreau" initials="W." surname="Tarreau"/>
            <date month="September" year="2018"/>
            <abstract>
              <t>Using TLS early data creates an exposure to the possibility of a replay attack. This document defines mechanisms that allow clients to communicate with servers about HTTP requests that are sent in early data. Techniques are described that use these mechanisms to mitigate the risk of replay.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8470"/>
          <seriesInfo name="DOI" value="10.17487/RFC8470"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC9209">
          <front>
            <title>The Proxy-Status HTTP Response Header Field</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. Sikora" initials="P." surname="Sikora"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This document defines the Proxy-Status HTTP response field to convey the details of an intermediary's response handling, including generated errors.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9209"/>
          <seriesInfo name="DOI" value="10.17487/RFC9209"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CAPABILITY" target="https://www.w3.org/TR/capability-urls/">
          <front>
            <title>Good Practices for Capability URLs</title>
            <author>
              <organization/>
            </author>
            <date year="2014" month="February"/>
          </front>
        </reference>
        <reference anchor="CLEAR-SITE-DATA" target="https://www.w3.org/TR/clear-site-data/">
          <front>
            <title>Clear Site Data</title>
            <author>
              <organization/>
            </author>
            <date year="2017" month="November"/>
          </front>
        </reference>
        <reference anchor="CONNECT-UDP">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
        <reference anchor="CONNECT-IP">
          <front>
            <title>Proxying IP in HTTP</title>
            <author fullname="T. Pauly" initials="T." role="editor" surname="Pauly"/>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="A. Chernyakhovsky" initials="A." surname="Chernyakhovsky"/>
            <author fullname="M. Kühlewind" initials="M." surname="Kühlewind"/>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <date month="October" year="2023"/>
            <abstract>
              <t>This document describes how to proxy IP packets in HTTP. This protocol is similar to UDP proxying in HTTP but allows transmitting arbitrary IP packets. More specifically, this document defines a protocol that allows an HTTP client to create an IP tunnel through an HTTP server that acts as an IP proxy. This document updates RFC 9298.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9484"/>
          <seriesInfo name="DOI" value="10.17487/RFC9484"/>
        </reference>
        <reference anchor="RFC9297">
          <front>
            <title>HTTP Datagrams and the Capsule Protocol</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <author fullname="L. Pardue" initials="L." surname="Pardue"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes HTTP Datagrams, a convention for conveying multiplexed, potentially unreliable datagrams inside an HTTP connection.</t>
              <t>In HTTP/3, HTTP Datagrams can be sent unreliably using the QUIC DATAGRAM extension. When the QUIC DATAGRAM frame is unavailable or undesirable, HTTP Datagrams can be sent using the Capsule Protocol, which is a more general convention for conveying data in HTTP connections.</t>
              <t>HTTP Datagrams and the Capsule Protocol are intended for use by HTTP extensions, not applications.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9297"/>
          <seriesInfo name="DOI" value="10.17487/RFC9297"/>
        </reference>
        <reference anchor="RFC7838">
          <front>
            <title>HTTP Alternative Services</title>
            <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
            <author fullname="P. McManus" initials="P." surname="McManus"/>
            <author fullname="J. Reschke" initials="J." surname="Reschke"/>
            <date month="April" year="2016"/>
            <abstract>
              <t>This document specifies "Alternative Services" for HTTP, which allow an origin's resources to be authoritatively available at a separate network location, possibly accessed with a different protocol configuration.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7838"/>
          <seriesInfo name="DOI" value="10.17487/RFC7838"/>
        </reference>
        <reference anchor="RFC6797">
          <front>
            <title>HTTP Strict Transport Security (HSTS)</title>
            <author fullname="J. Hodges" initials="J." surname="Hodges"/>
            <author fullname="C. Jackson" initials="C." surname="Jackson"/>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="November" year="2012"/>
            <abstract>
              <t>This specification defines a mechanism enabling web sites to declare themselves accessible only via secure connections and/or for users to be able to direct their user agent(s) to interact with given sites only over secure connections. This overall policy is referred to as HTTP Strict Transport Security (HSTS). The policy is declared by web sites via the Strict-Transport-Security HTTP response header field and/or by other means, such as user agent configuration, for example. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6797"/>
          <seriesInfo name="DOI" value="10.17487/RFC6797"/>
        </reference>
        <reference anchor="RFC7469">
          <front>
            <title>Public Key Pinning Extension for HTTP</title>
            <author fullname="C. Evans" initials="C." surname="Evans"/>
            <author fullname="C. Palmer" initials="C." surname="Palmer"/>
            <author fullname="R. Sleevi" initials="R." surname="Sleevi"/>
            <date month="April" year="2015"/>
            <abstract>
              <t>This document defines a new HTTP header that allows web host operators to instruct user agents to remember ("pin") the hosts' cryptographic identities over a period of time. During that time, user agents (UAs) will require that the host presents a certificate chain including at least one Subject Public Key Info structure whose fingerprint matches one of the pinned fingerprints for that host. By effectively reducing the number of trusted authorities who can authenticate the domain during the lifetime of the pin, pinning may reduce the incidence of man-in-the-middle attacks due to compromised Certification Authorities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7469"/>
          <seriesInfo name="DOI" value="10.17487/RFC7469"/>
        </reference>
        <reference anchor="RFC8942">
          <front>
            <title>HTTP Client Hints</title>
            <author fullname="I. Grigorik" initials="I." surname="Grigorik"/>
            <author fullname="Y. Weiss" initials="Y." surname="Weiss"/>
            <date month="February" year="2021"/>
            <abstract>
              <t>HTTP defines proactive content negotiation to allow servers to select the appropriate response for a given request, based upon the user agent's characteristics, as expressed in request headers. In practice, user agents are often unwilling to send those request headers, because it is not clear whether they will be used, and sending them impacts both performance and privacy.</t>
              <t>This document defines an Accept-CH response header that servers can use to advertise their use of request headers for proactive content negotiation, along with a set of guidelines for the creation of such headers, colloquially known as "Client Hints."</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8942"/>
          <seriesInfo name="DOI" value="10.17487/RFC8942"/>
        </reference>
        <reference anchor="RFC6265">
          <front>
            <title>HTTP State Management Mechanism</title>
            <author fullname="A. Barth" initials="A." surname="Barth"/>
            <date month="April" year="2011"/>
            <abstract>
              <t>This document defines the HTTP Cookie and Set-Cookie header fields. These header fields can be used by HTTP servers to store state (called cookies) at HTTP user agents, letting the servers maintain a stateful session over the mostly stateless HTTP protocol. Although cookies have many historical infelicities that degrade their security and privacy, the Cookie and Set-Cookie header fields are widely used on the Internet. This document obsoletes RFC 2965. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6265"/>
          <seriesInfo name="DOI" value="10.17487/RFC6265"/>
        </reference>
      </references>
    </references>
    <?line 267?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Amos Jeffries, Tommy Pauly, Kyle Nekritz, David Schinazi, and Kazuho Oku for close review and suggested changes.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61c63LbRpb+j6foYaZ2pBRBibJ8Y40ny0hypI0taURq4tTU
lNMEmmSPQICDBkTTifIs+yz7ZHsufQFISs5cXElMgkD36XP9zgWJ4ziqdJWp
geiM1WKZyUrFp6W+V7k4H4+vxcnV5eXZyVhcl8Wntc5nYlqUYnxy3YnkZFKq
+8Zzqbs5pt8TuDQryvVAmCqNorRIcrmAfdJSTqtYq2oaz6tqOdEmToo8V0kV
V8kyPnwW6WU5EFVZm+ro8PD14VEkSyUHQpZVZOrJQhuji7xaL2Gxi7Px22hV
lHezsqiXA2FXjO7UGq6mcENeqTJXFRwKto0iU8k8/SizIoen18pEZgHrfvxH
XVTKDEReREs9EH+tiqQrTFFWpZoa+LRe4Ie/RZGsq3lRDiIRRwL+8JG+Vfnf
5ULn4n1PjJL5Clb8TD8X5Uzm+rOsgOCBeK8qKa6BVcDDBax6kSc9uk0tpM4G
Anny3xP4YpIekBxFOdwHz96rQRTpfBq+CXEyvB5+e/HuYvzjgJawQvyuKFKQ
lUwqnShDwjqRSznRma7W4vbmnaG7U5DNQPRfibdqUtayXIujw/4xLyTLmaqY
k2ZwcLBarXqrZz04ycH45iDxi8V1mZkDpOTd2fAmHl2Mz+LT4XjYIuckU7IU
I10pcSor2dj72aG4LO7VYqJK3Pvlb9kbF4sNLBbDGvIgiuI4FnJiKjxvFIHW
iaVT09rgf1sqPJdGgNxnYqJAu5cgJFFMRTVXIilKxfeapUr0VCcksZ4Q58VK
3auyC7dpE1af1nmCd0hiKy5s8DaZCb1YgtbIvBKpgnW0yuFfI0A3FkUKmsjb
qPxel0W+UHllYJcxLt7amp7O4UGZC5mhCpPk+WkiA3Ys70HIQHw+1bO65Oes
eQprUnDJb9C+ES6kyiSlnoDhTtZCgnZcCGfLoPJ6oTMQXlUQi5xp355eA03B
1C+IHDCXIjM9lshCp2mmougrNL6ySGsiA75/Jc61qcAlRBGdA/lWG9i+sYFY
KDCwlM7h2b1xIKAtT5gXB/1eH873wxwkyiK363Rp0VL9o1amsorlWIxsFfMC
ruNJUF4ir1ETu3QBH2QWAxFgy6khApZynRUSvkxUtUINIs3JQMKVfYxZWumc
Obz388/f3Lw9ed3vH3bFiGkXr3vPei8eHvZRKAXZgtUt+AcXLPJsDTxI5uA3
zMKqwQ52gO2UxAFY6CLnJVoaFJYFz6XKEtlcCIlH7ySZBB+atM2Dlu/0WDYH
z1AyeDMKHAwsN8gn9IlCVyKReV5UwAnHIlid2c/MU7H6pJETs4Zc7Zn45CqX
k8w/Hs4GFsn7swDfD0d/vj0TajpFKaHCOI6whPyqyD0JggBDJh8Fa8NSflk8
BTqNWSnhVhBMQ5/foJCOXr96eGD5L9AbzFSO9gzCuHjkyQt+8PjV8cMDmZhq
SX+Xfok9PRVyucxARkDhPpELHqJA/uncmhpJpVSmqEvQ8qWs5kyXytO4KmL4
q0EQrrAqYU23Aj192iSYj/fy4QGUq6G0MXMQ1++RcUKIB6IWxlon32VQ1iho
5z1Yj0A5iLloSxP0RRnqNzBaWsHg8TE4dvEKaQ4eYTUH61alW0HCg0ldog91
TqQXXK7THGvEpqVhuEdaCNTCRJYQwKodLs6FTHTlF7mplExJrdZsZjpP0VgU
LekIDjKzwYF9R499KKj2PXFF5msbMcANw4mmZbGgNZDERZ1VegkqmJIRJFXb
ZUPol2zt9mFrTnz3rNZmjr8ukLMoHrEHt680fPDrOfUw+4Ax8L6i1DMIMngn
/NWB8FLVEI4sRZ19EDFqKERLhb4TzgZiVZ9QFcGe7dPoZQJ7ZQbGXtYZiLio
K/qhNrgomKDKyTvMpAa2umMQ1wCepbq03k5WlUzujNgzSoEqOif4sneMFDjv
CO6QuJ4AzKtw2cUEhIhaISdhZyKaCY1NUqDCAxeWEA9AeCBZFIJWGTjoPdWb
9bqiM8yqeHSfdKwRvHz1jGy8M6pKDWhz7LxaPLJa6O588RLNBXl28pinRMW3
lsEhDFilZDIHnbbBhhwAOaXgmuFG8sBpAYgvJ/SI8oN1wMvINIUDmSbqmKhE
0slRXSXGvVmmWhtYGvz6XRZenFoMD55hLc7WagK+zFguF8Zg3J7CpQmIh9ag
HdxhVnMb3mgLvUExEPgWiL64jpkQEoQ1UWCDqZNEKTY0Fx8XgOXFXV6sYGmN
TOKjAgkAMigegxsz9RKlwXAkqOG9hoMXyKi6iotpPCEf7fx+F/kHypAHowOz
VnAhxY23fAg+LHEJ1M58zQKCjQBb1QgwgCqAw+wQr+7RXtUKTWcHQGPwtAXR
QvDeCto6dyH7nb5TG2EI/DMS14owqK6BEw7xYVjH07FCbWE3WJ6yNYwHilIB
xEylQkWi9AcDLrv4AtBqbv1ZCusvALjqBP3TfaFTJBvPMlPGwcCAlL3DRqB3
UuToFmkjXOkUg7Sm7+x3IB8TmJAZ0Xl/Oxp3uvy3uLyizzdnf769uDk7xc+j
8+G7d/5DZO8YnV/dvjsNn8KTJ1fv359dnvLDcFW0LkWd98MfOxx9OlfX44ur
y+G7DkqC8VqR1AtCcHAuOONEMdfAz1dkrFEAyfDMtyfX//e//WMQ0u/ATRz1
+69BavzlVf8lAAEyHd6NLIq/YsiJMEYDntaoLRmCFF2Bh6VQYObFChCDKhVw
8+u/Imf+NhB/nCTL/vGf7AU8cOui41nrIvFs+8rWw8zEHZd2bOO52bq+wek2
vcMfW98d3xsX//hNBjBOxP1X3/wpQhUaNa0rioaicuUI68rQgDwQDQCdtfEL
JmFl9OL5Swg2iBIqcGao3vey1AjFDHk2UBF2aR/R8XVYaapk+RG37FiQZ12a
qSHx1FWNAav6LdjP4TuwwrArXFpSiqRa+QrQbgN2myD3oCCNmKi2Y+62A4mA
5BQxLLlICd8MYZpwgzL2SOGMu3awUQftYqZKzDemG2RRhKD1Lf4Iof5Z76jX
x20D//e7Texj1W6pSgRr/AuGxZDvIYcSlQL0RFvRU8vE5jkgM0g5rQe7rcuc
rdXDA+DykOQxhD8CWFxqWxxpBzby+he5zyyjqPGlFdAoOQqeGRROG1MzAHZC
lLhFlhUrMwCrJkbb5JZtEpjb+e5sDCkX/+ie418B5mV12uB/55x43YQ6TU2m
5JFhnAWuRNqXFu+ceD5vrE2AE9e5l1kN298uIaNIFZrB3mVBqFlW7EVxccB8
5EgRhUujYgCGABI1hUTgBMi3BQBfBK1gCNjbf5rSPFDwNJ2NYuIma/9gHHbi
xSGasY6kLr6h04ClgeiUIT1AZHA5SHOTq7BQK+KCokxbBgxcWKksi1GnMY6g
L1AllS7BuJpBnewMcDIsxUi3XewALZlizAVmUjxGzOL1GqJ5VWPWAwwqOLGa
I6P6h4diDwQLDqlW+x0HvxOM0ghGYtBDiTkkFyIs7RsbI+JBKGfMtM5cOcVu
7BV4h45zVtSgLGh7/7Av9kYgsGSOZ7l2haP9hqBaO/xbevqlJZ1d/StqtUPe
C5lZaYNf0YunxM1OCkg4/vBBqLKEB5BTLAq5KYgVMBnTQ9gHPDMkhw5cN1bE
aGyIsaEchzrdIjuUt6wXgzhtcaHLnt2e5BvTVHOR05UkGEPD6YdTiCzIQlaQ
wGNyBuyBrb8Mazqby9nRF4SDQlbZcCLsm12VajPt0sEnY43td0/V2Ib+DNm6
a2OH5VsxoQiEoatBJEuDTL/BKJtRsmhuRuMuoxG9UJCUUHwdvxvxsxDddOWi
GlpteMo5GVdRcIb3T9DDj+7aAvbvEHSFs36kpwC/ZArwh4PudBQi1qjgapCu
CSwHvME1NOuaxnKqYngAYp2oubzXRWk4McDmTG7zIHSLiMqmqnyiNOqTVnji
vs6wtoYgI+iq5bAXLJof5v5A0z4mjXSzogzIBjuq9RDm4yo8bkQYhepJs1oC
VZXC4gVzuUNdhY4wyVxRrP/1118hvyci/9k/lF9FEURvcUDS+6aBh970Xx/1
DhH3/JfDVW+Oj58FVIGBfACRRUL0UD1IwqLg3AbCuqPI/j0QDRMGH/u1Te6C
NzDbLgNE7okY4N5ffx1FTx3I8x1d9A4P/eTDu6h/6v6dJ0Np/DzgxtGbRk/R
d3Ucw5r233loQbYjUgKuHwfs1ry65ThdOBidjccXl9+NPp5dDr99d/bROp2P
1zdX46uTK4wbYHTG3wcmiSjV5n7Hx/2HB+uKjo4OfUH4y2gRorX6VGG1wvdU
Ok8hyIGFkEuj6rSIWyErBFq3kouBA2doX3huF3YacMuTirSPPmyBKB0y3L8L
iA6oookSGbAl7lrV7FjWP2cfK9oReAu5PQHW3vLvWM8twGUI7paEtXCXDdjw
HwlbtCXFUsh8CFRuFEZf9Z43UPEzXxJyvx9z4dT+fsw1ypAqN6wFlct3vxCo
p4Vi175xksLlU62DlIq8LVWGnBZzKLIUb0fd/vPec1fJXUgqJgZItHXOfgv/
7zppv3e0fVb0Eudnw9Ozm1HkTOGNY3XkNOoNd5Cjhuq+cdzgtkfPOpOI1fHN
k268e3R42B+kk1eDQdulR8Gu3rScWa/X+xcc2pF1Z7dc675RmbrHTvI5WYbB
374SV60KuP/pqoT0ABv53Fnly9Rrss0OiwIs6PXtpUbVxNqZ0xqQtbMBBFL5
Ru29sQ/n/1QeJYNoF+VdCRxjM7k5oISrig2Y8AfjMQYZEVZXkI68atWWbfbD
pBfWoJguUI7bPMOy6qPdTU2dl13WQp1F8MV1zr2HojaNZBr9frHCcYA289tc
JgZ7cnwNfU2lRaCoAO7gppRY7Kaiwe9zhU9h4kel7537EmeTos6w0FQxEuIq
PlouV8F2bEOxZHdzBH/4jd0RvPW6BgSSxN+rdXwN+b5f6/jFa75hCOnBsopP
zt1Pr14fH9ltFFwvijut/LpHL55jwZtbBCgR385DrEiHxyjSoamSGKdKYmx0
4vMbQygPD2wsQ7B/5IvFqt5aNq6jZu0UCA3gIE8pghctG5PtNbBNQTDzGJPc
29y6ns8q3e8Em8A0j2NN54cffogbdKjOluVQKAxJW2dol5ScBTtDbYXjnQlR
v+/zoZ3H9LGBU0E6xEuxx0Bzg1c3HCa2TmWDJi+90Y/bNQgBNGGPzbe4yFRs
RxcSCgyQtpYwgyVXcu27iKAG3OCVGU6OGXBh/N24nh03rm2CBKZXL2y1CgOe
NzVuoNpOf+XKxq7H5irHZk72S6mKJd0sJbifPd1TlBOWSmaL/UdP+Zw5jy2z
BfqvDb3hkGXsuMZKA4USIV8zh0L9pLxrJXXlhvDkF1TNFo6oKZmrVSs9mJdF
PZs3wRnGnRuUHvJxrpd+7kcuTQ38cJmA97JU87ZjBjHsDnSib/faFSaVkOBW
7wynElqNr/DVtby2221ORRfyzneDdxHYmnggjZ/WFdaO2+ux2+RhEpauLTFT
046L0a5ttzFUtmvXrphAsppT93PeWE2HgRXb3qFRJY1xH5EWr7c9u+OGL7gt
h4Vy0yj0cMrfsUTEjoiB+KbfrmJRcy7UQBqZGmhoVS/Fty6xdz1O+2uqTVJT
ZZ3iT8j//ZQN1beqistdpYIsdsHhHWNmmfKQh8oh0NvehmUqfcco3xqhA2E2
9NMgbayT70CZ8gRuWFZ6YV2fsVx04thSFg+ohO0PYeLnWIpFL8idy8rXVFHG
pgIzXlDCgRbH2xm0UqocAR75OxCHZ5qiceJ9JShbBndV5OGcxT9vwVYEtkXZ
xrX+58PDQ/YN1zZF4J5LPZ0SbIJjdQIdHU9bDWqT+fqNJXyCEoAlVhCpJdUc
UXVQjNjt5frOjiLvVOoMu0B7zml6JUMTa23v8Zlu9kRokAUdF9kTFaCmCF0I
5XBt0Q9Z+l0llw9ddSvUs9F4YMVdjq23H0UjawmkhNxks+68zlPHs7YqoLQL
YqgdL+AJSazWyRICO7ow6skmCWgtKSeR7hL7l5zMnzSVB82vlSoHjAorhXVZ
BviIqzK0GGpFQTJtPQehZUfpgsK3rdsB+Zlc44SIyy5plxngFZB8qVBXue1H
AIwe+ok2+Igb/CSo5mDslKItYbwIYesY0x6rnHZP8uc7NiVfZ0y7Gg6+IEW0
i6bji92d46PnYm9cFOIMKWnGqr3A7kAEWBI1C+EYKUSmtYPCLorjtnZksLl5
MA/wPSmEb0wJCnS4FTU8MRDbzKvr9YdkTsZM3ZpKx5AB455+1mmhZ3NA2/Oi
4Iaia1ieXo4ITGS1L4cisxuJ5E+cCzQagyWWKbaUBSMIH3SHoTaMHoS/62Tk
Lk9ci0e4Fs/O4RVrCyy1ztkn+LEaiP7hIQIq6hptwcvd8OYQE3mEcToPI3G2
uOGay5vdqGZviBB+ucCCQ6L0khrUDUZVjaqZqwg3MZD/NW6235F1gUNhJInC
Djg8NxDNIp0omgXXSZ2RMOYqW07rLAxBbXX2bY3ctg6BFnKDrV15OAyzXE5n
7XQ4QAoaGLDYDImBx3f6l51CYY+ybIYLpAIjk6aEj40N2bPFdr3VsaJCfzBV
6zcUogYXkb4AVBzGbvTpKGmIRyTj7ZTG1UgPcXDG6oxrIlnpIGwKjoFBdkNl
DJaou+Low4cuts/IPTz/8GGf5cwuXqb36MlTh58b7QsKihIcJfpgw8PT21ih
6eBko4XkoVf7lJCv6IxGPIjFNCJqRywB5UC2ChY3r6sUiwiEyOwIML1IQXZr
I1sUvSVtockIznOA6u7OWRhHI4GxpgJjw5IyZiDH6Kq2mHuFAFTYwdDYjaqi
GoBpYLsOduZ7/CSd24LG92wi5OpAm540GKozqxyAb8W1WHzWlrubKV2YvtMo
2NPTYuQcbtc5WOM11kgcKftsETLujYVMTOEAZZSu7My/2+kZrPv6TC6hQT1D
Q16AmuqkctPMLgUUcyA9VgjtluvNF2cwafEv3WCWYgqmn4czPVQhatj+EX7R
oP7WDJ/11mz1IWWl9ZwWTwqISU8Vs7gy8IRqkPoyAqDF8J0pQ5UKn+e2J6aB
LeyPLjxm2/rVjZyCzhk3z9qatdoYSrF15TRMPVH7kmqGjxG/xlobDjSsNKoC
344V6XrhZm1tfZrK04+9zdCjJhDBBpxJ8Rt7C+EaOOD5NpxzqYIf6m39HJPA
HY9XIRORIlMzCclKm222TM3VOp705kkMy7gqzG2Ogw8jZwtIAQulC2rcJu26
BuJ+WEmV1CEhJA3JZs0i2sUSGs1KfQ5ux3faVktHcyS0Tk1Vw8Y41KA9EdIM
6pi4HB+9AATPjb5Gzahry59hmqfVBdwKGD3edBNafGHz55g+XAKfL1z4ogwi
EiJ2tJgvd/xA+hA2FM+V5WpWVFzA3ZFdhoEQG3F0Pg0V2l3CsOHXzzw3W/oQ
xMt1G9OaYE0zSB8U2hN4SgmeOjg4RBqbMsMuhHud7vdwtA8/fjy/Go0H9vP1
1c34oEejSjienR8spIEtd7ZvD2DJg58bwPYBvtluyMPBRr/j5nE6sctB3NIN
384IzbSG7Dw7MDUjqI5vMtH7C1tHDTWyaV3SKBRzkQC1BcfvMa7Fy7pcFuH1
FQ4UOP7nJwXCeKYN6C33VucaaMbXR7h1wpLyL0bqsI7zZLe5qwGFldslFNin
uYeh4LJdi2y+cIAcCIGaz4TnpEO6M7onm+8qeGwbYoAd0qemXSNqS8ZlwFm/
EacbaFFYB3fvs7jpDXTfGJNuT6/3HZ7IGz5G2/f9qNCKvFC29GM9m33HZUpS
rgiYmF5bh1vdu4Ofmw27rlPGrr1Inx+dRLCjNHpJPbxumpuHDR0+s/25xS6W
2hosMGRCooWzd/HgDNEvXGmdpuGLc4vpqMEnXEMFs7VG9Ro08bFwaJFahiST
g/bVKD8v69+kKrW5M+jsd/mdrfyXG2rU8qGogNWZFpRpKbMrwT/+XqNthoFZ
E17GkfqCXjAbCoOtlOZUGVJKgb0w4aUPu+UGpiCwUbZfYBPIO5tkeqnofAk5
okMqVJTCl9fw5W9GDvjOU6ErOrmbRHJ26ycNaDOf+7iXge2wkL+OHt7MaQ/b
ApwrXdq5AHBWiayZqVM74OfxbsJTy5DU41vu5ACAbHJT4iq0Nx5VkLQF89C2
m2Xx9ksevn1CqaOs5nEJaTTFE+CGxKG91kH5FRlCRW49RP5I47SUHjg3X1MC
zSOD9VsxmED7xdeeG4X/RpIW2k/OjTAAmrCXgQe4jOmTBcxCCIW4Fc42Bmf4
9Ur7HqJxyUYzTlsz3O81VvGjTw6tbI5NPrIsPmKXI2DBaQBVNu1brS5m13Zh
P4/BZmsbxfSuyMRNtm3PVCKt7jVZKte0aPMDCK1F8RnCmJsoLlQq3age2mR4
86r5SiO9LMYqb2GXwXVZNdB8NrJg35YuQgMPSbLyI+W+GF4Ot7QaQvOlWnn+
j4s7lQNEeCuG14BS/nJ22uXnAl6wLzOnzBGekULuYermRx3oLK1FBaOSklvg
f8HB3kGbP3D5lF74WfI4m//fXoAZNF8Ch/tuHBgZiL1x812ifX8i+/byqQVA
4W2Ur7TMZeyc1sN/4LAduxd6zVE9nepPisov/ry/iLjxRzz5la7AE9c4GzNS
Mxrs/6XJGQFfPQNsQMUngIchwv5CLPMs/GWTT/AE/Q8D8CVEKoskiEEzldKG
BiIxvzqj0jedKWTuhBzHc5nfkZINF4UR/6Om05IGO8bFYrEGkmssOn+/hrh9
qe4gIn7uilN5D8BwhDON8rPmCP29/FzPC3F1V9uprYJmoPB9P+661bMZM9++
AteL/h/Zrg5nLUUAAA==

-->

</rfc>
