<?xml version="1.0" encoding="us-ascii"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.17 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC4303 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4303.xml">
<!ENTITY RFC8750 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8750.xml">
<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY I-D.pwouters-ipsecme-multi-sa-performance SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.pwouters-ipsecme-multi-sa-performance.xml">
<!ENTITY I-D.mrossberg-ipsecme-multiple-sequence-counters SYSTEM "https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mrossberg-ipsecme-multiple-sequence-counters.xml">
<!ENTITY SELF "[RFCXXXX]">
]>


<rfc ipr="trust200902" docName="draft-ponchon-ipsecme-anti-replay-subspaces-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="IPsec anti-replay subspaces">IPsec and IKE anti-replay sequence number subspaces for traffic-engineered paths and multi-core processing</title>

    <author initials="P." surname="Ponchon" fullname="Paul Ponchon">
      <organization>Cisco Meraki</organization>
      <address>
        <email>pponchon@cisco.com</email>
      </address>
    </author>
    <author initials="M." surname="Shaikh" fullname="Mohsin Shaikh">
      <organization>Cisco Meraki</organization>
      <address>
        <email>mohsisha@cisco.com</email>
      </address>
    </author>
    <author initials="P." surname="Pfister" fullname="Pierre Pfister">
      <organization>Cisco Meraki</organization>
      <address>
        <email>ppfister@cisco.com</email>
      </address>
    </author>
    <author initials="G." surname="Solignac" fullname="Guillaume Solignac">
      <organization>Cisco Meraki</organization>
      <address>
        <email>gsoligna@cisco.com</email>
      </address>
    </author>

    <date year="2023" month="March" day="13"/>

    <area>Applications</area>
    <workgroup>ipsecme</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document discusses the challenges of running IPsec with anti-replay in multi-core environments where packets may be re-ordered (e.g., when sent over multiple IP paths, traffic-engineered paths and/or using different QoS classes). A new solution based on splitting the anti-replay sequence number space into multiple different sequencing subspaces is proposed. Since this solution requires support on both parties, an IKE extension is proposed in order to negotiate the use of the anti-replay sequence number subspaces.</t>



    </abstract>



  </front>

  <middle>


<section anchor="intro"><name>Introduction</name>

<t>The IPsec and IKE protocol suite is very commonly used in secure overlay networks, often interconnecting thousands or tens of thousands of sites. Leveraging the high core-counts and multi-uplinks (e.g., multiple fiber/cable, cellular or MPLS uplinks) capabilities of modern systems is important to bring greater throughput, availability and quality of service.</t>

<t>Such scale and multi-paths requirements conflict with how anti-replay currently works. This document first describes the problems related to running IPsec with anti-replay in conjunction with traffic-engineered paths or multi-core systems, and how existing solutions are not sufficient to address these challenges. An IPsec extension is then defined. It divides the IPsec sequence number space into multiple subspaces. Finally, an IKE extension is defined in order to enable this option only when both tunnel endpoints support it.</t>

</section>
<section anchor="problem"><name>Problem Statement</name>

<t>While the problem is explored in more detail in <xref target="I-D.mrossberg-ipsecme-multiple-sequence-counters"/>, this section will highlight the key issues associated with running IPsec with anti-replay in multi-core systems and environments where traffic-engineering is used, as well as the limitations of current solutions.</t>

<t>Scaling the current anti-replay mechanism to run on multiple cores concurrently shows performance limitations:
- When receiving a packet, preventing the same IPsec packet from being accepted by two different cores in parrallel requires constant synchronization between the cores.
- When transmitting a packet, sequence numbers must be allocated efficiently, and packets must be transmitted without too much re-ordering, as to not exceed the receiver&#39;s anti-replay window size. This also ends-up requiring locks and synchronization between cores.</t>

<t>A commonly used alternative is to assign each Child SA to a given core, but that limits the throughput that is achievable by a single tunnel and adds a performance overhead associated with passing packets across cores.</t>

<t>These restrictions are discussed in <xref target="I-D.pwouters-ipsecme-multi-sa-performance"/>, which mainly focuses on high-throughput IPsec tunnels, but the problem also arises with small tunnels since multiple inner flows processed by multiple threads often need to be transmitted on the same tunnel (causing multiple threads to need to access shared resources).</t>

<t>A possible solution to leverage the multi-core capability of the IPsec peers for a given tunnel would be to allocate one Child SA per core. However, combined with QoS classes and multi-path capabilities, this approach shows scalability issues with both the IKE and IPsec implementations:</t>

<t><list style="symbols">
  <t>Increased number of IKE negotiations and re-key operations.</t>
  <t>Increased IKE memory usage.</t>
  <t>Data-plane performance degradation due to the use of a larger number of keys.</t>
  <t>Data-plane reduced number of connected peers, due to a hard limit to the number of supported Child SAs.</t>
  <t>When PFS is enabled, the overhead of each Child SA negotiation is increased due to additional Diffie-Hellman operations.</t>
</list></t>

<t>Finally, in situations where packet reordering is present, such as with QoS or multiple uplinks, slower or lower priority packets may fall outside of the anti-replay window and be dropped. Using an extraordinarily large window size causes both performance and scalability limitations.</t>

</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

<t>The key words &quot;<bcp14>MUST</bcp14>&quot;, &quot;<bcp14>MUST NOT</bcp14>&quot;, &quot;<bcp14>REQUIRED</bcp14>&quot;, &quot;<bcp14>SHALL</bcp14>&quot;, &quot;<bcp14>SHALL
NOT</bcp14>&quot;, &quot;<bcp14>SHOULD</bcp14>&quot;, &quot;<bcp14>SHOULD NOT</bcp14>&quot;, &quot;<bcp14>RECOMMENDED</bcp14>&quot;, &quot;<bcp14>NOT RECOMMENDED</bcp14>&quot;,
&quot;<bcp14>MAY</bcp14>&quot;, and &quot;<bcp14>OPTIONAL</bcp14>&quot; in this document are to be interpreted as
described in BCP14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

</section>
<section anchor="solution"><name>Multiple sequence number subspaces</name>

<t>Processing packets associated with a single Child SA on multiple cores and using a single Child SA on multiple paths or with multile QoS classes suffer from limitations due to the anti-replay mechanism.</t>

<t>As a result, this section describes a solution which modifies the anti-replay mechanism by allowing to split the 64 bits (with Extended Sequence Number, ESN) anti-replay sequence number space into multiple subspaces. Each core, path, or QoS class, or any combination of those, can then use their own unique anti-replay sequence number subspace. The changes needed to the ESP header and IPsec protocol are described in <xref target="SN-subspace"/>, <xref target="sender-spec"/> and <xref target="receiver-spec"/>.</t>

<t>To avoid potential issues with non-standard extensions of IPsec ESP, this solution modifies only the field related to the anti-replay mechanism (i.e., the sequence number) and not the SPI field, which is intended to identify the Child SA. An IKE extension is presented in <xref target="ike-negotiation"/> to coordinate the use, or not, of this extension, which requires both IPsec peers to implement it.</t>

<section anchor="SN-subspace"><name>Sequence number subspace encoding in IPSec</name>

<t>This document extends the 32-bit field of the sequence number in the ESP header to a 64-bit field, which is in turn divided into two sub-fields:</t>

<t><list style="symbols">
  <t>The higher order 16 bits contain the new sequence number subspace ID.</t>
  <t>The lower order 48 bits continue to serve as the sequence number.</t>
</list></t>

<figure><artwork><![CDATA[
  0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |               Security Parameters Index (SPI)                 |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |          Subspace ID          |        Sequence Number        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                        Sequence Number                        |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  |                    Rest of the ESP payload

]]></artwork></figure>

<t>While the reduced usage of subspaces due to the restriction of the extended sequence number to 48 bits is a consideration, it is estimated that a 1 Tbps would exhaust a subspace in over 938 hours. This is for ethernet frames of 1500 bytes, T = 2^48 (pkts) * 1500 (B/pkt) * 8 / 10^12 (bps) = ~3.4 * 10^6 seconds = ~938 hours.</t>

</section>
<section anchor="sender-spec"><name>Sender Behavior</name>

<t>The sender <bcp14>MAY</bcp14> set the sequence number subspace ID to any value. For example, the sender would use different values per path or per processing core.</t>

<t>The sender <bcp14>MUST</bcp14> maintain one sequence number counter per sequence number subspace that it makes use of. But the sender <bcp14>MAY</bcp14> use only some (and as few as a single one) of the available 65,536 subspaces.</t>

<t>When transmitting a packet, the sender <bcp14>MUST</bcp14> use the sequence number counter associated with the sequence number subspace in use for that packet. The lower-order 48 bits of the sequence number counter are placed in the sequence number field, as specified in <xref target="RFC4303"/>.</t>

</section>
<section anchor="receiver-spec"><name>Receiver Behavior</name>

<t>The receiver <bcp14>MUST</bcp14> maintain one anti-replay window and counter for each sequence number subspace being used.</t>

<t>When receiving a packet, the receiver <bcp14>MUST</bcp14> use the anti-replay window and counter associated with the sequence number subspace identified with the subspace ID field.</t>

<t>Note: Since the sender may decide to only use a subset of the available subspace values, receivers <bcp14>SHOULD NOT</bcp14> allocate all the possible anti-replay windows per peer by default. Two mitigation mechanisms may be used to reduce the number of anti-replay windows:</t>

<t><list style="symbols">
  <t>The receiver <bcp14>SHOULD</bcp14> limit the number of allocated anti-replay windows to the number of subspaces negotiated during the IKE Child SA creation exchange, as specified in <xref target="ike-negotiation"/>.</t>
  <t>The receiver <bcp14>MAY</bcp14> reactively allocate an anti-replay window when receiving the first packet for a given subspace, since the sender may decide to not use all of the available values. When doing so, the receiver <bcp14>SHOULD</bcp14> first check the authenticity of the packet before allocating the new anti-replay window.</t>
</list></t>

</section>
<section anchor="ESN"><name>Extended Sequence Numbers (ESN) considerations</name>

<t>Due to the reduction of the sequence number space by using the 16 higher order bits of the field, using a 32-bit sequence number field is not a possibility. For instance, on a 1Gbps with 1500B ethernet frames, it would take less than one second for the sequence number to loop. Such a small periodicity would make it impractical to keep the peers of the IPsec tunnel in sync.</t>

<t>As such, the peers <bcp14>MUST</bcp14> use an explicit Extended Sequence Number (ESN) as a sub-second period for a resync operation (as defined in appendix A3 of <xref target="RFC4303"/>) would not be possible.</t>

</section>
<section anchor="ike-negotiation"><name>Negotiating sequence-number subspaces using IKE</name>

<t>To negotiate the use of sequence number subspaces for use with IPsec ESP, a new anti-replay subspaces transform (<xref target="transform-substruct"/>) is defined with two attributes:</t>

<t><list style="symbols">
  <t>The number of sequence number subspaces the sender is capable of using is indicated by the &#39;Sequence number subspaces supported&#39; attribute, which is 2 bytes long (<xref target="supported-attribute"/>).</t>
  <t>The &#39;Sequence number subspaces requested&#39; attribute indicates the number of sequence number subspaces the sender prefers to use, and is also 2 bytes long (<xref target="requested-attribute"/>).</t>
</list></t>

<t>If both attributes are set to 0, the sender does not support sequence number subspaces.
The requested value <bcp14>MUST</bcp14> be lower than the supported value.</t>

<t>During the CREATE_CHILD_SA exchange, the sender and receiver negotiate the use of this transform. The sender indicates the number of subspaces it supports and prefers to use, while the receiver decides on the number of subspaces to use based on the sender&#39;s capabilities. This negotiation mechanism allows for flexibility in the number of subspaces used and can help optimize the performance of IPsec in different environments.</t>

<t>With a single Child SA negotiated between the two IPsec peers, the failure model is clean, as all requested subspaces are either available or none of them.</t>

<section anchor="transform-substruct"><name>Anti-replay subspaces transform</name>

<figure><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | Last Substruc |   RESERVED    |        Transform Length       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |Transform Type |   RESERVED    |          Transform ID         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   ~                      Transform Attributes                     ~
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>Transform Length (2 bytes), set to 16 bytes with the two attributes each taking 4 bytes</t>
  <t>Transform Type (1 byte) TBD</t>
  <t>Transform ID (2 bytes) TBD</t>
</list></t>

</section>
<section anchor="supported-attribute"><name>&#39;Sequence number subspaces supported&#39; attribute</name>

<figure><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |1|       Attribute Type        |     AF=1  Attribute Value     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>AF (1 bit), set to 1 for Type/Value (TV) format</t>
  <t>Attribute Type (15 bits) TBD</t>
  <t>Attribute Value (2 bytes), any value between 0 and 65,535</t>
</list></t>

</section>
<section anchor="requested-attribute"><name>&#39;Sequence number subspaces requested&#39; attribute</name>

<figure><artwork><![CDATA[
                        1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |1|       Attribute Type        |     AF=1  Attribute Value     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>AF (1 bit), set to 1 for Type/Value (TV) format</t>
  <t>Attribute Type (15 bits) TBD</t>
  <t>Attribute Value (2 bytes), any value between 0 and the supported number of subspaces</t>
</list></t>

</section>
</section>
<section anchor="solution-analysis"><name>Solution Analysis</name>

<t>As described in <xref target="problem"/>, anti-replay comes with implementation and scalability challenges when running in environments where IPsec peers may leverage multiple QoS policies to send packets or multiple cores to process them.</t>

<t>Since the anti-replay mechanism seems to be the source cause of these observed challenges, this document provides a solution which relies on a small and optional change at the anti-replay level.</t>

<t>By using sequence number subspaces, IPsec peers may:</t>

<t><list style="symbols">
  <t>use different subspaces for different cores, which allows distributing a Child SA between cores to increase performance</t>
  <t>use different subspaces for different QoS classes or different paths, which avoids unwanted drops due to potential reordering of packets, either at the egress or during its flight.</t>
  <t>combine the above per-QoS-queue, per-path and per-core approaches without multiplying the number of required Child SAs.</t>
</list></t>

<t>The effectiveness of the subspace mechanism can be further improved with smart NICs or multiple paths to efficiently steer packets to different cores on the receiver side. However, even without these capabilities, sequence number subspaces still provide benefits for IPsec tunnels. Without subspaces, IPsec tunnels are often restricted to a single core due to the need for locking mechanisms, which can cause significant overhead. With subspaces, it is still possible to distribute the subspaces between cores by resteering packets to increase performances.</t>

<t>In scenarios where NATs are used to modify IP addresses or ports, the use of multiple uplinks on a single IPsec tunnel may not be feasible without additional IKE negotiation to perform NAT traversal. As a result, using multiple uplinks is recommended only in scenarios where NATs are not present.</t>

</section>
</section>
<section anchor="security"><name>Security Considerations</name>

<t>The sequence number is used by the anti-replay mechanism to ensure a packet could not be accepted twice by the receiver. This prevents an attacker from trying to replay one or multiple packets from an IPsec tunnel.</t>

<t>In this proposal, a single Child SA is associated with multiple anti-replay windows and counters. If a packet is replayed, the sequence number subspace ID remains the same since the Subspace ID field is authenticated. As a result, the receiver will use the same anti-replay state when processing the replayed packet as the one used when the first packet was initially received. This ensures that a replayed packet will be detected and dropped by the receiver.</t>

<t>The use of a subspace ID as part of the 64-bit sequence number ensures that the usage limit of cryptographic materials is evenly distributed among the subspaces without the need for an additional mechanism. This means each of the 2^16 subspaces can encrypt 2^48 packets, fully utilizing the 2^64 usage limits of the cryptographic keys.</t>

</section>
<section anchor="implementation"><name>Implementation Considerations</name>

<t>When a single sequence number space is used within a given Child SA, encryption and decryption operations must always happen on the same core (locking anti-replay structures or using contended atomic operations has a dramatic performance hit).</t>

<t><list style="symbols">
  <t>On reception, this requires packets which are received (and load-balanced to cores) to be often resteered to a different thread for processing.</t>
  <t>On transmisson, multiple flows, processed by different cores, need to be transmitted using the same Child SA. This requires the packets to be resteered to the thread in charge of the given Child SA.</t>
</list></t>

<t>To avoid the performance degradation caused by packet resteering, each thread may use its own sequence number subspace:</t>

<t><list style="symbols">
  <t>On transmission, the core will always select the subspace it is assigned when generating the ESP header.</t>
  <t>On reception, the subspace ID could be used to load-balance the packets to their proper thread.</t>
</list></t>

<t>Similarly, when multiple paths are used:</t>

<t><list style="symbols">
  <t>On transmission, a different sequence number subspace is used for each packet path. Ensuring that out-of-order packets are not dropped by the anti-replay mechanism.</t>
  <t>On reception, the 5-tuple based packet steering would provide a decent level of load-balancing between threads, since different IP paths would use different 5-tuples.</t>
</list></t>

<t>If a combination of both multi-path and multi-core load-balancing is needed, the subspace field could be used partly to encode a path ID, partly to encode a core ID. But this is purely implementation specific and does not require coordination between the peers.</t>

<section anchor="initialization-vector-iv-considerations"><name>Initialization Vector (IV) Considerations</name>

<t>Depending on the cryptographic mode of operations, the Initialization Vector (IV) comes with specific requirements.</t>

<t>Some modes (e.g., CBC) make use of random IV values. When implementing this specification, each thread independently generates its independent stream of random values, ensuring the IV randomness property. Care must be taken as to limit the global number of transmitted packets using the same Child SA in order to avoid birthday paradox attacks. A lockless counter, or batched token bucket mechanism, may be used to efficiently implement this process without performance degradation.</t>

<t>Other cryptographic modes (e.g., GCM) do not have randomness requirements over the IV, but the IV values must only be used once. RFC4106 Section 3.1 states that &quot;The most natural way to implement this is with a counter, but anything that guarantees uniqueness can be used, such as a linear feedback shift register (LFSR).  Note that the encrypter can use any IV generation method that meets the uniqueness requirement, without coordinating with the decrypter.&quot; . One simple way to implement this specification is to divide the IV into a subspace field, which reuses the ESP sequence number subspace value, and a variable IV part, which is simply incremented for each encrypted packet.
To ensure compatibility with implicit IVs from <xref target="RFC8750"/>, only the 48-bit sequence number field must be initialized to zero, while the 16-bit subspace ID can be used for its intended purpose.</t>

<t>Author&#39;s note: Are there other cryptographic modes with different requirements over the IV ?</t>

</section>
</section>
<section anchor="operational"><name>Operational Considerations</name>

<t>TBD</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>TBD</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>

&RFC4303;
&RFC8750;
&RFC2119;
&RFC8174;


    </references>

    <references title='Informative References'>

&I-D.pwouters-ipsecme-multi-sa-performance;
&I-D.mrossberg-ipsecme-multiple-sequence-counters;


    </references>



  </back>

<!-- ##markdown-source:
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
4h45VbvqsItCeDumrFQN4zWZD5L3bDKDNQQ+7lNP7gcjZbQBUKwSlpebFOyu
q6aSkdB2bNjVSUq6YTVDX97eqi+UiLC6UImsrymiIGMpIOaVbLL2zMJLQCjJ
Zia7kUGWlFQ2Nkvqz57OiZlSfdqvNiyFoPH6osmDbMubkVdz4tyJ7VThwNXP
ySfE45ymQCM0NWzxkd6HrHxJgx4B2u+g/9TFekcZ6h8+R9noTglKkEi0Nzcu
G0rMtbzlRiIFYcAq3zBUIYdBMOJFH30wyJGY3CAEqkK2vnUIqQQmfLBYXyBt
K1TVYqy4qUD7HRMYuUUSxyKVkSm4MpiaL6hXyGbIu/HujTELkTiniZ3tB7/Z
QAXhVZlJVYZqvcPkhehqufhKXYCYY5saeC2QYI2czC9NiPVGAeiIydraNMJ8
Z8OdKollbj+o40OiNglhu36lJJRJ6wTJHQfTJqsI29xr9TYROjmP+8d9h/CZ
OjriMsfGDp6HW0XpIVaUpNah1wyufYfRC9Ww1c79ffzCuXpTwzKIK0nDggQt
+HrdAJ9PlgC70VEn/nUriYlvwqi8T1TwqoR3nIPnVlz5RCohX2yrM7h2D+SL
lp4knT8QNA71xtBYXnx8FJ/G8oKnfmAeqooggejMEwl1/eDyKYtf1Gbqqypc
mCFAEXad+2TH2XtkD86nUqZpZcFIjmF+pfY6GDSvjPN9MtIz8kDjl8QtP6kE
BjHTSShXsG8R7BJ2oSRjIN8aw+jJu7Pjq7M/nnx7/ur0j4ikbQBNCJMdOh9g
trSs2URPBeQGHdomg7bhLq5YCtN9xt8liaknQgKmC9u6m0aVt9uewXY9X7jO
7qdPGtMttrZwyIVkMdtpYT7YsB+6fV7pJCDwqWnHo1hwp9CctqXEoyZ7+6Hc
acskSUtbYwgNb67pJ6gobfIgu09KgiLGKQAE9e5Rx1vBRl0YXTJGojjS6lG7
ClJSYymEJfiDS5Nl2LOjEv7jx4/V8Uec1v3jTT6rU3vYVhT5rLrYL1AY+0Uq
MOpH9UoDfF36tXJJ5t3Z5dm792dcmIolmqvIo1emvIaY21LQL0RJO8PVamG2
U5LSklTPfkFKton4E/+Ykp8332tJP2697Ka/n38xSv56nqSVty/XNWHHR5jd
YYgVVL/mmBOT0m6Mlwwb2JJc+xN5tjMya8DOPt/ZVVcvTjt3IfU4J99k2/7M
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

-->

</rfc>

