<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-tahiliani-tsvwg-fq-pie-01" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="FQ-PIE">Flow Queue PIE: A Hybrid Packet Scheduler and Active Queue Management Algorithm</title>
    <seriesInfo name="Internet-Draft" value="draft-tahiliani-tsvwg-fq-pie-01"/>
    <author initials="M. P." surname="Tahiliani" fullname="Mohit P. Tahiliani">
      <organization>National Institute of Technology Karnataka</organization>
      <address>
        <postal>
          <street>P. O. Srinivasnagar, Surathkal</street>
          <city>Mangalore, Karnataka - 575025</city>
          <country>India</country>
        </postal>
        <email>tahiliani@nitk.edu.in</email>
        <uri>http://tahiliani.in</uri>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <area>Web and Internet Transport</area>
    <workgroup>Transport and Services Working Group</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 65?>

<t>This document presents Flow Queue Proportional Integral controller Enhanced (FQ-PIE), a hybrid packet scheduler and Active Queue Management (AQM) algorithm to isolate flows and tackle the problem of bufferbloat. FQ-PIE uses hashing to classify incoming packets into different queues and provide flow isolation. Packets are dequeued by using a variant of the round robin scheduler. Each such flow is managed by the PIE algorithm to maintain high link utilization while controlling the queue delay to a target value.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mohittahiliani.github.io/draft-tahiliani-tsvwg-fq-pie/draft-tahiliani-tsvwg-fq-pie.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-tahiliani-tsvwg-fq-pie/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Transport and Services Working Group Working Group mailing list (<eref target="mailto:tsvwg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/tsvwg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/tsvwg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mohittahiliani/draft-tahiliani-tsvwg-fq-pie"/>.</t>
    </note>
  </front>
  <middle>
    <?line 69?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Flow Queue Proportional Integral Controller Enhanced (FQ-PIE) combines flow queuing with the PIE (Proportional Integral controller Enhanced) <xref target="RFC8033"/> Active Queue Management (AQM) algorithm to provide flow isolation and reduce bufferbloat by controlling queue delay. This is similar to how Flow Queue Controlled Delay (FQ-CoDel) <xref target="RFC8290"/> integrates flow queuing with the CoDel (Controlled Delay) AQM algorithm <xref target="RFC8289"/>.</t>
      <t>When a packet is enqueued, it is classified into different queues to ensure isolation between flows. While the goal of flow queuing is to assign a unique queue to each flow, flows can instead be hashed into a set of buckets using a hash function, where each bucket corresponds to its own queue. The PIE AQM operates independently on each of these queues, enabling each flow to receive appropriate congestion signals either implicitly (via packet drops) or explicitly (via mechanisms such as Explicit Congestion Notification (ECN) <xref target="RFC3168"/>). For dequeuing, FQ-PIE employs the Deficit Round Robin (DRR) based scheduler described in <xref target="RFC8290"/>, which ensures fair packet scheduling across the different queues.</t>
      <t>FQ-PIE has been incorporated into the mainline Linux kernel as a queuing discipline (qdisc) <xref target="LINUX-FQ-PIE"/> and is supported by several Linux distributions. Additionally, an implementation of FQ-PIE is available in the ns-3 network simulator.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>This document uses the terms defined in Section 1.1 of <xref target="RFC8290"/> and Sections 4 and 5 of <xref target="RFC8033"/>.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="the-fq-pie-algorithm">
      <name>The FQ-PIE Algorithm</name>
      <t>The FQ-PIE algorithm consists of two main components: (i) flow queuing, which isolates competing flows by treating flows that build queues differently from those that do not, and (ii) the PIE AQM algorithm, which manages each queue and maintains a target queue delay (recommended as 15 ms in <xref target="RFC8033"/>). Flow queuing works by classifying incoming packets into different queues during the enqueue phase and then scheduling outgoing packets from these queues during the dequeue phase. The PIE algorithm, however, only operates during enqueue.</t>
      <t>The details of flow queuing and the PIE algorithm are not covered here; for more information, please refer to <xref target="RFC8290"/> and <xref target="RFC8033"/>, respectively.</t>
      <section anchor="enqueue">
        <name>Enqueue</name>
        <t>The packet enqueue process is described as follows: first, the incoming packets are classified into different queues by hashing the 5-tuple, which includes the protocol number, source and destination IP addresses, and source and destination port numbers, similar to the approach used in FQ-CoDel.</t>
        <t>Next, the packet is passed to the PIE algorithm, which uses a drop probability to determine whether the packet should be enqueued or dropped, as outlined in <xref target="RFC8033"/>. This drop probability is updated periodically (every 15 ms, as per <xref target="RFC8033"/>) based on the current queue delay’s deviation from the target delay and whether the delay is trending up or down.</t>
        <t><xref target="RFC8033"/> presents two methods for calculating the current queue delay: one uses Little’s Law, estimating delay based on the queue length and the average dequeue rate; the other takes direct measurements using timestamps, as implemented in CoDel and FQ-CoDel. However, experimental studies on the PIE algorithm <xref target="REVISIT-PIE"/> indicate that while the dequeue rate is intended to estimate the transmission rate of packets over the outgoing link, it may instead reflect the rate at which packets move from the host stack (e.g., Linux qdisc) to the device driver’s transmission ring. Additionally, in FQ-PIE, queue delay estimates from Little’s Law can be unreliable, as it’s challenging to calculate an accurate per-queue dequeue rate. Consequently, the FQ-PIE algorithm <bcp14>SHOULD</bcp14> calculate the current queue delay using direct measurements with timestamps.</t>
        <t>It is important to note that the timestamping approach provides a "per-packet queue delay," while the drop probability is calculated periodically (every 15 ms, as specified in <xref target="RFC8033"/>). Therefore, the FQ-PIE algorithm <bcp14>MAY</bcp14> use the queue delay value from the most recently dequeued packet when calculating the drop probability.</t>
        <t>At the time of writing this document, both the Linux and ns-3 implementations use timestamps to calculate the current queue delay and consider the measurements from the most recently dequeued packet when calculating the drop probability. Additionally, both implementations offer an option to use the dequeue rate estimation technique based on Little’s Law.</t>
        <t>Lastly, if an incoming packet arrives when the total number of enqueued packets has already saturated the queue capacity, FQ-PIE drops the packet without further processing. In contrast, FQ-CoDel identifies the queue with the largest current byte count (i.e., a "fat flow") when the queue capacity is saturated and drops half of the packets from this queue (up to a maximum of 64 packets, as specified in Section 4.1 of <xref target="RFC8290"/>). FQ-PIE does not adopt this approach for the reasons explained below.</t>
        <t>Since CoDel performs its queue control operations during the dequeue phase and does not drop incoming packets until the queue is full, it tends to fill its queues more quickly than PIE, which drops packets randomly during the enqueue phase. This is especially true when CoDel has just entered the dropping phase, as it takes time to ramp up its packet dropping frequency. Therefore, the strategy of dropping half of the packets from a fat flow's queue suits FQ-CoDel but is not appropriate for FQ-PIE. Dropping packets in bulk might lead to underutilization of link capacity, as FQ-PIE already enforces queue control during the enqueue phase.</t>
      </section>
      <section anchor="dequeue">
        <name>Dequeue</name>
        <t>The packet dequeue process in FQ-PIE is similar to that in FQ-CoDel, where a DRR-based scheduler is used to dequeue packets from each queue. The key difference is that in FQ-CoDel, CoDel operates during this phase, whereas in FQ-PIE, PIE operates during the enqueue phase. The method for obtaining direct measurements of per-packet queue delay is the same in both FQ-PIE and FQ-CoDel, and is performed during the dequeue phase.</t>
      </section>
      <section anchor="ecn-support">
        <name>ECN Support</name>
        <t>FQ-PIE <bcp14>MAY</bcp14> support ECN by marking ECN-Capable Transport (ECT) packets <xref target="RFC3168"/> instead of dropping them, in accordance with the recommendations in Section 5.1 of <xref target="RFC8033"/>. Both implementations, Linux and ns-3, comply with these recommendations at the time of writing this document.</t>
      </section>
    </section>
    <section anchor="scope-of-experimentation">
      <name>Scope of Experimentation</name>
      <t>The design of the FQ-PIE algorithm as described in this document has been a part of the Linux kernel since version 5.6 (released on March 29, 2020) and ns-3 network simulator since version ns-3.34 (released on July 14, 2021). The following aspects can be explored for further study and experimentation:</t>
      <ul spacing="normal">
        <li>
          <t>The scenarios similar to those summarized in Figure 4 of <xref target="RFC7928"/> <bcp14>MAY</bcp14> be considered for an in-depth experimentation of FQ-PIE.</t>
        </li>
        <li>
          <t>Interactions between flow queuing and new congestion control algorithms, such as Bottleneck Bandwidth and Round-trip propagation time (BBR) <xref target="I-D.draft-ietf-ccwg-bbr"/>.</t>
        </li>
        <li>
          <t>Different packet drop probability thresholds to switch from marking packets to dropping packets.</t>
        </li>
        <li>
          <t>Evaluation of the enhancements to the PIE algorithm described in Section 5 in <xref target="RFC8033"/> to decide which enhancements are suitable for deployment with FQ-PIE.</t>
        </li>
        <li>
          <t>Effectiveness of FQ-PIE in terms of providing isolation and minimal latency for low volume traffic (short flows) such as web applications, instant messaging applications, interactive applications and IoT applications.</t>
        </li>
        <li>
          <t>Different hashing mechanisms to improve the overall working of flow queuing.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The FQ-PIE algorithm introduces no specific security exposures. The flow queuing aspect of the FQ-PIE algorithm is the same as FQ-CoDel, and hence has similar advantages from the security perspective as outlined in Section 8 of <xref target="RFC8290"/>. The PIE aspect of the FQ-PIE algorithm is the same as described in <xref target="RFC8033"/> that does not have any security exposures.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8033">
          <front>
            <title>Proportional Integral Controller Enhanced (PIE): A Lightweight Control Scheme to Address the Bufferbloat Problem</title>
            <author fullname="R. Pan" initials="R." surname="Pan"/>
            <author fullname="P. Natarajan" initials="P." surname="Natarajan"/>
            <author fullname="F. Baker" initials="F." surname="Baker"/>
            <author fullname="G. White" initials="G." surname="White"/>
            <date month="February" year="2017"/>
            <abstract>
              <t>Bufferbloat is a phenomenon in which excess buffers in the network cause high latency and latency variation. As more and more interactive applications (e.g., voice over IP, real-time video streaming, and financial transactions) run in the Internet, high latency and latency variation degrade application performance. There is a pressing need to design intelligent queue management schemes that can control latency and latency variation, and hence provide desirable quality of service to users.</t>
              <t>This document presents a lightweight active queue management design called "PIE" (Proportional Integral controller Enhanced) that can effectively control the average queuing latency to a target value. Simulation results, theoretical analysis, and Linux testbed results have shown that PIE can ensure low latency and achieve high link utilization under various congestion situations. The design does not require per-packet timestamps, so it incurs very little overhead and is simple enough to implement in both hardware and software.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8033"/>
          <seriesInfo name="DOI" value="10.17487/RFC8033"/>
        </reference>
        <reference anchor="RFC8290">
          <front>
            <title>The Flow Queue CoDel Packet Scheduler and Active Queue Management Algorithm</title>
            <author fullname="T. Hoeiland-Joergensen" initials="T." surname="Hoeiland-Joergensen"/>
            <author fullname="P. McKenney" initials="P." surname="McKenney"/>
            <author fullname="D. Taht" initials="D." surname="Taht"/>
            <author fullname="J. Gettys" initials="J." surname="Gettys"/>
            <author fullname="E. Dumazet" initials="E." surname="Dumazet"/>
            <date month="January" year="2018"/>
            <abstract>
              <t>This memo presents the FQ-CoDel hybrid packet scheduler and Active Queue Management (AQM) algorithm, a powerful tool for fighting bufferbloat and reducing latency.</t>
              <t>FQ-CoDel mixes packets from multiple flows and reduces the impact of head-of-line blocking from bursty traffic. It provides isolation for low-rate traffic such as DNS, web, and videoconferencing traffic. It improves utilisation across the networking fabric, especially for bidirectional traffic, by keeping queue lengths short, and it can be implemented in a memory- and CPU-efficient fashion across a wide range of hardware.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8290"/>
          <seriesInfo name="DOI" value="10.17487/RFC8290"/>
        </reference>
        <reference anchor="RFC8289">
          <front>
            <title>Controlled Delay Active Queue Management</title>
            <author fullname="K. Nichols" initials="K." surname="Nichols"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <author fullname="A. McGregor" initials="A." role="editor" surname="McGregor"/>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <date month="January" year="2018"/>
            <abstract>
              <t>This document describes CoDel (Controlled Delay) -- a general framework that controls bufferbloat-generated excess delay in modern networking environments. CoDel consists of an estimator, a setpoint, and a control loop. It requires no configuration in normal Internet deployments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8289"/>
          <seriesInfo name="DOI" value="10.17487/RFC8289"/>
        </reference>
        <reference anchor="RFC3168">
          <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>
        <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="RFC7928">
          <front>
            <title>Characterization Guidelines for Active Queue Management (AQM)</title>
            <author fullname="N. Kuhn" initials="N." role="editor" surname="Kuhn"/>
            <author fullname="P. Natarajan" initials="P." role="editor" surname="Natarajan"/>
            <author fullname="N. Khademi" initials="N." role="editor" surname="Khademi"/>
            <author fullname="D. Ros" initials="D." surname="Ros"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>Unmanaged large buffers in today's networks have given rise to a slew of performance issues. These performance issues can be addressed by some form of Active Queue Management (AQM) mechanism, optionally in combination with a packet-scheduling scheme such as fair queuing. This document describes various criteria for performing characterizations of AQM schemes that can be used in lab testing during development, prior to deployment.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7928"/>
          <seriesInfo name="DOI" value="10.17487/RFC7928"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="LINUX-FQ-PIE" target="https://ieeexplore.ieee.org/abstract/document/9000684">
          <front>
            <title>FQ-PIE Queue Discipline in the Linux Kernel: Design, Implementation and Challenges</title>
            <author initials="G." surname="Ramakrishnan" fullname="Gautam Ramakrishnan">
              <organization/>
            </author>
            <author initials="M." surname="Bhasi" fullname="Mohit Bhasi">
              <organization/>
            </author>
            <author initials="V." surname="Saicharan" fullname="V. Saicharan">
              <organization/>
            </author>
            <author initials="L." surname="Monis" fullname="Leslie Monis">
              <organization/>
            </author>
            <author initials="S. D." surname="Patil" fullname="Sachin D. Patil">
              <organization/>
            </author>
            <author initials="M. P." surname="Tahiliani" fullname="Mohit P. Tahiliani">
              <organization/>
            </author>
            <date year="2019" month="October"/>
          </front>
          <seriesInfo name="2019 IEEE 44th LCN Symposium on Emerging Topics in Networking (LCN Symposium)" value=""/>
        </reference>
        <reference anchor="REVISIT-PIE" target="https://www.sciencedirect.com/science/article/pii/S1389128619313775">
          <front>
            <title>Revisiting Design Choices in Queue Disciplines: The PIE Case</title>
            <author initials="P." surname="Imputato" fullname="Pasquale Imputato">
              <organization/>
            </author>
            <author initials="S." surname="Avallone" fullname="Stefano Avallone">
              <organization/>
            </author>
            <author initials="M. P." surname="Tahiliani" fullname="Mohit P. Tahiliani">
              <organization/>
            </author>
            <author initials="G." surname="Ramakrishnan" fullname="Gautam Ramakrishnan">
              <organization/>
            </author>
            <date year="2020" month="April"/>
          </front>
          <seriesInfo name="Computer Networks" value=""/>
        </reference>
        <reference anchor="I-D.draft-ietf-ccwg-bbr">
          <front>
            <title>BBR Congestion Control</title>
            <author fullname="Neal Cardwell" initials="N." surname="Cardwell">
              <organization>Google</organization>
            </author>
            <author fullname="Ian Swett" initials="I." surname="Swett">
              <organization>Google</organization>
            </author>
            <author fullname="Joseph Beshay" initials="J." surname="Beshay">
              <organization>Meta</organization>
            </author>
            <date day="28" month="February" year="2025"/>
            <abstract>
              <t>   This document specifies the BBR congestion control algorithm.  BBR
   ("Bottleneck Bandwidth and Round-trip propagation time") uses recent
   measurements of a transport connection's delivery rate, round-trip
   time, and packet loss rate to build an explicit model of the network
   path.  BBR then uses this model to control both how fast it sends
   data and the maximum volume of data it allows in flight in the
   network at any time.  Relative to loss-based congestion control
   algorithms such as Reno [RFC5681] or CUBIC [RFC9438], BBR offers
   substantially higher throughput for bottlenecks with shallow buffers
   or random losses, and substantially lower queueing delays for
   bottlenecks with deep buffers (avoiding "bufferbloat").  BBR can be
   implemented in any transport protocol that supports packet-delivery
   acknowledgment.  Thus far, open source implementations are available
   for TCP [RFC9293] and QUIC [RFC9000].  This document specifies
   version 3 of the BBR algorithm, BBRv3.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ccwg-bbr-02"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
uU2DBMMiA85ydH6MWcUG9a5ih7YYIoImqg+x8pE6GtSqRDIrNzxBa8bVmrCk
RpoZOyL4vVcWtYn5/G515oJGr6PWIwxyuKkKpr9TnAZiPBrTzh2cCb0af+/E
Kf/5srWIwZR3RhSh5QvraBWFQcWHdKSJgmk3ghpLJ/rXP9zdU8tL/xc37/nz
7fT7Hy5vpxf0+e67s6ur5kMvrrj77v0PVxfbT9s3z99fX09vLsLLeCo6j3r9
67O/9QesVf/9h/vL9zdnV/1gzLaBqBojKmaKwdWCzZArpet14vTd+Yd//t/4
NBrgxXgM4EzWGL8+xR8AkyrsZirkX/gTht/0kNwKsA8pcDxwa6U9knpA4eaW
BC8EQ7Dmf/5Elvl5In4/y1bj0z/EB3TgzsNks85Dttn+k72XgxGfePTENo01
O893LN3V9+xvnb+T3VsPf/8N59Rw/OabP/Q4eBElMeyb2UyInfh0W7ZoHIKU
cgyv68BsiC8AsImBTsSBPuxUlQQpkRI6XqyY4YcqQpzJKtl64pdUzmtd5Km2
NSgDt86tATtYGqfCwtyIyvjg9wON3X2rRjSKJzUCU3OhBoTSRi8mgua2NKtN
vw5QJUxZUo2hwBTjl6J0LfDkbCSQ7jAC4vRMSyKD5Rr7ZSQ2R/sdaWAkAmIF
QA3KeuIKLTg2tV+Ytsxoom3xa8uLvDfI21bUlqWQEYShg5BGTZmNMqI+oxAg
uYLZCrfHJaKeO1SYMh3OQgxAPkxJafc7MUdpKw0RlzROIGoAXKYDWwXLEDzs
oWPb9gNBpEExtyw2hItfgYCyokHPWMQaY1qDppI54RZk4Ng5GBtCcCLm2jrP
6LHvMjrFr9Ix+L1pYiDk5dDXOFGTDVVW1HmsC1DGm8wUIkweB8KZ2mbB1zkR
hCoUp8sPQuY5DuqIztC3zyzkYV8QhoUt0ku7MdGh6K9dANZEdGG1G/UpHnpL
RFc4KBbGt3dCJZyGK5xkFsTdnZyht/HctSA+uDIqgmOmUC3pwN66YO6Y2C5R
KBKzIuILfyC0i1QtO5UvUPq9HfGsXuXMNBC22uTgVAVxMQroTchbFoxvu8kb
SZIJlT6r7daZAQT+9T//S8ECUsc2TjmW4CIABXmifdDwlIg1xOUUDPWKz4ii
A3t3OqOmi2dchQyTO84NHCEjqpFi6QnlJlBcBT9cae8LxdpeSXB1iosyvBy0
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
na9ZKwAA

-->

</rfc>
