<?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.16 (Ruby 2.7.0) -->
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bryant-mpls-aux-data-pointer-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.1 -->
  <front>
    <title abbrev="MPLS-Aux-Ptr">Use of an MPLS LSE as an Ancillary Data Pointer</title>
    <seriesInfo name="Internet-Draft" value="draft-bryant-mpls-aux-data-pointer-01"/>
    <author initials="S." surname="Bryant" fullname="Stewart Bryant">
      <organization>University of Surrey</organization>
      <address>
        <email>sb@stewartbryant.com</email>
      </address>
    </author>
    <author initials="A." surname="Clemm" fullname="Alexander Clemm">
      <organization>Futurewei Technologies, Inc.</organization>
      <address>
        <email>ludwig@clemm.org</email>
      </address>
    </author>
    <author initials="T." surname="Eckert" fullname="Toerless Eckert">
      <organization>Futurewei Technologies, Inc.</organization>
      <address>
        <email>tte@cs.fau.de</email>
      </address>
    </author>
    <date year="2022" month="August" day="06"/>
    <workgroup>MPLS</workgroup>
    <abstract>
      <t>The purpose of this memo is to describe how Label Stack Entries (LSEs) can
be used to point to ancillary or meta-data carried below the MPLS label stack.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>There has been significant recent interest in developing the  MPLS data plane to
address new needs, and in particular to carry ancillary or meta-data below
the stack. In this document we consider that this ancillary data
is further subdivided into a sequence of blocks. This
draft does not prescribe the information or its structure of the ancillary data.
For the sake of examples, it could range from
a single ancillary data unit to a structured set of ancillary data blocks similar to an IPv6 extension
header. There has also been recent interest in carrying additional flags
or other indicators to qualify the forwarding operations.</t>
      <t>This memo proposes the use of "spare" bits in a Special Purpose Label (SPL) <xref target="I-D.kompella-mpls-mspl4fa"/>
be used as a pointer to items of ancillary data carried  below the
bottom of stack (BoS). Finally we speculate that in certain network scopes
we may usefully be able to create pseudo-SPLs from the ordinary label pool.</t>
    </section>
    <section anchor="background-documents">
      <name>Background Documents</name>
      <t><xref target="I-D.kompella-mpls-mspl4fa"/> notes that the forwarder does not need
to use the TC, or TTL fields in an LSE <xref target="RFC3032"/> that does not become top of
stack (ToS). It proposes to exploit these fields as indicators
of forwarding actions, by modifying the semantics of these fields.</t>
      <t>There are a number of key proposals in that draft:</t>
      <ul spacing="normal">
        <li>Using the "spare bits" as forwarding indicator flags to
specify actions or in some cases inactions</li>
        <li>Using the method to multi-purpose SPLs and thus expand the
number of single label SPLs available to the IETF.</li>
        <li>Reuse the Entropy Label (EL) fields to carry additional
data needed by the forwarder. This latter point could be adopted by
any eSPL. One use for this additional data that was proposed
(certainly in discussion but I cannot see it in the draft) was the
use of this facility to carry a network slice identifier.</li>
      </ul>
      <t>This draft proposes that these "spare" bits in an SPL or pseudo-SPL be
used as a pointer to ancillary data below the stack.</t>
      <t>This proposal can be used in conjunction with the other indicator
proposals, for example by using different SPLs for different options,
such as one SPL indicating the presence of a pointer vs one or more
other SPLs for the other proposals.</t>
    </section>
    <section anchor="use-of-spls-as-pointers">
      <name>Use of SPLs as Pointers</name>
      <t>Previously it had been proposed to use the "spare" bits in an SPL that is not ToS as a bit
field or as an enumerator of a slice.
However, it would appear to be an advantage to take things a bit further and use them as a pointer to
ancillary data below the BoS.  This ancillary data can then be accessed and processed as needed whenever the SPL is 
being processed.</t>
      <t>The advantages of doing this are:</t>
      <ul spacing="normal">
        <li>The ability to find the ancillary data without scanning the whole stack.
Speculatively scanning the label stack can be expensive in Network Processor Unit (NPU) processing time,
particularly if the stack is deep.</li>
        <li>Ability to specify which ancillary data is applicable at the hop being processed.</li>
        <li>The use of a pointer or set of pointers allows for a simple packet parser.</li>
        <li>The approach is inherently  general and  extensible.</li>
      </ul>
      <t>This concept is illustrated in <xref target="FIG-mpls-ptr"/>.</t>
      <figure anchor="FIG-mpls-ptr">
        <name>Use of In-stack MPLS pointer</name>
        <artwork><![CDATA[
     +-------------------------+
  L1 |      Top of Stack       | 
     +-------------------------+
  L2 |      Pointer SPL        |-----+
     +-------------------------+     |
     |                         |     |
     .                         .     |
     .                         .     |
     |                         |     |
     +-------------------------+     |
     |      Bottom of Stack    |     |
   ===============================   |
     |      Ancillary Data     |     |
     .                         .     |
     .                         .<----+
     |                         |     
     +-------------------------+
]]></artwork>
      </figure>
      <t>The ToS label (L1) and Pointer SPL (L2) form a tuple
with the semantic "process the action that the Forwarding Equivalence Class (FEC) of the ToS label specifies with the 
assistance of the information pointed to by the following SPL". Ideally L2 is SPL requiring a single LSE rather than an Extended SPL (ESPL) requiring
two LSEs. Whilst the additional LSE required for an ESPL may not initially seem significant, the authors imagine that there may be cases
where multiple pointer labels will be required.</t>
      <t>Let us consider the case when the ToS is not an SPL of any kind.
In this case, the forwarder looks at the following LSE (i.e., the LSE that immediately succeeds the ToS). 
If that LSE is not a pointer SPL, forwarding is performed as
normal. If, on the other hand, the following label is a pointer SPL, the forwarder uses the information pointed to
by the pointer  as assistance in the forwarding operation.</t>
      <t>Note that whilst the pointer can be simply point to the end of the stack, which
aligns with the other  MPLS proposals being made, the ideas discussed here can actually point to a specific
item within the MPLS  payload i.e. to a specific item of ancillary data.
This in turn also means that different LSEs can point to different ancillary data components. 
This allows the MPLS application or packet designer to express sophisticated behavior in
which it is possibly to apply different ancillary data to different LSEs, i.e. 
different network segments.</t>
    </section>
    <section anchor="label-operations-popping-and-swapping">
      <name>Label Operations: Popping and Swapping</name>
      <t>When the ToS is popped, consideration needs to be given to any Pointer SPL immediately following it.<br/>
In the basic case, a Pointer SPL will simply be popped along with the ToS.</t>
      <t>There will be cases in in which the same Pointer SPL applies to multiple labels.  In those cases, 
requiring the forwarder to pop the Pointer SPL along with the ToS results in the need to carry multiple instances of the same 
Pointer SPL, one for each label to which it applies.  As an optimization, it will make sense to offer a 
second behavioral option in which, upon popping the ToS, any subsequent Pointer SPL will be swapped with the next FEC label. 
This case is depicted in <xref target="FIG-popswapbefore"/> and <xref target="FIG-popswapafter"/>.</t>
      <figure anchor="FIG-popswapbefore">
        <name>Before Pop - Swap operation:</name>
        <artwork><![CDATA[
     +-------------------------+
  L1 |      Top of Stack       |
     +-------------------------+
  L2 |      Pointer SPL        |-----+
     +-------------------------+     |
  L3 |         Next LSE        |     |
     +-------------------------+     |
  L4 |         Whatever        |     |
     +-------------------------+     |
     .                         .     |
     |                         |     |
     +-------------------------+     |
     |      Bottom of Stack    |     |
   ===============================   |
     |      Ancillary Data     |     |
     .                         .     |
     .                         .<----+
     |                         |     
     +-------------------------+
]]></artwork>
      </figure>
      <figure anchor="FIG-popswapafter">
        <name>After Pop - Swap operation:</name>
        <artwork><![CDATA[
     +-------------------------+
  L3 |  Next LSE (New ToS)     |
     +-------------------------+
  L2 |        Pointer SPL      |-----+
     +-------------------------+     |
  L4 |         Whatever        |     |
     +-------------------------+     |
     .                         .     |
     .                         .     |
     |                         |     |
     +-------------------------+     |
     |      Bottom of Stack    |     |
   ===============================   |
     |      Ancillary Data     |     |
     .                         .     |
     .                         .<----+
     |                         |     
     +-------------------------+
]]></artwork>
      </figure>
      <t>When this optimization is applied, there needs to be a distinction that allows a forwarder to determine 
whether a Pointer SPL should be popped along with its ToS, or whether it should be swapped 
with the next FEC label below.  <br/>
One possibility is to indicate this in the FEC of the LSE that precedes the Pointer SPL, or perhaps it can be indicated
by using one of its bits as a corresponding flag. Alternatively a perhaps some method
can be found whereby a "TTL" can be associated with the pointer label.
How to best indicate this end-of-use distinction is for further study.</t>
    </section>
    <section anchor="use-of-multiple-pointers">
      <name>Use of Multiple Pointers</name>
      <t>One problem to be solved is how to support
multiple independent (sets of) ancillary data in the
MPLS header in support of different (forwarding, OAM etc)
operations associated with the ancillary data. In IP/IPv6, ancillary data is encoded in the packet header
through a sequence of Extension Headers (EH). For IPv6,
<xref target="RFC8200"/> defines several EH types, each of which implies
a specific set of nodes that have to process the EH
and their order.  This
approach results in a complex parsing requirement for
IPv6 packets when multiple extension headers are used
and very rigid encoding and EH semantic difficult to extend.</t>
      <t>Instead of limiting processing to a single pointer, it is possible to generalize the above concepts 
to allow for multiple pointers. This increases flexibility by allowing the packet designer to include pointers to multiple 
sets of ancillary data, each of which can be potentially used for a different purpose.<br/>
Therefore, the use of multiple adjacent Pointer SPLs is allowed. This means that ToS processing takes into considerations
all Pointer SPLs that immediately follow.</t>
      <t>A pointer mechanism in the MPLS label stack provides a
method of using multiple pointers to express two (or more) sets of ancillary data,
for example a latency object and an iOAM object. An example is shown in <xref target="FIG-mpls-multi-ptr"/>.</t>
      <figure anchor="FIG-mpls-multi-ptr">
        <name>Use of Multiple In-stack MPLS Pointers</name>
        <artwork><![CDATA[
     +-------------------------+
  L1 |      Top of Stack       |
     +-------------------------+
  L2 |      Pointer SPL        |-----+
     +-------------------------+     |
  L3 |      Pointer SPL        |-----|---+
     +-------------------------+     |   |
     |                         |     |   |
     .                         .     |   |
     .                         .     |   |
     |                         |     |   |
     +-------------------------+     |   |
     |      Bottom of Stack    |     |   |
   ===============================   |   |
     |      Ancillary Data     |     |   |
     .                         .     |   |
     .                         .<----+   |
     .                         .         |
     .                         .<--------+
     |                         |     
     +-------------------------+
]]></artwork>
      </figure>
      <t>As in <xref target="FIG-mpls-ptr"/> the top three labels are a tuple that in this
case have the semantics "process the action that the FEC of the ToS 
label specifies with the assistance of the information pointed to by the following SPLs",
in this case the label set L1, L2, L3. The tuple terminates when either an
"ordinary" label, an SPL that is not a pointer SPL, or a label with the S bit set
is encountered.</t>
      <t>The <xref target="FIG-mpls-multi-ptr2"/> further illustrates this capability.
Here in this example two
LSEs, Li and Lj, are each associated with two pointers.
The FEC of Li therefore indicates that execution of
Li includes the use of Ancillary Data 1 and 2, and
execution of Lj includes the use of ancillary data
2 and 3.</t>
      <figure anchor="FIG-mpls-multi-ptr2">
        <name>Further Example of Multiple In-stack MPLS Pointers</name>
        <artwork><![CDATA[
      +-------------------------+
 L1   |      Top of Stack       |
      +-------------------------+
      .                         .
      +-------------------------+      
 Li   | FEC     LSE             |      
      | Pointer                 |---------+
      | Pointer                 |-----+   |
      +-------------------------+     |   |
      |                         |     |   |
      .                         .     |   |
      +-------------------------+     |   |
 Lj   | FEC     LSE             |     |   |
      | Pointer                 |-----|---+
      | Pointer                 |---+ |   |
      +-------------------------+   | |   |
      .                         .   | |   |
      |                         |   | |   |
      +-------------------------+   | |   |
      |      Bottom of Stack    |   | |   |
      ===========================   | |   |
      |   Ancillary Data 1      |<--|-+   |
      .                         .   |     |
      +-------------------------+   |     |
      |  Ancillary Data 2       |<--|-----+
      .                         .   |  
      +-------------------------+   |
      |  Ancillary Data 3       |<--+ 
      .                         .
      ...........................
      .         ...             .
      +-------------------------+
]]></artwork>
      </figure>
      <t>To support multiple Pointer SPLs, the following additional considerations apply:</t>
      <t>The pop operation for the ToS needs to be extended to apply to the entire tuple of Pointer SPLs that are in its scope, 
i.e. that immediately succeed it. The default pop behavior will be to pop the entire tuple of Pointer SPLs along with the ToS.</t>
      <t>As described earlier, as an optimization to reduce the size of the label stack, Pointer SPLs can 
be designated to not be popped but instead swapped with other LSEs in the stack.
This will allow the same Pointer SPL set to be applied to multiple LSEs.<br/>
For an in stack  swap operation where multiple pointers form a pointer set, the entire tuple, or group, would be
swapped with the next FEC label below.</t>
      <t>In addition, mixed cases are conceivable in which some Pointer SPLs are popped whereas others are swapped. Whether
to pop or swap a Pointer SPL needs to be 
specified as part of the associated LSE's disposition behavior.</t>
    </section>
    <section anchor="disposition-of-the-ancillary-data">
      <name>Disposition of the Ancillary Data</name>
      <t>The ancillary data must be removed before the payload is passed out of the MPLS
domain. There are three methods whereby the egress PE can know of the presence of the
ancillary data:</t>
      <ul spacing="normal">
        <li>The FEC of the BoS LSE can indicate the need to do this in a manner similar to pseudowires or MPLS VPN.</li>
        <li>The BoS LSE can be a special purpose label indicating the presence of the ancillary data.</li>
        <li>The BOS LSE can point to an item of ancillary data that describes the disposition of the ancillary data.</li>
      </ul>
      <t>The removal of the ancillary data may be relatively complex depending on its purpose, i.e. it
may be more complex than removing some number of bytes, for example,  if it is
carrying latency or iOAM information.</t>
      <t>The structure and quantity of ancillary data including any methods whereby the ancillary
data points to other ancillary, or whether there are pointer to the payload
itself is out of scope for this document. Such information will need to be
included in the ancillary data design so that it can be safely processed and/or removed.</t>
    </section>
    <section anchor="structure-of-ancillary-data">
      <name>Structure of Ancillary Data</name>
      <t>The structure of the ancillary data is outside the scope of this memo.</t>
    </section>
    <section anchor="structure-of-pointer-label">
      <name>Structure of Pointer Label</name>
      <t>A possible structure for a pointer LSE is shown in <xref target="FIG-mpls--ptr-LSE"/>.</t>
      <figure anchor="FIG-mpls--ptr-LSE">
        <name>MPLS Pointer LSE</name>
        <artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                Label                  | Flg |S|   Pointer     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Label      : contains the label that triggers the pointer behavior

Flg (Flags): Contains a number of flags that clarify the pointer
     Bit 20: Size of pointer units, Bit 20 = 0 units are octets,
             Bit = 1 units are 16 bit quantities
S          : BoS as per {{RFC3032}}
Pointer    : Pointer to the start of the specific ancillary data
             block.
]]></artwork>
      </figure>
      <t>The label is recognized by the forwarder as being the trigger for the
pointer behavior. The pointer is the offset from the pointer LSE to the
start of the auxiliary data that is to be used at this hop to process the ToS
label. The pointer may be in units of octets of 16 bit words (or 32 bit
words TBD) as specified by the flag. The S bit had its normal meaning in
an MPLS LSE.</t>
    </section>
    <section anchor="backward-compatibility">
      <name>Backward Compatibility</name>
      <t>If the LSP includes a legacy node that does not understand the pointer SPL
it will forward based on the FEC of the ToS alone omitting the feature. If that
feature absence results in a service shortfall for traffic on the LSP or MPLS-SR path then
obviously the LSP or path has to be constructed to avoid any node that is unable to
execute the feature. The various methods  of constructing LSPs via LSRs with certain capabilities
is well known routing technology and will not be further discussed in this
memo.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This proposal does not change the security of the MPLS data plane. Normal
operational practice is to prohibit the ingress of an MPLS packet from
other than a trusted source. An attacker that breaches the physical security
of an MPLS domain has many methods of attack by manipulating the label
stack, and this mechanism does not significantly increase that risk.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA requests.</t>
    </section>
    <section anchor="appendix-1-controversy-alert-use-of-ordinary-labels">
      <name>Appendix 1: CONTROVERSY ALERT - Use Of Ordinary Labels</name>
      <t>Given the restricted number of Base SPLs <xref target="RFC9017"/> it is
interesting to consider whether we might use an ordinary label for this purpose.
At the time of writing there are eight out of 16 base SPLS still
available. This is a dilemma since there is a protocol need for
single label SPLs to support MPLS stack efficiency, but those that we
have available must last the development lifetime of MPLS. On the other
hand using a non-SPL has potential run-time/hardware issues if we need
lots of them. However there probably exists a compromise number
where we can safe allocating Base SPLs but not significantly impact the
forwarder performance with this approach.</t>
      <t>The label becomes a run-time constant that the forwarder needs to check during the
parsing of the label stack. This is a 20 bit compare of a run-time constant.
This is simple for a software or microcoded forwarder but needs a
programmable register in a fully hardware based forwarder. Clearly from
a protocol design perspective it is necessary to check the restrictions
on the deployed hardware, but this certainly seems feasible. In deployment
it will of course be necessary to verify that the routers along the
LSP can support this feature before the LSP can be constructed.</t>
      <t>If  an ordinary label were assigned to this purpose from the 16-104857516
label set, there are two cases to consider: LSRs that have the capability
of associating a FEC with a label of this value and LSRs that do not.</t>
      <t>If an LSR has the capability to allocate a FEC with the chosen value it is necessary
to preallocate this label before  any MPLS application takes that value.
This may impact a number of MPLS applications, but it seems feasible.</t>
      <t>An LSR that does not have the capability to allocate a FEC with this value
simply has the issue of adapting the forwarding behavior.</t>
      <t>The matter of choosing a suitable value and distributing it is outside the
scope of this memo, but is something that is routinely done in the routing system
so is not a factor in assessing feasibility.</t>
      <t>Clearly the LSP needs to be constructed so as to avoid any LSR that is unable to
process a packet with one of these sequestered ordinary labels, but that is
no different to the case where an SPL is used.</t>
      <t>The final consideration is what happens if the label every becomes ToS. For this to
happen the packet must have been incorrectly processed, and that is no different
from any other case of a incorrectly processed MPLS packet.</t>
    </section>
    <section anchor="appendix-2-other-issues-for-discussion">
      <name>Appendix 2: Other Issues for Discussion</name>
      <t>This appendix briefly describes a number of issue that require further
consideration.</t>
      <t>1) Pointer labels as described earlier in this document are defined using
an offset that is calculated from the pointer label.<br/>
An alternative approach, given that we may not get rid of
scanning for the BoS in MPLS header parsing, is to consider
a design in which offsets were relative to the BoS instead. We could
use this as a standard method, or we could specify this
via a flag in the LSE carrying the offset.</t>
      <t>The relative to BoS relative approach can be more efficient in
some circumstances, e.g.: When the ancillary data is applicable to multiple hops of a label
stack that is indicating a steering path, such as in SR-MPLS,
the FEC of every steering hop label could indicate to "reuse"
the ancillary data for every hop. The MPLS operation would then
consist of a pop of the ToS label followed by a swap of the
two top labels with each other, so that the following
steering label effectively gets pulled up as ToS.</t>
      <t>2) To support pointers being valid across multiple hops, 
the pointer either needs to be indicated either as an offset
relative to BoS, or the value of the pointer in the pointer-SPL
needs to be adjusted by a swap operation.</t>
      <t>3) The LSE pointer could include a lifetime indicating the
number of times it is to be propagated. This raises the following issue.</t>
      <t>4) The pointer mechanism has to be able to deal with multiple instances
of ancillary data applicable to specific elements within the LSP.
So it is important to know when to stop propagating any pointer
if that approach is adopted (instead of, for example adopting
an approach of one pointer LSE per ToS label.</t>
      <t>5) We need to decide of correct name for pointer SPL.</t>
    </section>
    <section anchor="appendix-3-ancillary-vs-auxiliary-vs-metadata">
      <name>Appendix 3: Ancillary vs Auxiliary vs Metadata</name>
      <t>From the Oxford English Dictionary:</t>
      <ul spacing="normal">
        <li>Ancillary: Designating activities and services that provide essential support to the functioning of a central service or industry;</li>
        <li>Auxiliary: Helpful, assistant, affording aid, rendering assistance, giving support or succour(sic).</li>
        <li>Metadata(sic): data whose purpose is to describe and give information about other data.</li>
      </ul>
      <t>The two terms ancillary and auxiliary are similar but the additional qualifier that ancillary is <em>essential</em> support make it, in the author's view, the preferred term.</t>
      <t>Metadata, the term often used in the technical discussions does appear to be sufficiently descriptive of the purpose of this information that is included in the packet.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC3032" target="https://www.rfc-editor.org/info/rfc3032">
          <front>
            <title>MPLS Label Stack Encoding</title>
            <author fullname="E. Rosen" initials="E." surname="Rosen">
              <organization/>
            </author>
            <author fullname="D. Tappan" initials="D." surname="Tappan">
              <organization/>
            </author>
            <author fullname="G. Fedorkow" initials="G." surname="Fedorkow">
              <organization/>
            </author>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter">
              <organization/>
            </author>
            <author fullname="D. Farinacci" initials="D." surname="Farinacci">
              <organization/>
            </author>
            <author fullname="T. Li" initials="T." surname="Li">
              <organization/>
            </author>
            <author fullname="A. Conta" initials="A." surname="Conta">
              <organization/>
            </author>
            <date month="January" year="2001"/>
            <abstract>
              <t>This document specifies the encoding to be used by an LSR in order to transmit labeled packets on Point-to-Point Protocol (PPP) data links, on LAN data links, and possibly on other data links as well.  This document also specifies rules and procedures for processing the various fields of the label stack encoding.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3032"/>
          <seriesInfo name="DOI" value="10.17487/RFC3032"/>
        </reference>
        <reference anchor="RFC9017" target="https://www.rfc-editor.org/info/rfc9017">
          <front>
            <title>Special-Purpose Label Terminology</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson">
              <organization/>
            </author>
            <author fullname="K. Kompella" initials="K." surname="Kompella">
              <organization/>
            </author>
            <author fullname="A. Farrel" initials="A." surname="Farrel">
              <organization/>
            </author>
            <date month="April" year="2021"/>
            <abstract>
              <t>This document discusses and recommends terminology that may be used when MPLS Special-Purpose Labels (SPLs) are specified and documented.</t>
              <t>This document applies that terminology change to the relevant IANA registry and also clarifies the use of the Entropy Label Indicator (7) when immediately preceded by the Extension Label (15). </t>
              <t>This document updates RFCs 3032 and 7274.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9017"/>
          <seriesInfo name="DOI" value="10.17487/RFC9017"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="I-D.kompella-mpls-mspl4fa" target="https://www.ietf.org/archive/id/draft-kompella-mpls-mspl4fa-03.txt">
          <front>
            <title>Multi-purpose Special Purpose Label for Forwarding Actions</title>
            <author fullname="Kireeti Kompella">
              <organization>Juniper Networks</organization>
            </author>
            <author fullname="Vishnu Pavan Beeram">
              <organization>Juniper Networks</organization>
            </author>
            <author fullname="Tarek Saad">
              <organization>Juniper Networks</organization>
            </author>
            <author fullname="Israel Meilik">
              <organization>Broadcom</organization>
            </author>
            <date day="10" month="July" year="2022"/>
            <abstract>
              <t>   The MPLS architecture introduced Special Purpose Labels (SPLs) to
   indicate special forwarding actions and offered a few simple
   examples, such as Router Alert.  In the two decades since the
   original architecture was crafted, the range, complexity and sheer
   number of such actions has grown; in addition, there now is need for
   "associated data" for some of the forwarding actions.  Likewise, the
   capabilities and scale of forwarding engines has also improved vastly
   over the same time period.  There is a pressing need to match the
   needs with the capabilities to deliver the next generation of MPLS
   architecture.

   In this memo, we propose an alternate mechanism whereby a single SPL
   can encode multiple forwarding actions and carry data (if any)
   associated with the actions, some in the label stack and some after
   the label stack.  This proposal also solves the problem of scarcity
   of base SPLs.

   As proof of its utility and flexibility, this approach can
   immediately address several use cases:

   *  to carry an Entropy Label for better load balancing;

   *  to carry a Flow-Aggregate Selector for IETF network slicing;

   *  to signal that further fast reroute may have harmful consequences;

   *  to indicate that there is relevant data after the label stack;

   *  among others.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kompella-mpls-mspl4fa-03"/>
        </reference>
        <reference anchor="RFC8200" target="https://www.rfc-editor.org/info/rfc8200">
          <front>
            <title>Internet Protocol, Version 6 (IPv6) Specification</title>
            <author fullname="S. Deering" initials="S." surname="Deering">
              <organization/>
            </author>
            <author fullname="R. Hinden" initials="R." surname="Hinden">
              <organization/>
            </author>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="86"/>
          <seriesInfo name="RFC" value="8200"/>
          <seriesInfo name="DOI" value="10.17487/RFC8200"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1cbW8ct7X+zl9BKB8qNbtby07SVLcBKttyI0CxBUtpcHFx
ccGd4e4ynh1OhjNab23/93veyOHsrmyrycVtgao1Iu1yOIeH5+U5L+R0OlWF
L129PNN9t5h+q1Tnusqe6R+D1X6hTa1/uL660Vc3F9oE/PO8LlxVmXarn5vO
6Gvv6s62ysznrb07o9HT8/7t9LprVemL2qxhtrI1i246b7em7qbrpgpTA0NK
mGDa8ATTR6dqs+TnVWE6u/Tt9kyHrlQKpn2iQj9fuxCcr7ttA1NeXty+UCp0
pi7/x1S+ho+2NqjGnen/6nwx0cG3XWsXAX7brvmXwq/Xtu7Cfytl+m7l2zOl
9RT+0Y+rw5m+memnRGb8lBdw09mNabud73wLFP9YuzvbBtdtkWE3fdvabRxg
18ZVsIr5XwJPwCyYASF7bz6f6WeVXa/HLz6v7FtYom3HX9KbX/Rd39qNdfrW
FqvaV37pLCzzsi5mOxRUfblxy78UOMcMHt57++1MXxRvbLuz7ltv28qGsPPl
Q1/fdfYvRZgtTD8rrVK1b9emA7Yh/1+/ePbk0ZPH8uufHp3+8UwpVy/yMZfT
57M3ft1YkDyWn3Voqq8WRp769vGjR/CUmk6n2sxD15qiU+p2ZXXTt41nWe5W
Lui1XXsN/+28Lm0oWje3euU3+srMbQXbbIo3+qLuWliJPgapDye6MLWCUX2w
JT5GAou/mKQJvoV5QZZRoGF4C0+XGuaDeTuggTSoohcEfMGMCV27sqyAG18A
x7rWl33RgXQT2S0QBeo2t7bWwS1rt3BARadbW4D8atIYG/AXWMUdvKgBFaZ3
8cuIkKYytQVClSnLFvewthv4Z0vYIxApfLgBkXRFD4vABSHl2/uWRctR+Ape
AxDNHAUl71Gr9MaCgtXBobB2K9Px18N0OI2CTxZ9C9O0GjS6dHcwHElBfupg
f+ltXdBuzStfvAkzfQuTKLIf8CbYlNp3umnj1iE9SVZ8jSS7LgCJLXATpJP3
3e5QMVMvfEufB/OGxoCSgVih9LoOVtFXpW5NvbR60YKqAmXA32p3Gt3XjiVh
eGEJi+jYco6G8nJgnrUTboMtvby++wZe3dka7ZpaWQO8wyVHATBV8CwFB3ae
tgv3HfbX4epNpReVWQYFi/PEYleXIDidb0ngf+lN5RZbWjiwDOwRWn7tG9sS
98IMhS8qSdN61JxAw3tWoaMAEmOP9ByZDCQYfdPYwsGLr0XPWI+Ob66vTvS7
d/fq7YcPSaVwmVq8AFLpOrsOBzgY9WpQLDX3XefXOJZkUh8/9TcnM/3CASuq
LQpkAPJAvDvLEolcAzNm4L+17Ta+faNDAesPCsauzRYpWvT4LFBn5pUltWgt
TtAE25d+CisLJBXEF48sRBJZvRvvK2AiqPRToGfZ+h707LkoSFDqoxxB0SZ2
k+qkLQKuJMFH7VVAEm4HDrl9NkGRv7290gtnq5I3pSZ3/e6dWFaYmeZMs8wt
+B9cWgOsU8K6W2LdZZftuwfZbCrviBx4o7zChEyuFDA/kyVDNgzUaL7VawAW
i200TAFcQQ3GJohKpvlm0eIZ/Kfrfj2HJcOgN3YrxIAa4MJ4FWgKwNZ/CRAl
zs1iSVJ5hORlBCVKWTXQHKJMoBoIrWQzwMwiSwqDC4cd5a9GLwFTuPLkAdZ9
1blp9CwkEGhPu1UfkGP8u1XDSsR6sIzw+Dvwi1HAcHaEMzN432sb9xa9kG+2
UaMuQKFkAwZTnRRfkYqgeKDn2Y7lh40ovL5DFWP/xTYOpbz0TUcPKVNvtQXy
ZvpVzSq/IDOJVnwwMfQm2ooNsFqkpVTHoligO+iVXCh6Qmt63nf6Ep0oil6w
Fi0sbablvTyheZBhfeanFwaUHzHVsNhBZSsHPgIcB8gTsKSNZou9RGa3TJTc
PbtV4zbgzg9aDcxQBw3SriVPfj06c3p5lFRcqY62De2Nr3/ua5InvXHdis3G
2DqrJOYTYrl4I9zInuQPFGkBKgL7xuYHxgwfwf6RzgFELlZIPYBhWp7MHwUY
vWb0rsMC73g8+nrfWsWUpbcMxCYSZ2jeJDxgWQ4xCgALdw1RgPN9QDHowIeV
7L6imOjMeN2zKWyo2VKBUeLtgDGKpB8J5UDEgn6h4/ItL4ikYqa+9xtARC05
8g0JuWkayy4XxR3eU96BJTJL1j0EACBx9VJek+AJqrGQut6VCXWvTIAHmmnW
tz3/RUJPwmGKAgAZyhq8BHgT/wpRhTcwEJdBc9JeBg0eE7cyDZ9phrhpPWRa
S8/7jQS0lgwlDZondVo4NlC7BKJ0elDWgLoahWaz8lWS9BvxpoDKYX9H4zJ4
GzUATCECmztEaPql6O41Uw+b9iOCp+OX1z+exCXRXG5tJ2rApShHi0HbkA+l
tQ3wGBZ2PiwqGvXNyqESjFeGvGgakA+yuOJeV+D+djkqzBJDNOw4kCuwTj5B
aAZbzkqC8JD0tQEKYRhQH9AqCecbmN8AUQ6lfEU6C6vSS9jhFuwFikAEgUBe
tCdgNwrbkCbAUnqMaTq2KO/evbj8K2OHpms/fIAndPz5cnrfz5cy6OpUv+ff
bsn/S8zDP+/1g6Z6HKcS/SdJjVONhn58Pn5gGPpe3/fzfnfo7N6hs18x9AEE
PHxZTxNqTazfmfW7j/8cnHUnL3OQ1t+GWX/e2dhPMevzROrdmf4il2tNiajv
jsTTXNZTNgAU34oWHn2guckKoqtgI3R8dXpCWpVL5fHV4xNUVjDluutBWVVy
xhGZ6iMxBGwc2WUnNP5iwJQXv/TuzlTkS59VBh44fnHx7CTGmgMlbJQwlZBe
pmC4w6xVkWLTPH7lhZGbTCgODQ2+FpZxBAi9tBTcgPKBacCltRA1u5bQd0Sa
iP/BXqw4EifXeoEWBl0LceOCArT0pALjjA9BvP3TylWBl5yBPpqQRsMMZPNg
RpwJgyb01A6suSPCAOKt86TFhOeifBvYsrVZutomvrYcd80Fe6sNf4QImyyq
bCHxE9lYVTg2koJ5JnUFJrcPee6BJyMnmnZEEEVEfhhebvUbcIUzFTMZ+NBk
J/SqvIewPUVkcS+QH8duZmc8Hv9k3LJe29KBpUZG9ODlbRkiCRBeqcsFj8MH
IkVpkUDYZBS7AKq0LQoHYQNOm1UgAguI+uoMm8EWl5MdClkCXdidf7y8Pgb4
h4VQiRDGGQgHDQIsMP5QLmFGeq9e+hh6bwa5irMJTiDnuR3yajgERDWqB6n9
hB27MhUIVtgF0mIUUqzIbn1tStlOEAsgXGISWBjJGL4dlLwnoR2SelFpC4WJ
CHqTLJNeAs59W3mAtbj54wcoc7GfuJixP8dJ+rbmlM7amloClAHHo/4RVYmY
4btdLOnXDaD2ugOF5ekFjiQ6Be/EpJggk9KiYnJYA/CMsoLBNzBBh4Mpa7ky
AOAxOFGMpRxhEOAswhPCWjj39n7iRoTjoibMLDV8miI5u1zLKiCo4Ej3VUpH
nYEFbyizidb8ZmP4D6V+2lHsBobZcpJMAC+7ZuUj2L8EGFpzMLcd+YVcYQfl
cR3K7yW/ZG4CbC4bBzN6mMyRiO/cChkaqxHLQURvMSKIOY5owGKiAf/PbOZs
5NqOXkC7yKmYZBLZFAJ9RB5mIGiyiVaDIxgrOSWtG/pwNPkenWBXA7wmRMVG
Dg4BeKLA1az/Iako0q2uczODMSWFsoh82RbBREmiZGGwinMK5jCGXbu/08Zx
6IaMWmNwBjFroFDNo/TADqhgYaMHUQX3xCFwYuZE9w3ZsSblxWF1E9r80M85
zdztbyUaI5QyDMAiW2qA5hrcOy8iqhv5F4pFGleMcDm8FOeYW1i9/fCBRHf0
jVnAOwG1J2D026H3/3/wfvUkg4MvkXXo6UZw8B/AzldfZbP+BFaTQuNfO6v+
d0jwrxESjFQqxgVP+S/wEHpKvmHAHmcaAoMH6QJJbRLX45d2Q4BtlwMP0aoD
evWPa9U/gfz/W1X+hVSFfEzUlHP6435FETQF3iz3wilpZjm0aO0IUBmE052r
syhZIKgZI4/SwtvXGPJhbMeZ1ZFqhFUsRezjJ8wMk+cGJBGfBnAwPBLdtbrH
X3NmlrZDYVGDYSxnDbkLQJLkljkgwAefF2yTQrsGS7ClhEtjrNNinLYyTaDq
MUc1cd5SpSw+5dkXtCjKeVNSufAtoC6AKxQ/YZFqps8rmLuOeVaTZqcaFdeh
lLxmQSVGiprnOPTo9vbqKNIAoZovHOH6xJ9RRE3pct5RqinnrIAQbOoXU8yF
5lvtOOeZivhdX27zksAPESUONQFifOvnFYRHLD3BV3cImgL1XmD6tm8a33Yq
w5gArTBhATjtONgOsebJXl6XdktRwMPFc6rk8VyUDE8Rx/EQpE70q/MftO2K
EzWUvg/yaieQQ8R9ef0HrNpPDqSYbV14bmZgRnPIxXSpbtX6frnaaXK4iLV/
/T0NC/r44nusYAOH6TWKqrjY3gJQsrQL0CMQAzT/gHovvtfYCwXQn1A2zCf4
ek3gWmWhqWSva1/GwhhgZ0LVec7r4nslxUuHOW8qHXIDRkpiZxECh6GVfUsJ
b5ReSctQNwjwW1F/A/MhcDYm7W/qehAGUbWCimZEAixwq1u3dCWzNQaBsOSU
rsPNxSJBx9EsprdAEC8hOIEZcbUVGLMuS/BTLOCHLJmowmQc4hJXJDnv/s6l
KjP3dzam5IPGEjxZO1KF3WSVNK0Ai7BzAOO8BTApWh3U0hhmZmKSR+bwYNWX
w3yj8E+JMuwI4K4MiAVofIdVUspxUEWS6xWDXkgVe8ZZ1JZA1SRv+UgvNuXP
ptgJm4KOqQcsR0nvSEptYESZsx6iucCtPqNAHaQLYq/RrHu5NA7N2Y5rdZ6s
2NoWK1O7sNZ5kiYvRgEB2GMEZCqp4MOi2B7vbVyeFsGM6LFURU/0PUxXebXW
YIUdpHWr/fxnW3QksLANDs0NfwSmvU7jgVngyDb1Tk1Hugt+68rOP1NseO+s
7x84s34Y7tQPw3O/avgDifnHlno/GNYPA8QHZ78fFP8qznwSHD9sdv2w2XeE
9/+geJUUeKeElZDRuJYVcRJC8fNwqMBLhq2jDF5rYwJQ2qWolpWa2xC4KcpN
sXsf9V19vLw1IF402+reAtavql+Fo4lyWbUlbx0AJ3h1OgHbA/+eUBNkXBzF
DwZ74whDWCf9Geoott8d8SSTQz0kO/UP8n/8yrSmG2r8AAqUwLie2ixLbk07
aJyxqy5i4KE+H+LSGum3AICNkVNcczT94FwUZ8avHLmJq58ntKHkxPeg6MYP
2IIokt2Ch7votBN6F+9p39qi5/T/QsFAARWjds4dBT8lUh5Td7DKnwfyDj6/
09v7mJ5/knutTzsb8Fr68/zWZziuTxiAz5tLZ4oPjEPqkN/055DMzK2Hyj+J
zm3Pnhyk9lPjd4zhQ/3EQ93QQ235Q+gBIfo0L/fp/zh/dhDDJ8Z/+UD63z+Q
P/vjP87//fEPpefjQGB//KdwwKH598wEf/Nn5P6ufH6KP/qB690d/36PnMfx
mz+zNHy2NeDZPp+Wj1LxJKPiS/1gczS7/+fgXPD5vXM9HKg8jkjlhXi0C/FT
n4dablP+Zgip8nButzUh6ysZB4JcWT6Tkzs+y1SmZlQEJ3ke0sa2llSXTh0E
nWsjhIB17MeXhh0znRfBQwATrbiof08jB1WFkbLSLgymHRrqIJR6eSwgZsXW
j5JwuEp8HtKxpBLAQFs5zE+YvRopvgYASl8IyMNEhcCxLPidjF+JOQE8dsG5
BiM4jU8ExOQrdms7SaGMaqHcaUE9ChJqS1MoRf20ek6JHCxkI7qTxDHnlEc5
De480nQqx1A8zJJGFGRCcLg5KMS+rojz4GWTvQ0g5IcnMpqJ9AXPrfpEtTdl
jzGtlMR2otfuLTzENXyUIkoMuTvqLk0FfUrWjre8TWymlWCrNnKVvxFasAOL
Et1KJAl7T5EN46x5rgMqwnTqIMbe2XTsaUCSwOPfUQ9M4wMtI4kurU99oZ9n
38nzYyMn7cbjxOcaoC+3ZK39HTWQcJWOUlvSKoNEUeMNthfL1HTQs/Rr4+p4
4snQcxjicKYmpLw2beaS8jLXFyTHb2oQNZkqb2zHfPCYwtQCnYU4Tz0faS1I
2lLWe+h4KH2qB8ASTY2ZuezsFp8a2IBw0fERsoh/u34ZW37z6alWEuSUVDwz
Is1Z9/fnH8g+x7lfDXNnRxHvaT6SHiMxKQzey/193n0VbTTtKDZXHBoTu/Za
m/rBYzaYE/dc8CDrKquWNiDXKXkWU2vpKepTpFfik6Q8wwGa+baz47MRE419
4ZS4VekgXMq/tZx0yyJTWdNwMBBDlV96DI354O5eaQHDHU47bw/KY3qAz97Q
XpBGeglP5etR8apLgp4dMMl0RQG/bLVAlRFdIdc0HMSJpy1n+gZPe+SxN9ng
KMBg3CRiSwWJnRWyFwBOi8NLlatgFrid2bGEuvwDvF80nIo9N/kBy0NW4hMn
MGWB6PvZYdAq80O63BI2ek+0f9QnpigLLBn74W2c347MlTbLQ2lWxD1T+H7I
sj46gNFOD3z2+MBnT+IUp/D1E/2V/lp/o/+ov9V/eshniuHbr/wfzbIXd3Bz
3d4PxGPVUr+/wfF55PT+N6KFeZu9/Ay9JR4UCxla4TRU65ZLysJnZcropHge
pPX4BR7kOznTz+I8+aFBOeWH8xUgbfG4q0w3oOSnIO+PH53pG0FO8X14pBcs
DX+tv4NdoU9IZX3RWfhS6d0fHP0dbOkw9PQbSimJgcFiHI67GR45IydhqMM3
P6pJ47KNOEt/iKEAZDT491Tf28nE7FFIx49nY/gfNSCC/xzXo+YQtE9bBGrU
2sIva2DY/hFDbWLXLeUqeScjaFe7m8kwOn7qeMf9YoEoMR2tzXWY165Gazf9
W1e5saNzERLxQT45go4nfXYqnQC3lTT05aSIYwJLwVsJr+JNx99kTze+BU+A
paEnj+lcGn9w+/T5CXJhwGKRR1TSv01pRjwTh3NzNzfVy/igqsou2xgOESN/
QdTXDRh5zikq7iJH2Hw9pOWMruzSFFuq8erxgd8eL5CgqzJGnAUcqWKrpewk
NrsiTttrg6CTeBV1MKxdlzDLwho0u9iTTu9U8gHewkBYZlQvDra9w6ObYI/b
bmH4tSAtBgu58aW4KsFU05vX4BgZmtfKz+PJwmwYfY1H5XnfMZ4kXyAR4Z13
JXnwgSsgEH0tR28ly2nHa8G9ugPbAS9Lnh/5kCbnEwDXQd85A7+8lvR4PFqe
0r+o9xgcWVgpAlYAOOD0iHfxxowtARF23RyIxazy0K4eE/vkFkkwboDqFoHL
s3EhdecoahIALJIuYz1AHs1weHZfxEy/JLkcWiMQtuJ9GnTmNogirdycj4UD
cYzLs8tipKRNVyf4bjiEAjsNwQJekeD7trBUDDUdRnrxxoh5iwlwwanNahsA
H1eJZJW9gyMH2vl1jtBwCE1JJ9BBtRo6sJifUlQSG7M6ENyIReTEsOz8Ch1o
5ko+E9m68IZA0OX5y/PDO5DuxED6as8jsTvCho4P0J43BJLf6lNwZK9e3r5+
9beL1zf/qc+vLl7f6il107xa6FfxfgHyoDD9X7mRneA5CCM3Hw/u76mJJ9LJ
p+BtKh8+CEyOd0dIG0Q6LxOxKV6B4JarjrL7mG8Y322QIGhsGVDnLAF4ZJMa
D1oXGS0Y19J0AmTRfAp1N+DFQOJVOgUfOyYC9SbgJTXUpMHZjdbKMZbWd77w
gnGxv2T/XP3QSsRiwnkEi/bFYWgwoQQHt83zsRSrqFQ2HMingLYyclZFrleh
zazcwsbF4ux4Tp5dF8XrKz4xzAexal/ToXIUgNSEodu+nuIMf1iBrd1QAiqE
HrsiFsh+ut6h8l1srF/PtBxnFj5gF5XBUxj2rQtdkBYc0DMXYrgkJ6g2fMAF
sTzlZSTOHOQD+XBA0sHPFLRyNfh2OYRENT/JlHBzILUEzXKUwFdLIGFxqWw1
8fKaAxdbpCwGKD3sU9nH0wsqthTtJ7VyWQGINqcLW9Z0AQSd2d17cTyAE+Ix
XTmz6xcdbQE2ebgCwAF1bw3EEYeIQIMH9JetAbFECWntErjPzWZG830haUPZ
gWZ3LzyrLB1jlptkkhRL/AXMRcjQ0TlpLlpahCmoeIkxub6TmRFfCaF25bd4
okleH+Ubi5DpPgY8kRfQvfEBY2xj4wdRqhMCIAfXtyAfczumAeSPcbTsHzox
PgLtZbfQGZO4ie7xFQ4CBbKMUBw39tQzQjQHTM6GDEmgzqiSQeBgfwakePrN
9PTRV99+/cevT79RqZo8yQwRVlA5XZcZvjN23Vk33MpmpVvyNpI/Y51GOETy
HwvIMV69M1XPGYVhxpIyq7w0upHlNcOU0Tu0NJJR/il7AY1CI1XL3DuSQbnB
1qZHO77fgzWQuE2gZ+8kGLdgEX00r6gGwl7R/DyW2n08sHRRqXwkURCL8wrH
sPMAU+9fcGSjkvNUkVlkIEmzS9MMuHM4cpiCCrZDa77lBKV55b1Y49C7jlR3
2CnsaW3dnOEYszdLSKj9hIQsnrtw6caIhCcZ1WHSpESELPmWiPXCFozFWgU/
dCQsgNV87QzmRbk9jrkpXQMqWo2oNXm+Nwe5MCuD3wHqpo0YId0Y/ZgIzzir
X8cETbDcmRqo82FHE0O0KzSrqvMTfhKXxhO3lFqLV1b0ITVRLNxevQdHbFj7
EA2FeNMDC7KlHtDoUKg+8iJCEFgPPyO5M1oQOW6SObpyBOADtlYXXZ7Liqgv
tocM61BkTpB/DFlpPeRQDk6UI13G5AnRPT7Tr2iKS/bt6G6ep/twBCGaOHre
OrtAyUk52lwFWfoZdnJzbYwP1IiVQMLpSQreY4fQgWJSakVJEBXtI3cWC3rB
OFSC8cgoQOF8jVa5H59LGK3RBpihcT3hg0k8fMlwK50YX1qE0iVdQRVvEolV
PsyNOEH60tgtgGAiMUhcvUqJzFR4YdoDe4+Yn45iyjNTfWumf7J8D5Lie16c
tORTpIzBMAcVnMCVoemiEYrIMP4zFOFHpefUvOSjh7RGSqkP1Dyl85bVmFnR
O1JqPMJWrMgpvp/KtbBrcvpyou1sOTvT6TTsR289yettK99wpJQHRGmzs7IE
8sJaAmUYaE90vGIIVnvzeor7M1FZpoB1Nj2DiRdWZubdUGrx+qjFm66O1AHC
Kc1PM8EEHI6TJGSFQJqOsgIkCKGL97U0+7cwcOGZEzJGSopcKEJY0EUaJYjn
NmrUsEnKjXd5+Vql5YmdAgNSSAlkaancUVWoSw0yCu2WUo9PdFYkT3VLzpiB
T0LLDQgUzPNojyZa5ZomjW+5K0inTFJXHJeKSejUjriRIHer6AVj9Sym4er8
Twxe1OjAT/kzB+8ZF5vB+jw5oX1C8U/H+2XPuZndDOHTuO6V3ZOG3wZxxvxW
TGWYJS5QYH9rXLyyIDuujVYSiPjqZJzNS3H9kCCKuoC3aPCG7x9rVvvloLEi
pbSrreiwQ8ivCQBvPVM3XpYBYAa23LCfpKIl30oBk6DkxfXFQlPMUzu5JyK/
PCje1Hbs0hGH8XVhNEAMeHoQU5j1OJuKKeekHsC2r0/QEqbSJ6yttBwOkNuj
q2DpRVnicJzEeHKWFYHugj5PuVn44wfbGcpKqxfRd7x6C9OV+gLCdxdW4B0p
rIHxVKxNU53p59KqEO8WvKOkGjlxSSYKnJU2f43OmWPtFIuw4V/IJWwSVELk
DONayi5xUpLwWImNnNv/UHS7VFzEmf7eVg3EeZPU/QrRhVksvFx66MBHtNiG
wrewpA5Zcn0EAeORpJaaSSDMOg6uOJnhaiN76JMzuYqLEhQx0Nm5rhYXv+Rr
tYbin5lTmoUzh0MNlyycbdf5bWR0LCFtELUeSGWbMd7o4he+M9TFBN0wCxD1
+8Ts3w8NQHhk3wF7YtGR7n35HaZK7Ya7MiBwAciFIBMpA0IjB/hr/BB2qAMt
6cNQvaSMKaUDh7sFA8caowveQh+9ZgJVDdnAaO52LgTOmTh4wHHlNMK8/wVr
XrmGL1sAAA==

-->

</rfc>
