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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>

<rfc ipr="trust200902" docName="draft-bonaventure-iccrg-schedulers-01" category="exp">

  <front>
    <title abbrev="Multipath schedulers">Multipath schedulers</title>

    <author initials="O." surname="Bonaventure" fullname="Olivier Bonaventure">
      <organization>UCLouvain</organization>
      <address>
        <email>Olivier.Bonaventure@uclouvain.be</email>
      </address>
    </author>
    <author initials="M." surname="Piraux" fullname="Maxime Piraux">
      <organization>UCLouvain</organization>
      <address>
        <email>Maxime.Piraux@uclouvain.be</email>
      </address>
    </author>
    <author initials="Q." surname="De Coninck" fullname="Quentin De Coninck">
      <organization>UCLouvain</organization>
      <address>
        <email>quentin.deconinck@uclouvain.be</email>
      </address>
    </author>
    <author initials="M." surname="Baerts" fullname="Matthieu Baerts">
      <organization>Tessares</organization>
      <address>
        <email>Matthieu.Baerts@tessares.net</email>
      </address>
    </author>
    <author initials="C." surname="Paasch" fullname="Christoph Paasch">
      <organization>Apple</organization>
      <address>
        <email>cpaasch@apple.com</email>
      </address>
    </author>
    <author initials="M." surname="Amend" fullname="Markus Amend">
      <organization>Deutsche Telekom</organization>
      <address>
        <email>markus.amend@telekom.de</email>
      </address>
    </author>

    <date year="2020" month="September" day="09"/>

    <area>IRTF</area>
    <workgroup>ICCRG Working Group</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<t>This document proposes a series of abstract packet schedulers for
multipath transport protocols equipped with a congestion controller.</t>



    </abstract>


  </front>

  <middle>


<section anchor="intro" title="Introduction">

<t>The Internet was designed under the implicit assumption that hosts are
equipped with a single network interface while routers are equipped with several
ones. Under this assumption, an Internet host is usually
identified by the IP address of its network interface.</t>

<t>This assumption does not hold anymore today for two reasons. First,
a growing fraction of the Internet hosts are equipped with several network
interfaces, usually through different datalink networks. These multihomed
hosts are reachable via different IP addresses. Second, a growing
fraction of the hosts that are attached through a single network interface are
dual-stack and are thus reachable over both IPv4 and IPv6.</t>

<t>Several Internet transport protocols have been extended to leverage the
different paths that are exposed on such hosts: Multipath TCP <xref target="RFC6824"/>, the
load sharing extensions to SCTP <xref target="I-D.tuexen-tsvwg-sctp-multipath"/>, Multipath
DCCP <xref target="I-D.amend-tsvwg-multipath-dccp"/> and
Multipath QUIC <xref target="I-D.deconinck-quic-multipath"/>. These multipath transport
protocols differ in the way they are organized and exchange control information
and user data. However, they all include algorithms to handle three problems
that any multipath transport protocol needs to solve:</t>

<t><list style="symbols">
  <t>Congestion controller</t>
  <t>Path manager</t>
  <t>Packet scheduler</t>
  <t>Packet re-assembly</t>
</list></t>

<t>From a congestion control viewpoint, the main concern for a multipath transport
protocol is that a multipath connection should not be unfair to single-path
transport connections that share a common bottleneck. This problem can be solved
by coupling the congestion windows of the different paths. The solution proposed
in <xref target="RFC6356"/> is applicable to any transport protocol. Beside providing fairness,
congestion control can also be a valuable input for different kind of traffic
distribution algorithm within a packet scheduler. Typically metrics like RTT and
available capacity can be derived.</t>

<t>A multipath transport protocol uses different flows during the lifetime of a
connection. The Path Manager contains the logic that regulates the
creation/deletion of these flows. This logic usually depends on the
requirements of the application that uses the multipath transport. Some
applications use multipath in failover situations. In this case, the connection
can use one path and the path manager can create another path when the primary
one fails. An application that wishes to share its load among different paths
can request the path manager to establish different paths in order to
simultaneously use them during the connection. Many path managers have been
proposed in the literature <xref target="CONEXT15"/>, but these are outside the scope of this
document.</t>

<t>The packet scheduler is the generic term for the algorithm that selects the
path that will be used to transmit each packet on a multipath connection. This
logic is obviously only useful when there are at least two active paths for
a given multipath transport connection. A variety of packet schedulers have
been proposed in the literature <xref target="ACMCS14"/> and implemented in multipath
transport protocols. Experience with multipath transport protocols shows that
the packet scheduler can have a huge impact on the performance achieved by such
protocols.</t>

<t>Packet re-assembly or re-ordering in multipath transport has the functionality
to equalize the effect of packet scheduling across paths with different
characteristics and restore the original packet order to a certain extent. Obviously,
packet re-assembly is the counterpart of packet scheduling and located at the
far end of the multipath transport. However, packet scheduling schemes exists
which render the re-assembly superfluous or lowering at least its effort.</t>

<t>In this document, we document a series of multipath packet schedulers that
are known to provide performance that matches well the requirements of specific
applications. To describe these packet schedulers, we assume an
abstract transport that is briefly presented in <xref target="abstract"/>. In <xref target="challenges"/>
we describe the challenges and constraints around a multipath scheduler.
Finally, we describe the different schedulers in <xref target="schedulers"/>. To keep the
description as simple and intuitive as possible, we assume here multipath
connections that are composed of two paths, a frequent deployment scenario for
multipath transport.
This does not restrict the proposed schedulers to using only two paths.
Implementations are encouraged to support more than 2 paths. We leave the
discussion on how to adapt these abstract schedulers to concrete multipath
transport protocols in future drafts.</t>

</section>
<section anchor="abstract" title="An abstract multipath transport protocol">

<t>For simplicity, we assume a multipath transport protocol which can send packets
over different paths. Some protocols such as Multipath TCP <xref target="RFC6824"/> support
active and backup paths. We do not assume this in this
document and leave the impact of these active/backup paths in specific
documents.</t>

<t>Furthermore, we assume that there are exactly two active paths for
the presentation of the packet schedulers. We consider that a path is active as
long as it supports the transmission of packets. Meaning, A Multipath TCP
subflow TCP segment with the FIN or RST flags set is not considered as an active
path.
Other constraints are possible on whether or not a path is active. These are
specific to the scheduler and vary depending on the goal of the scheduler. An
example of these is that when a path has experienced a certain number N of
retransmission timeouts, the path can be considered inactive.</t>

<t>We assume that the transport protocol maintains one congestion controller per
path as in <xref target="RFC6356"/>. We do not assume a specific congestion controller,
but assume that it can be queried by the packet scheduler to verify whether
a packet of length l would be blocked or not by the congestion control scheme.
A window-based congestion controller such as <xref target="RFC6356"/> can block a packet
from being transmitted for some time when its congestion window is full. The
same applies to a rate-based congestion controller although the latter could
indicate when the packet could be accepted while the former cannot.</t>

<t>We assume that the multipath transport protocol maintains some state at the
connection level and at the path level. On both level, the multipath
transport protocol will maintain send and receive windows, and a Maximum
Segment Size that is negotiated at connection establishment.</t>

<t>It may also contain some information that is specific to the
application (e.g. total amount of data sent or received) and information about
non-active flows. At the path level, we expect that the multipath transport
protocol will maintain an accurate estimation of the round-trip-time over that
path, possibly a send/receive window, per path MTU information, the state of the
congestion controller, and optionally information that is specific to the
application or the packet scheduler (e.g. priority for one path over another
one).</t>

</section>
<section anchor="challenges" title="Packet scheduling challenges">

<t>Packet scheduling tries to balance different quality of service goals with
different constraints of the paths. The balance depends on which of the goals
or constraints is the primary factor for the experience the application is
aiming for. In the following we list these goals and constraints and conclude
by how they can influence each other.</t>

<t>Each path can be subject to a different cost when transmitting data. For example,
a path can introduce a per-byte monetary cost for the transmission (e.g., metered
cellular link). Another cost can be the power consumption when transmitting or
receiving data. These costs are imposing restrictions on when a path can be used
compared to the lower-cost path.</t>

<t>A goal for many applications is to reduce the latency of their transaction. With
multiple paths, each path can have a significantly different latency compared to
the other paths. It is thus crucial to schedule the traffic on a path such that
the latency requirements of the application are satisfied.</t>

<t>Achieving high throughput is another goal of many applications. Streaming applications
often require a minimum bit rate to sustain playback. The scheduler should try to
achieve this bit rate to allow for a flawless streaming experience. Beyond that,
adaptive streaming requires also a more stable throughput experience to ensure
that the bit rate of the video stream is consistent. When sending traffic
over multiple paths the bit rate can experience more variance and thus the
scheduler for such a streaming application needs to take precautions to ensure
a smooth experience.</t>

<t>Finally, transport protocols impose a receive-window that signals to the sender
how much data the application is willing to receive. When the paths have a large
latency difference, a multipath transport can quickly become receive-window limited.
This limitation comes from the fact that a packet might have been sent on a
high-latency path. If the transport imposes in-order delivery of the data, the
receiver needs to wait to receive this packet over the high-latency path before
providing it to the application. The sender will thus become receive-window limited
and may end up under-utilizing the low-latency path. This can become a major
challenge when trying to achieve high throughput.</t>

<t>All of these quality of service goals and constraints need to be balanced against
each other. A scheduler might decide to trade latency for higher throughput. Or
reduce the throughput with the goal of reducing the cost.</t>

</section>
<section anchor="schedulers" title="Packet schedulers">

<t>The packet scheduler is executed every time a packet needs to be transmitted
by the multipath transport protocol. A packet scheduler can consider three
different types of packets:</t>

<t><list style="symbols">
  <t>packets that carry new user data</t>
  <t>packets that carry previously transmitted user data</t>
  <t>packets that only carry control information (e.g., acknowledgements, address advertisements)</t>
</list></t>

<t>In Multipath TCP, the packet scheduler is only used for packets that carry data. Multipath TCP will typically return acknowledgements on the same path as the one over which data packets were
received. For Multipath QUIC, the situation is different since Multipath QUIC
can acknowledge over one path data that was previously received over another path.
In Multipath TCP, this is only partially possible. The subflow level
acknowledgements must be sent on the subflow where the data was received while
the data-level acknowledgements can be sent over any subflow.</t>

<t>This document uses the Python language to represent multipath schedulers. A
multipath scheduler is represented as a Python function. This function takes the
length of the next packet to schedule as argument and returns the path on which
it will be send. A path is represented as a Python class with the following
attributes:</t>

<t><list style="symbols">
  <t>srtt: The smoothed RTT of the path <xref target="RFC6298"/>.</t>
  <t>cc_state: The state of the congestion controller, i.e. either slow_start,
congestion_avoidance or recovery.</t>
  <t>blocked(l): A function indicating whether a packet of length l would be
rejected by the congestion controller.</t>
</list></t>

<t>The schedulers presented can be executed in a simulator <xref target="MultipathSim"/>
implementing the abstract multipath protocol presented in <xref target="abstract"/>. It can
be used to simulate a file transfer between a client and a server over multiple
paths.</t>

<section anchor="round-robin" title="Round-Robin">

<t>We use the Round-Robin scheduler as a simple example to illustrate how a packet
scheduler can be specified, but we do not recommend its usage. Experiments with
Multipath TCP <xref target="ACMCS14"/> indicate that it does not provide good performance.</t>

<t>This packet scheduler uses one additional state at the connection level:
last_path. This stores the identifier of the last path that was used to send a
packet. The scheduler is defined by the code shown in <xref target="fig-rr"/>.</t>

<figure title="A simple Round Robin scheduler" anchor="fig-rr"><artwork><![CDATA[
class RoundRobin(Scheduler):
    """ Chooses an available path in a round-robin manner. """
    last_path: Optional[Path] = None

    def schedule(self, packet_len: int):
        if self.last_path in self.paths:
            next_idx = self.paths.index(self.last_path) + 1
        else:
            next_idx = 0
        sorted_paths = self.paths[next_idx:] + self.paths[:next_idx]
        for p in sorted_paths:
            if not p.blocked(packet_len):
                self.last_path = p
                return p
]]></artwork></figure>

<t>This scheduler does not distinguish between the different types of packets. It
iterates over the available paths and sends over the ones whose congestion
window is open.</t>

</section>
<section anchor="weighted-round-robin" title="Weighted Round-Robin">

<t>The Weighted Round-Robin scheduler is a more advanced version of the Round-Robin
scheduler. It allows specifying a particular distribution of paths. This can be
used to non-uniformly spread packets over paths.</t>

<t>This packet scheduler adds two states:</t>

<t><list style="symbols">
  <t>distribution: A list containing the distribution of paths to consider. Paths
to which more importance is given will be present several times in the list.
The ordering of the list allows to choose whether interleaved or burst sending
is preferred.</t>
  <t>last_idx: It stores the index in the distribution of the last path used to
send a packet.</t>
</list></t>

<figure title="A Weighted Round Robin scheduler" anchor="fig-wrr"><artwork><![CDATA[
class WeightedRoundRobin(Scheduler):
    """ Chooses an available path in a following a fixed distribution. """
    distribution: List[Path]
    last_idx: int = -1

    def schedule(self, packet_len: int) -> Optional[Path]:
        next_idx = (self.last_idx + 1) % len(self.distribution)
        sorted_paths = self.distribution[next_idx:] + self.distribution[:next_idx]
        for i, p in enumerate(sorted_paths):
            if not p.blocked(packet_len):
                self.last_idx = (self.last.idx + i) % len(self.distribution)
                return p
]]></artwork></figure>

<t>This scheduler does not distinguish between the different types of packets. It
iterates over the available paths following the given distribution and sends
over the ones whose congestion window is open. A variant of this algorithm
could maintain a deficit per path and consider the length of packets when
distributing them.</t>

</section>
<section anchor="strict-priority" title="Strict Priority">

<t>The Strict Priority scheduler's aim is to select paths based on a priority list.
Some paths might go through networks that are more expensive to use than others.
Then the idea is to select the path with the highest priority if it is available
before looking at others by priority. This scheduler is described by the code
shown in <xref target="fig-strict-prio"/>.</t>

<figure title="A simple Strict Priority scheduler" anchor="fig-strict-prio"><artwork><![CDATA[
class StrictPriority(Scheduler):
    """ Chooses the first available path in a priority list of paths. """

    def schedule(self, packet_len: int):
        for p in sorted(self.paths, key=lambda p: p.priority, reverse=True):
            if not p.blocked(packet_len):
                return p
]]></artwork></figure>

<t>This scheduler can face performance issues if, compared to others, paths with
high priority accept a lot of data but delivered packets with a high latency.
When the path is experiencing bufferbloat, the receiver has to store packets for
a long time in its buffers to ensure an in-order delivery. It
is then recommended to cover these cases in the scheduler implementation with
the help of the congestion control algorithm.</t>

</section>
<section anchor="rtt-threshold" title="Round-Trip-Time Threshold">

<t>The Round-Trip-Time Threshold scheduler selects the first available path with a
smoothed round-trip-time below a certain threshold. The goal is to keep the RTT
of the multipath connection to a small value and avoid having the whole
connection impacted by "bad" paths. A prototype is shown in
<xref target="fig-rtt-threshold"/>.</t>

<figure title="A simple Round-Trip-Time Threshold scheduler" anchor="fig-rtt-threshold"><artwork><![CDATA[
@dataclass
class RTTThreshold(Scheduler):
    """ Chooses the first available path below a certain RTT threshold. """
    threshold: float

    def schedule(self, packet_len: int):
        for p in self.paths:
            if p.srtt < self.threshold and not p.blocked(packet_len):
                return p
]]></artwork></figure>

<t>This kind of protection can of course be added to other existing schedulers.</t>

</section>
<section anchor="lowest-rtt" title="Lowest Round-Trip-Time First">

<t>The Lowest round-trip-time first scheduler's goal is to minimize latency for
short flows while at the same time achieving high throughput for long flows <xref target="ACMCS14"/>.
To handle the latency differences across the paths when being limited by the
receive-window, this scheduler deploys a fast reinjection mechanism to quickly
recover from the head-of-line blocking.</t>

<t>At each round, the scheduler iterates over the list of paths that are eligible
for transmission. To decide whether or not a path is eligible, a few conditions
need to be satisfied:</t>

<t><list style="symbols">
  <t>The congestion window needs to provide enough space for the segment</t>
  <t>The path is not in fast-recovery or experiencing retransmission timeouts</t>
</list></t>

<t>Among all the eligible paths, the scheduler will choose the path with the
lowest RTT and transmit the segment with the new data on that path.
<xref target="fig-simple-low-rtt"/> illustrates a simple lowest RTT scheduler which does not
include fast reinjections.</t>

<figure title="A simple Lowest RTT First scheduler" anchor="fig-simple-low-rtt"><artwork><![CDATA[
class LowestRTTFirst(Scheduler):
    """ Chooses the first available path with the lowest RTT. """

    def schedule(self, packet_len: int):
        # Sort paths by ascending SRTT
        for p in sorted(self.paths, key=lambda path: path.srtt):
            if not p.blocked(packet_len) \
               and p.cc_state != 'recovery':
                return p
]]></artwork></figure>

<t>To handle head-of-line blocking situations when the paths have a large delay
difference the scheduler uses a strategy of opportunistic retransmission and
path penalization as described in <xref target="NSDI12"/>.</t>

<t>Opportunistic retransmission kicks in whenever a path is eligible for transmission
but the receive-window advertised by the receiver prevents the sender from transmitting
new data. In that case the sender can transmit previously transmitted data over the
eligible path. To overcome the head-of-line blocking the sender will thus transmit
the packet at the head of the transmission queue over this faster path (if it
hasn't been transmitted on this particular path yet). This packet has thus a
chance to quickly reach the receiver and fill the hole created by the head-of-line
blocking.</t>

<t>Whenever the previously mentioned mechanism kicks in, it is and indication that
the path's round-trip-time is too high to allow the path with the lower RTT to
fully use its capacity. We thus should reduce the transmission rate on this path.
This mechanism is called penalization and is achieved by dividing the congestion
window by 2.</t>

<t>[comment:] ## Out-of-order transmission for in-order arrival</t>

</section>
<section anchor="combination-of-schedulers-type-priority-and-lowest-round-trip-time-first" title="Combination of schedulers type: Priority and Lowest round-trip-time first">

<t>Combining some types of schedulers can be a way to address some use cases. For
example, a scheduler using the priority and the round-trip-time attributes can
be used to give more priorities to some links having a lower cost (e.g. fixed
vs. mobile accesses) while still being able to benefit from the advantages of
the "Lowest RTT First" scheduler described in <xref target="lowest-rtt"/>. A prototype of
this "hybrid" scheduler is shown in <xref target="fig-priority-and-lowest-rtt-first"/>.</t>

<figure title="A scheduler combining priority and RTT attributes" anchor="fig-priority-and-lowest-rtt-first"><artwork><![CDATA[
class PriorityAndLowestRTTFirst(Scheduler):
    """ Chooses the first available path with the highest priority and then the lowest RTT. """

    def schedule(self, packet_len: int):
        # Sort paths by ascending priority (2nd sort) and then ascending SRTT (1st sort)
        paths = sorted(self.paths, key=lambda path: path.srtt)
        paths = sorted(paths, key=lambda path: path.priority, reverse=True)
        for p in paths:
            if not p.blocked(packet_len) and p.cc.state is not CCState.recovery:
                return p
]]></artwork></figure>

<t>Combining some properties can have new undesired effects. In the case presented
here, paths with a higher priority but also a higher RTT can affect performances
compared to a setup having a scheduler not looking at the priority but only the
round-trip-time. If paths with a higher priority are used first whatever the
network conditions are on these paths, it is normal to sacrifice the total
bandwidth capacity but fully use the capacity of these links with a higher
priority. If the paths with a lower priority are seen as extra capacity that can
be used only when the other links are congested, it is fine if they are not
fully used when the sender is limited by the global sending window of the
multipath connection.</t>

<t>For this kind of scheduler, it could be interesting to also associate the
benefits associated to a "Round-Trip-Time Threshold" scheduler described in
<xref target="rtt-threshold"/>. This scheduler prevents being too impacted by links having a
higher priority but a very high RTT while other paths, with a lower priority and
a lower RTT, can be used. It is a matter of qualifying what is important:
maximizing the use of paths over reducing the latency and probably the total
bandwidth as well if the sender and/or the receiver are limited by congestion
windows.</t>

<t>It is also important to note that the penalization mechanism described in the
"Lowest round-trip-time first" scheduler in <xref target="lowest-rtt"/> also needs to take
into account the priority. If the goal is to maximize the use of some links over
 others, links with a higher priority cannot be penalized over the ones with a
lower priority. The consequence of this would be that links with higher priority
 are under used due to the penalization.</t>

<figure title="A simple figure" anchor="fig-ascii"><artwork><![CDATA[
ASCII figure

]]></artwork></figure>

</section>
</section>


  </middle>

  <back>


    <references title='Informative References'>





<reference  anchor="RFC6824" target='https://www.rfc-editor.org/info/rfc6824'>
<front>
<title>TCP Extensions for Multipath Operation with Multiple Addresses</title>
<author initials='A.' surname='Ford' fullname='A. Ford'><organization /></author>
<author initials='C.' surname='Raiciu' fullname='C. Raiciu'><organization /></author>
<author initials='M.' surname='Handley' fullname='M. Handley'><organization /></author>
<author initials='O.' surname='Bonaventure' fullname='O. Bonaventure'><organization /></author>
<date year='2013' month='January' />
<abstract><t>TCP/IP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers.  The simultaneous use of these multiple paths for a TCP/IP session would improve resource usage within the network and, thus, improve user experience through higher throughput and improved resilience to network failure.</t><t>Multipath TCP provides the ability to simultaneously use multiple paths between peers.  This document presents a set of extensions to traditional TCP to support multipath operation.  The protocol offers the same type of service to applications as TCP (i.e., reliable bytestream), and it provides the components necessary to establish and use multiple TCP flows across potentially disjoint paths.  This  document defines an Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='6824'/>
<seriesInfo name='DOI' value='10.17487/RFC6824'/>
</reference>



<reference  anchor="RFC6356" target='https://www.rfc-editor.org/info/rfc6356'>
<front>
<title>Coupled Congestion Control for Multipath Transport Protocols</title>
<author initials='C.' surname='Raiciu' fullname='C. Raiciu'><organization /></author>
<author initials='M.' surname='Handley' fullname='M. Handley'><organization /></author>
<author initials='D.' surname='Wischik' fullname='D. Wischik'><organization /></author>
<date year='2011' month='October' />
<abstract><t>Often endpoints are connected by multiple paths, but communications are usually restricted to a single path per connection.  Resource usage within the network would be more efficient were it possible for these multiple paths to be used concurrently.  Multipath TCP is a proposal to achieve multipath transport in TCP.</t><t>New congestion control algorithms are needed for multipath transport protocols such as Multipath TCP, as single path algorithms have a series of issues in the multipath context.  One of the prominent problems is that running existing algorithms such as standard TCP independently on each path would give the multipath flow more than its fair share at a bottleneck link traversed by more than one of its subflows.  Further, it is desirable that a source with multiple paths available will transfer more traffic using the least congested of the paths, achieving a property called &quot;resource pooling&quot; where a bundle of links effectively behaves like one shared link with bigger capacity.  This would increase the overall efficiency of the network and also its robustness to failure.</t><t>This document presents a congestion control algorithm that couples the congestion control algorithms running on different subflows by linking their increase functions, and dynamically controls the overall aggressiveness of the multipath flow.  The result is a practical algorithm that is fair to TCP at bottlenecks while moving traffic away from congested links.  This document defines an Experimental  Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='6356'/>
<seriesInfo name='DOI' value='10.17487/RFC6356'/>
</reference>



<reference  anchor="RFC6298" target='https://www.rfc-editor.org/info/rfc6298'>
<front>
<title>Computing TCP's Retransmission Timer</title>
<author initials='V.' surname='Paxson' fullname='V. Paxson'><organization /></author>
<author initials='M.' surname='Allman' fullname='M. Allman'><organization /></author>
<author initials='J.' surname='Chu' fullname='J. Chu'><organization /></author>
<author initials='M.' surname='Sargent' fullname='M. Sargent'><organization /></author>
<date year='2011' month='June' />
<abstract><t>This document defines the standard algorithm that Transmission Control Protocol (TCP) senders are required to use to compute and manage their retransmission timer.  It expands on the discussion in Section 4.2.3.1 of RFC 1122 and upgrades the requirement of supporting the algorithm from a SHOULD to a MUST.  This document obsoletes RFC 2988.   [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6298'/>
<seriesInfo name='DOI' value='10.17487/RFC6298'/>
</reference>



<reference anchor="I-D.tuexen-tsvwg-sctp-multipath">
<front>
<title>Load Sharing for the Stream Control Transmission Protocol (SCTP)</title>

<author initials='P' surname='Amer' fullname='Paul Amer'>
    <organization />
</author>

<author initials='M' surname='Becke' fullname='Martin Becke'>
    <organization />
</author>

<author initials='T' surname='Dreibholz' fullname='Thomas Dreibholz'>
    <organization />
</author>

<author initials='N' surname='Ekiz' fullname='Nasif Ekiz'>
    <organization />
</author>

<author initials='J' surname='Iyengar' fullname='Jana Iyengar'>
    <organization />
</author>

<author initials='P' surname='Natarajan' fullname='Preethi Natarajan'>
    <organization />
</author>

<author initials='R' surname='Stewart' fullname='Randall Stewart'>
    <organization />
</author>

<author initials='M' surname='Tuexen' fullname='Michael Tuexen'>
    <organization />
</author>

<date month='July' day='28' year='2020' />

<abstract><t>The Stream Control Transmission Protocol (SCTP) supports multi-homing for providing network fault tolerance.  However, mainly one path is used for data transmission.  Only timer-based retransmissions are carried over other paths as well.  This document describes how multiple paths can be used simultaneously for transmitting user messages.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-tuexen-tsvwg-sctp-multipath-20' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-tuexen-tsvwg-sctp-multipath-20.txt' />
</reference>



<reference anchor="I-D.deconinck-quic-multipath">
<front>
<title>Multipath Extensions for QUIC (MP-QUIC)</title>

<author initials='Q' surname='Coninck' fullname='Quentin Coninck'>
    <organization />
</author>

<author initials='O' surname='Bonaventure' fullname='Olivier Bonaventure'>
    <organization />
</author>

<date month='August' day='20' year='2020' />

<abstract><t>This document specifies extensions to the QUIC protocol to enable the simultaneous usage of multiple paths for a single connection.  These extensions are compliant with the single-path QUIC design and preserve QUIC privacy features.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-deconinck-quic-multipath-05' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-deconinck-quic-multipath-05.txt' />
</reference>



<reference anchor="I-D.amend-tsvwg-multipath-dccp">
<front>
<title>DCCP Extensions for Multipath Operation with Multiple Addresses</title>

<author initials='M' surname='Amend' fullname='Markus Amend'>
    <organization />
</author>

<author initials='E' surname='Bogenfeld' fullname='Eckard Bogenfeld'>
    <organization />
</author>

<author initials='A' surname='Brunstrom' fullname='Anna Brunstrom'>
    <organization />
</author>

<author initials='A' surname='Kassler' fullname='Andreas Kassler'>
    <organization />
</author>

<author initials='V' surname='Rakocevic' fullname='Veselin Rakocevic'>
    <organization />
</author>

<date month='November' day='4' year='2019' />

<abstract><t>DCCP communication is currently restricted to a single path per connection, yet multiple paths often exist between peers.  The simultaneous use of these multiple paths for a DCCP session could improve resource usage within the network and, thus, improve user experience through higher throughput and improved resilience to network failure.  Multipath DCCP provides the ability to simultaneously use multiple paths between peers.  This document presents a set of extensions to traditional DCCP to support multipath operation.  The protocol offers the same type of service to applications as DCCP and it provides the components necessary to establish and use multiple DCCP flows across potentially disjoint paths.</t></abstract>

</front>

<seriesInfo name='Internet-Draft' value='draft-amend-tsvwg-multipath-dccp-03' />
<format type='TXT'
        target='http://www.ietf.org/internet-drafts/draft-amend-tsvwg-multipath-dccp-03.txt' />
</reference>


<reference anchor="ACMCS14" >
  <front>
    <title>Experimental Evaluation of Multipath TCP Schedulers</title>
    <author initials="C." surname="Paasch">
      <organization></organization>
    </author>
    <author initials="S." surname="Ferlin">
      <organization></organization>
    </author>
    <author initials="O." surname="Alay">
      <organization></organization>
    </author>
    <author initials="O." surname="Bonaventure">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
  <seriesInfo name="Proceedings of the 2014 ACM SIGCOMM workshop on Capacity sharing workshop" value=""/>
</reference>
<reference anchor="NSDI12" >
  <front>
    <title>How Hard Can It Be? Designing and Implementing a Deployable Multipath TCP</title>
    <author initials="C." surname="Raiciu">
      <organization></organization>
    </author>
    <author initials="C." surname="Paasch">
      <organization></organization>
    </author>
    <author initials="S." surname="Barre">
      <organization></organization>
    </author>
    <author initials="A." surname="Ford">
      <organization></organization>
    </author>
    <author initials="M." surname="Honda">
      <organization></organization>
    </author>
    <author initials="F." surname="Duchene">
      <organization></organization>
    </author>
    <author initials="O." surname="Bonaventure">
      <organization></organization>
    </author>
    <author initials="M." surname="Handley">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
  <seriesInfo name="9th USENIX Symposium on Networked Systems Design and Implementation (NSDI 12)" value=""/>
</reference>
<reference anchor="CONEXT15" >
  <front>
    <title>SMAPP &amp;#58; Towards Smart Multipath TCP-enabled APPlications</title>
    <author initials="B." surname="Hesmans">
      <organization></organization>
    </author>
    <author initials="G." surname="Detal">
      <organization></organization>
    </author>
    <author initials="S." surname="Barre">
      <organization></organization>
    </author>
    <author initials="R." surname="Bauduin">
      <organization></organization>
    </author>
    <author initials="O." surname="Bonaventure">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
  <seriesInfo name="CoNEXT '15&#58; Proceedings of the 11th ACM Conference on Emerging Networking Experiments and Technologies" value=""/>
</reference>
<reference anchor="MultipathSim" target="https://github.com/obonaventure/draft-schedulers/blob/master/scheduler_simulator.py">
  <front>
    <title>Multipath simulator for the IETF draft Multipath schedulers</title>
    <author initials="M." surname="Piraux">
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


    </references>


<section anchor="change-log" title="Change log">

<section anchor="since-draft-bonaventure-iccrg-schedulers-00" title="Since draft-bonaventure-iccrg-schedulers-00">

<t><list style="symbols">
  <t>Renamed Delay Threshold to RTT Threshold</t>
  <t>Added the Priority And Lowest RTT First scheduler</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAKR+WF8AA81d+28cR3L+vf+KjoTEYsJdPXI+2Lw4MU1ZPgKWxRNp+ADH
EHpnenfnODuznp7hak9g/vbUV9Wv2Qct2xcggn/gzqMf1VVffVVdPZ5MJqqv
+tqe6ddD3Vdr0y+1K5a2HGrbOWVms87eHblZtkVjVvRq2Zl5P5m1jbmzTT90
dlIVRbeYpGcnz56r0vT07ItnL55Nnn1O/6mCLizabnum7fu1UtW6O9N9N7j+
xbNnnz97oUxnzZm+fHvzSm3a7nbRtcOafl9cvP1G/0AXqmahv8FFdWu39ERJ
N5vedo3tJy8xJKWKtqSnzvTgJsYVVaVcb5rynanbhsaytU6tqzP9Y98Wp9q1
Xd/ZuaO/tiv88ZNSZuiXbXem9ERpXTXuTL+Z6q/SROmqiOBNXd1Vttu513YL
01R/N33VNmf6+4tv2+HOVA3dsStT1fG1afbal0NRy2PTmc06fj3VV1Vnhvex
z9fmfbWy6eov9iYvTOWFY/38ZapfWn3RNlVT3Ma+/jLQ6KpmfOsXO/xZ3pqW
tpCXHpjcV8Z2vcsm1/fLyg7p+ri3G+scKYjLZydvTOWNL3v/xJT0IevqguRo
SBmWsauLZVe5vl0v041xX+frdW1TR8WaH/vS4PK0aFfjiZyvbFNm8+huBxcv
jht+aYceRkKzqe0tGgp9rPi1qcFrNBO+S2JUqmm7Fb19Z8/IYpp5+qX121cX
f/zsxR/Cn//+6R/Dny8+/wx/Xk5eTvvBvrfNpHd3Gxhov56sgm2HR+JqTX4e
qmL/Pg/KtxBvTsqiWOOJ84vXF9fPeRRaR/vBv8n+AqSr11P9ynY1a0+6StZ2
Xpvt7rWxlWntIezr92vbkYY3van113emHljOup1nAHZzcaWvE4jhdUdvWQdp
numrri2sBWo4vNfT4rx49vwPmJa+vvzm4s3r1xpo5JbtWlPbF2Ztiqrfarc0
HRAp3KSWv7t+efn8xYOSeGuqoho+Tj5fmc7PN1w8J6ER7o2ukQb+uW1KM7r4
iox6oEk39pdEmTdDUFnbbS7hP7cbutyVNO1GX/b6K/tfpMSuWjSYOj2vL1dk
FCs2e7pAN9d1uzWz2o6XYE/un9P176+//u7yr/p6u1q3rhpWkO93todEbUmX
XW9Xzvc37kzW+QkErp+/OKHWL9589/Vfb55/elz6X9EMrVuZxo0ufwP8IwX6
Zem/xcWhHPZ19oh+Xr8+v7rS//L408/+pG/aDcnR6Wuy9H4sm4ltILBS09N1
VfDc9hX1osUE9SfPP5UGDyju8+fUIBSXIHtuO9sUFiL9emW7BZbHyxZ/JtNx
LNkbWyybtm4XFUNsHN91tTog0UxpojeKs864Q0VwYfq204RbPMLLr29eCX04
TDG4GdMtbH+ml32/dmdPny6qfjnMgLtP24xzPBUWkl5+Oqvb2dOVIa3pnsbL
7+IgpuutUpPJRJuZ6ztTEF24WVZOE60ZIAi97lrSQ0sC8YKHXMPDmsz+1vbZ
YDEpFfGQmAxp1po4BdohgtHWTlsC1PWaVnZDc6BmCWcX1rHu0p9919bU0FRG
tapKsj6l1GOwmq4th4If1B8eV/h9j+HayHj0xtDQ2TSo/aEprUi4IhMhiOm1
cW5YrbmJfml6vWwd1po0dHdUpGALstdGtINWlnqYG9KdzbKi68S4ekyXXt2Z
kLN3tiPLIXLlpvp7PwYSaer7VAM4wpgxBk33BzeYut6qqgRwzCtqcLYVBbnS
pizJi7PwKxrx3rCmft2yCZYtLVbTooO6pB63q5YG27el2YrqbVpN5NKRXRGC
Vp3rT5XRRDA3sIU51tf7jT4XcRTZ4XmHoak4NOKSfmrUEMltsdRlNWdT7DXx
YUP+7ja8RkOhBXVWsw4t25UtVeqRhlssGUfvKpO1kgQEmV/DdZck5DAZtTsZ
aZE1AM0SZzLQ4Di+B5YfulLSbCZEootbhgk0QdbosuG1JAs9a0ksl1d3fxCY
vrr7I63StRdTlOchE1mSPeuZtQ0FBT3xDAyt1TW/ukBnNIY4eRhaNhkKI8he
S2CcI28ncz3b8f0fPniedH9/ys3VrSmj9+ZOHQAX3V5f3OCFX+BNaCj2oV5e
XIR3jhOl+3sIRqWR/eX7ywv/1jH6dX8/UpAxyKgkQREPrRuv98awIW1ZQJ59
2pKXxb6nJSMACtijI59sG4UHBoI9VlNQig2W4NS3VePhoh5K0oqaYjiyghVL
bMmcAdpkLVaVNGLllKxQsz008rj2pHG25EZcWzO/JbdycQghceMKjZDzJqXw
v8dwnF2jeJSwwa5mhDDqVdeuDiIv2ZXdrFtSd54ktV3xvYJ0lUHDPCh3wJhM
M3uMXm+smB9RwoGwCKA0s4TPc1N1PFe2tgmrTpJJetG3Cv20PO7Viloj+yLf
So/cQieoay9qXRC8UvsswVIRiBYUH9fQbMwpmzWBQ9luIlXYsSnWNLQy8MPe
E5aEbN5+KLggHQbqruFf2PJpNljj/ZUlQkSOqWSFuKtKxliaPnkJd6oOrAQm
YWrXYiZGM49H+1WzHnpeijRaIi8lz4Gc/7wqCBvIPVczGXZUTYZpGrvZ89o0
0e2axg+IXll6tXC6rm6tfntzwyZqKFitufsiMH0vY/JuFHiVBGznD+v1AA6R
hjyvIfdy6MKq1NXc9ojkQS9UWnpZBFb016LoLCHSSyfvETsrRD06uwCpsXxD
FYTGaOBpSYFjBv4EHdy51xl5Pzio0q4JrZxmfmBVBxfXWWGEXkn8WicOwTNj
Y9mfPzkjcmEqewd+Pn+UFoTUoGaH4apegjUa3GUjrKEwzp4GvfUyURA+miGO
warKSIZn1hkg8BKxFGjQZHJLusT3NxQCydNEdk23BVXhQVC3583+BDeVW1rB
JDZAEBD2F4ascLFrNTw4CI70eX9M1AhdJ1WiNnffhCwokOOnFDPU3jS2HRwt
DGZLja1ylcmV5DWMLu8pc6IqWG5wB3VFvteAL5MhhxgJDoxMxqsIO4qhZ4PF
K65o11ZUoOKkH7NjUvsfAUb0509n+rF+8uarM0SEG4Y5wBHNlGzKkC05cqkM
DxuyRiu+2SSeDYAZDZ+Y7MbW9Z/063OKcRfkSk6UsN1d8xXUtXpBWNjBGGy3
isFFMn+BUDKGohcLEVWVFSZfBkR2wjRYf1fEl0FoQn/AkoOwLpakxJJoLO3s
rpJVaxtZuvlQR63rrOdcxGcMVIRoKNjZnfVagAiCqBtdaA5CSt7xOQEjBSWE
R7Q0+8EIVEAxj3pQBXy2RvgIBwts8vJ0HII6wNSmPmbkqJJp8MOxDznAjTgz
1R9aSdgO663Ry2HBgQvCrNbbK3FQcBN0RgtTERnhGAG6lLgPKeW+zyfDwk82
L9hPdVi2SyOqNB8aljBx836rYLQ/E0ASaeK7lswWo9oVOWc7iq6lOEWWkiUS
rVwR0wIRt8g0wsdA2kTae45LlmBmFYXkRI6DxnkwgMu3HTBfqCnB6pugY6dq
vT9ZbxDk9sGy10guHB4sDaBukYIvoZAwirnptPXu9BimRx643yL+XBFY2vc0
R6coWCQD6myMRPNRugELWg80DywPOSVZm2gaAFqSNfrcBRqAwu8Amj2JebTx
TnFG7BuzKLqhqGg9mPkRwA5NZ+tKEllXidkQMAV3Fbo5peZSn3nuIEl0317Z
MIAOt027aTAHIUtj1WfIIoZewCth1F6yY1/t1raowIZy50vza5EgKIgeWQ/1
e8PgsXMgDcepYrIjmQmPAHKiSc1JemvS4ggYHz6ENxCsXOICKT5RdlC8+3sF
wWQj0Okm6yPBG96uOAlF4SgCzExoibSpV7AVsgC922Lyq5lseWTpNwdSrb61
di3xJDcgmQNSBscoKHjY9EPF+EzXCURdReufy4gxPcHkHm3HgpI++bB0zojP
+IAQfc5UAZkATpKuZNS2IVhvjyWTpiFH5RMcwBByfJ5uBKTP9aolLwTTYocU
+5+qce7UpzUawg3E2ewKyUh5ySV5QpGdfhGigx8s7PQuxOOuGJxjnkkY3m4Y
t0qzjowiqNF4XAiuOtvbh/0M08SB3RVn+ADy6jGztdDsg+z7w+OokxT9tZ2s
L1Ji25G2P9yKoBl8lANEiuE4xdx1L3YC8c09H8OQO56HCJJWngxA9WbUw7DO
5F22vOB+uIw4VTPmZALqYV2iBw3cX1p/mreMJiJahGYg4VdDB8KCpc+lxEqd
mIx9T216tdojMqKRjA4mz0DtgQ5PD7ZfiavgIFoiBBeaNSBZcBA05D7IS1yd
Z2xeAYOvo1ZfW4NtiVOiSuO9BzfMEAfxMji7YNGxv0Zzry6/g0t6e31DwZJZ
0PJZBjwIPwwSPhOQ5UfHdHKq3nCcMQYxG2EDtkFEkJ+h9nktd2YZ8jtItIVV
YU7KLDwQJSwyUb8QsYltCwtuyWF5KWcR7nmjaKEY1KIuhGwFU1M/DjAgGzld
mVGPZljNqGcSzJwCw5HAEbgiWjhNAY+PjzNhEVrLBMl0f9hTpkP2huyLRLqI
0A7myeEYhcgbD/ExMXHAYEzU88OtnSpEQPnISM/8TAiluywnvUddaYkIB6r5
NiywiokGEjgcHA2y9oyF2psR8cKOllcD3+yBRIhQqqk69+maycwA3g+LI8BM
nqDhCaC3mPpQcyTAZpYjSR/rwHuD5zjgFmciWC3AwfYyRtAcimmYLpGWmpVP
C0iUbDRFFvbBYZq6X3KmmWMRQ53DZkgyitoHWbFZlC5CLILgTFHYNUYrOxFM
14kaSfRAopweVK8HgT0pGs+eAvTeBkKcpe+QgK4l5Z2F9nyVGHkjCW/+eTru
84BLk5gzdCwOReKBwgLrfGruVLqTqo1hpa49Ul1LLCI0rLGLtq8Ci88GHFMN
B4N1cOhvq4a3/lL/xV1YZFnKQHjzHCfZPXkYyeGRyry+mnDqGu+/NL1ZdGal
5ToS4di+d20wxYAIeDnJT7yWH4zQgrHUmbmwzMid3Imf8xmPFH4gQ3AJbryV
1KHPlMmqZontKLkdgM25sn5ip4sp3UAdgVkhlIIhIxMOafUSUfJilSeeKKYO
zIzwUDVtM/G+y+fczncVhx0rALfoH1RWdURx2P8UAywOy12tRm6W+fOEyOF6
IsnFO+9cGTNPg1/acoTSlE/H2ncKdJWxvr75Pp+f6LfYiXR1IIULQGXBtGuJ
pRGZ/spF8FmcPbSVxVkTSe6QjYUWxmQgT9Jn/JDbO9nT/JvW+6a+aga/ETKs
UZtWnoBXXu3FtVmQ8uFxFs7EXEP2bN95IJyZmgO2xA05iyDZGooI76pC/LVk
CrI9rZw/RMYUU/Kx3ZStFWrqH+UmVTumIT4n4HOeek56me3BJ5e/l+Qlbmmq
lbd1n5gF5Na17JRukE1ygebLdPYCOfnNm0XYkOD4AJtI8E2kE/XAXXO6jdeN
luxryb0lLkGM7W9sJsClXFbOU5joyjAs2bIC1/e851SZ1Fzld9PBCWjmk9kW
IQgpSw/hcJNBNCOmw3p3il0CcBpVUPQ91KZj6DoBy2o9/3OROLDUkdtgiYTd
6f0BE1sW80ujFyZYxP3fimti6HaI+DhoC62ZkbSQy1QIO03nk5q8W0DjmPDo
hK4Sq2DCiMmugKijVH3FakzvD14vsL3QFFuvaNi8wgyMz0b+ACUW7KptCHHt
aBl9co+LhcjkTYPIIa1laD8bN4cQKXuPrYFelHlICRoEqh4bwpphJ0hytuIk
QIxi4jH080sbHBC6oz8dyhEgLc46YgWWFbMX3i/HjhT4u1/8wMD35ElBYd9Z
w7aUX1ftnIYTBoMotGrg7fWM6CcjOwfijgF/XZstoje/OxcR0e8t9qS+JDSf
HpUQMW/GwGz9ViaFNpsaVRUuDivhAPbrti3vqxhURiCUh2tIz/rxOvG1RlIE
zDhsLpkcWlptyQQosomuLo7NSx/ZrtZ3AqEyXXCS9PwBWu58uBM2+xjtx0o3
bhhql42BR4msuaSReYKDbAgkYTIRlsShO7RkaZu6R8qRKElhhj5UDPg50rur
FpQwE6pKWauDaQ7OEjHtYkc8CVSM9y7IaACuIRjkrKoClK4wVGYm++DNfMGz
Kt+ql2T0KsEqaxRZqWAbwSoLe3okMQLJojzhlmxYUqa7467JcfSwHNlrxC/j
KQLyqxyGsDcxgf7EoGlFBtZnlSDOJ2+NgulNwigZxvTlfCeGFEEiJJScP/nK
msbVbeNeN0nr1G9y8pC7tKYbU/WZuMSIQix35zPZe6OgYZLaWJX2t6WVnSXx
dispceZyrH8Pyo8LMcBqLRMVqeyakMLV1d/jBjJFhmOh3Mj+aRPapkU0fyMv
E+lLcEJbrx4BNHawDQH7eV2nvMFRFrPr9iFRJkKRsxDXWiDQ6lXm6/V5hmOy
7iVRwtL6vbgyATYME8PjRYgD1G/gO6OXysAnZnQCKPNjaQfV9ZJJ3K0cAc3L
ksXHNx7te1sMiLwsaxez7KjDUaNmNo+zlQ/2H4pJIZSD22NZjqyzeR1Uv13L
DoPPfUntjP8hxlWYjsbY2E2q6jnyDIIsv4mZJwiOv8bxmbx7oJIo8CZ6o2nJ
55QL8bmnsbDPlCQ/crRyXXZURgm7kFvaX4Kwyyr5iwOTETI1zryK5cWyj872
Q9fsjS8k1TjFEdJMTEgaH0wJ8WbsDT0TxYqoUgoFHdd4+egpVDtgDtmWRQW/
NH6BawqysUnXMeDxyG+k/jNbujCIUUjkmd8h+VYuyhObhhWLJuQuPXD5tCkH
r2pPXitiKczVPVr32SsbThkH8OWxxgFyLkeFexOfE9htPQQC3LhMaRuan+5W
7sa6lKttv0QewTSLgcsHgew+KX1oZwlhujpwHbKJL/rsb2g8bBh71A0/mR4I
ufAZQO9+Gvs+Vg/n5BVtdouUyBe9dClpEGI9VaWyBTgTwQtJJB8bZFEb5xIk
xhBOmV7qpawHDdf1/ZksNzMYagelUFkk6hOMLz7/7P5+ileK4h2nA/xrWWbg
SKpVV1NSKVuxSjoaCN7viGlqnb3xzty1VclUTfItWPYt9+gTqE/qkzOae5S4
TyByZOoz7Q8mYtFfZxFYpuTusZLsEeN22banV8zoDLjMLFW6f/iQ187f36sq
PyDBBGF/GysmfB7aXWUSprLSFd8pnNCc06NAb5SCzmy/sRwlFnUV1Is3phlL
chat/O6gevxYv+UM0tt2VjWcV/WFSPn1fFvCybxBxcN2Aw2K9HTAoHvLkX9M
Q489GzRZUkG2lFqkTUzgY+WRwCk5IT04suPp6LwCJ1B2N9dSYUtMK4esftw8
DTvsi7Yt8232gCd7HodxBdhLrquSxNYoY7yXuzwjSu36dxkp45IPMepY7d4F
c8HDOqtNMi4tLmdpfcXHbgAI7LPzqsnVmOaFkptGNGdeLSZdB4NV6n+O/1OC
E7zCvMBP4lGpEznr8ejRI32xbOVcBKlULI8MJX3GZx471g+SZwOaR6/x61Ec
Z/qNTw3+iArHn/QX+juSrOKnaDJxdk+creeh3uQd2fAZMjgn4eSJ1hWoaD2f
xqZ5UxNXWJfTg/gH8H1Xle+pu/TIlFTEvn8ybuVE/5t+Ht+1tbNHW3oWb+AM
qS3fSWiVd/FjePzsJ2o3u34WbvwUG2Eqw5PIWht3TnNmBZ4GJEziORk/KceG
RuL5Qq/3HvEkaP2gcnw4049FkeRszxePzoPFs8boHUx4dO8NKWlqtD0U6hIC
DiiGDPg0LuDYJbWAPCW1a7gegrGxBkog4iQ3Gh7BeRTyCK3L4V2l/ax2bRuB
vB8sQhD4vBz7YGyH7owt0GdBiM1KtEO9uywfn7eYbc4SjHNeJuTCt3JujjlY
wfnFUUkzi8Nng2OIpwJIYNNhaCrgGIqsyHuYWKsg4gjwfhjfCNYcb+YzqIER
TEbdw9tywtfvrgQXdnCIfi+HI5YplzHjPBdibObNLCzE6l3PPp7GI4WPgdoE
mhZO1yC+cqmIEeGbZhyMlX0BRTFCL1SMgdEqMgI+z8JFErwBOxs614fMEk7x
sm8nFeyQu5gIYMFusVI5eAMywmh25z/Gcr86SnsQ93KffgwSB7X7fYicMvag
Bu9pOPmIEzqP1/pb+iXgnKCbJUEiJBCZPP9osNaT/9yB+wRSGY5mCIwLhL8n
+p9B2+RGPrqTByE3f/IA8o5uHwHg6lQw2DbEyAE5T/KOTv4xcLw77alMu/qI
af8m4N7kyD1GtP8X2J30lPM2DAfjEx0B3NXD4K53wN1XS5umD4XsqTpcSXlB
2lZlLoUjk3ELNCS3qlDLmiK6GPkvbZOdPpEprMSrXEuJ3pXfshSHsnMxyfkT
Glu18hswUrTuxSNlFbKxEV4TIJSKM35IkmiLNqTC4vFCHSsSGXqRmaYZ3Vkp
EfQVfpwmcEja+jWlKZvxWGIcGKNJzsoB7cKgKhzVZJ8YFlhJhlTXbXvrC32l
KxDW8F6gyGNeK9WdI2ardpit7IhN0A5T3F/GVZF+EP6DmMrxMs6IHoTW0UJk
7hmQ+uu57A71e5KI4qm+tdsvarOaldTpGWFN6PlUoyqic/aLm26wvwuZfhWY
ZELfo4NHlfsArIDD8PnSvNC5cm6Atydp5RuZojOnWY09bwmkVZAKIWxotKlm
A/Gk3wSwiQ/50878vs8xT9Vod0SSvH4DB1o7GwBwJErjDwnGDQQ+PdAKQYg9
yHEOrlvk5HAlNVXSSrZdpHlXeme3QiCT1a9JMbCIoQjoB9AzLtGizHTGn0Zg
UbGt2np9PDuTUPHg+R4+i/aMJ2tCLj6KnvHDJ6pQNFrJSZkxIp/sFiJRq2kz
CuDUEGyL9ufQgFlziT+q8oi9dWSqWZLiBmUuN5DxzZIYGh/7/vC46/tJH377
RP7x57P91HRS6LDli+qomCHbrbWZ2ZpzHaF+Mg5CAnfekBBMDUXoSLKpvYMX
WTqBKx/cCidvcSBSti85Q4aNsuAyyQ/Wo7o1qQEWWT6amfJRwKdzSTLBUXMh
jgdU5VMFI8n9EqR+CStjXA35g5ubKNffhq27EkQOMpNiIKzx0hmqrEz/uyD3
SMqAIHQ9RVpU/4c8EzvlNfi/gtfREhyOtx9W4wi14YwsFtyrBTCXrqDa31mu
rCzLDGHlDE841OMz44rt7dt2A1e/2z9/RIFMrubbGPy9P7LnX9g1EVn1nPRk
VsFFEChzzPb+4PO7cHpW6j990o13aGT37WiNxpxPGaGQid/P8oPEdbJj66nL
tAfuwsmuBFS8eypFtH6f1tMTNd7F9TsrGYfmox6Azzniw46a+Jtfk5XFcfzK
rSABv7eufNo7bZcvKaSftPNJXTW+kJgGgfIUf2KR5Xy66wz2mPeIrSRmSL5n
gQ0fxRVQWfWTPz3EO7NHq9jD23y4xW4AX5ImdSrbDo5FNbLhcLM8RNzj9mnI
0dqGyaxbgymE+ixfvB+aCePAqPhwMTTR7xtorgbLfPmROnaSJB/tNf5sVZhT
qGkaC5ZzFT7BsMeLVe1tRY6Sp6Ol2dATicbWLLOVUB4pe3We4LLVT7DRD9O6
z9LqWdo96y8bouxS+thNhc827Kqf+yjaLMZMHbC9/zZojzNOw/2tdJlCK944
l+gIR/kKXyJ0DX/6a1k1p6VZ7ID7X8Gk9X/vYj3Wez0NO2P6n77QnwRN/OT3
8u6RLux5hm+TErwaYyw7hIh1B4EkO4efV+HvFgqBpJqtShC5YxaD/2oSK+iC
q0VaPrEzNHz+ddf48KEF2fiyOHf7dxPO4qXoj2M9+aAa85E3D7V3S+DJnBhz
sHd+H3AMUnoX4pQ/Ar9biBPLE2IIGlm/r0d3WVGWR+qsulMFy/YFtFyb4PHC
vwN3HNHhSP2FYIPHbzWCJQZn3OJan6NeIu8xVR+FPvJT2d6xopUQK4zk+/Ng
h1hRjj1v/siWiPgJB/+KYoTmk17qt/JptE2oqYoJbn5ta/uT8C0TGYQcyKYR
GpQt+RrCUHPG3xsaLwZMbl552AYP9l+AiMuWC0VlrvOHoCQsgSR93qRtsamW
XHPQrNOQ4ODi/zL/aIQKNkOcZpf1ML1pPTsJFZn7CRWu1RXO2yqctpGvQPCB
HP8VEj7ixOLx1Z95EVS+VlJhGaUOn8JSTnPifYQaH5wbmx+m5kan7cvKl7eN
o8ewlUJPvNiLGy+uCFOdHcoWmZu9+O/KVw3EDfNi6JBCpCnXBrLu+venOJry
buOPqbim5L/52zxrLhiKjZ79pImjvhl6rLM/Q58LgzO7IdI2XVdRLHXobAxU
m7/zwZodN2VbOXud10I7WSvc/5PEY45zZlJZFL86cCLs+aJdzaomntPIz8NS
IHaWEiaY6EPMWSlpijGbrT5kXLM2/c66kY9AtbHgil8YQu6Ay5TCCUFQtxzH
w2Kv84Gx2e2MKtWR7JYlII0rKUffiD8iwaNA8bwLEazxis9F6nLMg3cr1B0N
ctXOmPMXBX/r7MTHAKSAvF3E7/uvEM3Inudkn5E0855cbxYsIbbPR7tu8tGI
pI+8ThbT3I8DZ26MbOTRcjvrqvLROHW5k6QMIpyQCCepzQmv50emLYN+nDfl
P5SK7WVw/TI3/+dELfb45AVsm546SZ2P+Zx+8hx0Bo/EhuO2z69idsdef/DN
I/nWfZb5K/frI1ecClf0AczFxTV+TgNt/J2s8UHty0hkSstGfBkpBQcz0dZB
KXeACB8hAF8SIBDayGWnDb5OiQSsfEPFxfNEzIZipZNCqWCe4T2QauSjunLy
wN/CsLhSUr7PkqWS3egkDKqe+mGdECdNGELPtidGqIcO5QMKCPHH0Mcl6A8O
F5G1FKmysDdEEgLfUOEziylWlg8wNT6961Wy8mfQaU5y5MUQQs2r4PBxUlHN
aH02VcnHbfynyjDuxB9E2P5WLOkWCB4NXaUdmcvsCFp4yLu8fHqO68uQLid/
mzrxbDf5AznLGYBFkk0yAPlUBlMK1IDJhFHTBOPpwxcMEcLGCZWpJU9rw0mD
RPoWdTtDlZbHEc9U/MHFg590kq9E9HnmLCoJjyseR+ZSAiuJMmZz0Ejn2qKS
cjPserEncumy18JHRxN4xxyR+vBhNyu7u10WwxF/vJuYZp7/HftaddCoNOdK
mJ/CpMTHZkewTo/pAD6Vl3jraX4ULRzbwiEEPu5NEuVzBFLssvFnQUMtSH+m
VjjynM438Pfego1x1DEq5Q9sjHE0fA/okFn4L/14hQo6Q7eftuETRSGWwFZl
UqQ9qotsiZ8UFj0OXYpwQq0hG05OqRPnHlEMaMqjh9jeiFjsUhIZwuhUEr5A
izMd/BWoEZJFg86zrSJtm8s6I2cQuIo7bwfQImmBnMLn4h2Zdqg/Txv1snMy
1p5pSAI6/iBOEb82lz6ZwPLM+t7pWQnG8noyMJSDDQdw8hVAEvtBd6nOry8u
L0nqCxzj+ijPyv9jib00jLQA/4iPOePUHs6aXMgHV+t2IYUBXPD/Mf/7jGdK
/at+a/H/FCj1S2RfspQ/TRTGGi/Qo+eSz0cJfFic8xRSHEgOqf8FSGqzcwtk
AAA=

-->

</rfc>

