<?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.11 (Ruby 3.2.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-masque-quic-proxy-02" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="QUIC Proxy">QUIC-Aware Proxying Using HTTP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-masque-quic-proxy-02"/>
    <author initials="T." surname="Pauly" fullname="Tommy Pauly">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author initials="E." surname="Rosenberg" fullname="Eric Rosenberg">
      <organization>Apple Inc.</organization>
      <address>
        <postal>
          <street>One Apple Park Way</street>
          <city>Cupertino, California 95014</city>
          <country>United States of America</country>
        </postal>
        <email>eric_rosenberg@apple.com</email>
      </address>
    </author>
    <author initials="D." surname="Schinazi" fullname="David Schinazi">
      <organization>Google LLC</organization>
      <address>
        <postal>
          <street>1600 Amphitheatre Parkway</street>
          <city>Mountain View, California 94043</city>
          <country>United States of America</country>
        </postal>
        <email>dschinazi.ietf@gmail.com</email>
      </address>
    </author>
    <date year="2024" month="May" day="21"/>
    <area>Transport</area>
    <workgroup>MASQUE</workgroup>
    <keyword>quic</keyword>
    <keyword>http</keyword>
    <keyword>datagram</keyword>
    <keyword>udp</keyword>
    <keyword>proxy</keyword>
    <keyword>tunnels</keyword>
    <keyword>quic in quic</keyword>
    <keyword>turtles all the way down</keyword>
    <keyword>masque</keyword>
    <keyword>http-ng</keyword>
    <abstract>
      <?line 70?>

<t>This document defines an extension to UDP Proxying over HTTP
that adds specific optimizations for proxied QUIC connections. This extension
allows a proxy to reuse UDP 4-tuples for multiple connections. It also defines a
mode of proxying in which QUIC short header packets can be forwarded using an
HTTP/3 proxy rather than being re-encapsulated and re-encrypted.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-masque.github.io/draft-ietf-masque-quic-proxy/draft-ietf-masque-quic-proxy.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-masque-quic-proxy/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        MASQUE Working Group mailing list (<eref target="mailto:masque@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/masque/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/masque/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-masque/draft-ietf-masque-quic-proxy"/>.</t>
    </note>
  </front>
  <middle>
    <?line 78?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>UDP Proxying over HTTP <xref target="CONNECT-UDP"/>
defines a way to send datagrams through an HTTP proxy, where UDP is used to communicate
between the proxy and a target server. This can be used to proxy QUIC
connections <xref target="QUIC"/>, since QUIC runs over UDP datagrams.</t>
      <t>This document uses the term "target" to refer to the server that a client is
accessing via a proxy. This target may be an origin hosting content, or another
proxy.</t>
      <t>This document extends the UDP proxying protocol to add signalling about QUIC
Connection IDs. QUIC Connection IDs are used to identify QUIC connections in
scenarios where there is not a strict bidirectional mapping between one QUIC
connection and one UDP 4-tuple (pairs of IP addresses and ports). A proxy that
is aware of Connection IDs can reuse UDP 4-tuples between itself and a target
for multiple proxied QUIC connections.</t>
      <t>Awareness of Connection IDs also allows a proxy to avoid re-encapsulation and
re-encryption of proxied QUIC packets once a connection has been established.
When this functionality is present, the proxy can support two modes for handling
QUIC packets:</t>
      <ol spacing="normal" type="1"><li>
          <t>Tunnelled, in which client &lt;-&gt; target QUIC packets are encapsulated inside
client &lt;-&gt; proxy QUIC packets. These packets use multiple layers of encryption
and congestion control. QUIC long header packets MUST use this mode. QUIC short
header packets MAY use this mode. This is the default mode for UDP proxying.</t>
        </li>
        <li>
          <t>Forwarded, in which client &lt;-&gt; target QUIC packets are sent separately over the
client &lt;-&gt; proxy UDP socket, using a special-purpose transform instead of full
QUIC encapsulation. This mode MUST only be used for QUIC short header packets.</t>
        </li>
      </ol>
      <t>Forwarded mode is defined as an optimization to reduce CPU and memory cost to clients and
proxies, as well as avoiding MTU overhead for packets on the wire. This makes it
suitable for deployment situations that otherwise relied on cleartext TCP
proxies, which cannot support QUIC and have inferior security and privacy
properties.</t>
      <t>The properties provided by the forwarded mode are as follows:</t>
      <ul spacing="normal">
        <li>
          <t>All packets sent between the client and the target traverse through the proxy
device.</t>
        </li>
        <li>
          <t>The target server cannot know the IP address of the client solely based on the
proxied packets the target receives.</t>
        </li>
        <li>
          <t>Observers of either or both of the client &lt;-&gt; proxy link and the proxy &lt;-&gt;
target are not able to learn more about the client &lt;-&gt; target communication than
if no proxy was used.</t>
        </li>
      </ul>
      <t>Forwarded mode does not prevent correlation of client &lt;-&gt; proxy and proxy &lt;-&gt;
target packets by an entity that can observe both links. The precise risks
depend on the negotiated transform (<xref target="packet-transforms"/>). See <xref target="security"/> for
further discussion.</t>
      <t>Both clients and proxies can unilaterally choose to disable forwarded mode for
any client &lt;-&gt; target connection.</t>
      <t>The forwarded mode of this extension is only defined for HTTP/3
<xref target="HTTP3"/> and not any earlier versions of HTTP.</t>
      <t>QUIC proxies only need to understand the Header Form bit, and the connection ID
fields from packets in client &lt;-&gt; target QUIC connections. Since these fields
are all in the QUIC invariants header <xref target="INVARIANTS"/>,
QUIC proxies can proxy all versions of QUIC.</t>
      <section anchor="conventions">
        <name>Conventions and Definitions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/>
when, and only when, they appear in all capitals, as shown here.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This document uses the following terms:</t>
        <ul spacing="normal">
          <li>
            <t>Client: the client of all QUIC connections discussed in this document.</t>
          </li>
          <li>
            <t>Proxy: the endpoint that responds to the UDP proxying request.</t>
          </li>
          <li>
            <t>Target: the server that a client is accessing via a proxy.</t>
          </li>
          <li>
            <t>Client &lt;-&gt; Proxy HTTP stream: a single HTTP stream established from
the client to the proxy.</t>
          </li>
          <li>
            <t>Socket: a UDP 4-tuple (local IP address, local UDP port, remote IP address,
remote UDP port). In some implementations, this is referred to as a "connected"
socket.</t>
          </li>
          <li>
            <t>Client-facing socket: the socket used to communicate between the client and
the proxy.</t>
          </li>
          <li>
            <t>Target-facing socket: the socket used to communicate between the proxy and
the target.</t>
          </li>
          <li>
            <t>Client Connection ID: a QUIC Connection ID that is chosen by the client, and
is used in the Destination Connection ID field of packets from the target to
the client.</t>
          </li>
          <li>
            <t>Target Connection ID: a QUIC Connection ID that is chosen by the target, and
is used in the Destination Connection ID field of packets from the client to
the target.</t>
          </li>
          <li>
            <t>Virtual Client Connection ID: a fake QUIC Connection ID that is chosen by the
client that the proxy MUST use when sending QUIC packets in forwarded mode.</t>
          </li>
          <li>
            <t>Virtual Target Connection ID: a fake QUIC Connection ID that is chosen by the
proxy that the client MUST use when sending QUIC packets in forwarded mode.</t>
          </li>
          <li>
            <t>Packet Transform: the procedure used to modify packets before they enter the
client-proxy link.</t>
          </li>
        </ul>
      </section>
      <section anchor="virtual-connection-ids">
        <name>Virtual Connection IDs</name>
        <t>QUIC allows each endpoint of a connection to choose the connection IDs it
receives with. Servers receiving QUIC packets can employ load balancing
strategies such as those described in <xref target="QUIC-LB"/>
that encode routing information in
the connection ID. When operating in forwarded mode, clients send QUIC packets
destined for the Target directly to the Proxy. Since these packets are generated
using the Target Connection ID, load balancers would not be able to route packets
to the correct Proxy if the packets were sent with the Target Connection ID.
The Virtual Target Connection ID is a connection ID chosen
by the Proxy that the Client uses when sending forwarded mode packets. The Proxy
replaces the Virtual Target Connection ID with the Target Connection ID prior to
forwarding the packet to the Target.</t>
        <t>Similarly, QUIC requires that connection IDs aren't reused over multiple network
paths to avoid linkability. The Virtual Client Connection ID is a connection ID
chosen by the Client that the Proxy uses when sending forwarded mode packets.
The Proxy replaces the Client Connection ID with the Virtual Client Connection
ID prior to forwarding the packet to the Client. Clients take advantage of this
to avoid linkability when migrating a client to proxy network path. The Virtual
Client Connection ID allows the connection ID bytes to change on the wire
without requiring the connection IDs on the client to target connection change.</t>
        <t>Clients and Proxies not implementing forwarded mode do not need to consider
Virtual Connection IDs since all Client&lt;-&gt;Target datagrams will be encapsulated
within the Client&lt;-&gt;Proxy connection.</t>
      </section>
    </section>
    <section anchor="mappings">
      <name>Required Proxy State</name>
      <t>In the methods defined in this document, the proxy is aware of the QUIC
Connection IDs being used by proxied connections, along with the sockets
used to communicate with the client and the target. Tracking Connection IDs in
this way allows the proxy to reuse target-facing sockets for multiple
connections and support the forwarded mode of proxying.</t>
      <t>QUIC packets can be either tunnelled within an HTTP proxy connection using
HTTP Datagram frames <xref target="HTTP-DGRAM"/>, or be forwarded
directly alongside an HTTP/3 proxy connection on the same set of IP addresses and UDP
ports. The use of forwarded mode requires the consent of both the client and the
proxy.</t>
      <t>In order to correctly route QUIC packets in both tunnelled and forwarded modes,
the proxy needs to maintain mappings between several items. There are three
required unidirectional mappings, described below.</t>
      <section anchor="stream-mapping">
        <name>Stream Mapping</name>
        <t>Each client &lt;-&gt; proxy HTTP stream MUST be mapped to a single target-facing socket.</t>
        <artwork><![CDATA[
(Client <-> Proxy HTTP Stream) => Target-facing socket
]]></artwork>
        <t>Multiple streams can map to the same target-facing socket, but a
single stream cannot be mapped to multiple target-facing sockets.
Each stream MUST also be associated with a single Packet Transform.</t>
        <t>This mapping guarantees that any HTTP Datagram using a stream sent
from the client to the proxy in tunnelled mode can be sent to the correct
target.</t>
      </section>
      <section anchor="virtual-target-connection-id-mapping">
        <name>Virtual Target Connection ID Mapping</name>
        <t>Each pair of Virtual Target Connection ID and client-facing socket MUST map to a
single target-facing socket and Target Connection ID.</t>
        <artwork><![CDATA[
(Client-facing socket + Virtual Target Connection ID)
    => (Target-facing socket + Target Connection ID)
]]></artwork>
        <t>Multiple pairs of Connection IDs and client-facing sockets can map to the
same target-facing socket.</t>
        <t>This mapping guarantees that any QUIC packet containing the Virtual Target
Connection ID sent from the client to the proxy in forwarded mode can be sent to
the correct target with the correct Target Connection ID. Thus, a proxy that
does not allow forwarded mode does not need to maintain this mapping.</t>
      </section>
      <section anchor="client-connection-id-mappings">
        <name>Client Connection ID Mappings</name>
        <t>Each pair of Client Connection ID and target-facing socket MUST map to a single
stream on a single client &lt;-&gt; proxy HTTP stream. Additionally, when supporting
forwarded mode, the pair of Client Connection ID and target-facing socket MUST
map to a single client-facing socket and Virtual Client Connection ID.</t>
        <artwork><![CDATA[
(Target-facing socket + Client Connection ID) => (Client <-> Proxy HTTP Stream)
(Target-facing socket + Client Connection ID)
    => (Client-facing socket + Virtual Client Connection ID)
]]></artwork>
        <t>Multiple pairs of Connection IDs and target-facing sockets can map to the same
HTTP stream or client-facing socket.</t>
        <t>These mappings guarantee that any QUIC packet sent from a target to the proxy
can be sent to the correct client, in either tunnelled or forwarded mode. Note
that this mapping becomes trivial if the proxy always opens a new target-facing
socket for every client request with a unique stream. The mapping is
critical for any case where target-facing sockets are shared or reused.</t>
      </section>
      <section anchor="conflicts">
        <name>Detecting Connection ID Conflicts</name>
        <t>In order to be able to route packets correctly in both tunnelled and forwarded
mode, proxies check for conflicts before creating a new mapping. If a conflict
is detected, the proxy will reject the client's request, as described in
<xref target="proxy-behavior"/>.</t>
        <t>Two sockets conflict if and only if all members of the 4-tuple (local IP
address, local UDP port, remote IP address, and remote UDP port) are identical.</t>
        <t>Two Connection IDs conflict if and only if one Connection ID is equal to or a
prefix of another. For example, a zero-length Connection ID conflicts with all
connection IDs. This definition of a conflict originates from the fact that
QUIC short headers do not carry the length of the Destination Connection ID
field, and therefore if two short headers with different Destination Connection
IDs are received on a shared socket, one being a prefix of the other prevents
the receiver from identifying which mapping this corresponds to.</t>
        <t>The proxy treats two mappings as being in conflict when a conflict is detected
for all elements on the left side of the mapping diagrams above.</t>
        <t>Since very short Connection IDs are more likely to lead to conflicts,
particularly zero-length Connection IDs, a proxy MAY choose to reject all
requests for very short Connection IDs as conflicts, in anticipation of future
conflicts.</t>
      </section>
      <section anchor="stateless-resets-for-forwarded-mode-quic-packets">
        <name>Stateless Resets for Forwarded Mode QUIC Packets</name>
        <t>While the lifecycle of forwarding rules are bound to the lifecycle of the
client&lt;-&gt;proxy HTTP stream, a peer may not be aware that the stream has
terminated. If the above mappings are lost or removed without the peer's
knowledge, they may send forwarded mode packets even though the Client
or Proxy no longer has state for that connection. To allow the Client or
Proxy to reset the client&lt;-&gt;target connection in the absence of the mappings
above, a stateless reset token corresponding to the Virtual Connection ID
can be provided.</t>
        <t>Consider a proxy that initiates closure of a client&lt;-&gt;proxy QUIC connection.
If the client is temporarily unresponsive or unreachable, the proxy might have
considered the connection closed and removed all connection state (including
the stream mappings used for forwarding). If the client never learned about the closure, it
might send forwarded mode packets to the proxy, assuming the stream mappings
and client&lt;-&gt;proxy connection are still intact. The proxy will receive these
forwarded mode packets, but won't have any state corresponding to the
destination connection ID in the packet. If the proxy has provided a stateless
reset token for the Virtual Target Connection ID, it can send a stateless reset
packet to quickly notify the client that the client&lt;-&gt;target connection is
broken.</t>
      </section>
      <section anchor="stateless-resets-from-the-target">
        <name>Stateless Resets from the Target</name>
        <t>Reuse of target-facing sockets is only possible because QUIC connection IDs
allow distinguishing packets for multiple QUIC connections received with the
same 5-tuple. One exception to this is Stateless Reset packets, in which the
connection ID is not used, but rather populated with unpredictable bits followed
by a Stateless Reset token, to make it indistinguishable from a regular packet
with a short header. In order for the proxy to correctly recognize Stateless
Reset packets, the client SHOULD share the Stateless Reset token for each
registered Target Connection ID. When the proxy receives a Stateless Reset packet,
it can send the packet to the client as a tunnelled datagram. Although Stateless Reset packets
look like short header packets, they are not technically short header packets and do not contain
negotiated connection IDs, and thus are not eligible for forwarded mode.</t>
      </section>
    </section>
    <section anchor="connection-id-capsule-types">
      <name>Connection ID Capsule Types</name>
      <t>Proxy awareness of QUIC Connection IDs relies on using capsules (<xref target="HTTP-DGRAM"/>)
to signal the addition and removal of Client and Target Connection IDs.</t>
      <t>Note that these capsules do not register contexts. QUIC packets are encoded
using HTTP Datagrams with the context ID set to zero as defined in
<xref target="CONNECT-UDP"/>.</t>
      <t>The capsules used for QUIC-aware proxying allow a client to register connection
IDs with the proxy, and for the proxy to acknowledge or reject the connection
ID mappings.</t>
      <t>The REGISTER_CLIENT_CID and REGISTER_TARGET_CID capsule types (see
<xref target="iana-capsule-types"/> for the capsule type values) allow a client to inform
the proxy about a new Client Connection ID or a new Target Connection ID,
respectively. These capsule types MUST only be sent by a client.</t>
      <t>The ACK_CLIENT_CID and ACK_TARGET_CID capsule types (see <xref target="iana-capsule-types"/>
for the capsule type values) are sent by the proxy to the client to indicate
that a mapping was successfully created for a registered connection ID as well
as provide the Virtual Target Connection ID that may be used in forwarded mode.
These capsule types MUST only be sent by a proxy.</t>
      <t>The CLOSE_CLIENT_CID and CLOSE_TARGET_CID capsule types (see
<xref target="iana-capsule-types"/> for the capsule type values) allow either a client
or a proxy to remove a mapping for a connection ID. These capsule types
MAY be sent by either a client or the proxy. If a proxy sends a
CLOSE_CLIENT_CID without having sent an ACK_CLIENT_CID, or if a proxy
sends a CLOSE_TARGET_CID without having sent an ACK_TARGET_CID,
it is rejecting a Connection ID registration.</t>
      <t>ACK_CLIENT_CID, CLOSE_CLIENT_CID, and CLOSE_TARGET_CID capsule types are
formatted as follows:</t>
      <figure anchor="fig-capsule-cid">
        <name>Connection ID Capsule Format</name>
        <artwork><![CDATA[
Connection ID Capsule {
  Type (i) = 0xffe402, 0xffe404, 0xffe405
  Length (i),
  Connection ID (0..2040),
}
]]></artwork>
      </figure>
      <dl>
        <dt>Connection ID:</dt>
        <dd>
          <t>A connection ID being acknowledged, which is between 0 and 255 bytes in
length. The length of the connection ID is implied by the length of the
capsule. Note that in QUICv1, the length of the Connection ID is limited
to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
        </dd>
      </dl>
      <t>The REGISTER_TARGET_CID capsule includes the target-provided connection ID
and Stateless Reset Token.</t>
      <figure anchor="fig-capsule-register-target-cid">
        <name>Register Target Connection ID Capsule Format</name>
        <artwork><![CDATA[
Register Target Connection ID Capsule {
  Type (i) = 0xffe401
  Length (i),
  Connection ID Length (i)
  Connection ID (0..2040),
  Stateless Reset Token Length (i),
  Stateless Reset Token (..),
}
]]></artwork>
      </figure>
      <dl>
        <dt>Connection ID Length</dt>
        <dd>
          <t>The length of the connection ID being registered, which is between 0 and
255. Note that in QUICv1, the length of the Connection ID is limited to 20
bytes, but QUIC invariants allow up to 255 bytes.</t>
        </dd>
        <dt>Connection ID</dt>
        <dd>
          <t>A connection ID being registered whose length is equal to Connection ID
Length. This is the real Target or Client Connection ID.</t>
        </dd>
        <dt>Stateless Reset Token Length</dt>
        <dd>
          <t>The length of the target-provided Stateless Reset Token.</t>
        </dd>
        <dt>Stateless Reset Token</dt>
        <dd>
          <t>The target-provided Stateless Reset token allowing the proxy to correctly
recognize Stateless Reset packets to be tunnelled to the client.</t>
        </dd>
      </dl>
      <t>The REGISTER_CLIENT_CID and ACK_TARGET_CID capsule types include a Virtual
Connection ID and Stateless Reset Token.</t>
      <figure anchor="fig-capsule-virtual-cid">
        <name>Virtual Connection ID Capsule Format</name>
        <artwork><![CDATA[
Virtual Connection ID Capsule {
  Type (i) = 0xffe400, 0xffe403
  Length (i)
  Connection ID Length (i)
  Connection ID (0..2040),
  Virtual Connection ID Length (i)
  Virtual Connection ID (0..2040),
  Stateless Reset Token Length (i),
  Stateless Reset Token (..),
}
]]></artwork>
      </figure>
      <dl>
        <dt>Connection ID Length</dt>
        <dd>
          <t>The length of the connection ID being registered or acknowledged, which
is between 0 and 255. Note that in QUICv1, the length of the Connection ID
is limited to 20 bytes, but QUIC invariants allow up to 255 bytes.</t>
        </dd>
        <dt>Connection ID</dt>
        <dd>
          <t>A connection ID being registered or acknowledged whose length is equal to
Connection ID Length. This is the real Target or Client Connection ID.</t>
        </dd>
        <dt>Virtual Connection ID Length</dt>
        <dd>
          <t>The length of the virtual connection ID being provided. This MUST be a valid
connection ID length for the QUIC version used in the client&lt;-&gt;proxy QUIC
connection. When forwarded mode is not negotiated, the length MUST be zero.
The Virtual Connection ID Length and Connection ID Length SHOULD be equal
when possible to avoid the need to resize packets during replacement.</t>
        </dd>
        <dt>Virtual Connection ID</dt>
        <dd>
          <t>The peer-chosen connection ID that the sender of forwarded mode packets MUST
use when sending. The endpoint rewrites forwarded mode packets to contain the
correct Connection ID prior to sending them.</t>
        </dd>
        <dt>Stateless Reset Token Length</dt>
        <dd>
          <t>The length of the stateless reset token that may be sent by the client or
proxy in response to forwarded mode packets in order to reset the
Client&lt;-&gt;Target QUIC connection. When forwarded mode is not negotiated, the
length MUST be zero. Proxies or Clients choosing not to support stateless
resets MAY set the length to zero. Clients or Proxies receiving a zero-length
stateless reset token MUST ignore it.</t>
        </dd>
        <dt>Stateless Reset Token</dt>
        <dd>
          <t>A Stateless Reset Token allowing reset of the Client&lt;-&gt;Target connection in
response to Client&lt;-&gt;Target forwarded mode packets.</t>
        </dd>
      </dl>
    </section>
    <section anchor="client-behavior">
      <name>Client Behavior</name>
      <t>A client initiates UDP proxying via a CONNECT request as defined
in <xref target="CONNECT-UDP"/>. Within its request, it includes the "Proxy-QUIC-Forwarding"
header to indicate whether or not the request should support forwarding.
If this header is not included, the client MUST NOT send any connection ID
capsules.</t>
      <t>"Proxy-QUIC-Forwarding" is an Item Structured Header <xref target="RFC8941"/>. Its
value MUST be a Boolean.</t>
      <t>If the client wants to enable QUIC packet forwarding for this request, it sets
the value to "?1". If it doesn't want to enable forwarding, but instead only
provide information about QUIC Connection IDs for the purpose of allowing
the proxy to share a target-facing socket, it sets the value to "?0".</t>
      <t>The client MUST add an "accept-transform" parameter whose value is an
<tt>sf-string</tt> containing the supported packet transforms (<xref target="packet-transforms"/>)
in order of descending preference, separated by commas. If the proxy receives a
"Proxy-QUIC-Forwarding" header without the "accept-transform" parameters, it
MUST ignore the header and respond as if the client had not sent the
"Proxy-QUIC-Forwarding" header.</t>
      <t>If the proxy supports QUIC-aware proxying, it will include the
"Proxy-QUIC-Forwarding" header in successful HTTP responses. The value
indicates whether or not the proxy supports forwarding. If the client does
not receive this header in responses, the client SHALL assume that the proxy
does not support this extension.</t>
      <t>The client sends a REGISTER_CLIENT_CID capsule whenever it advertises a new
Client Connection ID to the target, and a REGISTER_TARGET_CID capsule when
it has received a new Target Connection ID for the target. In order to change
the connection ID bytes on the wire, a client can update a previously advertised Virtual Client
Connection ID by sending a new REGISTER_CLIENT_CID with the same Connection ID,
but a different Virtual Connection ID. Similarly, the client may solicit a new
Virtual Target Connection ID by sending a REGISTER_TARGET_CID capsule with
a previously registered Target Connection ID. Clients are responsible for
changing Virtual Connection IDs when the HTTP stream's network path changes to
avoid linkability across network paths. Note that initial
REGISTER_CLIENT_CID capsules MAY be sent prior to receiving an HTTP response
from the proxy.</t>
      <section anchor="new-proxied-connection-setup">
        <name>New Proxied Connection Setup</name>
        <t>To initiate QUIC-aware proxying, the client sends a REGISTER_CLIENT_CID
capsule containing the initial Client Connection ID that the client has
advertised to the target as well as a Virtual Connection ID that the proxy MUST
use when sending forwarded mode packets. If forwarded mode is not supported,
the Virtual Connection ID Length MUST be zero.</t>
        <t>If the mapping is created successfully, the client will receive a
ACK_CLIENT_CID capsule that contains the same Client Connection ID that was
requested.</t>
        <t>Since clients are always aware whether or not they are using a QUIC proxy,
clients are expected to cooperate with proxies in selecting Client Connection
IDs. A proxy detects a conflict when it is not able to create a unique mapping
using the Client Connection ID (<xref target="conflicts"/>). It can reject requests that
would cause a conflict and indicate this to the client by replying with a
CLOSE_CLIENT_CID capsule. In order to avoid conflicts, clients SHOULD select
Client Connection IDs of at least 8 bytes in length with unpredictable values.
A client also SHOULD NOT select a Client Connection ID that matches the ID used
for the QUIC connection to the proxy, as this inherently creates a conflict.</t>
        <t>If the rejection indicated a conflict due to the Client Connection ID, the
client MUST select a new Connection ID before sending a new request, and
generate a new packet. For example, if a client is sending a QUIC Initial
packet and chooses a Connection ID that conflicts with an existing mapping
to the same target server, it will need to generate a new QUIC Initial.</t>
      </section>
      <section anchor="adding-new-client-connection-ids">
        <name>Adding New Client Connection IDs</name>
        <t>Since QUIC connection IDs are chosen by the receiver, an endpoint needs to
communicate its chosen connection IDs to its peer before the peer can start
using them. In QUICv1, this is performed using the NEW_CONNECTION_ID frame.</t>
        <t>Prior to informing the target of a new chosen client connection ID, the client
MUST send a REGISTER_CLIENT_CID capsule request containing the new Client
Connection ID and Virtual Client Connection ID.</t>
        <t>The client should only inform the target of the new Client Connection ID once an
ACK_CLIENT_CID capsule is received that contains the echoed connection ID.</t>
      </section>
      <section anchor="sending-with-forwarded-mode">
        <name>Sending With Forwarded Mode</name>
        <t>Support for forwarded mode is determined by the "Proxy-QUIC-Forwarding" header,
see <xref target="proxy-behavior"/>.</t>
        <t>Once the client has learned the target server's Connection ID, such as in the
response to a QUIC Initial packet, it can send a REGISTER_TARGET_CID capsule
containing the Target Connection ID to request the ability to forward packets.</t>
        <t>The client MUST wait for an ACK_TARGET_CID capsule that contains the echoed
connection ID and Virtual Target Connection ID before using forwarded mode.</t>
        <t>Prior to receiving the proxy server response, the client MUST send short header
packets tunnelled in HTTP Datagram frames. The client MAY also choose to tunnel
some short header packets even after receiving the successful response.</t>
        <t>If the Target Connection ID registration is rejected, for example with a
CLOSE_TARGET_CID capsule, it MUST NOT forward packets to the requested Target
Connection ID, but only use tunnelled mode. The request might also be rejected
if the proxy does not support forwarded mode or has it disabled by policy.</t>
        <t>QUIC long header packets MUST NOT be forwarded. These packets can only be
tunnelled within HTTP Datagram frames to avoid exposing unnecessary connection
metadata.</t>
        <t>When forwarding, the client sends a QUIC packet with the Virtual Target
Connection ID in the QUIC short header, using the same socket between client and
proxy that was used for the main QUIC connection between client and proxy.</t>
        <t>When forwarding, the proxy sends a QUIC packet with the Virtual Client Target
Connection ID in the QUIC short header, using the same socket between client
and proxy that was used for the main QUIC connection between client and proxy.</t>
        <t>Prior to sending a forwarded mode packet, the sender MUST replace the Connection
ID with the Virtual Connection ID. If the Virtual Connection ID is larger than
the Connection ID, the sender MUST extend the length of the packet by the
difference between the two lengths, to include the entire Virtual Connection ID.
If the Virtual Connection ID is smaller than the Connection ID, the sender MUST
shrink the length of the packet by the difference between the two lengths.</t>
        <t>Clients and proxies supporting forwarded mode MUST be able to handle Virtual
Connection IDs of different lengths than the corresponding Connection IDs.</t>
      </section>
      <section anchor="receiving-with-forwarded-mode">
        <name>Receiving With Forwarded Mode</name>
        <t>If the client has indicated support for forwarded mode with the "Proxy-QUIC-Forwarding"
header, the proxy MAY use forwarded mode for any Client Connection ID for which
it has a valid mapping.</t>
        <t>Once a client has sent "Proxy-QUIC-Forwarding" with a value of "?1", it MUST be
prepared to receive forwarded short header packets on the socket between itself
and the proxy for any Virtual Client Connection ID that it has registered with a
REGISTER_CLIENT_CID capsule. The client uses the Destination Connection ID field
of the received packet to determine if the packet was originated by the proxy,
or merely forwarded from the target. The client replaces the Virtual Client
Connection ID with the real Client Connection ID before processing the packet further.</t>
      </section>
      <section anchor="connection-maintenance-in-forwarded-mode">
        <name>Connection Maintenance in Forwarded Mode</name>
        <t>When a client and proxy are using forwarded mode, it is possible that there can be
long periods of time in which no ack-eliciting packets (see <xref section="2" sectionFormat="of" target="QUIC-RETRANSMISSION"/>) are exchanged
between the client and proxy. If these periods extend beyond the effective idle
timeout for the client-to-proxy QUIC connection (see <xref section="10.1" sectionFormat="of" target="QUIC"/>),
the QUIC connection might be closed by the proxy if the proxy does not use
forwarded packets as an explicit liveness signal. To avoid this, clients SHOULD
send keepalive packets to the proxy before the idle timeouts would be reached,
which can be done using a PING frame or another ack-eliciting frame as described
in <xref section="10.1.1" sectionFormat="of" target="QUIC"/>.</t>
      </section>
    </section>
    <section anchor="proxy-behavior">
      <name>Proxy Behavior</name>
      <t>Upon receipt of a CONNECT request that includes the "Proxy-QUIC-Forwarding"
header, the proxy indicates to the client that it supports QUIC-aware proxying
by including a "Proxy-QUIC-Forwarding" header in a successful response.
If it supports QUIC packet proxying in forwarded mode, it sets the value to "?1"; otherwise,
it sets it to "?0".</t>
      <t>The proxy MUST include a "transform" parameter whose value is an <tt>sf-string</tt>
indicating the selected transform. If the proxy does not recognize or accept
any of the transforms offered by the client, it MUST omit this parameter and
set the header field value to "?0", or omit the header entirely.</t>
      <t>Upon receipt of a REGISTER_CLIENT_CID or REGISTER_TARGET_CID capsule,
the proxy validates the registration and tries to establish the appropriate
mappings as described in <xref target="mappings"/>.</t>
      <t>The proxy MUST reply to each REGISTER_CLIENT_CID capsule with either
an ACK_CLIENT_CID or CLOSE_CLIENT_CID capsule containing the
Connection ID that was in the registration capsule.</t>
      <t>Similarly, the proxy MUST reply to each REGISTER_TARGET_CID capsule with
either an ACK_TARGET_CID or CLOSE_TARGET_CID capsule containing the
Connection ID that was in the registration capsule.</t>
      <t>The proxy then determines the target-facing socket to associate with the
client's request. This will generally involve performing a DNS lookup for
the target hostname in the CONNECT request, or finding an existing target-facing
socket to the authority. The target-facing socket might already be open due to a
previous request from this client, or another. If the socket is not already
created, the proxy creates a new one. Proxies can choose to reuse target-facing
sockets across multiple UDP proxying requests, or have a unique target-facing socket
for every UDP proxying request.</t>
      <t>If a proxy reuses target-facing sockets, it SHOULD store which authorities
(which could be a domain name or IP address literal) are being accessed over a
particular target-facing socket so it can avoid performing a new DNS query and
potentially choosing a different target server IP address which could map to a
different target server.</t>
      <t>Target-facing sockets MUST NOT be reused across QUIC and non-QUIC UDP proxy
requests, since it might not be possible to correctly demultiplex or direct
the traffic. Any packets received on a target-facing socket used for proxying
QUIC that does not correspond to a known Connection ID MUST be dropped.</t>
      <t>When the proxy recieves a REGISTER_CLIENT_CID capsule, it is receiving a
request to be able to route traffic matching the Client Connection ID back to
the client using the Virtual Client Connection ID. If the pair of this Client
Connection ID and the selected target-facing socket does not create a conflict,
the proxy creates the mapping and responds with a ACK_CLIENT_CID capsule. After
this point, any packets received by the proxy from the target-facing socket that
match the Client Connection ID can to be sent to the client after the proxy has
replaced the Connection ID with the Virtual Client Connection ID. The proxy MUST
use tunnelled mode (HTTP Datagram frames) for any long header packets. The proxy
SHOULD forward directly to the client for any matching short header packets if
forwarding is supported by the client, but the proxy MAY tunnel these packets in
HTTP Datagram frames instead. If the mapping would create a conflict, the proxy
responds with a CLOSE_CLIENT_CID capsule.</t>
      <t>When the proxy recieves a REGISTER_TARGET_CID capsule, it is receiving a
request to allow the client to forward packets to the target. The proxy
generates a Virtual Target Connection ID for the client to use when sending
packets in forwarded mode. If forwarded mode is not supported, the proxy MUST
NOT send a Virtual Target Connection ID by setting the length to zero. If
forwarded mode is supported, the proxy MUST use a Virtual Target Connection ID
that does not introduce a conflict with any other Connection ID on the
client-facing socket. The proxy creates the mapping and responds with an
ACK_TARGET_CID capsule. Once the successful response is sent, the proxy will
forward any short header packets received on the client-facing socket that use
the Virtual Target Connection ID using the correct target-facing socket after
first rewriting the Virtual Target Connection ID to be the correct Target
Connection ID.</t>
      <t>A proxy that supports forwarded mode but chooses not to support rewriting the
Virtual Target Connection ID to the Target Connection ID may opt to simply let
them be equal. If the proxy does wish to choose a Virtual Target Connection ID,
it MUST be able to replace the Virtual Target Connection ID with the Target
Connection ID and correctly handle length differences between the two.
Regardless of whether or not the proxy chooses to support rewriting of the
Virtual Target Connection ID, it MUST be able to support rewriting the Client
Connection ID to the Virtual Client Connection ID.</t>
      <t>If the proxy does not support forwarded mode, or does not allow forwarded mode
for a particular client or authority by policy, it can reject all REGISTER_TARGET_CID
requests with CLOSE_TARGET_CID capsule.</t>
      <t>The proxy MUST only forward non-tunnelled packets from the client that are QUIC
short header packets (based on the Header Form bit) and have mapped Virtual Target
Connection IDs. Packets sent by the client that are forwarded SHOULD be
considered as activity for restarting QUIC's Idle Timeout <xref target="QUIC"/>.</t>
      <section anchor="removing-mapping-state">
        <name>Removing Mapping State</name>
        <t>For any registration capsule for which the proxy has sent an acknowledgement, any
mappings last until either endpoint sends a close capsule or the either side of the
HTTP stream closes.</t>
        <t>A client that no longer wants a given Connection ID to be forwarded by the
proxy sends a CLOSE_CLIENT_CID or CLOSE_TARGET_CID capsule.</t>
        <t>If a client's connection to the proxy is terminated for any reason, all
mappings associated with all requests are removed.</t>
        <t>A proxy can close its target-facing socket once all UDP proxying requests mapped to
that socket have been removed.</t>
      </section>
      <section anchor="handling-connection-migration">
        <name>Handling Connection Migration</name>
        <t>If a proxy supports QUIC connection migration, it needs to ensure that a migration
event does not end up sending too many tunnelled or proxied packets on a new
path prior to path validation.</t>
        <t>Specifically, the proxy MUST limit the number of packets that it will proxy
to an unvalidated client address to the size of an initial congestion window.
Proxies additionally SHOULD pace the rate at which packets are sent over a new
path to avoid creating unintentional congestion on the new path.</t>
        <t>When operating in forwarded mode, the proxy reconfigures or removes forwarding
rules as the network path between the client and proxy changes. In the event of
passive migration, the proxy automatically reconfigures forwarding rules to use
the latest active and validated network path for the HTTP stream. In the event of
active migration, the proxy removes forwarding rules in order to not send
packets with the same connection ID bytes over multiple network paths. After
initiating active migration, clients are no longer able to send forwarded mode
packets since the proxy will have removed forwarding rules. Clients can proceed with
tunnelled mode or can request new forwarding rules via REGISTER_CLIENT_CID and
REGISTER_TARGET_CID capsules. Each of these capsules will contain new virtual
connection IDs to prevent packets with the same connection ID bytes being used
over multiple network paths. Note that the Client Connection ID and Target
Connection ID can stay the same while the Virtual Target Connection ID and
Virtual Client Connection ID change.</t>
      </section>
      <section anchor="handling-ecn-marking">
        <name>Handling ECN Marking</name>
        <t>Explicit Congestion Notification marking <xref target="ECN"/> uses two bits in the IP
header to signal congestion from a network to endpoints. When using forwarded mode,
the proxy replaces IP headers for packets exchanged between the client and target;
these headers can include ECN markings. Proxies SHOULD preserve ECN markings on
forwarded packets in both directions, to allow ECN to function end-to-end. If the proxy does not
preserve ECN markings, it MUST set ECN marks to zero on the IP headers it generates.</t>
        <t>Forwarded mode does not create an IP-in-IP tunnel, so the guidance in
<xref target="ECN-TUNNEL"/> about transferring ECN markings between inner and outer IP
headers does not apply.</t>
        <t>A proxy MAY additionally add ECN markings to signal congestion being experienced
on the proxy itself.</t>
      </section>
    </section>
    <section anchor="packet-transforms">
      <name>Packet Transforms</name>
      <t>A packet transform is the procedure applied to encode packets as they are sent
on the link between the client and proxy, along with the inverse decode step applied
on receipt. Simple transforms can be modeled as a function as follows:</t>
      <t>Inputs:</t>
      <ol spacing="normal" type="1"><li>
          <t>A QUIC short header packet (after Connection ID remapping).</t>
        </li>
        <li>
          <t>The mode (encode or decode).</t>
        </li>
        <li>
          <t>The direction (client-to-proxy or proxy-to-client).</t>
        </li>
        <li>
          <t>Any configuration information negotiated at startup.</t>
        </li>
      </ol>
      <t>Output:</t>
      <ul spacing="normal">
        <li>
          <t>A UDP payload that conforms to the QUIC invariants <xref target="RFC8999"/> and does not
modify the Connection ID.</t>
        </li>
      </ul>
      <t>More complex transform behaviors could have internal state, but no such transforms
are presented here.</t>
      <t>Packet transforms are identified by an IANA-registered name, and negotiated in
the HTTP headers (see <xref target="client-behavior"/>).  This document defines two initial
transforms: the <tt>identity</tt> transform and the <tt>scramble</tt> transform.</t>
      <section anchor="identity-transform">
        <name>The identify transform</name>
        <t>The <tt>identity</tt> transform does not modify the packet in any way.  When this transform
is in use, a global passive adversary can trivially correlate pairs of packets
that crossed the forwarder, providing a compact proof that a specific client
was communicating to a specific target.</t>
        <t>The <tt>identity</tt> transform is identified by the value "identity" <xref target="iana-transforms"/>.</t>
        <t>Use of this transform is NOT RECOMMENDED if the <tt>scramble</tt> transform is supported
by both the client and the proxy. Implementations MAY choose to not implement or
support the <tt>identity</tt> transform, depending on the use cases and privacy requirements of
the deployment.</t>
      </section>
      <section anchor="scramble-transform">
        <name>The scramble transform</name>
        <t>The <tt>scramble</tt> transform implements length-preserving unauthenticated
re-encryption of QUIC packets while preserving the QUIC invariants.  When
the <tt>scramble</tt> transform is in use, a global passive adversary cannot simply compare the packet
contents on both sides of the proxy
to link the client and target.  However, the <tt>scramble</tt> transform does not defend against
analysis of packet sizes and timing, nor does it protect privacy against an
active attacker.</t>
        <t>Deployments that implement the version of the <tt>scramble</tt> transform defined in this
document MUST use the value "scramble-dt". The finalized version is expected
to use the reserved value "scramble" <xref target="iana-transforms"/>.</t>
        <t>The <tt>scramble</tt> transform is initialized using a 32-byte random symmetric key.
When offering or selecting this transform, the client and server each
generate the key that they will use to encrypt scrambled packets and MUST add it to the
Proxy-QUIC-Transform header in an <tt>sf-binary</tt> parameter named "scramble-key".
If either side receives a <tt>scramble</tt> transform without the "scramble-key" parameter,
forwarding mode MUST be disabled.</t>
        <t>This transform relies on the AES-128 block cipher, which is represented by the
syntax <tt>AES-ECB(key, plaintext_block)</tt> as in <xref target="RFC9001"/>.  The corresponding
decryption operation is written here as <tt>AES-ECB-inv(key, ciphertext_block)</tt>.
It also uses AES in Counter Mode (<xref target="SP800-38A"/>, Section 6.5), which is
represented by the syntax <tt>AES-CTR(key, iv, input)</tt> for encryption and
decryption (which are identical).  In this syntax, <tt>iv</tt> is an array of 16 bytes
containing the initial counter block.  The counter is incremented by the
standard incrementing function (<xref target="SP800-38A"/>, Appendix B.1) on the full block
width.</t>
        <t>In brief, the transform applies AES in counter mode (AES-CTR) using an
initialization vector drawn from the packet, then encrypts the initialization
vector with AES-ECB. The detailed procedure is as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Let <tt>k1, k2 = scramble_key[:16], scramble_key[16:32]</tt>.</t>
          </li>
          <li>
            <t>Let <tt>L</tt> be the Connection ID length.</t>
          </li>
          <li>
            <t>Let <tt>cid = packet[1:L+1]</tt>, i.e., the Connection ID.</t>
          </li>
          <li>
            <t>Let <tt>iv = packet[L+1:L+17]</tt>, i.e., the 16 bytes following the Connection ID.</t>
          </li>
          <li>
            <t>Let <tt>ctr_input = packet[0] | packet[L+17:]</tt>.</t>
          </li>
          <li>
            <t>Let <tt>ctr_output = AES-CTR(k1, iv, ctr_input)</tt>.</t>
          </li>
          <li>
            <t>Let <tt>header = ctr_output[0] &amp; 0x7F</tt>.  This ensures that the Header Form bit
is zero, as required by the QUIC invariants (<xref target="RFC8999"/>, Section 5.2).</t>
          </li>
          <li>
            <t>Encrypt <tt>iv</tt> with the block cipher: <tt>encrypted_iv = AES-ECB(k2, iv)</tt>.</t>
          </li>
          <li>
            <t>Produce the output packet as:<br/>
              <tt>header | cid | encrypted_iv | ctr_output[1:]</tt>.</t>
          </li>
        </ol>
        <t>The inverse transform operates as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Decrypt the AES-CTR initialization vector:<br/>
              <tt>iv = AES-ECB-inv(k2, packet[L+1:L+17])</tt>.</t>
          </li>
          <li>
            <t>Compute the other variables exactly as in the forward transform.
(AES-CTR encryption and decryption are identical.)</t>
          </li>
          <li>
            <t>Produce the output: <tt>header | cid | iv | ctr_output[1:]</tt>.</t>
          </li>
        </ol>
        <t>The encryption keys used in this procedure do not depend on the packet contents,
so each party only needs to perform AES initialization once for each connection.</t>
        <t>NOTE: The security of this arrangement relies on every short-header QUIC packet
containing a distinct 16 bytes following the Connection ID.  This is true
for the original ciphersuites of QUICv1, but it is not guaranteed by the QUIC
Invariants. Future ciphersuites and QUIC versions could in principle produce
packets that are too short or repeat the values at this location. When using the
<tt>scramble</tt> transform, clients MUST NOT offer any configuration that could
cause the client or target to violate this requirement.</t>
      </section>
    </section>
    <section anchor="example">
      <name>Example</name>
      <t>Consider a client that is establishing a new QUIC connection through the proxy.
In this example, the client prefers the <tt>scramble</tt> transform, but also offers the <tt>identity</tt>
transform. It has selected a Client Connection ID of 0x31323334. In order to inform a proxy
of the new QUIC Client Connection ID, the client also sends a
REGISTER_CLIENT_CID capsule.</t>
      <t>The client will also send the initial QUIC packet with the Long Header form in
an HTTP datagram.</t>
      <artwork><![CDATA[
Client                                             Server

STREAM(44): HEADERS             -------->
  :method = CONNECT
  :protocol = connect-udp
  :scheme = https
  :path = /target.example.com/443/
  :authority = proxy.example.org
  proxy-quic-forwarding = ?1; accept-transform=scramble,identity; \
      scramble-key=:abc...789=:
  capsule-protocol = ?1

STREAM(44): DATA                -------->
  Capsule Type = REGISTER_CLIENT_CID
  Connection ID = 0x31323334
  Virtual CID = 0x62646668
  Stateless Reset Token = Token

DATAGRAM                        -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated QUIC initial

           <--------  STREAM(44): HEADERS
                        :status = 200
                        proxy-quic-forwarding = ?1; \
                            transform=scramble; \
                            scramble-key=:ABC...321=:
                        capsule-protocol = ?1

           <--------  STREAM(44): DATA
                        Capsule Type = ACK_CLIENT_CID
                        Connection ID = 0x31323334

/* Wait for target server to respond to UDP packet. */

           <--------  DATAGRAM
                        Quarter Stream ID = 11
                        Context ID = 0
                        Payload = Encapsulated QUIC initial

/* All Client -> Target QUIC packets must still be encapsulated  */

DATAGRAM                        -------->
  Quarter Stream ID = 11
  Context ID = 0
  Payload = Encapsulated QUIC packet

/* Forwarded mode packets possible in Target -> Client direction  */

           <--------  UDP Datagram
                        Payload = Forwarded QUIC SH packet

]]></artwork>
      <t>Immediately after sending the REGISTER_CLIENT_CID capsule, the client may
receive forwarded mode packets from the proxy with a Virtual Client
Connection ID of 0x62646668 which it will replace with the real Client
Connection ID of 0x31323334. All forwarded mode packets sent by the proxy
will have been modified to contain the Virtual Client Connection ID instead
of the Client Connection ID, and processed by the negotiated "scramble"
packet transform. However, in the unlikely event that a forwarded packet
arrives before the proxy's HTTP response, the client will not know which
transform the proxy selected. In this case, the client will have to ignore
the packet or buffer it until the HTTP response is received.</t>
      <t>Once the client learns which Connection ID has been selected by the target
server, it can send a new request to the proxy to establish a mapping for
forwarding. In this case, that ID is 0x61626364. The client sends the
following capsule:</t>
      <artwork><![CDATA[
STREAM(44): DATA                -------->
  Capsule Type = REGISTER_TARGET_CID
  Connection ID = 0x61626364

           <--------  STREAM(44): DATA
                        Capsule Type = ACK_TARGET_CID
                        Connection ID = 0x61626364
                        Virtual Target Connection ID = 0x123412341234
                        Stateless Reset Token = Token

/* Client -> Target QUIC short header packets may use forwarding mode */

UDP Datagram                     -------->
  Payload = Forwarded QUIC SH packet

]]></artwork>
      <t>Upon receiving an ACK_TARGET_CID capsule, the client starts sending Short Header
packets with a Destination Connection ID of 0x123412341234 directly to the proxy
(not tunnelled), and these are rewritten by the proxy to have the Destination
Connection ID 0x61626364 prior to being forwarded directly to the target. In the
reverse direction, Short Header packets from the target with a Destination
Connection ID of 0x31323334 are modified to replace the Destination Connection
ID with the Virtual Client Connection ID of 0x62646668 and forwarded directly to
the client.</t>
    </section>
    <section anchor="packet-size-considerations">
      <name>Packet Size Considerations</name>
      <t>Since Initial QUIC packets must be at least 1200 bytes in length, the HTTP
Datagram frames that are used for a QUIC-aware proxy MUST be able to carry at least
1200 bytes.</t>
      <t>Additionally, clients that connect to a proxy for purpose of proxying QUIC
SHOULD start their connection with a larger packet size than 1200 bytes, to
account for the overhead of tunnelling an Initial QUIC packet within an
HTTP Datagram frame. If the client does not begin with a larger packet size than
1200 bytes, it will need to perform Path MTU (Maximum Transmission Unit)
discovery to discover a larger path size prior to sending any tunnelled Initial
QUIC packets.</t>
      <t>Once a proxied QUIC connections moves into forwarded mode, the client SHOULD
initiate Path MTU discovery to increase its end-to-end MTU.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>Proxies that support this extension SHOULD provide protections to rate-limit
or restrict clients from opening an excessive number of proxied connections, so
as to limit abuse or use of proxies to launch Denial-of-Service attacks.</t>
      <t>Sending QUIC packets by forwarding through a proxy without tunnelling exposes
clients to additional information exposure and deanonymization attacks which
need to be carefully considered. Analysis should consider both passive and
active attackers which may be global or localized to the network paths used
on one side of the proxy. The following sections highlight deanonymization risks with
using forwarded mode.</t>
      <section anchor="passive-attacks">
        <name>Passive Attacks</name>
        <t>A passive attacker aims to deanonymize a client by correlating traffic across
both sides of the proxy. When using forwarded mode with the <tt>identity</tt> packet
transform (see <xref target="identity-transform"/>), such correlation is trivial by matching
a subset of QUIC packet bytes as packets enter the proxy on one side and exit
on the other. Packet transforms such as <tt>scramble</tt> mitigate this by
cryptographically preventing such byte comparisons
(see <xref target="scramble-transform"/>).</t>
        <t>Regardless of which packet transform is used, both tunnelled and forwarded mode
are still vulnerable to size and timing attacks, without the addition of techniques that go beyond the analysis
in this document, such as padding and adding chaff packets.  Such techniques could be supported
in future packet transforms, subject to additional security analysis.</t>
        <t>Unlike tunnelled mode where packets are fully encapsulated in the client-to-proxy
connection, clients using forwarded mode to access multiple target servers
over the same client-to-proxy connection expose the number of target servers
they are communicating with on each connection to passive attackers that can
observe the client-to-proxy traffic. This additional metadata revealed on each
packet simplifies size and timing attacks.</t>
      </section>
      <section anchor="active-attacks">
        <name>Active Attacks</name>
        <t>An active attacker is an adversary that can inject, modify, drop, and view
packets in the network. Some active attacks have different effects between
forwarded mode and tunnelled mode, but active attacks can be used to correlate
flows in either mode.</t>
        <t>Both tunnelled mode and forwarded mode (regardless of packet transform) are
vulnerable to packet injection in the target-to-client direction. An attacker
can inject a burst of packets with a known QUIC Connection ID and see which
Connection ID is used for the corresponding burst on the proxy-to-client network path.</t>
        <t>Packet injection with a known QUIC Connection ID can also happen in the
client-to-proxy direction, which only affects forwarded mode since
tunnelled mode sends packets within an authenticated and integrity protected
QUIC connection to the proxy (see <xref target="RFC9001"/>). None of the packet transforms
defined in this document provide integrity protection. Even if a packet
transform did provide integrity protection, attackers can inject replayed
packets. Protection against replayed packets is similarly provided by QUIC in
tunnelled mode, but not provided by any of the forwarded mode packet transforms
defined in this document.</t>
        <t>An active attacker can modify packets in the client-to-proxy direction, which
would cause a tunnelling proxy to silently drop packets, while a forwarding proxy
would forward the packets. In this way, forwarded mode is less vulnerable to
flow recognition based on corrupting a portion of packets in a burst.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-header">
        <name>HTTP Header</name>
        <t>This document registers the "Proxy-QUIC-Forwarding" header in the "Hypertext Transfer
Protocol (HTTP) Field Name Registry" &lt;<eref target="https://www.iana.org/assignments/http-fields"/>&gt;.</t>
        <figure anchor="iana-header-type-table">
          <name>Registered HTTP Header</name>
          <artwork><![CDATA[
    +-----------------------+----------+--------+---------------+
    | Header Field Name     | Protocol | Status |   Reference   |
    +-----------------------+----------+--------+---------------+
    | Proxy-QUIC-Forwarding |   http   |  exp   | This document |
    +-----------------------+----------+--------+---------------+
]]></artwork>
        </figure>
      </section>
      <section anchor="proxy-quic-forwarding-parameter-names">
        <name>Proxy QUIC Forwarding Parameter Names</name>
        <t>This document establishes a new registry, "Proxy QUIC Forwarding Parameter Names",
for parameter names to use with the <tt>Proxy-QUIC-Forwarding</tt> header field,
in &lt;<eref target="https://www.iana.org/assignments/masque/masque.xhtml"/>&gt;.
Registrations in this registry are assigned using the
Specification Required policy (Section 4.6 of [IANA-POLICY]).</t>
        <figure anchor="iana-parameter-names-table">
          <name>Initial Proxy QUIC Forwarding Parameter Names</name>
          <artwork><![CDATA[
    +-----------------------+-------------------------------------+---------------+--------------------------------+
    | Parameter Name        | Description                         | Reference     | Notes                          |
    +-----------------------+-------------------------------------+---------------+--------------------------------+
    | accept-transform      | contains supported transforms       | This document | Section {{client-behavior}}    |
    +-----------------------+-------------------------------------+---------------+--------------------------------+
    | transform             | indicates selected transforms       | This document | Section {{proxy-behavior}}     |
    +-----------------------+-------------------------------------+---------------+--------------------------------+
    | scramble-key          | contains key for scramble transform | This document | Section {{scramble-transform}} |
    +-----------------------+-------------------------------------+---------------+--------------------------------+
]]></artwork>
        </figure>
      </section>
      <section anchor="iana-transforms">
        <name>Packet Transform Names</name>
        <t>This document establishes a new registry for packet transform names
in &lt;<eref target="https://www.iana.org/assignments/masque/masque.xhtml"/>&gt;
and defines two initial transforms: "identity" and "scramble".
Prior to finalization, deployments that implement the version of
the <tt>scramble</tt> transform defined in this document should use the value
"scramble-dt". Once the design team proposal is adopted and a new draft is submitted,
the wire identifier will become "scramble-XX" where XX is the draft number.
Registrations in this registry are assigned using the
Specification Required policy (Section 4.6 of [IANA-POLICY]).</t>
        <table anchor="iana-packet-transforms-table">
          <name>Initial Packet Transform Names</name>
          <thead>
            <tr>
              <th align="left">Transform Name</th>
              <th align="left">Description</th>
              <th align="left">Specification</th>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">identity</td>
              <td align="left">no transformation</td>
              <td align="left">This Document</td>
              <td align="left">Section <xref target="identity-transform"/></td>
            </tr>
            <tr>
              <td align="left">scramble</td>
              <td align="left">Reserved (will be used for final version)</td>
              <td align="left">This Document</td>
              <td align="left">Section <xref target="scramble-transform"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-capsule-types">
        <name>Capsule Types</name>
        <t>This document registers six new values in the "HTTP Capsule Types"
registry established by <xref target="HTTP-DGRAM"/>. Note that the codepoints below
will be replaced with lower values before publication.</t>
        <table anchor="iana-capsule-type-table">
          <name>Registered Capsule Types</name>
          <thead>
            <tr>
              <th align="left">Capule Type</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">REGISTER_CLIENT_CID</td>
              <td align="left">0xffe400</td>
            </tr>
            <tr>
              <td align="left">REGISTER_TARGET_CID</td>
              <td align="left">0xffe401</td>
            </tr>
            <tr>
              <td align="left">ACK_CLIENT_CID</td>
              <td align="left">0xffe402</td>
            </tr>
            <tr>
              <td align="left">ACK_TARGET_CID</td>
              <td align="left">0xffe403</td>
            </tr>
            <tr>
              <td align="left">CLOSE_CLIENT_CID</td>
              <td align="left">0xffe404</td>
            </tr>
            <tr>
              <td align="left">CLOSE_TARGET_CID</td>
              <td align="left">0xffe405</td>
            </tr>
          </tbody>
        </table>
        <t>All of these new entries use the following values for these fields:</t>
        <dl spacing="compact" newline="false">
          <dt>Status:</dt>
          <dd>
            <t>provisional (permanent when this document is published)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>This document</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Contact:</dt>
          <dd>
            <t>masque@ietf.org</t>
          </dd>
          <dt>Notes:</dt>
          <dd>
            <t>None</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="SP800-38A" target="https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-38a.pdf">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Methods and Techniques</title>
            <author initials="M." surname="Dworkin" fullname="Morris Dworkin">
              <organization/>
            </author>
            <date year="2001" month="December" day="01"/>
          </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="QUIC">
          <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="HTTP3">
          <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="INVARIANTS">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8999"/>
          <seriesInfo name="DOI" value="10.17487/RFC8999"/>
        </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="HTTP-DGRAM">
          <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="RFC8941">
          <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="QUIC-RETRANSMISSION">
          <front>
            <title>QUIC Loss Detection and Congestion Control</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="I. Swett" initials="I." role="editor" surname="Swett"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes loss detection and congestion control mechanisms for QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9002"/>
          <seriesInfo name="DOI" value="10.17487/RFC9002"/>
        </reference>
        <reference anchor="ECN">
          <front>
            <title>The Addition of Explicit Congestion Notification (ECN) to IP</title>
            <author fullname="K. Ramakrishnan" initials="K." surname="Ramakrishnan"/>
            <author fullname="S. Floyd" initials="S." surname="Floyd"/>
            <author fullname="D. Black" initials="D." surname="Black"/>
            <date month="September" year="2001"/>
            <abstract>
              <t>This memo specifies the incorporation of ECN (Explicit Congestion Notification) to TCP and IP, including ECN's use of two bits in the IP header. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3168"/>
          <seriesInfo name="DOI" value="10.17487/RFC3168"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="QUIC-LB">
          <front>
            <title>QUIC-LB: Generating Routable QUIC Connection IDs</title>
            <author fullname="Martin Duke" initials="M." surname="Duke">
              <organization>Google</organization>
            </author>
            <author fullname="Nick Banks" initials="N." surname="Banks">
              <organization>Microsoft</organization>
            </author>
            <author fullname="Christian Huitema" initials="C." surname="Huitema">
              <organization>Private Octopus Inc.</organization>
            </author>
            <date day="5" month="February" year="2024"/>
            <abstract>
              <t>   QUIC address migration allows clients to change their IP address
   while maintaining connection state.  To reduce the ability of an
   observer to link two IP addresses, clients and servers use new
   connection IDs when they communicate via different client addresses.
   This poses a problem for traditional "layer-4" load balancers that
   route packets via the IP address and port 4-tuple.  This
   specification provides a standardized means of securely encoding
   routing information in the server's connection IDs so that a properly
   configured load balancer can route packets with migrated addresses
   correctly.  As it proposes a structured connection ID format, it also
   provides a means of connection IDs self-encoding their length to aid
   some hardware offloads.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-quic-load-balancers-19"/>
        </reference>
        <reference anchor="ECN-TUNNEL">
          <front>
            <title>Tunnelling of Explicit Congestion Notification</title>
            <author fullname="B. Briscoe" initials="B." surname="Briscoe"/>
            <date month="November" year="2010"/>
            <abstract>
              <t>This document redefines how the explicit congestion notification (ECN) field of the IP header should be constructed on entry to and exit from any IP-in-IP tunnel. On encapsulation, it updates RFC 3168 to bring all IP-in-IP tunnels (v4 or v6) into line with RFC 4301 IPsec ECN processing. On decapsulation, it updates both RFC 3168 and RFC 4301 to add new behaviours for previously unused combinations of inner and outer headers. The new rules ensure the ECN field is correctly propagated across a tunnel whether it is used to signal one or two severity levels of congestion; whereas before, only one severity level was supported. Tunnel endpoints can be updated in any order without affecting pre-existing uses of the ECN field, thus ensuring backward compatibility. Nonetheless, operators wanting to support two severity levels (e.g., for pre-congestion notification -- PCN) can require compliance with this new specification. A thorough analysis of the reasoning for these changes and the implications is included. In the unlikely event that the new rules do not meet a specific need, RFC 4774 gives guidance on designing alternate ECN semantics, and this document extends that to include tunnelling issues. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6040"/>
          <seriesInfo name="DOI" value="10.17487/RFC6040"/>
        </reference>
        <reference anchor="RFC8999">
          <front>
            <title>Version-Independent Properties of QUIC</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the properties of the QUIC transport protocol that are common to all versions of the protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8999"/>
          <seriesInfo name="DOI" value="10.17487/RFC8999"/>
        </reference>
        <reference anchor="RFC9001">
          <front>
            <title>Using TLS to Secure QUIC</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="S. Turner" initials="S." role="editor" surname="Turner"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document describes how Transport Layer Security (TLS) is used to secure QUIC.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9001"/>
          <seriesInfo name="DOI" value="10.17487/RFC9001"/>
        </reference>
      </references>
    </references>
    <?line 1168?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Lucas Pardue, Ryan Hamilton, and Mirja Kühlewind for their inputs
on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA819a3cbx5Ho9/4Vs9Q512ICQKQkKzazSkJTdMyzenBFKs6e
rI81AAbERMAMdmZACpG4v2y/3T9269mvaYC042yuzm4sDWa6q6ur613Vw+HQ
dGW3KI6yf393djI8vsmbIjtv6o+bsrrK3rX4v99dXp6bfDxuimt+jV8wk7wr
rupmc5QVH1dmWk+qfAkDTZt81g3LopsNl3n7X+ti+F/rcjJc4TfDg8emXY+X
ZduWddVtVvD+2enlt6ZaL8dFc2SmMOaRmdRVW1Ttuj3KumZdGJj3iQHI8qPs
ssmrdlU3nbm5OspeHV/8+7tTc11Ua/gsy66aer06yvb4+R484Tn2vq+bD7iW
P+IL+HyZlwt4zhD+AaEd1c0V/pI3kzn8Mu+6VXv06BG+iI/K62Kkrz3CB4/G
TX3TFo94iEf46VXZzddj+JhWf3MlCHi0CyX43QJW3XbepOH3Ix53VNY7R9r5
42jeLRd75kOxuambKeJqmOGv9Beclv4C6M+vmnxJ/1hP+SF9T3/r1lVVLFr7
cVZWbpBu3QAhtVm+WGTdvMhu8k02rW8q+pHhsZMNqytj8nU3r2HPsyE8z2As
2O7LUXaerxcbesL0dFkvlxvvKeD/KDterRZFdlZNRvSs7ZqiAAS+qQr56Txv
PmTf5/zJpOyASk/Wq6LpyqoeZCf5opzVTVXm2ddfHhw+5bfqddUhOb+ryq6Y
ZhcdbktWz7LjZdGUk5zeKphyuhUC9IccJxtN6qUJlnE6yt7WQMJA01feUk5h
lOiH/z9Wgw9+bBSwbavaezHKLuAkVPnfyj1vWXsv8utyGv0EC8ur8m95Bwcd
XvljXV/BQl6+PNkL1rh3+OzgAEBazYHGi7xreLFAPHveYvde4WpyILc/lcVN
uOKnB0+f7IVL3tu25j1/0dNWAKZz/YcrfMqLrupmCYBfE0/Jsovzrw4Ohk++
OuZ/4h9Lu94fRsarumnKNntxQxzHvkD7/JqwkS9gq1tgu+uuQNgAymqaN1M4
OtU0uywm86pe1Fcb+61w6N8Fs70tANRlAV/imBlgI/tmUU8+ZCflal40AMeU
l/4G6ER24VUBUPvzlHAoWzssMd/s8cHB4fDw8fDg0AGQN1e4WcqequvFaj1u
R1XZdqOr+voR/gWfPFoUV/lk86hd0aN2VUzKHN9dAPIRBkZkPlpNZ8YMh8Ms
HwMl5JPOmMs5oA2kyBoW1WXTYlZWyE0qkC4dCANcZFdn716cO/lUX8NCSTx1
87zL8imsjeacwTmrV125FAJsCT/IyEogC5JhIGOqYkI/jjKa285jgIUBa89y
Zn04bVOs24Imfzrs1ivkczjicr3oSjygwWhnAMqird0azBI2A/dipZADJd/M
y8mcYWmBlroMyH8K61nlkw9F12YTWPq4wGlAKE8B7DVJ47wyuOJHTwQ42Fvc
bkAAvo5vNMWwqCb5ql2jXJnSbvOzZrOCByPG/LKcTheFMQ+AGrumnq4J/OzT
g9L7560xaYxnnz79y8mb169PTy6H8Mbzt9+efP34669ub41dNUkAwB1wlamV
LC1ACjL4ao47SwPRMgaAjqJhDMNWALKn+CmS+LpC2inMuOhuiqIi2cJLx4Xl
QpwwSwOwyVYK7nQYfh1RbbyNwiXgM4L94ODg9naQAYonBW9Ks4ZXaL0IlIV/
FFMqTNISUF3RLLM9BmePiWaGO1PTrwxfxoSaTRYlflu2Jp9MipZ29hq4mZCc
LEOWtgQ8wmpgTXVTXgHpzGtgH/AFLAZIthvAc/i1RkIw/H0MJNH2lOHE5VhC
hL909aReIJhwfgABV8CgFkRp43rdMdZOLNaysxdA4YSg8GGGmqMivJzCpOVs
0ztqQPimnRRV3pR1K3ve0f8CtLACQADwg3LSZeNyWjb8FTDMJYgkhEmJoK6K
eD+JHPC5d0qzh6u8bIgNnp3j+hrAdcEMEJXIdn+UHesph50xAEVOOjB8Ea0P
aSrBBhSismuLxSygSROwiK3cxxhSu+HMtIlpiZP0GVJ+XZfT8KgLDow76/hE
uI6dWdlLjYSee4Bk8xxXA0sBXTQHjt3OkVd8P6czB4iZrSvZDpDJuF8rwCaR
nzuSiKR2vULcZt1NnS1JCiEegD9NkayMD8WRMYdA66RWLorpwPFFOSD/Ovyd
noIAetyigMmBggJEZ7zP3KHXr/BUAcR2ENxLuz2LfFMwpTjkGdxNwNAVYAQx
hOetqRdC/wv4IWbar95dXNK4hDFc/chj8SZ++/g/4pfp2JZ8UIGTgpLZ0S+E
Q//kAtk8HmXfqnT4aajDbYP/WeUgPYrFhtkcTNnHH07Z1vjlQAVQJmJ9uFo3
qxrBR5sM4FviLnSwRMTibL1Y8F4HFCorpCURsupqsbG8Ghe5VSLCiu1yeQDk
cCRt4MyRquDLfObAIMeK7OT8HR3MZbEEexW2se1IutBiiRsYPiPtAAe6AWKk
AfGM4ZJfXb4jFCE8rEnYQ8SmDnAqXVj+AQi+7MDMLfEU8cZNi9Wi3hAnbkHv
E52EZAFx7ZsS0NgUCzylSGeLIm864NnZ5cm5A022N6+QUeopI3Th4ub5NWCk
ApFTwoxtMVk3eE6J1TXlNahlOBIZDQVLMTq08gD/Cko8zD/e0JpmIaqRanI8
ycSJ4NwOs2PAkiKCCMqX0EJIODvJRiZEoBRAI1E8KwGWc4DacF1OihGMe+ne
F6EpS/5Q1Tf0hePlSGnedG29QHIe5y0jEklauZ+C6oED8qUALb/FWd+MeTJm
ASUpVYDHMexPNIk7HMDPPtgl8iP40cjoiDISaUgFQG64qRVgEzFJojUaUz5z
Og8RMfBNU85gIJngJmf1qH8apnXBMhT48jUOOgFTpBDBAEvogc+kEUGtaBpv
SPcGMd6xbCTeXjOWGC24fGaqOOWEaLhsP7Swl6ui0g3IquKq7kri0o5TPPz0
iWca2mft7S2I44uiAMVMyff2FgnRzNYNbci0bCdr8h3B8r9BGLwzLHKOJTVg
EAVDA5ITDvy8Jj5V4wB6KH3U4Rx5tUnuhspHOTLRl0QavvGATIl4mnImPP+s
sRtQOPFvT0jjPDx8CqtDuIlIYHagD5i/yZAKiUHA4Pg+zMwcXNZHw1cFq1rr
Clhk2ykVfscs81vE8bgEpq0/THy1wszKYgHq4Kypl3bHy2qb6AismwtSkTuS
pDyMIeYA3KDkDadvyuoalLwc90bYOKz+7PWfjt+eHb++vEAUfPX111+D0h0u
DjdPyBNG9FGBrwEqHjxAFQkJnH7A9b1AVJei1D+YuF9vec8+FHBuarSw91Dm
7A34v9nrN/T3t6cw9NvTF/j3i++OX760f9E3Lr578+4l/G7kb+7LkzevXp2+
fsEfw9MsegQifo83Ye/N+eXZm9fHL/cYT6D7W/UcEQh7OUYGDkQLp6ljmQba
06Qpx6TgZN+cnGeHTxGPgLzHh4eAPPnHV4e/AWIyoE9XA9GDgUT4n7AjgMvV
CqgLB0GsgjwG4bRgaQei9gaUP9DBGbmXYMaU4oHYZuqwGEDRiEYPi4MTop0j
n6vBpuF0PSNAjjGvqvOnQE5MxiaPA1xkVQNKmAEBw1/VZMXUfUOmKdCXQQNc
irtih9mVpc0uuww6AgQIG6norsqXR6j8wDfAQLynvr5MJ8p4KBBQ7fAXpEvh
QIGZsqgn6Baycm2Q8RNaIoj5AaxvWXe+6BsYeaTvAPM8A+27XgIVLWFUxCdr
GgNGMvwfmaQNcw7UcLI92ZdiumdYz3NIGM7yCWKoFZgJn/T3lIG+RfybYPm8
NX/HwFZyGSfHvW0LjCfEct9SZVpAJ8EcHZ6q7zDEdHqMeiCEn71A9b9iORoO
RfyPTCzhocRQfYWn9ojBIeDvgJMH/sXgtGQa4fNPZQN66mIrXmeg594baDUr
6Ee3i9ZYQkZFbiIkisBYKatI4PqwbcPlT4PNWf8+Qn4ubOf0I4epUKk50vVO
wBTxPCTwPvpHrLZVzGp2hWxQ5wqssaFTNplD270JPAWiJIiroMjBVLDsExmx
rwHgAROdKFYNyHhRxRgsm26OOhlrxvy4hwgU2cUSLRzgWmAhjfNFXuEBN+jb
7YorlOvtGgDKUXzgtIFc+/Tp9xR9fPnN87PhC/LGc+QKRxvyaDA9CDjaJbAn
UfMCA6JjV+qM3fWoe1Wmt6BRRi6Mmt3g7HsN921gtUhyVfprA1UWz5SocTi2
EB07pxYbZfDn7LbzlSPf4L4qKpy+mBo2or2Rgl0c+BhElN/U6wVriOgBFEsC
l27HNwIBafuTTqRWySaLwnBTqNWPO7p1+hGpS7vOF8nOEMFynowwqPPwPAkD
IdUhOEuRIu37aCTA3IDVnE9E5dgJ1M5FofmLm1cbmVI3gKfUHbwU3mcuyiWG
fBebgTiCQbOA3RZ7PTos6Lj7omPH4JT9KNalVIHcqpsPZpV389Y57fAg5+MS
vWi82l28NoFvEwqEk4i3Mv7vjW9j8Z0F+E4CY/G8FWTj4TvbiW/+dCT/RWc3
cO18eg0mQ35lDSuTQhsvbFleyYnOPW2LmaWgPkPUB0g2yXUJ0+zxDsAxBhCJ
XeYVQuUcPgaRgWY804cuMqKPOtCHcOmxXSlDA+GdeLbsuZhDePKtNpfYxmlN
r6g1iJkTJRhbJi0jJL6BSjlPBmquMjQboLkp4edx6F+lxYqaYb9kqgks5AfZ
Wz4tU6EpCsGCUSYOfLTIzniYpQQj1U6OTQHfrey75dXCjIISEvyiYwgnQ70+
ntkBOhO5bC0Rs8rZmpTOaV9KOrJGKOAnlFESQUESCMDF2JdHVVEgsUuowWFE
MQhU4eTWq570QXhe4Z5oxq1kf1anjvZMtjOIwfk0SVKKAo3ZCyEM0BnzZUFR
M3w+fPHHt8evJO73G4ydobfMg81YEUloR7LU+Wzw0ptRDkoLcwDL6pIhG7B0
DIVt+EgjJtHTHGLDY9d0GluxRMll1d9RGzA7w/DalAN2IksBdha1sd7HY1ls
4lAhFGCduW3Hw0lMZJmXnMWgp8GaNm1xjb4q0L2KJa+uYZ9rN2+KwjR6qIA8
E2ExIG2nUI0LoDpWFC/YPn3FbxlzmofhgVVs4LLaC7uIA4uVqBZvimZhmv/+
7/82D9NGM0+/nz3/XdLuo0/NK5WWDAGTLExv46ZIEKm5B9kYmG9uBDxZgLiK
gyVYgZw8diNGi48AirmhvtXCO+y5JH5gcRFr+Rpv1TDl1TqHn7pClQb07oWH
ycZSeFokUtM3ynwWWHkER4QuZ7v1XhW6NWrH+dZCUjUKSQODpXhUdn5CMbGE
f4BRJztntyWFcs4/SaqfPjlFH/16J1j7lKwClPYwRWrwcfqjkARtsDiOwW5Z
ckysZiux3odAPCZDkUZgFKpUhCsPJR8TwF20EzHJkHaMbz+IguIEoDxPbhhw
qjUKVj+GbuMQJP/6Cov8qiqLZYqdhyDx86Z0NSHZNqLZtF6HPD5FDwGtyqk2
chYxjK4HfRezHGXH02nJnHjBGSw2+I1nKjYyWQX+udCaCNr0GcQhdpkTesK2
HJLUJ8S/d3P4nzaePal3HPP0x/c/sWklKyFejC8BQYtJYZajP23hRLc9wukT
7E5l7pyBXrxzO/e2rkg4Ez3FDcCLnE7Z67orjJh/HosZY4Ig8pemvC5RtZj5
DtQFKKgtOkVQvYSzeBOiS3zBpJKiamJDY+JmV3m4phRCeyBQK9P5wXYDjaQr
0Y09owQlTA9hj1qzTQWm5IR53vBK2apmXvCi6HB/Y40b/zVblJNOIj/899tQ
ndvmOvH0vDuUOsNH2Aap5sXkA63KTqkuvAlgQoxSxKrys+xMXHD0tqHMhY78
7r6dQ6ZXU/yV+LBl5l+0ivZBHBMynz5xYv24mOfXYHbf3iKl3tSO3mVK3H8b
GSo5MLMsMOveBtF70QjzE6IRkmYYRiRoPzkZDL4XyOK8qi0AYipXzxUCaMgp
Vw0JClR3sB0/kneTs98oISYrPuZoMaNY+lvR1MNFUV3B1oaDuY1jUl4s/Fwy
ynLj4JeNLVovKoPLuXiUYGyFL1Aze2JML4ulVVN9kjcNe24ELsH+Vu89B2tt
JLdhOsPjjNscTEFLmZazGbwFhzU9pNFsPfHyTkXi8bFT5RrRzyY1CnfFMwJK
mNYkg5Z0BxmpYUxo9h9+zDkryhOIQdGhs5E8l4mC+gMenpYzx5TP5mral5VD
PslabzO880RZd0jdBTtNrA9mUcww/WZqvQgK1bQUz0c+rq8L8gCil4TYHuM3
kepIeRyL8kPBPuAFpgaxA4bJamBWOegBkzW5ErcToqc9YTqYS1UQNoCEKaef
PQQ7wGq96SnWi+euXNkMkNm6WzfkWuCX1ErEJDBMpnkLAk5mcbklmEguZT/i
cDbfz8sFhw4W5ayYbCYL3xCnaOyaSkEazBRZV1OVcMHrLsIBWkVPuyK0FOhO
zTfW/33DJrF4OkViz3MgQgpao6VGnBZ/pc30yAi3CxO/SK4s62sx6jQRB+f6
ojWYYwTc/6qQwDnOTlGBtPsUhSNSl01mYqXFwCSsJlU15QkWDaVXtuQN41BC
4EsGZiNZnr7ztW7MuXMcoVfECQXAWd+VKB66fAwgT2I6bw2hZEBWp265DFt/
KCrvYNJZrUNPb+iCZu1Fk8bQeSmex8AWyIh1Eo+cAPLX7MHLs2jbowSBkTkL
Eq4wHbJYgkDJmxKO0rpiKFvgOLib+G+wBFDC+7J0WV7NO8qKM+oVLXqpMAiV
TZFnoqAECfcGb9lD4AiLNeLFeJRnicsmL7ojsG8JUVZRoR7FSWA4i5cBRogZ
YNyNYd5Fb74OidpAu16qkRgBZZzVahHtZ0ujptWVlLXTgdjSPC5PDSGezsEs
kwaHfTA3NYZAKP8QlTzGWIqYJJqWazKtL9srL0RgUcfg4Mmx6Yke8RqfeDU+
t8tJgDjmFOWimvaPgXEBCgw/flgQ48EwrW9Yh4Hi9DFszbhBqLYxWNUXxJ43
bwvxZaa1Yk0pW9VtW6IiC7p9jl9EB4fCwMxFpiWVCKzLdk5p/hr39zPSe3k5
ViFQ458dGl+yXjiigrTi46RYaRBZ00qiFTrysEnJxOxjbQ7ZOh4dJiOpZFnV
K8npJijWFWgaU5BWpMGPy06TUEHSY45ib24ihwF7Fj4UuONl5WGD0//YLmuK
KxTPAq5RH5+nUlFKDdsRSmDWle85icHUuqrKvxUOGBMhwqMgSSEjfYueJ1fA
phfwNaDyKwCfuFfaByMp+gqaDd73ccPgDIx/DPqROXWQ4wjOHtIA0Sg7XojA
27LtZlHXH0g3SuZxa0qapMd2VIg2oUTNZCEU8jHVndktZryU0kmsTNGS1q0d
v1iAnq6J2HHChnkQm5MU8oKTuVkVoOmw+M39+oxU7QulbpOiyX5dDpzBk4ef
Prlgye3tPoYzucSGBbU4kJwAgh+ce2ibnxQVN7T6LTNqCzeloEqphouEPnZa
tRNVUNRTm5MQOKhb3wFIA7CrkYgElVm2RDV0B3aoVw3GRujcAyrI7h+yHmdT
95hj+UFcH3jfarEwqfyrpv1zCQtUJY6VPWdOB2FqFZQC69vTP55dXJ6+/fHk
5dnp68sfT8QjZ59fHr/94yk/l3VRdTlsclsUgIAyr/Kh/DKkXzh7maf2vshg
l0Gf308snJNZvNgR6wnsS0g6DdHYoV+TAg9F5Ar/eQ12ita/hNAHVRicx7+x
MAlujk/+LUYLPtqJkSyNEbMbI42DIdjU0LWNHJ2KAiWvUy05TI5v15TaifUn
G/bGCOnlmcdJQ1kkRR/GKRp355zQ1FKap1l4MXv5Cfh2dXug/r98c3EaI5wf
/qOIUByNuu+m9hT5WnRjD9GMzyjPKrFagzatt85omsw/u+Ij40lbKlfMTQ8V
arOhuwtVJOaTEYVSMLq0oxkZrY/DHaO5t0heUvLsX8UFmUe0wITFZdZYzxcB
Ey9icJ8NhaNgOLNNcsFd7Q36wNNi65PJSHSBwbKfPc8OPs5mxdODxwP921P7
ty/hzZfsj4B3B/CvcMSHB6PR44OnB/DTLU346Sh7MCuvLHFNyilXpj/fS8Py
LQG/d2tCWI/MUXYcp9mwo8kx7qlWO5UuRn5AWHv85ZeSlQNShx0qbLqE3rSe
rolJNKUrbwreNrIm9qWr5Uqy6vpwkPDV9fySi3KJHQdQvD8+YPhYqY1rIfi0
rSn+YJcSS6AETbD9WfjlS0NrE4XpYYilWDO7FGsEN/KtCtckW9tNSYd3UI37
bRdBZWn4opHT7zwcjbaSpPL3oSDII9H7LXoLyQpgQLh3EZpW4Kuc2UbGBvb+
76Y2oqED8zOoLXTmbDuPnri8oaxdAcv3w4cjvbTn0VWxggS2EhS48pao5C6C
SOI9PgPbKD75XEa8aww2xHJb65K0/kzC+gvtIQlBOVMq0GfuUD936lnCFUAe
2fTGXkR5FytIOvfuYAEHVoQ8CZjBz+YFaSCCr9Ov/C9wlGue2Ocku3H2i3MQ
UvD7gtGkBOPP4ygm5ig/R379ZI4SLWsrh0ni8edwmF1kltwX2fvkQqzjmwHR
tLkctepyGnm6ZFjVwgmlUtgY1O8kvOLeSOLnmfVK4DmZRh0iwXYrXGiwh7n9
ycNGWmnqB3FZYSYpbgsVGjpvpE3Rxpk1rQcMT2SJygKn64YJgFLMudQvvSWy
FxiPGUqme4hOF/8psPY1kQLqd2MwcREPa4u2NKYpbpqy4yYVWxzu4nUSHybn
aIRoshnvmmwPry5/jlRLB2Z8U9O3jq0RZWyel4RGCi/9Pl5R6WVG2KiSifPB
45jMT6A+k6I+m9FuT2jLwU5EF/kBa5vjHHn4uVGGhr9kcHFDufoBCbnhFK5O
KcgAMGnsEpjlVUVR9W6HynC8RYBYBYFHVR4bITQI0xl/n+I3t1VqGJsR941k
e2DOCycr2fwPsD5t3MwG34JKWS54FXedTehx7jxDJVmhOy/7nhPG0f1uc1HI
te6ZJXvkLR2Si+9bGwjb064nnt8GD2QnHRZo7+eFBaSdU8mT0oKLqElYsLQF
5UJ9AsM0cLJrfbeEeqpNZCSpZxKwugVsKjqAd7tiiXlu6wnGzqdaYC91118/
PUTsnHWtIX+KJwm+qetFkaOmFcYBb0iOAjKKimIRftKYF0FnaVGG6G4LSbjg
yWCQvd8f7pHjBH7F1EqMxOEM3gRuUBbptklLtaCWIOTu8qvoXOOn2M9tfa3S
+YULvIn4PZ8lnmQKbuRbErdlJVm0koM9dRt7e4hNqWAb9rBge+V1i9jLsHvN
skCbjnUHHol2zbxvZ0NsJFVdvY9zaYWwbEcQ15Si3daVwliWCQvG9Cvh8isq
p8ZQ+8B20yEPA1aS5G0UxnRxma0kJ4Tt5yXsWnhLQWOff+EXMgiHFCgCi4e7
DIhwnnNRIacfAsveDZEjYvHOMQ7blDuftveGA8tsndw9Psok57flSIRySCn2
oN01ykDaFAeJYPM4RxSKx4NiOEiiMW6PqzghGsftsCMEhdy9JBTpXqNZza5M
x28KEtK1eiNTJp/ad6ixUMJAiX0Nr7FJD1XBoKs/XcMmRqVXH+5PkTAhcQr0
bGJ43UZ+t8cS7OHXEqigYIZq2PrFt+Kq88rmBs75S31aVth1knPMQH6tW6wX
0vXGucyRLTDeWH2LwU4h1FV7YSg7io5QBYmXMJdUSLGq11aEevRAqUH1opyU
EqAxO+MFAbQ79wUgNgFC7owA28pByurj5Bhh/Ya2BmfdUhJ4o9FjL/nqizao
oJTtRall+sWY+aQBSyD4oA0tUVRDFmYHubOGp9qt1aY9Pa4KmYKrldG4yYMH
2WsggXOp+/MWeVF06xUcwNoqRGm21d3rhKrmEIsVWWU6SBd3F8CUNY/Kg6Mb
dCDbYq8lGin07JytBdZnPXupDHgXaFLGj34lLcLQslTp4HK/beTND8cFOA6S
jPIoZuL8XJInh6huvXO8Fcs3eav5kpSXxrmcE++ASO47b39fjGykkyUfVNub
aDMw/iDFxxVlm7J9yM0FpGpUk8RRpoGxIEnriULp1jWf5OTV1k9ppb3kwJPf
RYzx6lLvBeVeX4EkbkCzcdnx2GfrrJOOlhQdtxmmlLzMTQc4xciDCEWK1eBJ
wIWB2TGXkHPeL+XS9MN3NtLiSw/mKV7uqmJaU2UIjUmxRykZsO2gaoPt8JUN
DamZmMgh4sDnyNlJVO7nGjvJdGgjbaUy0JQnczF74Bl6cUzg3/GkYJyyJ1lT
1Zxkjg1S+5vvTpTEHMloZMxP/S2Zsu68bdvZHPfVabs2SiiIPFuUWB6KVFd4
UE2NdrGQ3zRZL8i5L11+J5KuG43QciayQFRvSlGkjOe2F1PVkx9k6WM3aM7l
soTfrxOVpk9OEVWfVAS/DxFLECzogqFfb0m2aJWdJPLuiCuEnRk0K37AnfTE
4aTVwMYvNy8725YmGhatZviRUqFdlxj+N+VwwZo7d/qXdLKc55e9pMCe0HSw
TaRxhNen3/8oRv7Zm9c/ooKHZsUIk55E/rJRqB8IcimBF9Gn8Ioy16M7TSUQ
ugv10QSrVwdAJFhd5ksiuHFHrZuvdLNbgatLaF3RosK54iwbaptQbZNSpadB
9yVWAZiKo7SSGSqnA70rUco9kJrzgCQENkoM3BsX0t5tYg0M5+QkyoXeSM8a
TzuxecoejvhUgWoYsRjt7CMeUt+zFZ56TT+MsnB36MImooV0Ik5tSQffUbXU
OUA9D1rsXbjJy06q07ZG2rbsZ+Tk96kxrf/z4eUD2MtDPO/rvJ5Jy03sFLN9
Rxdh0k+eNNZ9bYOOZZWl+jmwda2DgRZO0tCVofAAhtrKJdMzqQIin3UEoA+7
Z9Ar5E6uJVHkp9G4hBv07M2ciAlVi/6GEXlZ919EAiosrYaYLKlmPxmxCurW
EdTdM8KU4jhjXxsGKMAmKLbsOQfi/h1cHIIePG5Pyh1M0LTcaEOPrc2mcZF+
2424yTV1beVsM9Pr/5Fs8GEVMtBx2T2Pn+FW5o3vRjXLossxK3hkjB8c2GZM
+Y7OXiOhZGW730/Up72BJ8a4YQhXq2pA1Os+6NWiaOdc68jAyvOeKO+PYU3M
5CKDdLXdaxTJ8g9YqnGtfH+ZpZ7HAa08bU4O/EAc0aNE+KIws0k2jwqdGMIZ
0mYnxqgRb3zThekFsfuA8JUHieC3bI+0/1PnzyTsM4kliPxZO2BVyPoyqSly
s20Z5q5ltMscjqDc2HH3Okw7b7DN9B3ryO5eR9RhSs1U17Eg3mIbyxDTk1r4
F+lUE7LDnCNNpnSLDMuBetnsD7BxlAqPpDZ0FvmvW88gardrSpbodgen/LOs
Xfn7PaIpjpTUD/FHyctg4CQTwOtn8UYuXHALIGfXNq1NilE4qAG4xUCPE21j
7FuEEQcNtrMbxYGcFNXiho1YCN9cYcI+5rranb3p2L2nHmSXLMYCeoeuHygd
tqvwHf1LTa0msWjarmrFKsNh30Pig7ZOexoklQ8wxXkJ8C42Htqi/q0BnMl2
hEnLxBIdZaYkUSfaIDUGbS2H1zAgtzu3za71u1fYKqWosDUkCoz4iHwvRdER
O/f8WXFLEnYvuUQOcSs22iDGkNqxwisFptwmoFwWrqiromKLYUE+cL/MTPL/
LwTux/gp3bUzfHt6+fb49cWrs4sLsDrl6p3Ht7f74lVjT/PUbLlLwCWKd6zl
CGjC7MfFphYyLoAVUd1DVuI1Rwg4htRsKjyHzbt6mCxBjVdweDA61OIfAJYd
pPE3rAuOC60qDWoY0hrhOiittLU5cu/VioMLC1gFVR9x5RDXCkvCTdnzllGy
e/ahAO6AHyYrR31PAqInE/Rov1FSZfPJHF3B9tYJfDrFtgDqGz0/e/1HVhq9
C4giiuCf/a4VnF7gI9ZHLWU5cNWVl+QQGa3GvANJwoxgJR6JOJ9BQg/3Tk8I
2g3aKGNUeSL8blf4E4sSbbEwNti+M/CZpy0ljukHUyl/sKkciVa2W2Lrh3u/
dVeNUEEDvVV2Uejd68zskkv37hd1z7you0Zqre5KfsfCuwIiio7bI+HSaSlF
EIPfdDeD5v26aH1N2sY07uCtMrJelhKHdTCjSaCJRLID3Bs7SEOg8hH53L7H
Wt8CteM+9aVkHYyxw7XhNwgkVYHpjYSGZwWTVG5KJkXbaJ4dHSv4etVgQMv4
3TKi3sq28+Ztf4vJXU8jYyutnfFoFGlcvWN65TaU07XF0x+580xCg7ixzqNw
7aosBC15u3utYFtYVeuPet4eu4LEl7/EChziO5TSVmEJCjrCTljUol8aELqK
7LglkGSgkp+b/dsL8nBe14vrQh2/zIpevL7IsDR3vaLAsOfawwvl8PpKXUTE
TOk8zEqxBD0ffLJnlPBMviLTNjlOLlG9JyBsppTdiA2pNKhB/X0oBG6Zuqhn
GF6Uw+4Ej+UnMrbGzXhwI/HI4LIyG3dBvy9INpekiOLOb8XSa9pqbMcqjn7b
ovrUpRTtgH08117cLoUP49ptpe+2MF6FHAHVpjsGEBPU4FlXU5wTpbjuCSzR
PBTBrgI/BxZMboJKBLp3y9KipKt0WEnTYi0UWdrzOve63aS3uq3V7cuqS0CZ
iH+kTlhmw7c7rGq82bB01/fwi87CDG+I8mD1l2W7UW75Dg9msuOC71qT3t6y
0fa+raquSKq7rTJuu7nPcqkULv1r/Ixp1z1gWijxfES0c39XI7JuNisno+y4
clcFhF2bkri2rh+rlBCgxKqsnHUWOXvqMRc/trvUAzAFQbOicHq/10BZcK+B
HdJDDQ0vn8NYPS3Rnk3WzVHWnWHtMSAlCy7Z8PxlO4NDVvuQjozEVbbGmUIV
JoVzh1cN0Gvs0pf0ynI6L1nCS9TTMGcsX63ZfIx+du4wTdHEARnpPdIILI/I
po2lDAb8CdHbsYynlvcpaFcoZtlMrqtw3Vq0c/+079+6Rwt5rSWOk1ui9rcP
U87rfeu4SDjMvVGNMEcND8TXOcjadDBLiEm3SjnzbxYoWy/FNFJNx+sgbef4
P2RRas3aDP10623J3LW0a8veOV+jR3huLhMT2NbEjHsd8S1Rl+1H3LW2ckX8
W0IzvueFYdewvZ8PtTND0c0RJ0UZh+JeH8175EVF2qdxCeZ3xP4wQtBZYygu
YTibxf2VfCLq6byclrNrQhOyer3ROcjmkYSKjfTzi+PdnrIZdUL1zuY92RnH
zftEgx2FJFSQMIElfSS4CADVXMUVN5tKHUhfRHrOnj7jI/9LPwwVIcNJlLBH
ctx7l3jzrGxarSqKBdG28PW4CEZPBYiwq4Af4YmznJVwkMNoRk1UVRPAtDtX
tfOvRIl+w7TXesUjY1E9sNqC1JWlrQ9LmfY3ZLbayPJu+iUHRRx+8CNLP+U2
mIQ4d8qXxDTkRLogShtHUUZYNw+IXkgboK3554r9JOal38CdTcritSf3MK2u
xH370pkxad9LOkBN1svOrt7cczPzbADX38PagS6obTNAXI/LlGxxfS9pR7fZ
5323BsW7lUugnu5Uh60XoFEjmUauFklylYf+tbLxRZv77g5euXhgV2QbVJHz
4Obcfos5hMUh2RZg+r0M0U2MLm7E7Yw6HVEyGFIHruKLNjtD2r4U1/enT87F
iuG2ZU1yWvqpc20bXSpLjDXlx3BhrlDfs31TvIpevsIFRnK+qQWmaK7Bqlto
HxibFKfxc/Kc2+lEnMvLXuvWoGM3fUPXqAcIdJ03ueIqz67Qj57kvg7RwaVw
YduYlL8rSY1nLgXyi3ZbJih3tdSupVbThBW1NV7iCXLOc+pF91BQ5rScDc75
p96VnpAgBwYhs+zSTgLJaVss0i4Ld38GKxPyEVE43RLv5gRq+k5udw+iVXw/
U10FbovQoR1GT/h14g72zpSiorah2ujJjslXHFuuhErYeuXqb2ts/wf4DDqn
r5rwKmiyoLFwg4ocbNkB/Ut8sly8c4E3ns+4SV1PHaPaeXpYrbGftn/PokYM
yD3H2ixqw3g/sTp9p9aQEgeGJrSSCxxbW9vagom7iv6mrKZ4zYs6rHLvKgLl
FiuVlpzz2snR7V0Ezx4chwiXka29zNcVBR55Ah+MWq94vuGrtsR62HnZXmBa
gDZaXq0brgtmkvIrt4w0Em5lGq8mZVeEUAtWKBmWWAhRSz2DBbbUN9ajNgcP
iKoaayC5GWEAnWfgMUhsXJDyiN0qsYKWw40IhNvbAGS1T4JLJGIIZZgkgH0E
CTR+TbfU9U2trROWQCXrs1L31mklD/scpHaGXX8xhH5lhOO7Vnnp97O1sLV6
YaLfepaYjPbjjdfqqp3kquhJIXzRRB6CuhElg81QJNIe4rAYekvrFbPD3AUo
6PaRWgPRtpCJFqAdA3BKaSMRdZcnPiP3tN9/n9wdZ2bnlgXNIbdfNpLUjyWp
fOMgubHtvu+6GMjsTBexF935AuP05DWoIA3epWbMqYa8TxyLeY0teCmUiEKC
38Tya/gQ0weeHD776vZWkkhuau4QK2GMs3Ov9lzabnrMS7rAKu5I2LA+0kq7
g2TWhPHPo6SEnJ3bHvzkd9XcWM1n2MatWDD/1jAR6RAT4vkcfUX8yKpbF59Q
Do8dB5rr8C1gyomcAr3gwl4fxnltrM3j5+iRWVe8WYAHTI2A/2yJ0prkzM50
wRir/tLalqG1botdKbxvvTsjUj6TdwWpawvI6HxYVkMYgc/6AOMKOObVGhgu
58WYT59+D3MPL9+9fn36Emnk2cHTA6AR6blNAeSiaZT6LN5sQhSMzPXT6I1u
HBm1nhW0WlEo+Njz5QUyGOvWg9GTJMgHGovJmhLNTjjXvu+NU7M4JyK6cqyl
uaMKdu2Is7L3DSOcJSeJyb25XpJJp9VudP2YzIylnTuFa+8exbLCbjZ4qS9N
0HbFSuc1LlBOZbR0C5uL4EtWCW72QgwaR4RBy8OzarXu8C+HWDTXS5NVTDxk
b3ScVi6a9P4IP0djkT3IghG0bgl097s9JdnDOFNIwyr4hH/jz465xwQpDHob
seup4HUszjsu2lmvMCtw3cHCYF2/gmWRIp5v6ApgW/5EiBKdMO7GBJROXSi+
/hrJm/oky/nM9IbpngceJn1FF9XUSwo5OeLR/JpWomckhlHxa5BqqXkKu7Cr
mos+3E4aToEpkJBgiZhChlnEvQYL7j6YmTRjxDN9/Pp46OUPYgCSC9g9rMnV
zqQ66WmUJK24BQqWN8rlLXKXqLQ2YQmh9cgOLL6k+z0D1m3eezjR4M/7dtLk
S1BovB9Zkl3O7ZI23oefHuhwrnXDLXsqkhNZzuLtmxA13eSxwStFYV3inceD
rt8aKidEEYjF9VeLeky1NqzoUpkxZ+5jFIcvg8KgKrrAUHN1d2jZC6WJ9DDa
KREclSbNQBpfcTAWKQgvvIFnpAeRhdaKqaSZ6Td0K4lWurFt5r9mryrcihlc
XUAynU1t2tP397TbsN+3AzN1WnuTcDgieu7fnp68efXq9PWL0xeanpfa5sAZ
j+ldW24StcmJel0vnfw2utYluNAXWzf5F7um1o93e67ErBUWvSaFU29FBbv1
Op9sMrkkVO68mdFxgU8X9UbabQmx6hIDYtWHfWJNYkQX0IrndCj6ABuL6PIr
6M4nxFhTgCIxaTZ8a4B2ULdKLymX3ucJPidkb3bt0P0OANlG7LUm6tVqSr4A
ANX2Qm4Mok1Gl5O9Hsua7wvNx+8pcgDod/VNca3phElg7UkHpkSxoyusLMMk
t3yxaUvvKJIPQC6zK5dUclKpK7akc4dV45YAZCCMt6gt2nU4EOY5vLCUoF4J
S4R0nqQfXb3jHEQ3NRvLXW1UyjuZlqCm3R7LVPgYzOK/wQA6GbVI4Tp6I8E6
clewajmNh9p2yLeTaavMnqbVvNUnj4doTmXw3hQsgHazXBbAGCfZhwJUOnZg
YByATlzjFfGHbGQQ04DkotClDbbUGN+Bca01JibumrmBHAx7Jr0cYBjQNkAq
NehuvGxSqwr6uaSchDkGVDfARFziI8rUqbcrANIe5Zj6zlXv5ogkPoO+RMFQ
bqaBHwsPyki0uE3vQnXjuusTcOTj04vh4eOvsvGinnzIJuVqjsfJ9tEFm8vq
GeKtbTfAbD9m7/HL05NvHgJEIKkWlC3/sfuRBtp/LzWqrDN9fXBAnbs4wd8v
TjGgC1pmxX4sJlWMvAB7yPhu5tZOBwbJNU/JsPpzAoqlOpAMVPgCQTip16hV
8dVaDz99ujj/6uBg+OSrY7xGWzOjn42+3HfLNv1lZ/6yTy7fMgzlNd66Ajol
LJjSyRzrRQPdW5wkgAVX9KHmdCb6BQ8/AKF0/V4SfPOmySkT9/AZeyTiAl3n
qeQVEhoslvkZncoJCypvDzsAD+M19jcyvdUYiLF0vCKZ+DH7ZnS4r5SDTUZ4
SnNTTskdCYsZg2k148Pq6XVkn9gdUdjYLhCE7ivHqIxlI0wN17BHyIib/KZy
oSSvJK5SvLc+WuRzI5+TASVEJGZHAcgkLmANuLINDSGwNF6CZHj/4XCQfXic
Pbes40fY/r8cHT77YRA+Onx29OTxD+9H9suX7zXgHJpJ0kzdvoc9b5/Lov5y
ePTy14c/vAfaGhWjQcqq0M/Ka/cVfIPf/Sb8UIlHVmWjmenxJl3zIxG0G/bg
h+yzN8Vvjvzl4fs1WVXwgT0ah3wy7GD73hfCPp9n7lOc4v9kBx9/8+17tSU4
ENE6t1oUAcRrbeE1dHRQlw97Z7uc1th2e+gbb+7Yfzl6zPbkqYgGOn7W1vaZ
4lH2XqismP5IaLcM8DEuV9Z4Lrkf+LkgRttvtEf/+Z8It6Lgc4ab/jkLhv3s
4+WQcE0iV81+d6ikDU6fYl8w17HsHbYkSx4phcdfDfNXWFFMVLK+E1Dk1iJp
OZeFcDxGb2zxMacwv8vP1rCwZ8XBhHrkI3aZeewyvMp0P43Zox4qdyDQmwsO
auv1Ai5bjwPIhT5sBSir8+4JR5VuYFpJgccY/IYj4DaGJrm2wuwCtFMQcCZX
TQV38GFy0yn3qG2LyZoi+GpKoRyoOMbrCe/CXU05FCx4qr4vKnK5nwyU13sx
g8z1e27Whe20I6V9CzkP7Zoa+YqFgf1PqN2lTQW3NzYHZxJEhLMzvqUbMsPx
kA78ns3qHikx+gBr4IuomRRMEPgj86LWS1opwLUqhHtwF6JMb23GC3YJ777j
GeViShFzARebp0wKq/Y59XxQ4kYCeA33c/J01lpTtZFGrst6Yfs6eaYkOR9P
ufVCcMtjUBPVutoUl9Hda4Q0b+w9mVJorrqGbR/kgcfdNdut9ghvLylXtPo2
MqGdg4e6XXGegqTwbuntBKRz8PHJ4ZPHT548eRr2qJKeMXqjjNcwhhulbuu+
FDSZ0lttdpXGBk1KyFawnwYqVrLVwEt0zIpgYhOoMto7z17gJhfI8Aw/5c8F
GTjGXFy+PT1+9fDp0/2j7LvT4xenby+C94by53fAWo/AKpjXqElIUQk+Q8u1
ntQLlLmMseF6usJf2skcyA6ez7tu1dK7GDl9nj0SC1soZQTm+6OnT588wldc
itFzISx9q26u4AX21+KdjkPPOHme/f7wt1ncXvW5UtpACem3Gckk+OObPM+P
8vFkNBr95quvnx/B73pjgLe03x+GqHpxfHkco9RHlX/3HHyeaj4YX6Tw3KNX
/54E+enZ42dPnz179tXWuw+eS3Nrg7DhHXXbtt6H89+Bj6KyfMH5NzTX4SHD
pjfFwezw4Fyc2c9Rm6HVkS9XVCF2wxpvln/VaQDePo2ZbcAdoW963cI0jw8O
tr61iwr+c+tX+KdPHHd9EVLK8TcnQClPHh8SpaT/bKGfu5GDO7d11IikwrKC
7V9tpzHz6FfZ99o0KazB4XbyWlDCsQxOGP7Vo20LUbLbCspWWtsKeUiB6T/3
oktY6fHChrKHv9Ood+C+XK6xZTndozsmjc6NRsv+3z9Xom0h+FE4VWG2ZUig
wciaYHWyThf52rFtuLlanHAPJDs4CMKL7yyQKIjM2XJZTDHKg4o6xe+8axR2
1xV5AnaZ01U8UR+MYOFh01gthdjZyoE0AmWj6o2xzUs5ITnV7iE1jFMskK62
wNi7/dC4lBjKu6P4UKmdR+3NFLs7dUjliKotaW1FIrxS1ycweCE454g1ceB5
5PzeAs66wgtgYUc5x0WiQ3FeggFLgjyOfmtDXPUXbdjwt986FjV6zDaVvivO
CnUbrOreyPq0MGrSH4qQizoeNVE3nn0FTG68JtW61NRVG4X06xS04iDRTY86
6WlZYrgrqJLSnlq9VJDOjNV4fSy9fnleW84wozSoEA/uavR8sn1c5J10JgJC
PwRSf/LsadD3hJVWtEWciSYHUO4i/CWUHC/tOyWAFLJ/hEQMpt7y1XaAtn2y
M1cKRzh8/OSp/v/WUe5Q24DJp+VTMoMdSze8zkbWQ4+M3mfpSUj8Tbw3a3ed
ErSNd7oSKGwYh9kRrnXsBS3lu7CvofDu7S2DiOP6KO7V+DF3fUjVG5o4uK8X
SGM6FmdWq9s/vpGWmcY8aFsUcX1HJS65mDN+HB+MofK663fUTVNya1QsDwJ8
9EWb6GR9/OySSLRUX7D4tTZpHKc7um01qq0IzYNcUG/1Xg2vn/B0gWnQ6nbg
iLp24T3rW8KikI0L1xP6EGyCuC30wHJx0+t+qI4bW0Sd99q89MpzJiDGNnZK
46bEDDEvK8w5bjS9p6Jystqmx1P2oLtdxablk6fKVvTnnC9Q+hdk65ZLmzwv
gpxRFzYH1ID6+E8o5mFzkjGfdE7Xwsz0OMiJTaBZ+0fmyULVUeK6DSmBvyrv
gtP4cMYNnNWReY4+gVeX77KHr/KP5XK95Ly4ZdlSXPkdQLxvpmU7qckliR3C
5B/+xBTgxzvKes0Og8IB7Vntk5nr56Y1BZGzCwiRMrXLqncRV3SpCPVssjcT
2JUF0FNMLJdiDpeciS/SWblQB214UDCvQ365NbZUwK8fzMJ7SlxeKd8KJBkG
NBZyBYBwSOUORsqNGqwkVZomHoQdPGybEOptdh0URgi6PExhDifevE2ZFVhK
kY9RSMEMa3cIpAPOIl9XoEa9gDnyxbCeDdElVU400wH3RXsqB1xhvPGFnjoi
c88QoLi2o3vqfYrxTT2vtZfeGWT20ZuUaknxgryqq81S3esCluioSsbYIgyY
iVxRbgu6MIdQUkCkW7X+xtkoNqOlmsYJHqpfyiVxkgIDKES/Mmc/iHwJMsUl
lRzDAIVfX6WpTJS2YZW+VklhXl7NF9TYIl5vU7YfWDibLY2OHyBn53UcM3I4
kVWWJuvJ8pKzHt0EXvPEsUtfo+2UdhHcocNsydzZkdLtBJmXgCV6jLMr9FL7
flrf7b50wbZQccaAZNshvNpBwGC3r7FcE+dzVJZQeAG95o5XYV8Ff5eQ1IqP
pc3ZlQY4/XxL7c3t+c/hhJVX1tM/xs44m1VXA/tezaXyRQoTaM9xAMqW4Xyp
skUBLKj4l37W2PNEItntPux7XD3rKpHChB2kyIGk2FkWnPcLSChtmfwu1+sF
5tposQlRis2Y0hM4CJJX9CgTgRSTObXkEc54VfttBDUpy2hcTpOeXN/zVT6d
auG7/HUyB4p0bSeyC8qWdRPZpjsurxALpTj41LuWDKca/1UVBceFbFhOgcSE
RzK7414ZN5Sz4hd+Me8J/FXBLaQ239mrW3HaS/IQIXBUxO/KUgIHYcs1K5S5
QgUuUWK1p8ow92V+ZUVHNFinyethdikdZRwijGdyXV/IZFQLA6WjHnM1QwIB
rgsPxSA9/Gv/6wyPS77g2mDK/rJKDV46P6Muu2mylGsnmJk7flhlEX/X/Bub
y6iQw64hZQwkbXhArXrYiLkuqaDPln943H+UXWA/92CSli0a1ymJO2jasoi4
RQUtJiAzCciFg0qK/7pVj5WkHZsZpgcgXJKBJvLhm/Dk26mi2R82AT+Jzwx1
qjIhZ7DZ1O5GFc9icun8ztZCgWy3wDhsgyQar7HNg1fpKVotd1Hq350oCYLS
iCtu/h116w6bJctUXl2IB6svzl3GvVvjXWBRQy6ML86x3FdxYuIz4JmfzLop
wSAXCon2hmr64mI89iL52OJ0xSBXWK4Y6oor4muifgJ33HWnjgpml9a3jxVw
lVNmYoZqokxWVyewstdhRjAQNZxi/ThdcNNTDqbldOfHA4/reIREdvamsLWa
lFMin9h8Xn3J1XIhP5GOiDor+Q4lgGFS5xINMP9dr6dm0hV9H3yNkrwK1ydV
DBH7uYusopunPH3cul3aEkx4apsGjE7HH0gaee5r+eI9pxFt1o8lh9Y5Qm/y
zSDR+od4S8BCiGdpg1Ku39KWEHhk1ysuj82onzprFx4ChGkAzv6CIgtWcfjD
UfYge3N++jo7u7h4d3qUfUvlxphMlM1hKltX6/Vr1+QT7MhHKoEd7jENR/5m
254kEBqUeflXSWZe5lhqid0V7dLtSE9oJK8xU1lRohNlNJORVlJP8wdUu9O3
OjFL+5brPNE9oHfm0nNJDbqVLGB79LQAaGezXi/Vmd76brPihFspjAM2fa4B
VGoQtg8oxf6ur1HjeMs9LTZ72b/+5YeHlGFw9OjRzc3NCAHDZIFHqCJcVZQm
/whfGFJ72Hb/d5I1gZ7QXw/Tf36d+Gv87q9phM82edABx88t9J/J9Qu78xme
v9V7ZvGdXwyGJIppPlw5vYKaGP0l3KtfAgbE5icgM48mhh1s55BvaQMTa1E8
33vrysI8Utpj4jp3rbu9BZzbpHfEaxvTmQ2R2M6f0uoEmMDevUbcoxz3KLle
OwJ4tmQSv++DvsMD1PvvRYzLvAXTQf4z+jjvlgskyrdem5bW8mddEd93SKMU
3t1frp8Fsam3mqnK3Xmyh5qL+nT0DHnYX6hA7/zNy7OT//hh/6cdhB1/eiRx
5wdKt8F2aHziMzqqJ03JCZXb/nwOzhL+G2vl263v35/U/xErjZOTdA0TvY7K
dRr0jH59KzqzNsU4UTH5T19ptES7BteKvd9B/D4rXUXXnf3z99RPDfJXavcU
nyN/SdTp7VppyvHyz1ppwNstnxwSnwz5uwYX7sd4he1HpfD8o6oXXnHY/Vm/
17XBQzfB+/dxaMNe4V71sUfFR34ZK77u8ixG7iImqZ6ThivT+1bzba+Z3GoD
ie85qOczUT2fTXKYFoiArMOEJWxHX7foHkc3Sb1Sg45RPW3yGV8Juh4vMaQq
1wzjpeCuwLfhgM8YdOylX2T25z/viRfrz3/WLgc8IjuI/kmS8HNEhUkpBKc0
mOUeMufzUXSmeg8Szz7fdTBh3ExJzcJW1Y4oFD46Ni9SXCbl/VaYHcdyslYq
OR/Krjo/B9GzEup+tnPSLazN4zB4cL2Tv4XHJPmGMBU/L8TyEk3KRL20z06c
xdKWH7nXDyf1W+sENdZg4D1jCdIxIzLHP33Ct4cvMFkQCxPDFj7YnYI70wAS
wQg1ik/baZnUTviFyl8ICr1iaA2zTLST2WfaGYDJ5sDwTmXZn6jYNkl8PWrD
zU7l5X3ODj7OZsXTgwMmiFQHJfvOIb8TtboWeOSdx+4db4jwnSf8Tq9Jn//O
U/+dcCT7zpeZT1P+1m81ScK9BQLBxD7bEwopAuiEbu9QbuqiabJL4vPDrByy
NI+MYcMP/nLEDpuW3c0PwdRd5hVlrdkmEJYYsWRoLfS0j+EW0XJpmIBujTmh
pkSUVtrUeBkdvXR2evktVXh0+aSjJyzK/lAW3Ywy6Q3xLfoJ/WuIrHZFPQWf
70kziD1c9QIEy/O9Wb5oC0QKEAw1akd/wbHtEMnC69ODPHxyC6MySy+m3hiX
ADJ3Enq5nuQtagbTdTHI3m6wvCFflouOnGwYFC+bv+bZv/3f/5kvCmyTpygu
Gy6MbTlqFrix/h8Y3HVECdsAAA==

-->

</rfc>
