<?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.6.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mathis-tsvwg-safecc-02" category="exp" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="Safe CC">Safe Congestion Control</title>
    <seriesInfo name="Internet-Draft" value="draft-mathis-tsvwg-safecc-02"/>
    <author fullname="Matt Mathis">
      <organization abbrev="MLab">Freelance, Measurement Lab</organization>
      <address>
        <email>mattmathis@measurementlab.net</email>
        <uri>https://mattmathis.net/</uri>
      </address>
    </author>
    <date/>
    <area>AREA</area>
    <workgroup>WG Working Group</workgroup>
    <keyword>congestion control</keyword>
    <abstract>
      <t>We present criteria for evaluating Congestion Control Algorithms (CCAs) for behaviors that have the potential to cause harm to Internet applications or users.</t>
      <t>Although our primary focus is the safety of transport layer congestion control, many of these criteria should be applied to all protocol layers: entire stacks, libraries and applications themselves.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mathis-tsvwg-safecc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        TSVWG 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/mattmathis/safeCC/"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="preamble">
      <name>Preamble</name>
      <t>This document is written in extra terse congestion control jargon.   In the final version many single sentences in this draft will expand into full paragraphs.</t>
      <t>Editorial comments to authors are enclosed in [square brackets] or tagged with @@@@.</t>
      <t>Unformatted references appear below many sections.</t>
      <t>[Remove this section before publication]</t>
    </section>
    <section anchor="intro">
      <name>Introduction</name>
      <t>We present criteria for evaluating Congestion Control Algorithms (CCA) for behaviors that have the potential to cause harm to Internet applications or users.</t>
      <t>Ideally we would cast these criteria as requirements; however such an effort is doomed to fail because many of them have technical exceptions that are unavoidable in ways that are not important.</t>
      <t>[Introduce non-material] For an example of this issue see <xref target="noCollapse"/></t>
      <t>As an interim position: all implementations <bcp14>SHOULD</bcp14> comply with all criteria, and <bcp14>MUST</bcp14> document all exceptions and evaluate the risks associated with the exceptions. Under what circumstances and how severely they fail to comply, and what is the extent of the harm that non-compliance might cause?</t>
      <t>To prove the criteria proposed in this note they should be used to evaluate current and legacy CCAs: we expect to find alignment between known  CCA pathologies and failed criteria.  Any discrepancies may suggest additional criteria or sharpen our understanding of how to decide if a failed criteria is material or not.</t>
      <t>Indeed, Reno[rfc5681] and Cubic[Cubic] are known to fail several the criteria presented here, and as a consequence exhibit pathologies including bufferbloat[bufferbloat], [starvation] and poor scaling[Scaling].</t>
    </section>
    <section anchor="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>
      <dl>
        <dt><strong>Exhaustion</strong></dt>
        <dd>
          <t>a network overloaded to the extent that the average delivery rate is below one segment per flow per RTT.</t>
        </dd>
        <dt><strong>Material</strong></dt>
        <dd>
          <t>failing a criteria in a manner that is likely to cause pathological behaviors under some conditions.</t>
        </dd>
        <dt><strong>Non-Material</strong></dt>
        <dd>
          <t>technically failing some criteria, but unimportant, insignificant or otherwise unlikely to cause pathological behaviors.</t>
        </dd>
        <dt><strong>Under adverse conditions</strong></dt>
        <dd>
          <t>refers to any increase in any congestion signals (loss, delay, marks or reduced queue space or capacity, etc) from any initial state.   For example introducing 1 Mb/s cross traffic to an otherwise ideal 10 Gb/s link is an adverse condition that should not trigger any of the misbehavior's described below.</t>
        </dd>
      </dl>
    </section>
    <section anchor="criteria">
      <name>Tentative list of criteria</name>
      <t>These are generally in order of declining severity.  Items at the top of the list have the potential to cause large scale internet disruptions if they are widely deployed.  Items at the bottom of the list can cause unexpected or poor performance to the user.</t>
      <section anchor="noCollapse">
        <name>Free from congestion collapse</name>
        <t>Adverse conditions do not cause increasing overhead, specifically do not cause duplicate data at the receiver.</t>
        <t>Test: for a fixed work load, the overhead must be constant, independent of the network congestions across the entire operating range of the application or network</t>
        <t>If there is packet loss, the retransmits must exactly match the losses.</t>
        <t>Example of an application that can cause congestion collapse: an automatic download engine that responds to transient network errors or persistent congestion by restarting downloads from the beginning.  For example git-clone can not be restarted mid transfer.  Failures caused by extreme overload or transient outages require removing and re-cloning the destination.</t>
        <t>Non-material example of congestion collapse: A download engine that properly restarts from where it left off still needs to repeat the connection establishment, ssl negotiation and other signaling, thus increases its overhead by a few bytes.   If the payload is not tiny, this is generally non-material.  If the payload is tiny and the relative overhead might be large, and might be prone to congestion collapse.</t>
      </section>
      <section anchor="noRegeneration">
        <name>Free from regenerative congestion</name>
        <t>Adverse conditions must not cause additional presented load.  Any congestion indication should cause transmissions to be later than they would have been without the congestion.</t>
        <t>This criteria is well understood at the transport layer: all congestion signals must cause the sender to delay future transmissions, and at least slightly reduce their average sending rate.</t>
        <t>This criteria is not well understood by application designers.  Many applications open multiple transport connections and use aggressive retry strategies with insufficiently adaptive timers (see <xref target="selfScaling"/>).  This flawed strategy is generally an attempt to maintain constant performance without reacting adverse network conditions.</t>
        <t>Some (past?) streaming video application are known to request additional video chunks on alternate connections without regard to the delivery status of chunks already in progress.  Such a strategy often yields better performance when the application is a minority of the traffic, but can cause massive regenerative congestion and eventual collapse in a large scale deployment.</t>
      </section>
      <section anchor="boundLosses">
        <name>Bound steady state losses</name>
        <t>Steady state bulk transport should not cause more than 2% loss [study needed] over any unchanging network.</t>
        <t>Any transport with some form of selective acknowledgements can easily operate at a much higher loss rate.   The real problem is the harm that transport might cause to all single packet transactions, including DNS queries and connection establishment for nearly all protocols and services.   Single packet transactions generally can only use an RTO timer for recovery, often without any preceding RTT measurement, thus they typically take several orders of magnitude more time than any selective acknowledgment based recovery built into a transport protocol.</t>
        <t>The question at hand is really how much harm should we permit transport to inflict on all other protocols?</t>
        <t>For example, are we ok with happy eyeballs [happyEyeballs] getting the wrong answer 2% of the time, because the IPv6 connection establishment failed on the first message?</t>
        <t>[BTW I consider 2% to be a bit excessive: 1% or 0.1% would be better, however that may be unrealistically low.   Reno and Cubic can both easily cause much higher loss rates. ]</t>
        <t>[We need some studies to justify the appropriate value for the final document.]</t>
      </section>
      <section anchor="boundSlowstart">
        <name>Bound slowstart duration and loss</name>
        <t>Slowstart into a droptail queue should not
cause more than one RTT of loss nor cause more than 50% loss for that RTT.   Provisional window or rate reductions should start promptly when losses or disorder is first detected, even before the loss recovery can decide if the missing segments are due to reordering or loss.</t>
      </section>
      <section anchor="linkChanges">
        <name>Bound losses on link changes</name>
        <t>Step changes in link properties (RTT, bandwidth or queue size) or cross traffic should not cause losses that are larger than the change in maximum flight size supported by the link. Specifically, during loss recovery the transport is not permitted to send more data than the receiver reported as having been delivered.  This is the strict Conservative property from Proportional Rate reduction.</t>
      </section>
      <section anchor="stateCaching">
        <name>No unnecessary slowstarts</name>
        <t>All application stacks must use connection caching, Congestion Control state caching or some other mechanism such that application workloads are prevented from causing persistent or repeated overlapping slowstarts.</t>
        <t>[RFC9040] TCP Control Block Interdependence</t>
        <t>draft-kuhn-tsvwg-careful-resume-00 Careful convergence of congestion control from retained state with QUIC</t>
      </section>
      <section anchor="noStarvation">
        <name>Freedom from starvation</name>
        <t>Flows below some resource threshold (data rate, window size, ConEx marks, etc) will successfully search upwards, as long as there is either idle capacity or other flows above the some threshold.    To some extent the thresholds will depend on the path properties and other sources of noise.</t>
        <t>@@@@ more work is needed here.</t>
      </section>
      <section anchor="boundQueue">
        <name>Bound standing queue</name>
        <t>In the absence of losses or ECN, bulk flow should not cause steady state standing queues larger than k*minRTT*maxBW, for some predefined k, specific to the CCA.   K must be smaller than 2 (maximum RTT would be 3*minRTT)</t>
        <t>Note that this criteria implies that ECN based CCAs must also have some mechanism to limit data inflight, and that all CCAs must address the minimum RTT estimator problem described in <xref target="minRTT"/>.</t>
      </section>
      <section anchor="boundFrequency">
        <name>Bound control frequency</name>
        <t>Control frequency scales with 1/rtt but is insensitive to data rate.   This property is referred to as "scalable" in other sources.</t>
        <t>[RFC9330] Low Latency, Low Loss, and Scalable Throughput (L4S) Internet Service: Architecture</t>
        <t>Robert Morris Scalable TCP Congestion Control</t>
      </section>
      <section anchor="queueHeadroom">
        <name>Maintain queue headroom</name>
        <t>Individual flows do not persistently maintain full queues even if the queues are smaller than minRTT*maxBW.  When there is queue full, Congestion Control should reduce its window enough to create some small headroom to prevent locking out new flows.</t>
        <t>Ideally this criteria would also be applied to flow aggregates, however significant additional research would be needed.   @@@@</t>
      </section>
      <section anchor="monotonic">
        <name>Monotonic response</name>
        <t>The CCA should have monotonic response to all congestion signals that it responds to (loss, marks, delay, etc) otherwise it will have multiple stable operating points for the same network conditions.  It would be likely to exhibit stable pathologies such as latecomer (dis)advantage.</t>
      </section>
      <section anchor="probeSize">
        <name>Balanced probe size</name>
        <t>Balance the worst case queue backlog against the need to trigger mode shifting in links that use queue backlog as a trigger.</t>
        <t>Self clock transport preserves ACK modulation from one RTT to the next.  Many half duplex link layers implicitly use bursts preserved by transport self clock as part of optimizing their channel allocation algorithms.    Batching or decimating ACKs on the return path can cause relatively large bursts of packets to traverse the entire forward path from the sender to the receiver, potentially causing jitter to other flows sharing the same queues.</t>
        <t>Pacing can interact poorly with link layers that rely on queue backlogs to trigger transmissions or scheduling mode changes.  These types of link scheduling algorithms are pervasive in wireless and other shared media where channel arbitration is relatively expensive.  Indeed, the initial design of BBR's bandwidth probe phase was inspired by the need to trigger mode changes in many wireless networks.</t>
        <t>@@@@ More work needed here.</t>
      </section>
      <section anchor="selfScaling">
        <name>Self scaling</name>
        <t>All protocol layers must be self scaling.  If the network is too slow, the application must also slow down to avoid "stacking" requests.</t>
        <t>Specifically all application timers that cancel or restart lower layers transactions must not start overlapping transactions and must use an RTO style retry algorithm based on observed transaction times, including exponential backoff on repeated failures.  Alternatively an application might refuse to run after excessive failures.</t>
        <t>This criteria must be applied recursively all the way up the protocol stack for all applications that might be unattended (e.g. cron jobs and IOT devices).</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>This document provides evaluation criteria for Congestion Control and other implementations or algorithms that might be deployed on the internet.   It has no direct security considerations of its own.</t>
      <t>Over the long haul it is expected to increase the overall robustness of the Internet by helping to eliminate certain pathological behaviors that have the potential cause the Internet to be fragile under some conditions.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author fullname="S. Bradner" initials="S." surname="Bradner">
            <organization/>
          </author>
          <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">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
    </references>
    <section anchor="minRTT">
      <name>Estimating the minimum RTT</name>
      <t>It has been shown that all distributed algorithms to measure minimum RTTs in packet switched mesh networks are subject to failures caused by the inability to distinguish between true minimum path delays and delays that have been inflated by standing queues caused by other flows.</t>
      <t>This failure mechanism was shown in a formal proof [noPower] and
demonstrated in connection with Vegas TCP [vegas][VegasFailure].</t>
      <t>BBR [BBR] uses a distributed algorithm designed to protect the network from one of the more easily observed failure cases, where multiple long running flows "stack" standing queues on queues created by prior flows.
BBR attempts to explicitly synchronize minimum RTT measurements by having all flows reduce their sending rates for approximately 1 RTT every 10 seconds.   The measurements are synchronized by the measurements themselves.  When a flow observes a new minimum RTT sample, it set a 10 second timer to schedule its next measurement.  If flows are indeed causing "stacked" queues, they are likely to get a new minimum RTT from some other flow's measurement, which will cause synchronized measurements on the next cycle.</t>
      <t>It is not known if the minimum RTT algorithm used in BBR is sufficient to protect the Internet from all failure cases.  We suspect that the BBR algorithm does not fully mitigate the problem as outlined in the proof [noPower].</t>
      <t>However given the transactional nature of modern Internet workloads each flow has frequent idle, which helps other flows observe accurate minimum RTTs.</t>
      <t>It is also not known if a naive minimum RTT algorithm, without any attempt a synchronized minimum RTT measurements, is sufficient for to protect the Internet from the problems described in <xref target="boundQueue"/>.</t>
      <t>L.S. Brakmo, S. O’Malley, and L.L. Peterson. “TCP Vegas: New techniques for congestion
detection and avoidance”, Computer Communication Review, Vol. 24, No. 4, pp. 24-35, Oct.
1994.</t>
      <t>L.S. Brakmo and L.L. Peterson. “TCP Vegas: end to end congestion avoidance on a global
internet”, IEEE Journal on Selected Areas in Communications, Vol. 13, No. 8, pp. 1465-80,
Oct. 1995.</t>
      <t>J. Ahn, P. Danzig, Z. Liu, and L. Yan, “Evaluation of TCP Vegas: emulation and experiment”,
Computer Communication Review, Vol. 25, No. 4, pp. 185-95, Oct. 1995.</t>
      <t>https://www.cs.princeton.edu/research/techreps/TR-616-00 [@@@@ Wrong paper?]</t>
      <t>[noPower] J. Jaffe, "Flow Control Power is Nondecentralizable," in IEEE Transactions on Communications, vol. 29, no. 9, pp. 1301-1306, September 1981, doi: 10.1109/TCOM.1981.1095152.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7Vb23IcR3J9n68og7GxpGIwBHiRRfiiBYegBC1AcAFoGWsS
DzXdNTMt9HSPuroxHDEQod9whB3hb/Gn7Jf4nMyqvgDQeh/sjVhx+laVlZeT
J7MKu7u7o1Gd1bk7MBd27sy0LBbO11lZ8GddlfnIzmaVu4nPp6O0TAq7wgdp
Zef17srWy8zv1v5ms9j1eCdJdveejVJb45Uvbw4vj25HCS4WZbU9MO7zeuSb
2SrzHnPU2zVeOj66fDvK1tWBqavG18/29l5hAFs5e2AuK1v4dVnVo01ZXS+q
slnjNc41GhXNauaqg9EoKQvvCt94GcGNIOzz8P3h+dFh/9MP35kPuMqKhfmO
d0bXbovH6cHI7JqkW3wSFn/jisbhoQnfX178+cN3uFzZLA+C/CFz9XxSVgu+
ldXLZnaAx3WtinlKlUynT0cj29TLkuKaXbxpzLzJc1XkKd7mf/C6PMFYtsh+
sZTkwLytnMttkbixOXXWN5VbuaI2J3YmL0fznMYbTmXrRPjDqvsst7NJ4Wp5
samyA7OzrOu1P3j6tHufLzzdgX7LCjeyG6x/lBXz3tVod3cXE/u6skk9Gn1w
Zl05T6mSKqtdlVmD1427sXmDb6Ds+35lDnO4BPS18ubxdHron8g3M7e0N1lZ
eVMvbW1w4fALE5Q1xs9sburSJLbxDs+qFa+OC0wJmY1dr/MsEbV5KNHgpcpP
RqPDHJpvFktTNhUkzVa22mKypPEm8zI6jVRvTTmHAwWHM7nduuoBnxhDtYW+
u8SiuyV7TJKnWIEK4lIKZ/McU5Z1mWDJMiS8lCupMGttk2s/Nnk2q2yVOW9s
kQ5XgSlW3uU3juug1ldZmuZuNHpk3sPBVzP+voTRDMKyEcfA7w1EgrpMViDg
sCIDASnpvbWYn2y1KIsJvOG4EE3MswI6vsH7fE1W6mHAHNJicAc39By2likJ
AGaTYYmIa8qeFVgyHdusbWUXlV0vKfhRmtWwNQZOyhWF9KIaCQgsGqrAwHnp
HUcwnz76nxvehFaSa1f7KxqztosFnm/gMeYP+B+G/TE4ZY37lZu7SsWDAp2l
J+XlJqzAJaJOfPPp47lbleJUWEF4gHcxEpysmUXVX1HFx1RS2ug7Xx5lvLz9
v3H3/z9vP04dnG5rNs5sxCET6+u7vmo9NPZzkykq+H8yy3LjYHXjm2QJNzRu
PmcQiGOVK/XlOYAFIqs8vSBYBcFdsiwgEb0hcevowFgXjdkU9qbMUguPpZE3
dtt7WJSYasWws0UtVoqq57OCSYZi51fmLVZK8T7b1RojiQAZ49g3dFFnvnwp
ymmZ53bt3e0tgp9RRcfEACso1mcKqwzMjGNQAUGLF9+f/Xjyhk66pgLpanwt
am0s8Xn648VlF202HyyXLwQ/UEtWmb/Gbe/LJLN1dGA+6b6amB+LFLrfUB1J
VmFoQIP6MsaDabAyGMdBKHy5VUPQM0RQFUs+DnCGoKdsap3gOXxMVco3GUcH
liyWtbrXt0CRkkAVHLB1FNxax8AUTcNUTqXo8K7x6iDtypOmqkQ7ECx3C5ts
DSH+gE4JqEDUiT9lhLs8WxSiypmrNw6odV2Um8LwA6AIICIvFxEbuXBMFaUD
bh3CC9PMJ5UDACV8b2UhWrNg/BmbpmJu2xmRoeKhkjVmYj5oqHqqO2XgQmVU
N4RLXZKlcNW5sXenpZqjR3I4qIRxh4FcOjbnrig/fazmycuvv9m/ErGnzSxL
Pn2Uf67E4XWNMabEugz2oeYFYzDvEqZXIyNsrRG683NDsIMyl9ksqweKyoCl
jaxm1syBirO8tPWnj72LqzFBtrbVjWKdjL0uqRmEL7789PFCf1xhYQBCgNgN
ASm6+BsH22V6/eVR2l3dMhtheXAP0ipvdhguO2P917w7k9/nR3/68fj86A1/
X3x/eHLS/hiFNzQSu1/dl9Oz09Ojd2/0Y9w1g1ujndPDv+yosnbO3l8en707
PNnpMlYbtrABtD9zigzQNRVt/Sh18KVspg7/evr+v/9r/wUw5R/O306f7e+/
ur0NF9/s/+MLXGyWrtDZyoKQIZeMjlHIQhhFIMSus9rmSPYwIQIHxqdVod2v
PlIzVwfmn2fJev/Fv4YbXPDgZtTZ4Kbo7P6dex+rEh+49cA0rTYH9+9oeijv
4V8G11HvvZtY51dHn5eAGrrJV1+NAMAGWYzU3AB0KrhlqiDSAzABLV5bxsfC
IShzMFCwt4ooA4Nqki8LYv9CLLsGkM55kz/OLy+p4q9OQ7TKxAw5RoftBTSs
xIxW4Js6AGmeXQvgxgTchhgzXJe4BT+MR45kYCrceJn0HdB2MHGbIPNtK4R+
2CaYWVNjxDYVjiGZBz5mc3xGRK9MCX1Um8wzo/59IoowmmFsehOZYJBUBBPy
pJwMcAr8ALX0kqZ53aONlAVebB6DrMGXYQ67JR+uroWCVI4ZOzUAJ2bjtQVC
4Tac3yZZjTddnYD4VOUqTJQJxwES1Y4clMk9ZvYsEAAqad+czp56qAmzkqHP
oQ6VtqeOjLzH7O+Z7/gulHtNK+KVe4tWE4f0RepRVxnyRWU6SoPc6KMCfw/c
aFFBHG5CTLxU3oCEmWdekm3rTl8exZ+Kh5icgLNwBWE+58qhFxoEXyHRQFjx
BaYB6AmqOK7B+03w/rpcR7Fkqr9FE3MQeicwHqCNVBEJsmoCQ8nmmr0p0AY6
gzSpW+fl1qV3552VdQ1T9aeGF4aJmkITOXQCq0nyQMQJIWdiCoFMUkptPZIy
Vk0/KEOUqBmorEfbwNruOSqwW2ylswcflZSNN5fOIvN6yCORQhUPXk8b5cr4
ZWsb11e5xBFOIOAlBDoQSo5sn30mTyMyEZUEz9tZzAoQxrzBLBxDFAp0+E9H
uSKydUuFUoP7Et60/iuhMK0XUHQuXPy4R+yFXehYIBjyuBLcW0tlZDQMdS1S
ua4y1FYiIuIoqaEHEJVECSdfljryqCPPDI/edBIYnY0fsNSBfNLAL/BFAi1v
CioJS1pkhdMBQFzWsJsAikiVUTVRJ66qiJvqLx5OJYVUN9NsywFATkQzcQKv
viNu6TAVA2YyRIxFVu+iioQUXAGNP3NxKBgUlbNKA6zjlwDgBk91qSmnZa2M
cqDNR1J2tvKXDUpQ19ZN+Bd1pOSRguWnTM1LiphyLYXoFPp+16tg+pXLg+o9
fFin5OGQqtVN0MdGHQKe4Ob0vjnAlPV4ASoq+gcvdsHdMV0R6l2OgVLXL5ky
ETieXyxKQIk8Fj5DXwuAj2XRyxrf5gb8gghtUEB5iBu3wY8aLsZ2gvry2m5l
KVo4GChlO44VWw8P+zXe5KGP+aGIpb6eK/B2QSmVzCzAnxKy9h5UVzgtl+7p
+y42VU6FkuF77xOezttnZfEwREngdajTqz46Ms8VhbqlNz4wJMZgyEs6RAhq
6Zb6wFhzKopeUSiSa5UvSWHG+okVJpw12jxMMQl9on4Rs3FwlVAAlWXa5pth
D0xr5QdYgCw3yLmUBhFTmtRO+NDMm7qp7iwhlDH0V3YlfE4jiVdLrY9hsqpl
exxQ0bF2D4lPTd9dAj2xB2gIRAjLxogxp0zvw64Ji8BVk9cZI7JbdhcpWu6I
MRcL2NDTL4i1qDFryiUVl9T0YGoNiQnBAiuyqV2LF9XZiuTqsTYnvMvnoba6
vX0CqWRV89xu4BthyO0wOAi4NfLyWormlUVax//bBDRIu9H2CNJE8DOSn15G
6jjqBcnn4zUs8e0TTu7sit/cgBaUAzUOSlYC4J3iWr9Ilk1BIsiSh8xDOgE9
VXbCLWzVcv2W05MGAmIIjDqQzSFRKmwJMSzqh8IupEPV6aqcs9W5zVyesh6o
GRwDlaAmu5dXyQyBEAVbci3nC8xSWXiXBVc2mv1hbNCeD6zeSIMzMBopKfps
TFkWAVdB53UJt8UyZIlCgUOGBtjM+OxEroA0F/13Zk1+3XPVHosN0rKRKeDw
7HcyoJT6Db5nTnDplaCmUN2mSPDegiYP7sFmOR50w4tnS41CfVJRcGDaEyoA
BYFL5C5daBNRVEZSBp9VauMY6dAzLbZEpGNekagKfP9SwFzgsZzlbhX7V13H
qpOk16yKffXQmA5cSF616mrjXhPkzbsLFiRtf/230qCwvwI1O0Ou17XXr8Bj
b7JEc9vFb87bi1oqQ3oCAh4FStEzhQKZB9STZkAyVPeNoUGzrMlLRXSUr6a3
eRNysIB+vV0Holvba9d2kKSqkBhaWZSNsHv0CEytbqEN8ftG1B6c9dJMV+ng
bFlea1ff9mwRVTPRbo/AgUQCa5NCEnalTWg209T8NGlw1o1jgIKq9obEDFkx
R3zWih95ICCtFb4djXpkb6z1CyjAtfroEtENBrd1M3xLn5cbR+H6Coap68jO
NiAEpG1+gwkQJTH8oaJx29/mneP3N1//DX/RrmAZN06QgWAt75G6vmUL+/Xl
B3MsMJ2lOpHmb2vYsWP7V3DlwOz/jkxzb4J/N7GlqkA2bvvyEg1sbbLdWlC7
YM7BA1iRwi3ZeOzajeKAqOCWMSQDPDwUi/DqK0r8wQlIaMATNBgzEPontm3m
24iioKIVm9mG7V5Bht7WUWyxTa76KAcRhbaiEqs6jikCBLS7iK8Q8NrXg+ul
mLJmpzR0FlrQG90FPVI9hg1sKqMX0n8YvvNyLyCjSg7Fsk8EDb6vwOi9prQN
KBlbS5X2moSgaIyH2VVAKAOJObT+IoDjI5TcWuEzu4trpK6WcnksySJuOcXC
rIs52q1rPodehNf+wEKBlr6fNk6TsUwjhbBatJ9dojyF9kME7iXB8HKqV5pg
1u3DLLysFUdNF3gM/SAyYLJNlsKjMFMwRPaLeyItnkFr5l5SCnK0+z2SFzsO
G+bm1Cv7OVs1KzAiwXtOYHyzJkZokaatiOJ6Yi565f6YjkUlDHU5ZLOBMir2
1NptJMdU15DOQCtR7A2wgNK5rSfHlrY6WXagLdI1uQwFjbDguiKITdmkl/76
jYuq3GqN8Z5bKlVgTucD51LbvSsR4sAcYgl5UYwGGk5IwNQmSxJIbm3nA16j
W8rKzEMFH8Er0Y/GD21OKrUIb8gOCRFAEXjlaJ3Mr3RvUG3Ym5K8QSt0WhbJ
60YLHe31wPwcslfqS/ZjUUrsZKWNwcS722XqNu3b6au9F3tX5nL6vpXzdV4m
17oFGnsuiRuN9CTKdbMswjmUBKLMm3wXlBFgtLu3Z6Z6hwrBnAvZPLlbgusc
oQ4kxxZKTs1IivnTj8fTtlxM8ZK82W2jSJF40V7COm+5pNCjFo1CnrKppNDB
z2WJIHksfkeMGUfModOLmY4+a281NE5lpx1GoGNwk5153FawSbPegFDr5kIu
uc13rSKXiRmzNHdtJ7ZtJEurHJabxY0/EbOVjqBoLku92zbley94FUqNEVMh
29B9+Oi1E2T1wk+KMpPym3v5GoBSnzBGhafG/ZEeUw57dAo9IW38iRe33H3T
7DTz0bQdFh9N342VN8vGwD10GnDw4TR+AFXXn75CzQAwxL/28+sPY8kgohz4
vWyDQfDrrhMZa5zp9JCq/GPbPfQroFYc9pl5HGGPqavlAM/DbE/YQqpd3A4Z
VMHczI3IinUGAsfNVp0LdXqpvQERswtmSJZn5GDif8K9ALjj0GSxurPdGydN
WX+FfFS0wjJ4VrYuq5bDD3bQvnzRJdze9k3ZhZruY26jNd/GG7Do9N5LUkeF
anv/aVXXUqgReuX8V6bldmnaiNIag+3SCMDCTOeuqsLpHG92OCpPJcgu4cBN
Wxx6/hw4dALXObE8AoNsIxfSfKW+LsIQmKziQaM1xHp88uLiSXda40LrhwNz
iIDNyARA6kej83IGucxpWVUQrRtHMe/uUTxq8DTW/xoGbH9VJXDoyyO58X24
lpBIMxTmrEo1ykNLvMNiaQ+H4eTUTvB5ISiBfIRbxPaB0w4CAYr+EMpsBR0V
jmM+nG80BEPXh63EAH2gsDyoxWZd5SQchYpy4m6pdRnTjGE+kJTVsMG80YX2
DsEMo0UjS0JieEpLcEE6PAvS4Y529zffev0OdvMEedtYVdCiwxHQ1FIltF0W
QAFtiHuC1ireDDvlPOUQtCFRurr/Uah2H2jA6VblsOEetuZC3gg7dJI+eltl
4dSWzhj7X1Lc9Hcl1mVGthn5vberB/tI3DXqFNHtScazCWHc/hEFPWXkpZWZ
lCyKH4MwP7HpDRSN+imAhZVzj6lAi5JNaFAuLvAbGgxvaFVXVtKO9MFnAYUJ
iAmS4QL+rUegtLyRbQnd8VuVKcuJbC4LDtQ3KLa5P5KXMlg+ZfvM5WAQQkn6
tbEj8cMiD6d/5PhNruxA2EIsT0JeKJBTY2dyaTEaN6rcZyXgelpQIR5JO7QS
Zg2W6dtplBN37aBOJMtdokq2pFA8Aep/CfVvVgnfLlxOvypji689nyZJ/zW3
jQIZZDWyUpfAmnxM8+BITVVotu+6ZbE5z7pUul9BYIihDZO4LaR9yd52GPyM
NEYHbHd7uq5yn5aPu73PUNpSup8y6f7h3T654WmfWPqLDyukwYDvrWwvJ/GA
mAVx505mPPzVN0PY2WJvqxi6he871LBhLydqlkA52esXZwtlllQN3BjmGWjR
jkzWe7sziBJrVhPSh+TpOegrZzruUSuskrtcLiXQCQ63Vq4QhlXb+OxZiFu4
BQdlEIfzS1RT3JnX9jmle/36/Pe+VwJqSK6XDLeNlRS8zqquRHsw0Holphwf
bJcRUMVHPnja8sEhGSQqSNSFc0osiHoNda2H7hy37ThX78NukykCGsu3spQq
ZHyvXdxRKT6XHTqBZZ5oBINg0YVBd2JrXHrr/c1oe6dMC3sCcbs1cbmWRdpT
wBTszgS/67cX2w0mfbFfPg3ek/2vWAOG5qOvt3ncu2h9K/BF7jTPAp70BhI5
B81UOAwgTM8c0P2544j32oJuHnZVucMV9gDU0+5sNGs3lyWZJriqwfM5g7ft
i3Vj3d36iQaNCRygAIwJ8+R6jG5jAZdrLUeiP4iddJN/aI9giXbHsCm44VLQ
8R67CZwlqSDzT1CRaPb47BKRIe3gJ3IU5IICsKyahmafjUfjfHhye/eUNo9a
4k3fnhpmBdo/TfwAa+qC/e7BVVlSCxfDxcTTHRG246kQ2aVlw5ZdEZMiFBPm
j7CSZLgSIIBs+G7YojjThqTTWnNpUVZnwsPbEyHSzQ2niOLpCeocoAHbFQz5
0HRtCTJwY+lydWVwB9YmuoEEfkx++hvHr37r3HSviRtn0O7rvLKLLHe/eW7r
kTk+fHd435KZLew9KwblyRe2PWPOc/oMDg52pPVRzD/90glkUGsj0FUdShpL
ejqwLcHAi4ChKHTYgurZuIw7A/0xBVrDvoRHCmM2YU962SKsEvlm9lM8g3v/
GIQ6iZ1lOR2B9RRbzcWiyTBOPKTLP7RpZ5aMLVRTAyT87GwjC2ONaUMX726V
3c3ey9wx8IOMveJ1056ilG022esT4IdXffpYlO+JoHKsdZS6FTdKK5lZt01j
R0xy/J9B+b0UXJ8+3vD31aePci8cEOEJWCQ/PMV/rwioJIEPWiXuNqdaoZS1
6LiXY1oKGA+ZMc3FHbOIv3G1ZLLAXk3lLUmXkANaylET5Teaf3bu6TTyFB9q
KVHvukLYRPVyXWFr2Stjb6mm3xYJitmCnLvvtL3tKC8xqy1ReqpKM9jJ7+/g
ayEh2wefGRJE633tIUivdn+P6MMyJm4NDuYSv+2Eaj118FLvz2VCRWq1tgva
9XLqdDNYkQ8bSqxU+GcVnSBhv45dYqVlWqqStPenVS4RGmksf4VItaRUzePS
nWCNcXf+rquVFjLzXdG0wdi1YjkHWNhgS3CzzFiHZnnEvIGSBtoJCUDkT7ZJ
TkZ13LbFdX+/3XLopOj8uwl/CEC/4V/PtOcd7jp8i7l61pPO0fdqGoco5PUv
AeIpX3HHLphKp4Jpq3MFhF7Ev6qIvSZELir/XNpuWREfDUAAa/w+FPOL7CYc
BehxHOAG8gxF46YpWCpKmlb8rrftLLQsrkSgDj2pWrqq0QZMX35QeQSvQ2pI
GtlF6kN1q3zhlQMLwBMsGdCDVhgPNovjyRB7x+6/EbLjO3aT2v5v2a6nbX+3
tddrwLK9NzqZXEzM68per8qxwc+zv/7676dsGYU/UTmZnEzMe8c/RuPfnP31
1/8g7ArYHph38H09IE0KLYJ1HY+Rbp7FfUP9SyLQ5r/++p/sL63WDakjfqya
IlLMczA0By7/5zKfmGcvxuZdOTH4Z73m5e7zl2NzltST0f6rVy8mA+H/d2HZ
7CZeai+zPQgSxZItbLPIy5nNR5FviazHR0dH5ocSdTM36wsWM8qYDkmWqNbB
InwQf/+5iv+Nir//4uuXu9/sjUdcgMECXmIBP0zM4bIYm/cT88YWv2SLsfm3
iTnJmqh88xeLx1jIUUc54fP9Za1is0LOtIDNVRndhqKP/i41vxyoef+bl7uv
gp6jmPHvTTebzSTxE+QjKKyGigGwT2Nf7Sk9AUWFf3p5vvv1/tfcwfn0UUrD
D7J5v7aQ7VvZtG6zPRTwg53PEY873HhpabM8pt+/A6a7BOsBF81+YVNqLE1f
Mcplv34q79vhRtb3aoxInZhXYX3P9/Z38Z+v4e5ujUCcYaL9V9/sj4Fe2QEy
yWR/f+/V08vp2emE9ye4ern/8pnwzMPB0Qs/+nKgf9Hs0n/ZmQMU3A755tmb
s/5Jm8nofwAemQ49tD0AAA==

-->

</rfc>
