<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dekater-scion-controlplane-04" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="SCION CP">SCION Control Plane</title>
    <seriesInfo name="Internet-Draft" value="draft-dekater-scion-controlplane-04"/>
    <author initials="C." surname="de Kater" fullname="Corine de Kater">
      <organization>SCION Association</organization>
      <address>
        <email>c_de_kater@gmx.ch</email>
      </address>
    </author>
    <author initials="N." surname="Rustignoli" fullname="Nicola Rustignoli">
      <organization>SCION Association</organization>
      <address>
        <email>nic@scion.org</email>
      </address>
    </author>
    <author initials="S." surname="Hitz" fullname="Samuel Hitz">
      <organization>Anapaya Systems</organization>
      <address>
        <email>hitz@anapaya.net</email>
      </address>
    </author>
    <date year="2024" month="July" day="08"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 143?>

<t>This document describes the control plane of the path-aware, inter-domain network architecture SCION (Scalability, Control, and Isolation On Next-generation networks). One of the basic characteristics of SCION is that it gives path control to SCION-capable endpoints. In fact, endpoints can choose between multiple path options, enabling the optimization of network paths. The SCION control plane is responsible for discovering these paths and making them available to the endpoints.</t>
      <t>The main goal of SCION's control plane is to create and manage path segments, which can then be combined into forwarding paths to transmit packets in the data plane. This document first discusses how path exploration is realized through beaconing and how path segments are created and registered. Each SCION autonomous system (AS) can register segments according to its own policy - it is free to specify which path properties and algorithm(s) to use in the selection procedure. The document then describes the path lookup process, where endpoints obtain path segments - a fundamental building block for the construction of end-to-end paths.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://scionassociation.github.io/scion-cp_I-D/draft-dekater-scion-controlplane.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dekater-scion-controlplane/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/scionassociation/scion-cp_I-D"/>.</t>
    </note>
  </front>
  <middle>
    <?line 150?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>SCION is a path-aware internetworking routing architecture as described in <xref target="RFC9217"/>. It allows endpoints and applications to select paths across the network to use for traffic, based on trustworthy path properties. SCION is an inter-domain network architecture and is therefore not concerned with intra-domain forwarding.</t>
      <t>SCION has been developed with the following goals:</t>
      <t><em>Availability</em> - to provide highly available communication that can send traffic over paths with optimal or required characteristics, quickly handle inter-domain link or router failures (both on the last hop or anywhere along the path) and provide continuity in the presence of adversaries.</t>
      <t><em>Security</em> - to provide higher levels of trust in routing information in order to prevent IP prefix hijacking/leaks, denial-of-service and other attacks. Endpoints can decide the trust roots they wish to rely on, routing information can be unambiguously attributed to an AS, and packets are only forwarded along authorized path segments. A particular use case is to enable geofencing.</t>
      <t><em>Scalability</em> - to improve the scalability of the inter-domain control plane and data plane, avoiding existing limitations related to convergence and forwarding table size. The advertising of path segments is separated into a beaconing process within each Isolation Domain (ISD) and between ISDs which incurs minimal overhead and resource requirements on routers.</t>
      <t>SCION relies on three main components:</t>
      <t><em>PKI</em> - To achieve scalability and trust, SCION organizes existing ASes into logical groups of independent routing planes called <em>Isolation Domains (ISDs)</em>. All ASes in an ISD agree on a set of trust roots called the <em>Trust Root Configuration (TRC)</em> which is a collection of signed root certificates in X.509 v3 format <xref target="RFC5280"/>. The ISD is governed by a set of <em>core ASes</em> which typically manage the trust roots and provide connectivity to other ISDs. This is the basis of the public key infrastructure which the SCION control plane relies upon for the authentication of messages that is used for the SCION control plane. See <xref target="I-D.scion-cppki"/></t>
      <t><em>Control Plane</em> - performs inter-domain routing by discovering and securely disseminating path information between ASes. The core ASes use Path-segment Construction Beacons (PCBs) to explore intra-ISD paths, or to explore paths across different ISDs.</t>
      <t><em>Data Plane</em> - carries out secure packet forwarding between SCION-enabled ASes over paths selected by endpoints. A SCION border router reuses existing intra-domain infrastructure to communicate to other SCION routers or SCION endpoints within its AS. See <xref target="I-D.scion-dp"/></t>
      <t>This document describes the SCION Control Plane component.</t>
      <section anchor="terms">
        <name>Terminology</name>
        <t><strong>Autonomous System (AS)</strong>: An autonomous system is a network under a common administrative control. For example, the network of an Internet service provider, company, or university can constitute an AS.</t>
        <t><strong>Beaconing</strong>: The control-plane process where an AS discovers paths to other ASes.</t>
        <t><strong>Control Plane</strong>: The SCION control plane is responsible for the propagation and discovery of network paths, i.e., for the exchange of routing information between network nodes. The control plane thus determines where traffic can be sent and deals with questions such as how paths are discovered, which paths exist, what quality individual links offer, etc. Within a SCION AS, such functionalities are carried out by the control service. Packet forwarding is instead a task pertaining to the data plane.</t>
        <t><strong>Control Service</strong>: The control service is the main control-plane infrastructure component within a SCION AS. It is responsible for the path exploration and registration processes that take place within the control plane.</t>
        <t><strong>Core AS</strong>: Each isolation domain (ISD) is administered by a set of distinguished autonomous systems (ASes) called core ASes, which are responsible for initiating the path-discovery and -construction process (in SCION called "beaconing").</t>
        <t><strong>Endpoint</strong>: An endpoint is the start- or the endpoint of a SCION path. For example, an endpoint can be a host as defined in <xref target="RFC1122"/>, or a gateway bridging a SCION and an IP domain. This definition is based on the definition in <xref target="RFC9473"/>.</t>
        <t><strong>Forwarding Path</strong>: A forwarding path is a complete end-to-end path between two SCION hosts, which is used to transmit packets in the data plane and can be created with a combination of up to three path segments (an up-segment, a core-segment, and a down-segment).</t>
        <t><strong>Hop Field (HF)</strong>: As they traverse the network, path-segment construction beacons (PCBs) accumulate cryptographically protected AS-level path information in the form of hop fields. In the data plane, hop fields are used for packet forwarding: they contain the incoming and outgoing interface IDs of the ASes on the forwarding path.</t>
        <t><strong>Info Field (INF)</strong>: Each path-segment construction beacon (PCB) contains a single info field, which provides basic information about the PCB. Together with hop fields (HFs), info fields are used to create forwarding paths.</t>
        <t><strong>Isolation Domain (ISD)</strong>: In SCION, Autonomous Systems (ASes) are organized into logical groups called isolation domains or ISDs. Each ISD consists of ASes that span an area with a uniform trust environment (i.e., a common jurisdiction). A possible model is for ISDs to be formed along national boundaries or federations of nations.</t>
        <t><strong>Leaf AS</strong>: An AS at the "edge" of an ISD, with no other downstream ASes.</t>
        <t><strong>MAC</strong>: Message Authentication Code. In the rest of this document, "MAC" always refers to "Message Authentication Code" and never to "Medium Access Control". When "Medium Access Control address" is implied, the phrase "Link Layer Address" is used.</t>
        <t><strong>Packet-Carried Forwarding State (PCFS)</strong>: Rather than relying on costly inter-domain forwarding tables, SCION data packets contain all the necessary path information. We refer to this property as packet-carried forwarding state or PCFS.</t>
        <t><strong>Path Segment</strong>: Path segments are derived from path-segment construction beacons (PCBs) and registered at control services. A path segment can be (1) an up-segment (i.e., a path between a non-core AS and a core AS in the same ISD), (2) a down-segment (i.e., the same as an up-segment, but in the opposite direction), or (3) a core-segment (i.e., a path between core ASes). Up to three path segments can be used to create a forwarding path.</t>
        <t><strong>Path-Segment Construction Beacon (PCB)</strong>: Core ASes generate PCBs to explore paths within their isolation domain (ISD) and among different ISDs. ASes further propagate selected PCBs to their neighboring ASes. As a PCB traverses the network, it carries path segments, which can subsequently be used for traffic forwarding.</t>
        <t><strong>Trust Root Configuration (TRC)</strong>: A trust root configuration or TRC is a signed collection of certificates pertaining to an isolation domain (ISD). TRCs also contain ISD-specific policies.</t>
      </section>
      <section anchor="conventions-and-definitions">
        <name>Conventions and Definitions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="paths-links">
        <name>Paths and Links</name>
        <t>SCION routers and endpoints connect to each other via links. A SCION path between two endpoints essentially traverses one or more links.</t>
        <t>In SCION, autonomous systems (ASes) are organized into logical groups called isolation domains or ISDs. Each ISD consists of ASes that span an area with a uniform trust environment (i.e., a common jurisdiction). An ISD is administered by a set of distinguished ASes called core ASes.</t>
        <t>SCION distinguishes three types of links between ASes: (1) core links, (2) parent-child links, and (3) peering links.</t>
        <ul spacing="normal">
          <li>
            <t><em>Core</em> links connect two core ASes, which are either within the same or in different ISDs. Core links can exist for various underlying business relationships, including provider-customer (where the customer pays the provider for traffic) and peering relationships.</t>
          </li>
          <li>
            <t><em>Parent-child</em> links create a hierarchy between the parent and the child AS within the same ISD. ASes with a parent-child link typically have a provider-customer relationship.</t>
          </li>
          <li>
            <t><em>Peering</em> links exist between ASes with a (settlement-free or paid) peering relationship. They can be established between any two ASes (core or non-core). Peering links can cross ISD boundaries.</t>
          </li>
        </ul>
        <t>These link types form the basis for the notion of "valley free" paths. Valley freeness means that a child AS does not carry transit traffic from a parent AS.
The SCION paths are always valley free, and consist of (at most) three segments; first an up-segment, traversing links from child to parent, then a core-segment consisting of core-links and then a down-segment traversing links from parent to child.
Peering link can be used as "shortcuts" in such an up-core-down path. A path can contain at most one peering link shortcut. Implicitly, peering links can thus only be used in paths between ASes in the "customer-cone" of the ASes connected by the peering link.</t>
        <t>The following figure shows the three types of links for one small ISD with the two core ASes A and C, and the four non-core ASes D,E,F, and G.</t>
        <figure anchor="_figure-1">
          <name>The three types of SCION links in one ISD</name>
          <artwork><![CDATA[
+-------------------------+
|                         |       #
|        ISD Core         |       |      parent-child
|  .---.           .---.  |       |      link
| (  A  )*-------*(  C  ) |       |
|  `-#-'           `-#-'  |       0
|    |               |    |
+----|---------------|----+   *-------*  core link
     |               |
     |               |        < - - - >  peering link
   .-0-.           .-0-.
  (  D  )< - - - >(  E  )
   `-#-'           `-#-'
     |               |
     |               |
     |               |
   .-0-.           .-0-.
  (  G  )         (  F  )
   `---'           `---'
]]></artwork>
        </figure>
        <t>Each link connecting SCION routers is bidirectional and identified by its corresponding egress and ingress interface IDs. An interface ID consists of a 16-bit identifier that <bcp14>MUST</bcp14> be unique within each AS, with the exception of value 0 (see <xref target="I-D.scion-dp"/>). Therefore, they can be chosen and encoded by each AS independently and without any need for coordination between ASes.</t>
      </section>
      <section anchor="routing">
        <name>Routing</name>
        <t>SCION provides path-aware inter-domain routing between ASes across the Internet. The SCION control plane is responsible for discovering these inter-domain paths and making them available to the endpoints within the ASes. SCION inter-domain routing operates on two levels: Within a SCION isolation domain (ISD), which is called <em>intra</em>-ISD routing, and between ISDs, called <em>inter</em>-ISD routing. Both levels use the so-called <em>path-segment construction beacons (PCBs)</em> to explore network paths. A PCB is initiated by a core AS and then disseminated either within an ISD to explore intra-ISD paths, or among core ASes, to explore core paths across different ISDs.</t>
        <t>The PCBs accumulate cryptographically protected path and forwarding information on AS-level, and store this information in the form of <em>hop fields</em>. Endpoints use information from these hop fields to create end-to-end forwarding paths for data packets, who carry this information in their packet headers. This concept is called <em>packet-carried forwarding state</em>. The concept also supports multi-path communication among endpoints.</t>
        <t>The creation of an end-to-end forwarding path consists of the following processes:</t>
        <ol spacing="normal" type="1"><li>
            <t><em>Path exploration (or beaconing)</em>: This is the process where an AS discovers paths to other ASes. See also <xref target="beaconing"/>.</t>
          </li>
          <li>
            <t><em>Path registration</em>: This is the process where an AS selects a few PCBs, according to defined policies, turns the selected PCBs into path segments, and adds these path segments to the relevant path infrastructure, thus making them available to other ASes. See also <xref target="path-segment-reg"/>.</t>
          </li>
          <li>
            <t><em>Path resolution</em>: This is the process of actually creating an end-to-end forwarding path from the source endpoint to the destination. For this, an endpoint performs (a) a path lookup step, to obtain path segments, and (b) a path combination step, to combine the forwarding path from the segments. This last step takes place in the data plane. See also <xref target="lookup"/>.</t>
          </li>
        </ol>
        <t>All processes operate concurrently.</t>
        <t><xref target="_figure-2"/> below shows the SCION routing processes and their relation to each other.</t>
        <figure anchor="_figure-2">
          <name>SCION routing processes and their relation to each other. All processes operate concurrently</name>
          <artwork><![CDATA[
+-------------------------+       +-------------------------+
| Exploration (Beaconing) |------>|      Registration       |
+-------------------------+       +-----------+-------------+
                                              |
                              +---------------+
                              |
     +------------------------v------------------------+
     |                 Path Resolution                 |
     |                                                 |
     |   +----------------+       +----------------+   |
     |   |     Lookup     +------>|  Combination   |   |
     |   |                |       |    (Data Plane)|   |
     |   +----------------+       +----------------+   |
     +-------------------------------------------------+
]]></artwork>
        </figure>
        <t>The <strong>control service</strong> is responsible for the path exploration and registration processes in the control plane. It is the main control-plane infrastructure component within each SCION AS. The control service of an AS has the following tasks:</t>
        <ul spacing="normal">
          <li>
            <t>Generating, receiving, and propagating PCBs. Periodically, the control service of a core AS generates a set of PCBs, which are forwarded to the child ASes or neighboring core ASes. In the latter case, the PCBs are sent over policy-compliant paths to discover multiple paths between any pair of core ASes.</t>
          </li>
          <li>
            <t>Selecting and registering the set of path segments via which the AS wants to be reached.</t>
          </li>
          <li>
            <t>Managing certificates and keys to secure inter-AS communication. Each PCB contains signatures of all on-path ASes. Every time the control service of an AS receives a PCB, it validates the PCB's authenticity. When the control service lacks an intermediate certificate, it can query the control service of the neighboring AS that sent the PCB.</t>
          </li>
        </ul>
        <t><strong>Note:</strong> The control service of an AS must not be confused with a border router. The control service of a specific AS is part of the control plane and responsible for <em>finding and registering suitable paths</em>. It can be deployed anywhere inside the AS. A border router belongs to the data plane; its main task is to <em>forward data packets</em>. Border routers are deployed at the edge of an AS.</t>
        <section anchor="path-segments">
          <name>Path Segments</name>
          <t>As described previously, the main goal of SCION's control plane is to create and manage path segments, which can then be combined into forwarding paths to transmit packets in the data plane. SCION distinguishes the following types of path segments:</t>
          <ul spacing="normal">
            <li>
              <t>A path segment from a non-core AS to a core AS is an <em>up-segment</em>.</t>
            </li>
            <li>
              <t>A path segment from a core AS to a non-core AS is a <em>down-segment</em>.</t>
            </li>
            <li>
              <t>A path segment between core ASes is a <em>core-segment</em>.</t>
            </li>
          </ul>
          <t>So each path segment either ends at a core AS, or starts at a core AS, or both.</t>
          <t>All path segments are invertible: A core-segment can be used bidirectionally, and an up-segment can be converted into a down-segment, or vice versa, depending on the direction of the end-to-end path. This means that all path segments can be used to send data traffic in both directions.</t>
          <t>The cryptographic protection of PCBs / path segments is based on the Control-Plane PKI. The signatures are structured such that the entire message sequence constituting the path segment can be authenticated. The authenticity can be verified by anyone with access to this PKI.
For fast validation of the path information carried in individual packets during packet forwarding, symmetric key cryptography is used instead. For this purpose, the hop fields contain a MAC. These MACs are structured to allow verifying the sequence of hops, reflecting the structure of the PCBs, but, in contrast to the PCBs, this can only be validated by the border routers of the respective AS.</t>
        </section>
      </section>
      <section anchor="numbering">
        <name>Addressing</name>
        <t>The inter-domain SCION routing is based on the &lt;ISD, AS&gt; tuple. Although a complete SCION address is composed of the &lt;ISD, AS, endpoint address&gt; 3-tuple, the endpoint address is not used for inter-domain routing or forwarding. The endpoint address can be of variable length, does not need to be globally unique, and can thus be an IPv4, IPv6, or link layer address, for example - in fact, the endpoint address is the "normal", currently used, non-SCION-specific endpoint address.</t>
        <t>However, the ISD-AS number is a SCION-specific number. It consists of 64-bits, with the top 16 bits indicating the ISD, and the bottom 48 bits indicating the AS. The text representation uses a dash-separator between the ISD and AS numbers, for example: <tt>4-ff00:1:f</tt>. This section provides more details about the numbering scheme for SCION ISD and AS numbers.</t>
        <t><strong>Note:</strong> As a consequence of the fact that SCION relies on existing routing protocols (e.g., IS-IS, OSPF, SR) and communication fabric (e.g., IP, MPLS) for intra-domain forwarding, existing internal routers do not need to be changed to support SCION.</t>
        <section anchor="isd-numbers">
          <name>ISD Numbers</name>
          <t>An ISD number is the 16-bit global identifier for an ISD. It <bcp14>MUST</bcp14> be globally unique. The following table gives an overview of the ISD number allocation.</t>
          <table anchor="_table-1">
            <name>ISD number allocations</name>
            <thead>
              <tr>
                <th align="left">ISD</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">The wildcard ISD.</td>
              </tr>
              <tr>
                <td align="left">1 - 15</td>
                <td align="left">Reserved for documentation and sample code (analogous to <xref target="RFC5398"/>).</td>
              </tr>
              <tr>
                <td align="left">16 - 63</td>
                <td align="left">Private use (analogous to <xref target="RFC6996"/>). Can be used for testing and private deployments</td>
              </tr>
              <tr>
                <td align="left">64 - 4094</td>
                <td align="left">Public ISDs. Should be allocated in ascending order, without gaps and "vanity" numbers.</td>
              </tr>
              <tr>
                <td align="left">4095 - 65535</td>
                <td align="left">Reserved for future use.</td>
              </tr>
            </tbody>
          </table>
          <t>Currently, ISD numbers are allocated by Anapaya, the Swiss-based provider of SCION-based networking software and solutions (see <eref target="https://docs.anapaya.net/en/latest/resources/isd-as-assignments/">Anapaya ISD AS assignments</eref>).</t>
        </section>
        <section anchor="scion-as-numbers">
          <name>SCION AS Numbers</name>
          <t>A SCION AS number is the 48-bit identifier for an AS. Although they play a similar role, there is no relationship between SCION AS numbers and BGP ASNs as defined by RFC4893. For historical reasons some SCION autonomous systems use a SCION AS number where the first 16 bits are 0, and the remaining 32 bits are identical to their BGP ASN. There is no technical requirement for such an equality.</t>
          <section anchor="text-representation">
            <name>Text Representation</name>
            <t>The default text representation for SCION AS numbers is very similar to IPv6 (see <xref target="RFC5952"/>). It uses a 16-bit colon-separated lower-case hex encoding with leading 0's omitted: <tt>0:0:0</tt> to <tt>ffff:ffff:ffff</tt>.</t>
            <t>In SCION, the following rules apply:</t>
            <ul spacing="normal">
              <li>
                <t>The <tt>::</tt> zero-compression feature of IPv6 <bcp14>MUST NOT</bcp14> be used. The feature has very limited use in a 48-bit address space and would only add more complexity.</t>
              </li>
              <li>
                <t>A range of AS numbers can be shortened with a notation similar to the one used for CIDR IP ranges (<xref target="RFC4632"/>). For example, the range of the lowest 32-bit AS numbers (0-4294967295) can be represented as <tt>0:0:0/16</tt>.</t>
              </li>
            </ul>
            <t>For historical reasons, SCION AS numbers in the lower 32 bit range <bcp14>MAY</bcp14> also be represented as decimal for human readability. For example, if a program receives the AS number <tt>0:1:f</tt>, it <bcp14>MAY</bcp14> display the number as "65551".</t>
          </section>
          <section anchor="special-purpose-scion-as-numbers">
            <name>Special-Purpose SCION AS Numbers</name>
            <table anchor="_table-2">
              <name>AS number allocations</name>
              <thead>
                <tr>
                  <th align="left">AS</th>
                  <th align="left">Size</th>
                  <th align="left">Description</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">
                    <tt>0:0:0</tt></td>
                  <td align="left">1</td>
                  <td align="left">The wildcard AS</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>0:0:1-0:ffff:ffff</tt></td>
                  <td align="left">~4.3 bill.</td>
                  <td align="left">Public SCION AS numbers</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>1:0:0</tt></td>
                  <td align="left">1</td>
                  <td align="left">Reserved</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>2:0:0/16</tt></td>
                  <td align="left">~4.3 bill.</td>
                  <td align="left">Additional public SCION AS numbers</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>ff00:0:0/32</tt></td>
                  <td align="left">65535</td>
                  <td align="left">Reserved for documentation and test/sample code (analogous to <xref target="RFC5398"/>).</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>ffaa:0:0/24</tt></td>
                  <td align="left">~16.8 mill.</td>
                  <td align="left">Reserved for private use (analogous to <xref target="RFC6996"/>). These numbers can be used for testing/private deployments.</td>
                </tr>
                <tr>
                  <td align="left">
                    <tt>ffff:ffff:ffff</tt></td>
                  <td align="left">1</td>
                  <td align="left">Reserved</td>
                </tr>
              </tbody>
            </table>
            <t>The rest of the space is currently unallocated.</t>
          </section>
        </section>
        <section anchor="serv-disc">
          <name>Wildcard Addressing</name>
          <t>SCION allows endpoints to use wildcard addresses in the control-plane routing, to designate any core AS, e.g., to place requests for core- or down-segments during path lookup. These wildcard addresses are of the form I-0, to designate any AS in ISD I. Here, "0" is the wildcard for the AS. For more information, see <xref target="wildcard"/>.</t>
        </section>
      </section>
      <section anchor="avoiding-circular-dependencies-and-partitioning">
        <name>Avoiding Circular Dependencies and Partitioning</name>
        <t>A secure and reliable routing architecture has to be designed specifically to avoid circular dependencies during network initialization. One goal of SCION is that the Internet can start up even after large outages or attacks, in addition to avoiding cascades of outages caused by fragile interdependencies. This section lists the concepts SCION uses to prevent circular dependencies.</t>
        <ul spacing="normal">
          <li>
            <t>Neighbor-based path discovery: Path discovery in SCION is performed by the beaconing mechanism. In order to participate in this process, an AS only needs to be aware of its direct neighbors. As long as no path segments are available, communicating with the neighboring ASes is possible with the one-hop path type, which does not rely on any path information. SCION uses these <em>one-hop paths</em> to propagate PCBs to neighboring ASes to which no forwarding path is available yet. The One-Hop Path Type is described in more detail in <xref target="I-D.scion-dp"/>.</t>
          </li>
          <li>
            <t>Path segment types: SCION uses different types of path segments to compose end-to-end paths. Notably, a single path segment already enables intra-ISD communication. For example, a non-core AS can reach the core of the local ISD simply by using an up-segment fetched from the local path storage, which is populated during the beaconing process.</t>
          </li>
          <li>
            <t>Path reversal: In SCION, every path is reversible. That is, the receiver of a packet can reverse the path in the packet header in order to produce a reply packet without having to perform a path lookup. Such a packet follows the original packet's path backwards.</t>
          </li>
          <li>
            <t>Availability of certificates: In SCION, every entity is required to be in possession of all cryptographic material (including the ISD's Trust Root Configuration TRC and certificates) that is needed to verify any message it sends. This (together with the path reversal) means that the receiver of a message can always obtain all this necessary material by contacting the sender.<br/>
              <strong>Note:</strong> For a detailed description of a TRC and more information on the availability of certificates and TRCs, see the SCION Control-Plane PKI Internet-Draft <xref target="I-D.scion-cppki"/>.</t>
          </li>
        </ul>
        <section anchor="partition-and-healing">
          <name>Partition and Healing</name>
          <t>Besides inter-dependencies, another threat to the Internet is network partition. Partition occurs when one network is split into two because of a link failure. However, partition of the global SCION inter-domain network is much less likely to happen: During normal operation, the full network fabric is available, offering multiple paths between all ASes. Even during failures there is no special failure mode required, as SCION-enabled ASes could always switch to otherwise unused links.</t>
          <t>Recovering (also called healing) from a partitioned network is also seamless, as only coarse time synchronization between the partitions is required to resume normal operation and move forward with updates of the cryptographic material.</t>
        </section>
      </section>
      <section anchor="communication-protocol">
        <name>Communication Protocol</name>
        <t>All communication between the control services in different ASes is expressed in terms of gRPC remote procedure calls (for details, see <xref target="gRPC"/>). Service interfaces and messages are defined in the Protocol Buffer "proto3" interface definition language (for details, see <xref target="proto3"/>).</t>
        <t>The RPC messages are transported via the <xref target="Connect"/>'s rpc protocol; a gRPC-like protocol that carries messages over HTTP/3 (see <xref target="RFC9114"/>)). HTTP3 traffic uses QUIC/UDP (<xref target="RFC9000"/>) as a transport layer. In the case of SCION, UDP relies on the SCION data plane.</t>
        <t>Appendix <xref target="app-a"/> provides the entire control service API definition in protobuf format.</t>
        <t>Appendix <xref target="app-b"/> provides details about the establishment of the underlying QUIC connections through the SCION data plane.</t>
      </section>
    </section>
    <section anchor="beaconing">
      <name>Path Exploration or Beaconing</name>
      <section anchor="introduction-and-overview">
        <name>Introduction and Overview</name>
        <t><strong>Path exploration</strong> is the process where an AS discovers paths to other ASes. In SCION, this process is referred to as <em>beaconing</em>. This section gives a detailed explanation of the SCION beaconing process.</t>
        <t>In SCION, the <em>control service</em> of each AS is responsible for the beaconing process. The control service generates, receives, and propagates so-called <em>path-segment construction beacons (PCBs)</em> on a regular basis, to iteratively construct path segments. PCBs contain topology and authentication information, and can also include additional metadata that helps with path management and selection. The beaconing process itself is divided into routing processes on two levels, where <em>inter-ISD</em> or core beaconing is based on the (selective) sending of PCBs without a defined direction, and <em>intra-ISD</em> beaconing on top-to-bottom propagation.</t>
        <ul spacing="normal">
          <li>
            <t><em>Inter-ISD or core beaconing</em> is the process of constructing path segments between core ASes in the same or in different ISDs. During core beaconing, the control service of a core AS either initiates PCBs or propagates PCBs received from neighboring core ASes to other neighboring core ASes. Core beaconing is periodic; PCBs are sent over policy-compliant paths to discover multiple paths between any pair of core ASes.</t>
          </li>
          <li>
            <t><em>Intra-ISD beaconing</em> creates path segments from core ASes to non-core ASes. For this, the control service of a core AS creates PCBs and sends them to the non-core child ASes (typically customer ASes). The control service of a non-core child AS receives these PCBs and forwards them to its child ASes, and so on. This procedure continues until the PCB reaches an AS without any customer (leaf AS). As a result, all ASes within an ISD receive path segments to reach the core ASes of their ISD.</t>
          </li>
        </ul>
        <t>On its way, a PCB accumulates cryptographically protected path- and forwarding information per traversed AS. At every AS, metadata as well as information about the AS's ingress and egress interfaces are added to the PCB.</t>
        <section anchor="peering-links">
          <name>Peering Links</name>
          <t>PCBs do not traverse peering links. Instead, peering links are announced along with a regular path in a PCB. If both ASes at either end of a peering link have registered path segments that include this specific peering link, then it is possible to use this peering link during segment combination to create the end-to-end path.</t>
        </section>
        <section anchor="extending-a-pcb">
          <name>Extending a PCB</name>
          <t>Every propagation period (as configured by the AS), the control service:</t>
          <ul spacing="normal">
            <li>
              <t>selects the best combinations of PCBs and interfaces connecting to a neighboring AS (i.e., a child AS or a core AS), and</t>
            </li>
            <li>
              <t>sends each selected PCB to the selected egress interface(s) associated with it.</t>
            </li>
          </ul>
          <t>For every selected PCB and egress interface combination, the AS extends the PCB by adding a so-called <em>AS entry</em> to the selected PCB. Such an AS entry includes a hop field that specifies the incoming (ingress) and outgoing (egress) interface for the packet forwarding through this AS, in the beaconing direction. The AS entry can also contain peer entries.</t>
          <ul spacing="normal">
            <li>
              <t>For the specification of one PCB, see <xref target="pcbs"/></t>
            </li>
            <li>
              <t>For more details on selecting PCBs, see <xref target="selection"/></t>
            </li>
            <li>
              <t>For more details on propagating PCBs, see <xref target="path-segment-prop"/></t>
            </li>
          </ul>
        </section>
        <section anchor="pcb-propagation-illustrated-examples">
          <name>PCB Propagation - Illustrated Examples</name>
          <t>The following three figures show how intra-ISD PCB propagation works, from the ISD's core AS down to child ASes. For the sake of illustration, the interfaces of each AS are numbered with integer values.</t>
          <t>In <xref target="_figure-3a"/> below, core AS X sends the two different PCBs "a" and "b" via two different links to child AS Y: PCB "a" leaves core AS X via egress interface "2", whereas PCB "b" is sent over egress interface "1". Core AS X adds the respective egress information to the PCBs when sending them off, as can be seen in the figure (the entries "<em>Core - Out:2</em>" and "<em>Core - Out:1</em>", respectively).</t>
          <figure anchor="_figure-3a">
            <name>Intra-ISD PCB propagation from the ISD core to child ASes - Part 1</name>
            <artwork><![CDATA[
                            +-------------+
                            | Core AS X   |
                            |             |
                            |    2   1    |
                            +----#---#----+
          +--------+             |   |             +--------+
          |PCB     |     +-----+ |   | +-----+     |PCB     |
          |========|-----|PCB a| |   | |PCB b|=====|++++++++|
          |Core    |     +-----+ |   | +-----+     |Core    |
          |- Out:2 |        |    |   |    |        |- Out:1 |
          +--------+        v    |   |    v        +--------+
                                 v   v
                            +----#---#----+
                            |     AS Y    |
]]></artwork>
          </figure>
          <t>AS Y receives the two PCBs "a" and "b" through two different (ingress) interfaces, namely "2" and "3", respectively (see <xref target="_figure-3b"/> below). Additionally, AS Y forwards to AS Z four PCBs that were previously sent by core AS X. For this, AS Y uses the two different (egress) links "5" and "6". AS Y extends the four PCBs with the corresponding ingress and egress interface information. As can be seen in the figure, AS Y also has two peering links to its neighboring peers V and W, through the interfaces "1" and "4", respectively - AS Y includes this information in the PCBs, as well. Thus, each forwarded PCB cumulates path information on its way "down" from core AS X.</t>
          <figure anchor="_figure-3b">
            <name>Intra-ISD PCB propagation from the ISD core to child ASes - Part 2</name>
            <artwork><![CDATA[
                        +-----+ |   | +-----+
                        |PCB a| |   | |PCB b|
                        +-----+ |   | +-----+
                           |    |   |    |
                           v    |   |    v
                                v   v
                           +----#---#----+
                 .---.     |    2   3    |
                (  V  )- --# 1           |
                 `---'     |     AS Y    |     .---.
                           |           4 #- --(  W  )
                           |             |     `---'
                           |    6   5    |
            +--------+     +----#---#----+     +--------+
            |PCB     |          |   |          |PCB     |
            |========|          |   |          |========|
            |Core X  |          |   |          |Core X  |
            |- Out:2 |          |   |          |- Out:2 |
+--------+  |--------|  +-----+ |   | +-----+  |--------|  +--------+
|PCB     |  |AS Y    |--|PCB c| |   | |PCB d|--|AS Y    |  |PCB     |
|++++++++|  |-In:2   |  +-----+ |   | +-----+  |-In:2   |  |++++++++|
|Core X  |  |-Out:6  |     |    |   |    |     |-Out:5  |  |Core X  |
|- Out:1 |  |-PeerV:1|     v    |   |    v     |-PeerV:1|  |- Out:1 |
|--------|  |-PeerW:4|          |   |          |-PeerW:4|  |--------|
|AS Y    |  +--------+          |   |          +--------+  |AS Y    |
|-In:3   |              +-----+ |   | +-----+              |-In:3   |
|-Out:6  |==============|PCB e| |   | |PCB f|==============|-Out:5  |
|-PeerV:1|              +-----+ |   | +-----+              |-PeerV:1|
|-PeerW:4|                 |    |   |    |                 |-PeerW:4|
+--------+                 v    |   |    v                 +--------+
                                v   v
                           +----#---#----+
                           |    AS Z     |

]]></artwork>
          </figure>
          <t>The following figure shows how the four PCBs "c", "d", "e", and "f", coming from AS Y, are received by AS Z over two different links: PCBs "c" and "e" reach AS Z over ingress interface "5", whereas PCBs "d" and "f" enter AS Z via ingress interface "1". Additionally, AS Z propagates PCBs "g", "h", "i", and "j" further down, all over the same link (egress interface "3"). AS Z extends the PCBs with the relevant information, so that each of these PCBs now includes AS hop entries from core AS X, AS Y, and AS Z.</t>
          <figure anchor="_figure-3c">
            <name>Intra-ISD PCB propagation from the ISD core to child ASes - Part 3</name>
            <artwork><![CDATA[
                   +-----+      |   |      +-----+
                   |PCB c|      |   |      |PCB d|
                   +-----+      |   |      +-----+
                     |  +-----+ |   | +-----+  |
                     v  |PCB e| |   | |PCB f|  v
                        +-----+ |   | +-----+
                           |    |   |    |
                           v    |   |    v
                                v   v
                         +------#---#------+
                         |      5   1      |
                         |                 |
                         | AS Z            |
            +--------+   |        3        |   +--------+
            |PCB     |   +--------#--------+   |PCB     |
            |========|            |            |========|
            |Core X  |            |            |Core X  |
+--------+  |- Out:2 |            |            |- Out:2 |  +--------+
|PCB     |  |--------|            |            |--------|  |PCB     |
|++++++++|  |AS Y    |            |            |AS Y    |  |++++++++|
|Core X  |  |-In:2   |            |            |-In:2   |  |Core X  |
|- Out:1 |  |-Out:6  |   +-----+  |  +-----+   |-Out:5  |  |- Out:1 |
|--------|  |-PeerV:1|---|PCB g|  |  |PCB h|---|-PeerV:1|  |--------|
|AS Y    |  |-PeerW:4|   +-----+  |  +-----+   |-PeerW:4|  |AS Y    |
|-In:3   |  |--------|      |     |     |      |--------|  |-In:3   |
|-Out:6  |  |AS Z    |      v     |     v      |AS Z    |  |-Out:5  |
|-PeerV:1|  |-In:5   |            |            |-In:1   |  |-PeerV:1|
|-PeerW:4|  |-Out:3  |            |            |-Out:3  |  |-PeerW:4|
|--------|  +--------+            |            +--------+  |--------|
|AS Z    |               +-----+  |  +-----+               |AS Z    |
|-In:5   |===============|PCB i|  |  |PCB j|===============|-In:1   |
|-Out:3  |               +-----+  |  +-----+               |-Out:3  |
+--------+                  |     |     |                  +--------+
                            v     |     v
                                  v

]]></artwork>
          </figure>
          <t>Based on the figures above, one could say that a PCB represents a single path segment. However, there is a difference between a PCB and a (registered) path segment. A PCB is a so-called "travelling path segment" that accumulates AS entries when traversing the Internet. A (registered) path segment, instead, is a "snapshot" of a travelling PCB at a given time T and from the vantage point of a particular AS A. This is illustrated by <xref target="_figure-4"/>. This figure shows several possible path segments to reach AS Z, based on the PCBs "g", "h", "i", and "j" from <xref target="_figure-3c"/> above. It is up to AS Z to use all of these path segments or just a selection of them.</t>
          <figure anchor="_figure-4">
            <name>Possible up- or down-segments for AS Z</name>
            <artwork><![CDATA[
                AS Entry Core         AS Entry Y          AS Entry Z

               +-------------+     +-------------+     +-------------+
               |  Core AS X  |     |    AS Y     |     |     AS Z    |
path segment 1 |            1#     #3            5     #1            |
               |             |     |             |     |             |
               |            2#-----#2----------- 6-----#5            |
               |             |     |             |     |             |
               +-------------+     +-------------+     +-------------+
                 egress 2       ingress 2 - egress 6      ingress 5

----------------------------------------------------------------------

               +-------------+     +-------------+     +-------------+
               |  Core AS X  |     |    AS Y     |     |     AS Z    |
               |            1#     #3     +-----5#-----#1            |
path segment 2 |             |     |      |      |     |             |
               |            2#-----#2-----+     6#     #5            |
               |             |     |             |     |             |
               +-------------+     +-------------+     +-------------+
                 egress 2       ingress 2 - egress 5      ingress 1

------------------------------------------------------------------------

               +-------------+     +-------------+     +-------------+
               |  Core AS X  |     |    AS Y     |     |     AS Z    |
               |            1#-----#3-----+     5#     #1            |
path segment 3 |             |     |      |      |     |             |
               |            2#     #2     +-----6#-----#5            |
               |             |     |             |     |             |
               +-------------+     +-------------+     +-------------+
                 egress 1       ingress 3 - egress 6      ingress 5

------------------------------------------------------------------------

               +-------------+     +-------------+     +-------------+
               |  Core AS X  |     |   AS Y      |     |     AS Z    |
               |            1#-----#3-----------5#-----#1            |
path segment 4 |             |     |             |     |             |
               |            2#     #2           6#     #5            |
               |             |     |             |     |             |
               +-------------+     +-------------+     +-------------+
                 egress 1       ingress 3 - egress 5      ingress 1

]]></artwork>
          </figure>
        </section>
      </section>
      <section anchor="pcbs">
        <name>Path-Segment Construction Beacons (PCBs)</name>
        <t>This section provides a detailed specification of a single PCB and its message format.</t>
        <section anchor="pcb-compos">
          <name>Components of a PCB in Message Format</name>
          <t><xref target="_figure-5"/> graphically represents the PCB message format:</t>
          <figure anchor="_figure-5">
            <name>Top-down composition of one PCB</name>
            <artwork><![CDATA[
                              PCB / PATH SEGMENT

+-------------+------------+------------+--------+--------------------+
|Segment Info | AS Entry 0 | AS Entry 1 |  ...   |     AS Entry N     |
+-------------+------------+------------+--------+--------------------+
*- - - - # - -*            *- - - # - - *
         |                        |
*- - - - v - - - *                |
+---------+------+                |
|Timestamp|Seg ID|                |
+---------+------+                |
                                  |
*- - - - - - - - - - - - - - - - -v- - - - - - - - - - - - - - - - - - *
+-----------------------+----------------------------------------------+
|    Unsigned Ext.      |               Signed AS Entry                |
+-----------------------+----------------------------------------------+
                        *- - - - - - - - - - - - # - - - - - - - - - - *
                                                 |
                                                 |
*- - - - - - - - - - - - - - - - - - - - - - - - v - - - - - - - - - - *
+--------------------+-----------------++------------------------------+
|     Signature      |    Header       ||                    Body      |
+--------------------+-----------------++------------------------------+
                     *- - - - # - - - -**- - - - - - - - # - - - - - - *
                              |                          |
*- - - - - - - - - - - - - - -v- - - - *                 |
+----------------+---------------------+                 |
| Signature Alg. | Verification Key ID |                 |
+----------------+---------------------+                 |
                 *- - - - - # - - - - -*                 |
                            |                            |
*- - - - - - - - - - - - - -v- - - - - - - - - -*        |
+---------+---------+------------+--------------+        |
| ISD-AS  |TRC Base | TRC Serial |Subject Key ID|        |
+---------+---------+------------+--------------+        |
                                                         |
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - v - - - - - - *
+------+-----------+---------++------------+----+------------++---+----+
|ISD-AS|Next ISD-AS|Hop Entry||Peer Entry 0| ...|Peer Entry N||MTU|Ext.|
+------+-----------+---------++------------+----+------------++---+----+
                   *- - # - -**- - - # - - *
                        |            |
                        |            |
*- - - - - - - - - - - -v- *  *- - - v - - - - - - - - - - - - - - - - *
+-------------+------------+  +--------+--------+----------+-----------+
| Ingress MTU | Hop Field  |  |HopField|PeerMTU |PeerISD-AS|PeerInterf.|
+-------------+--------+---+  +----+---+--------+----------+-----------+
                       *- - -#- - -*
                             |
                             |
*- - - - - - - - - - - - - - v - - - - - - - - - - - - - - *
+------------+-------------+-------------------+-----------+
|  Ingress   |    Egress   |  Expiration Time  |   MAC     |
+------------+-------------+-------------------+-----------+
]]></artwork>
          </figure>
          <t>The following sections provide detailed specifications of the PCB messages, starting with the top-level message of one PCB, and then diving deeper into each of the PCB's message components.</t>
          <t><strong>Note:</strong> For a full example of one PCB in the Protobuf message format, please see <xref target="app-a"/>.</t>
          <section anchor="segment">
            <name>PCB Top-Level Message Format</name>
            <artwork><![CDATA[
+-------------+-------------+------------+------+------------+
|Segment Info | AS Entry 0  | AS Entry 1 |  ... | AS Entry N |
+-------------+-------------+------------+------+------------+
]]></artwork>
            <t>Each PCB <bcp14>MUST</bcp14> consists of at least:</t>
            <ul spacing="normal">
              <li>
                <t>An information field with an identifier and a timestamp.</t>
              </li>
              <li>
                <t>Entries of all ASes on the path segment represented by this PCB.</t>
              </li>
            </ul>
            <t>The following code block defines the PCB on top level in Protobuf message format.</t>
            <artwork><![CDATA[
   message PathSegment {
       bytes segment_info = 1;
       repeated ASEntry as_entries = 2;
   }
]]></artwork>
            <ul spacing="normal">
              <li>
                <t><tt>segment_info</tt>: This field is used as input for the PCB signature. It is the encoded version of the component <tt>SegmentInformation</tt>, which provides basic information about the PCB.  The <tt>SegmentInformation</tt> component is specified in detail in <xref target="seginfo"/>.</t>
              </li>
              <li>
                <t><tt>as_entries</tt>: Contains the <tt>ASEntry</tt> component of all ASes on the path segment represented by this PCB.
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>ASEntry</tt>: The <tt>ASEntry</tt> component contains the complete path information of a specific AS that is part of the path segment represented by the PCB. The <tt>ASEntry</tt> component is specified in detail in <xref target="ase-message"/>.</t>
                  </li>
                </ul>
              </li>
            </ul>
          </section>
          <section anchor="seginfo">
            <name>Segment Information</name>
            <artwork><![CDATA[
+----------------------------+
|         Segment Info       |
+----------------------------+
*- - - - - - - # - - - - - - *
               |
               |
*- - - - - - - v - - - - - - *
+--------------+-------------+
|   Timestamp  |   Seg ID    |
+--------------+-------------+
]]></artwork>
            <t>Each PCB <bcp14>MUST</bcp14> include an information component with basic information about the PCB.</t>
            <t>In the Protobuf message format, the information component of a PCB is called the <tt>SegmentInformation</tt> message. The following code block shows the Protobuf message definition for the <tt>SegmentInformation</tt> message.</t>
            <artwork><![CDATA[
   message SegmentInformation {
       int64 timestamp = 1;
       uint32 segment_id = 2;
   }
]]></artwork>
            <ul spacing="normal">
              <li>
                <t><tt>timestamp</tt>: The 32-bit timestamp indicates the creation time of this PCB. It is set by the originating core AS. The expiration time of each hop field in the PCB is computed relative to this timestamp. The timestamp is encoded as the number of seconds elapsed since the POSIX Epoch (1970-01-01 00:00:00 UTC).</t>
              </li>
              <li>
                <t><tt>segment_id</tt>: The 16-bit identifier of this PCB and the corresponding path segment. The segment ID is <bcp14>REQUIRED</bcp14> for the computation of the message authentication code (MAC) of an AS's hop field. The MAC is used for hop field verification in the data plane. The originating core AS <bcp14>MUST</bcp14> fill this field with a cryptographically random number.</t>
              </li>
            </ul>
            <t><strong>Note:</strong> See <xref target="hopfield"/> for more information on the hop field message format. <xref target="I-D.scion-dp"/> provides a detailed description of the computation of the MAC and the verification of the hop field in the data plane.</t>
          </section>
          <section anchor="ase-message">
            <name>AS Entry</name>
            <artwork><![CDATA[
                           +--------------+
                           |  AS Entry    |
                           +--------------+
                           *- - - -#- - - *
                                   |
                                   |
                                   |
*- - - - - - - - - - - - - - - - - v - - - - - - - - - - - - - - - *
+-----------------------+------------------------------------------+
|    Unsigned Ext.      |          Signed AS Entry                 |
+-----------------------+------------------------------------------+
]]></artwork>
            <t>Beside the basic information component, each PCB <bcp14>MUST</bcp14> also contain the entries of all ASes included in the corresponding path segment. This means that the originating core AS <bcp14>MUST</bcp14> add its AS entry to each PCB it creates. During the beaconing process, also each traversed AS <bcp14>MUST</bcp14> attach its AS entry to the PCB.</t>
            <t>One AS entry contains the complete hop information for this specific AS in this specific path segment. It consists of a signed and an unsigned component.</t>
            <t>The code block below defines an AS entry <tt>ASEntry</tt> in Protobuf message format.</t>
            <artwork><![CDATA[
   message ASEntry {
       SignedMessage signed = 1;
       PathSegmentUnsignedExtensions unsigned = 2;
   }
]]></artwork>
            <t>It includes the following components:</t>
            <ul spacing="normal">
              <li>
                <t><tt>SignedMessage</tt>: The signed component of an AS entry. For the specification of this part of the AS entry, see <xref target="signed-compo"/> below.</t>
              </li>
              <li>
                <t><tt>PathSegmentUnsignedExtensions</tt>: The unsigned and thus unprotected part of the AS entry. These are extensions with metadata that need no explicit protection.</t>
              </li>
            </ul>
          </section>
          <section anchor="signed-compo">
            <name>AS Entry Signed Component</name>
            <artwork><![CDATA[
        +------------------------------------------------------+
        |                   Signed AS Entry                    |
        +------------------------------------------------------+
        *- - - - - - - - - - - - -#- - - - - - - - - - - - - - *
                                  |
                                  |
*- - - - - - - - - - - - - - - - -v- - - - - - - - - - - - - - - - - -*
+--------------------+-----------------+------------------------------+
|      Header        |     Body        |            Signature         |
+--------------------+-----------------+------------------------------+
]]></artwork>
            <t>Each AS entry of a PCB <bcp14>MUST</bcp14> include a signed component as well as a signature computed over the signed component. Each AS entry <bcp14>MUST</bcp14> be signed with a private key that corresponds to the public key certified by the AS's certificate.</t>
            <t>This section specifies the signed component of an AS entry. The signed component of an AS entry <bcp14>MUST</bcp14> include the following elements:</t>
            <ul spacing="normal">
              <li>
                <t>a header,</t>
              </li>
              <li>
                <t>a body, and</t>
              </li>
              <li>
                <t>a signature.</t>
              </li>
            </ul>
            <t>In the Protobuf message-format implementation, the signed component of an AS entry is specified by the <tt>SignedMessage</tt>. It consists of a header-and-body part (<tt>header_and_body</tt>) and a raw signature (<tt>signature</tt>). See also the code block below.</t>
            <artwork><![CDATA[
   message SignedMessage {
       bytes header_and_body = 1;
       bytes signature = 2;
   }
]]></artwork>
            <t>The following code block shows the low-level representation of the <tt>HeaderAndBodyInternal</tt> message used for signature computation input. This message <bcp14>SHOULD NOT</bcp14> be used by external code.</t>
            <artwork><![CDATA[
   message HeaderAndBodyInternal {
       // Encoded header suitable for signature computation.
       bytes header = 1;
       // Raw payload suitable for signature computation.
       bytes body = 2;
   }
]]></artwork>
            <ul spacing="normal">
              <li>
                <t>For the specification of the signed header, see <xref target="ase-header"/>.</t>
              </li>
              <li>
                <t>For the specification of the signed body, see <xref target="ase-sign"/>.</t>
              </li>
              <li>
                <t>For the specification of the <tt>signature</tt> field, see <xref target="sign"/>.</t>
              </li>
            </ul>
            <section anchor="ase-header">
              <name>AS Entry Signed Header</name>
              <artwork><![CDATA[
           +-----------------+
           |     Header      |
           +-----------------+
           *- - - - # - - - -*
                    |
 - - - - - - - - - -v- - - - - - - - - *
+----------------+---------------------+
| Signature Alg. | Verification Key ID |
+----------------+---------------------+
                 *- - - - - # - - - - -*
                            |
 - - - - - - - - - - - - - -v- - - - - - - - - -
+---------+---------+------------+--------------+
| ISD-AS  |TRC Base | TRC Serial |Subject Key ID|
+---------+---------+------------+--------------+
]]></artwork>
              <t>The header part defines metadata that is relevant to (the computation and verification of) the signature. It <bcp14>MUST</bcp14> include at least the following metadata:</t>
              <ul spacing="normal">
                <li>
                  <t>The algorithm to compute the signature</t>
                </li>
                <li>
                  <t>The identifier of the public key used to verify the signature (i.e., the public key certified by the AS's certificate)</t>
                </li>
                <li>
                  <t>The ISD-AS number of the AS</t>
                </li>
              </ul>
              <t>The following code block defines the signed header of an AS entry in Protobuf message format (called the <tt>Header</tt> message).</t>
              <artwork><![CDATA[
   message Header {
       SignatureAlgorithm signature_algorithm = 1;
       bytes verification_key_id = 2;
       // Optional
       google.protobuf.Timestamp timestamp = 3;
       // Optional
       bytes metadata = 4;
       int32 associated_data_length = 5;
   }

   message VerificationKeyID {
       uint64 isd_as = 1;
       bytes subject_key_id = 2;
       uint64 trc_base = 3;
       uint64 trc_serial = 4;
   }
]]></artwork>
              <ul spacing="normal">
                <li>
                  <t><tt>signature_algorithm</tt>: Specifies the algorithm to compute the signature.</t>
                </li>
                <li>
                  <t><tt>verification_key_id</tt>: Holds the serialized data defined by the <tt>VerificationKeyID</tt> message type. The <tt>VerificationKeyID</tt> message contains more information that is relevant to signing and verifying PCBs and other control-plane messages. The <tt>VerificationKeyID</tt> message type includes the following fields (see also the above code block):
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t><tt>isd_as</tt>: The ISD-AS number of the current AS.</t>
                    </li>
                    <li>
                      <t><tt>subject_key_id</tt>: Refers to the certificate that contains the public key needed to verify this PCB's signature.</t>
                    </li>
                    <li>
                      <t><tt>trc_base</tt>: Defines the <em>base</em> number of the latest Trust Root Configuration (TRC) available to the signer at the time of the signature creation.</t>
                    </li>
                    <li>
                      <t><tt>trc_serial</tt>: Defines the <em>serial</em> number of the latest TRC available to the signer at the time of the signature creation.</t>
                    </li>
                  </ul>
                </li>
              </ul>
              <t><strong>Note:</strong> For more information on signing and verifying control-plane messages (such as PCBs), see the chapter Signing and Verifying Control-Plane Messages of the SCION Control-Plane PKI Specification <xref target="I-D.scion-cppki"/>. For more information on the TRC base and serial number, see the chapter Trust Root Configuration Specification of the SCION Control-Plane PKI Specification <xref target="I-D.scion-cppki"/>.</t>
              <ul spacing="normal">
                <li>
                  <t><tt>timestamp</tt>: Defines the signature creation timestamp. This field is <bcp14>OPTIONAL</bcp14>.</t>
                </li>
                <li>
                  <t><tt>metadata</tt>: Can be used to include arbitrary per-protocol metadata. This field is <bcp14>OPTIONAL</bcp14>.</t>
                </li>
                <li>
                  <t><tt>associated_data_length</tt>: Specifies the length of associated data that is covered by the signature, but is not included in the header and body. The value of this field is zero, if no associated data is covered by the signature.</t>
                </li>
              </ul>
            </section>
            <section anchor="ase-sign">
              <name>AS Entry Signed Body</name>
              <artwork><![CDATA[
                +--------------------------------------+
                |                 Body                 |
                +--------------------------------------+
                *- - - - - - - - - -#- - - - - - - - - *
                                    |
                                    |
*- - - - - - - - - - - - - - - - - -v- - - - - - - - - - - - - - - - -*
+------+-----------+---------++------------+---+------------++---+----+
|ISD-AS|Next ISD-AS|Hop Entry||Peer Entry 0|...|Peer Entry N||MTU|Ext.|
+------+-----------+---------++------------+---+------------++---+----+
]]></artwork>
              <t>The body of an AS entry <bcp14>MUST</bcp14> consist of the signed component <tt>ASEntrySignedBody</tt> of all ASes in the path segment represented by the PCB, up until and including the current AS.</t>
              <t>The following code block defines the signed body of one AS entry in Protobuf message format (called the <tt>ASEntrySignedBody</tt> message).</t>
              <artwork><![CDATA[
   message ASEntrySignedBody {
       uint64 isd_as = 1;
       uint64 next_isd_as = 2;
       HopEntry hop_entry = 3;
       repeated PeerEntry peer_entries = 4;
       uint32 mtu = 5;
       PathSegmentExtensions extensions = 6;
   }
]]></artwork>
              <ul spacing="normal">
                <li>
                  <t><tt>isd_as</tt>: The ISD-AS number of the AS that created this AS entry.</t>
                </li>
                <li>
                  <t><tt>next_isd_as</tt>: The ISD-AS number of the downstream AS to which the PCB <bcp14>SHOULD</bcp14> be forwarded.</t>
                </li>
                <li>
                  <t><tt>hop_entry</tt>: The hop entry (<tt>HopEntry</tt>) with the information required to forward this PCB through the current AS to the next AS. This information is used in the data plane. For a specification of the hop entry, see <xref target="hopentry"/>.</t>
                </li>
                <li>
                  <t><tt>peer_entries</tt>: The list of optional peer entries (<tt>PeerEntry</tt>). For a specification of one peer entry, see <xref target="peerentry"/>.</t>
                </li>
                <li>
                  <t><tt>mtu</tt>: The size of the maximum transmission unit (MTU) within the current AS's network.</t>
                </li>
                <li>
                  <t><tt>extensions</tt>: List of (signed) extensions (optional). PCB extensions defined here are part of the signed AS entry. This field <bcp14>SHOULD</bcp14> therefore only contain extensions that include important metadata for which cryptographic protection is required. For more information on PCB extensions, see <xref target="pcb-ext"/>.</t>
                </li>
              </ul>
            </section>
            <section anchor="sign">
              <name>AS Entry Signature</name>
              <t>Each AS entry <bcp14>MUST</bcp14> be signed with the AS certificate's private key K<sub>i</sub>. The certificate <bcp14>MUST</bcp14> have a validity period fully containing that of the segment being verified; regardless of current time. The signature Sig<sub>i</sub> of an AS entry ASE<sub>i</sub> is computed over the AS entry's signed component. This is the input for the computation of the signature:</t>
              <ul spacing="normal">
                <li>
                  <t>The signed header and body of the current AS (<tt>header_and_body</tt>).</t>
                </li>
                <li>
                  <t>The <tt>segment_info</tt> component of the current AS. This is the encoded version of the <tt>SegmentInformation</tt> component containing basic information about the path segment represented by the PCB. For the specification of <tt>SegmentInformation</tt>, see <xref target="seginfo"/>.</t>
                </li>
                <li>
                  <t>The signed <tt>header_and_body</tt>/<tt>signature</tt> combination of each previous AS on this specific path segment.</t>
                </li>
              </ul>
              <t>The signature Sig<sub>i</sub> of an AS entry ASE<sub>i</sub> is now computed as follows:</t>
              <t>Sig<sub>i</sub> =
K<sub>i</sub>( SegInfo || ASE<sub>0</sub><sup>(signed)</sup> || Sig<sub>0</sub> || ... || ASE<sub>i-1</sub><sup>(signed)</sup> || Sig<sub>i-1</sub> || ASE<sub>i</sub><sup>(signed)</sup> )</t>
              <t>The signature metadata minimally contains the ISD-AS number of the signing entity and the key identifier of the public key to be used to verify the message. For more information on signing and verifying control-plane messages, see the chapter "Signing and Verifying Control-Plane Messages" of the SCION Control-Plane PKI Specification <xref target="I-D.scion-cppki"/>.</t>
              <t>The following code block shows how the signature input is defined in the SCION Protobuf implementation ("ps" stands for path segment). Note that the signature has a nested structure.</t>
              <artwork><![CDATA[
input(ps, i) = signed.header_and_body || associated_data(ps, i)

associated_data(ps, i) = ps.segment_info ||
                         ps.as_entries[1].signed.header_and_body ||
                         ps.as_entries[1].signed.signature ||
                         ...
                         ps.as_entries[i-1].signed.header_and_body ||
                         ps.as_entries[i-1].signed.signature
]]></artwork>
            </section>
          </section>
          <section anchor="hopentry">
            <name>Hop Entry</name>
            <artwork><![CDATA[
       +-----------+
       | Hop Entry |
       +-----------+
       *- - -#- - -*
             |
 - - - - - - v - - - - - - *
+-------------+------------+
| Ingress MTU | Hop Field  |
+-------------+------------+
]]></artwork>
            <t>Each body of an AS entry <bcp14>MUST</bcp14> contain exactly one hop entry component. The hop entry component specifies forwarding information for the data plane. The data plane requires this information to create the hop through the current AS (in the direction of the beaconing).</t>
            <t>The following code block defines the hop entry component <tt>HopEntry</tt> in Protobuf message format:</t>
            <artwork><![CDATA[
   message HopEntry {
       HopField hop_field = 1;
       uint32 ingress_mtu = 2;
   }
]]></artwork>
            <ul spacing="normal">
              <li>
                <t><tt>hop_field</tt>: Contains the authenticated information about the ingress and egress interfaces in the direction of beaconing. The data plane needs this information to forward packets through the current AS. For further specifications, see <xref target="hopfield"/>.</t>
              </li>
              <li>
                <t><tt>ingress_mtu</tt>: Specifies the maximum transmission unit (MTU) of the ingress interface of the current AS.</t>
              </li>
            </ul>
          </section>
          <section anchor="hopfield">
            <name>Hop Field</name>
            <artwork><![CDATA[
                      +-----------+
                      | Hop Field |
                      +-----------+
                      *- - -#- - -*
                            |
                            |
*- - - - - - - - - - - - - -v- - - - - - - - - - - - - - - *
+-------------+-------------+-------------------+----------+
|   Ingress   |    Egress   |  Expiration Time  |   MAC    |
+-------------+-------------+-------------------+----------+
]]></artwork>
            <t>The hop field, part of both hop entries and peer entries, is used directly in the data plane for packet forwarding: It specifies the incoming and outgoing interfaces of the ASes on the forwarding path. To prevent forgery, this information is authenticated with a message authentication code (MAC), which will be checked by the SCION border routers during packet forwarding.</t>
            <t>The algorithm used to compute the hop field MAC is an AS-specific choice. The operator of an AS can freely choose a MAC algorithm without outside coordination. However, the control service and routers of the AS do need to agree on the algorithm used.
Control service and router implementations <bcp14>MUST</bcp14> support the Default Hop Field MAC algorithm described in <xref target="I-D.scion-dp"/>. This document does not specify any further mechanism to coordinate this choice between control services and routers of one AS.</t>
            <t>The following code block defines the hop field component <tt>HopField</tt> in Protobuf message format:</t>
            <artwork><![CDATA[
   message HopField {
       uint64 ingress = 1;
       uint64 egress = 2;
       uint32 exp_time = 3;
       bytes mac = 4;
   }
]]></artwork>
            <ul spacing="normal">
              <li>
                <t><tt>ingress</tt>: The 16-bit ingress interface identifier (in the direction of the path construction, that is, in the direction of beaconing through the current AS).</t>
              </li>
            </ul>
            <t><strong>Note:</strong> For the AS that initiates the PCB, the ingress interface identifier <bcp14>MUST NOT</bcp14> be specified. This initiating AS is a core AS.</t>
            <ul spacing="normal">
              <li>
                <t><tt>egress</tt>: The 16-bit egress interface identifier (in the direction of beaconing).</t>
              </li>
              <li>
                <t><tt>exp_time</tt>: The 8-bit encoded expiration time of the hop field, indicating its validity. This field expresses a duration in seconds according to the formula: <tt>duration = (1 + exp_time) * (24*60*60/256)</tt>. The minimum duration is therefore 337.5 s. This duration is relative to the PCB creation timestamp set in the PCB's segment information component (see also <xref target="seginfo"/>). Therefore, the absolute expiration time of the hop field is the sum of these two values.</t>
              </li>
              <li>
                <t><tt>mac</tt>: The message authentication code (MAC) used in the data plane to verify the hop field, as described in <xref target="I-D.scion-dp"/>.</t>
              </li>
            </ul>
          </section>
          <section anchor="peerentry">
            <name>Peer Entry</name>
            <artwork><![CDATA[
                      +--------------+
                      |  Peer Entry  |
                      +--------------+
                      *- - - -#- - - *
                              |
*- - - - - - - - - - - - - - -v- - - - - - - - - - - - - - *
+-------------+------------+--------------+----------------+
|  Hop Field  |  Peer MTU  | Peer ISD-AS  | Peer Interface |
+-------------+------------+--------------+----------------+
]]></artwork>
            <t>By means of a peer entry, an AS can announce that it has a peering link to another AS. A peer entry is an optional component of a PCB - it is only included if there is a peering link to a peer AS.</t>
            <t>The following code block defines the peer entry component <tt>PeerEntry</tt> in Protobuf message format:</t>
            <artwork><![CDATA[
   message PeerEntry {
       uint64 peer_isd_as = 1;
       uint64 peer_interface = 2;
       uint32 peer_mtu = 3;
       HopField hop_field = 4;
   }
]]></artwork>
            <ul spacing="normal">
              <li>
                <t><tt>peer_isd_as</tt>: The ISD-AS number of the peer AS. This number is used to match peering segments during path construction.</t>
              </li>
              <li>
                <t><tt>peer_interface</tt>: The 16-bit interface identifier of the peering link on the peer AS side. This identifier is used to match peering segments during path construction.</t>
              </li>
              <li>
                <t><tt>peer_mtu</tt>: Specifies the maximum transmission unit MTU on the peering link.</t>
              </li>
              <li>
                <t><tt>hop_field</tt>: Contains the authenticated information about the ingress and egress interfaces in the current AS (coming from the peering link, in the direction of beaconing - see also <xref target="_figure-6"/>). The data plane needs this information to forward packets through the current AS. For further specifications, see <xref target="hopfield"/>.</t>
              </li>
            </ul>
            <figure anchor="_figure-6">
              <name>Peer entry information, in the direction of beaconing</name>
              <artwork><![CDATA[
   +-----------+
   |           |
   | parent AS |
   |           |
   +-----------+
         |
         |
         | ASE.HF.ingress_interface
+--------#-----------+                  +-----------------+
|        |           |         PE.peer_ |                 |
|                    |         interface|                 |
|        | + - - - - #------------------#     peer AS     |
|                    |PE.HF.ingress_    |                 |
|        | |         |interface         |                 |
|                    |                  +-----------------+
|        v v         |
+---------#----------+
          | PE.HF.egress_interface
          | ASE.HF.egress_interface
          |
          |
    +-----------+
    |           |
    |  child AS |
    |           |
    +-----------+
]]></artwork>
            </figure>
          </section>
        </section>
        <section anchor="pcb-ext">
          <name>PCB Extensions</name>
          <t>In addition to basic routing information like hop entries and peer entries, PCBs can be used to communicate additional metadata, in its extensions. Extensions can be signed and unsigned. Signed extensions are protected by the AS signature, whereas unsigned extensions are not.</t>
          <t>On code-level and in Protobuf message format, extensions are specified as follows:</t>
          <ul spacing="normal">
            <li>
              <t>Unsigned extensions <tt>PathSegmentUnsignedExtensions</tt> are part of the AS entry component (the <tt>ASEntry</tt> message, see also <xref target="ase-message"/>).</t>
            </li>
            <li>
              <t>Signed extensions <tt>PathSegmentExtensions</tt> are part of the signed body component of an AS entry (the <tt>ASEntrySignedBody</tt> message, see also <xref target="ase-sign"/>).</t>
            </li>
          </ul>
          <t><strong>Note:</strong> SCION also supports so-called "detachable extensions". The detachable extension itself is part of a PCB's unsigned extensions, but a cryptographic hash of the detachable extension data is added to the signed extensions. Thus, a PCB with a detachable extension can be signed and verified without actually including the detachable extension in the signature. This prevents a possible processing overhead caused by large cryptographically-protected extensions.</t>
        </section>
        <section anchor="pcb-validity">
          <name>PCB Validity</name>
          <t>To be valid (that is, usable to construct a valid path), a PCB <bcp14>MUST</bcp14>:</t>
          <ul spacing="normal">
            <li>
              <t>Contain valid AS Entry signatures (<xref target="sign"/>).</t>
            </li>
            <li>
              <t>Have a timestamp (<xref target="seginfo"/>) that is not in the future.</t>
            </li>
            <li>
              <t>Contain only unexpired hops (<xref target="hopfield"/>).</t>
            </li>
          </ul>
          <t>For the purpose of validation, a timestamp is considered "future" if it is later than the current time at the point of validation plus the minimum expiration time of a hop field (337.5 seconds, see <xref target="hopfield"/>).</t>
          <t>For the purpose of validation, a hop is considered expired if its absolute expiration time, calculated as defined in <xref target="hopfield"/>, is later than the current time at the point of validation.</t>
        </section>
        <section anchor="configuration">
          <name>Configuration</name>
          <t>For the purpose of constructing and propagating path segments, an AS control service <bcp14>MUST</bcp14> be configured with links to neighboring ASes. Such information may be conveyed to the control service in an out of band fashion (e.g in a configuration file). For each link, these values <bcp14>MUST</bcp14> be configured:</t>
          <ul spacing="normal">
            <li>
              <t>Local interface ID</t>
            </li>
            <li>
              <t>Neighbor type (core, parent, child, peer), depending on link type (see <xref target="paths-links"/>). Link type depends on mutual agreements between the organizations operating the ASes at each end of each link.</t>
            </li>
            <li>
              <t>Neighbor ISD-AS number</t>
            </li>
            <li>
              <t>Neighbor interface underlay address</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="path-prop">
        <name>Propagation of PCBs</name>
        <t>This section describes how PCBs are selected and propagated in the path exploration process.</t>
        <section anchor="selection">
          <name>Selection of PCBs to Propagate</name>
          <t>As an AS receives a series of intra-ISD or core PCBs, it <bcp14>MUST</bcp14> select the PCBs it will use to continue beaconing. Each AS specifies a local policy on the basis of which PCBs are evaluated, selected, or eliminated.
The selection process can inspect and compare the properties of the candidate PCBs (e.g., length, disjointness across different paths, age, expiration time) and/or take into account which PCBs have been propagated in the past.</t>
          <t>Naturally, an AS's policy selects PCBs corresponding to paths that are commercially or otherwise operationally viable.
From these viable PCBs, only a relatively small subset <bcp14>SHOULD</bcp14> be propagated, to avoid excessive overhead of the path discovery system in bigger networks.
The goal of the AS <bcp14>SHOULD</bcp14> be to propagate those candidate PCBs with the highest probability of collectively meeting the needs of the endpoints that will perform path construction. As SCION does not provide any in-band signal about the intentions of endpoints nor about the policies of downstream ASes, the policy will typically select a somewhat diverse set optimized for multiple, generic parameters.</t>
          <section anchor="storing-and-selecting-candidate-pcbs">
            <name>Storing and Selecting Candidate PCBs</name>
            <t>When receiving a PCB, an AS first stores the PCB in a temporary storage for candidate PCBs, called the <em>beacon store</em>.</t>
            <t>PCBs are propagated in batches to each connected downstream AS at a fixed frequency, the <em>propagation interval</em>. At each propagation event, each AS selects a set of the best PCBs from the candidates in the beacon store, according to the AS's selection policy. This set <bcp14>SHOULD</bcp14> have a fixed size, the <em>best PCBs set size</em>.</t>
            <ul spacing="normal">
              <li>
                <t>The <em>best PCBs set size</em> <bcp14>SHOULD</bcp14> be at most "50" (PCBs) for intra-ISD beaconing and at most "5" (PCBs) for core beaconing.</t>
              </li>
            </ul>
            <t>Depending on the selection criteria, it may be necessary to keep more candidate PCBs than the <em>best PCBs set size</em> in the beacon store, to be able to determine the best set of PCBs. If this is the case, an AS <bcp14>SHOULD</bcp14> have a suitable pre-selection of candidate PCBs in place, in order to keep the beacon store capacity limited.</t>
            <ul spacing="normal">
              <li>
                <t>The <em>propagation interval</em> <bcp14>SHOULD</bcp14> be at least "5" (seconds) for intra-ISD beaconing and at least "60" (seconds) for core beaconing.</t>
              </li>
            </ul>
            <t>The scalability implications of such parameters are further discussed in <xref target="scalability"/>.</t>
          </section>
          <section anchor="selection-policy-example">
            <name>Selection Policy Example</name>
            <t><xref target="_figure-7"/> below illustrates the selection of path segments in three networks. Each network uses a different path property to select path segments.</t>
            <ul spacing="normal">
              <li>
                <t>The network at the upper left considers the <em>path length</em>, which is here defined as the number of hops from the originator core AS to the local AS. This number can give an indication of the path's latency. Based on this criterion, the network will select the PCB representing path segment A-G (in direction of beaconing) to propagate.</t>
              </li>
              <li>
                <t>The network at the upper right uses <em>peering links</em> as the selection criterion, that is, the number of different peering ASes from all non-core ASes on the PCB or path segment: A greater number of peering ASes increases the likelihood of finding a shortcut on the path segment. Based on this criterion, the network will select the PCB representing path segment B-E-I-L (in direction of beaconing) to propagate.</t>
              </li>
              <li>
                <t>The lower network selects PCBs based on <em>disjointness</em>. The disjointness of a PCB is calculated relative to the PCBs that have been previously sent. Paths can be either AS-disjoint or link-disjoint. AS-disjoint paths have no common upstream/core AS for the current AS, whereas link-disjoint paths do not share any AS-to-AS link. Depending on the objective of the AS, both criteria can be used: AS-disjointness allows path diversity in the event that an AS becomes unresponsive, and link-disjointness provides resilience in case of link failure. Based on the disjointness criterion, the network will select the PCBs representing the path segments A-D-G-H-J and C-E-F-I-J (in direction of beaconing) to propagate.</t>
              </li>
            </ul>
            <figure anchor="_figure-7">
              <name>Example networks to illustrate path-segment selection based on different path properties.</name>
              <artwork><![CDATA[
 Selected path segment: #------# or *------*
 Peering Link: PL

   ISD A: Path Length                 ISD B: Peering Links
+----------------------+          +---------------------------+
|      ISD Core        |          |        ISD Core           |
| .---.         .---.  |          |  .---.             .---.  |
|(  A  ) - - - (  C  ) |          | (  A  ) - - - - - (  C  ) |
| `-#-'         `---'  |       + --- `---'             `---'  |
|   ||   .---.   | |   |          |      |  .---. - - - - -   |
|   | - (  B  ) -      |       |  |    |  -(  B  )            |
|   |    `-+-'     |   |          |         `-#-||            |
+---|--------------|---+       |  |    |      |   - - - - - - - - +
    |      |       |           |  |           | |             |
    |                          |  +----|------|-|-------------+   |
    |      |     .-+-.                        | + - - - - +
    |    .-+-.  (  E  )        |       |      |                   |
    |   (  D  )  `---'                        |           |
    |    `-+-'     |         .-+-.     |    .-#-.       .-+-.     |
    |            .-+-.      (  D  )-PL-----(  E  )--PL-(  F  )
    |      |    (  F  )      `---'     |    `-#-'       `-+-'   .-+-.
  .-#-.          `-+-'                        |                (  G  )
 (  G  ) - +       |               - - +      |           |     `-+-'
  `---- - - - - - -               |           |
                                .---.       .-#-.       .-+-.     |
                               (  H  )-PL--(  I  )--PL-(  J  )
                                `---'       `-#-'       `---'   .-+-.
                                              |           |    (  K  )
       ISD C: Disjointness                    |                 `---'
  +---------------------------+             .-#-.         |       |
  |          ISD Core         |            (  L  ) - - - -
  |                           |             `---' - - - - - - - - +
  | .---.               .---. |
  |(  A  ) - - - - - - (  C  )|
  | `-*-'               `-#-' |
  |   | |     .---.     | |   |
  |   |  - - (  B  ) - -  |   |
  |   |       `---'       |   |
  +---|-------------------|---+
      |                   |
 .----*.                .-#---.
(   D   )              (   E   )
 `----*'                `-#---'
 |    |                   |   |
    #---------------------#
 |  | |                       |
    | *------------------*
 |  |                    |    |
 .--#--.                .*----.
(   F   #-------#      (   G   )
 `-----'        |       `*----|
 |          *------------*
            |   |             |
 |-----.    |   |       .-----.
(   H  *----*   #------#   I   )
 `---*-'                `-#---'
     |                    |
     |       .---.        |
     *------*  J  #-------#
             `---'
]]></artwork>
            </figure>
          </section>
        </section>
        <section anchor="path-segment-prop">
          <name>Propagation of Selected PCBs</name>
          <t>As mentioned above, once per <em>propagation period</em> (determined by each AS), an AS propagates selected PCBs to its neighboring ASes. This happens on the level of both intra-ISD beaconing and core beaconing. This section describes both processes in more detail.</t>
          <t>To bootstrap the initial communication with a neighboring beacon service, ASes use so-called one-hop paths. This special kind of path handles beaconing between neighboring ASes for which no forwarding path may be available yet. In fact, it is the task of beaconing to discover such forwarding paths. The purpose of one-hop paths is thus to break this circular dependency. The One-Hop Path Type is described in more detail in <xref target="I-D.scion-dp"/>.</t>
          <section anchor="reception-of-pcbs">
            <name>Reception of PCBs</name>
            <t>The following first steps of the propagation procedure are the same for both intra-ISD and core beaconing:</t>
            <ol spacing="normal" type="1"><li>
                <t>Upon receiving a PCB, the control service of an AS verifies the validity of the PCB (see <xref target="pcb-validity"/>). Invalid PCBs <bcp14>MUST</bcp14> be discarded.
The PCB contains the version numbers of the trust root configuration(s) (TRC) and certificate(s) that <bcp14>MUST</bcp14> be used to verify its signatures. This enables the control service to check whether it has the relevant TRC(s) and certificate(s); if not, they can be requested from the control service of the sending AS.</t>
              </li>
              <li>
                <t>As core beaconing is based on propagating PCBs to all AS neighbors, it is necessary to avoid loops during path creation. The control service of core ASes <bcp14>MUST</bcp14> therefore check whether the PCB includes duplicate hop entries created by the core AS itself or by other ASes. If so, the PCB <bcp14>MUST</bcp14> be discarded in order to avoid loops. Additionally, core ASes could forbid, that is, not propagate, beacons containing path segments that traverse the same ISD more than once. <strong>Note:</strong> Where loops must always be avoided, it is a policy decision to forbid ISD double-crossing. It can be legitimate to cross the same ISD multiple times: For example, if the ISD spans a large geographical area, a path transiting another ISD may constitute a shortcut. However, it is up to each core AS to decide whether it wants to allow this.</t>
              </li>
              <li>
                <t>If the PCB verification is successful, the control service decides whether to store the PCB as a candidate for propagation based on selection criteria and polices specific for each AS. For more information on the selection process, see <xref target="selection"/>.</t>
              </li>
            </ol>
          </section>
          <section anchor="intra-prop">
            <name>Propagation of PCBs in Intra-ISD Beaconing</name>
            <t>The propagation process in intra-ISD beaconing includes the following steps:</t>
            <ol spacing="normal" type="1"><li>
                <t>From the candidate PCBs stored in the beacon store, the control service of an AS selects the best PCBs to propagate to its downstream neighboring ASes, based on a selection algorithm specific for this AS.</t>
              </li>
              <li>
                <t>The control service adds a new AS entry to every selected PCB. This AS entry <bcp14>MUST</bcp14> at least include:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>The ingress interface to this AS, in the hop field component.</t>
                  </li>
                  <li>
                    <t>The egress interface to the neighboring AS, also in the hop field component.</t>
                  </li>
                  <li>
                    <t>The ISD_AS number of the next AS, in the signed body component of the AS entry.</t>
                  </li>
                  <li>
                    <t>If the AS has peering links, the control service <bcp14>MAY</bcp14> add corresponding peer entry components to the signed body of the AS entry; one peer entry component for each peering link that the AS wants to advertise. The hop field component of each added peer entry <bcp14>MUST</bcp14> have a specified egress interface.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>The control service <bcp14>MUST</bcp14> now sign each selected, extended PCB and append the computed signature.</t>
              </li>
              <li>
                <t>As a final step, the control service propagates each extended PCB to the correct neighboring ASes, by invoking the <tt>SegmentCreationService.Beacon</tt> remote procedure call (RPC) in the control services of the neighboring ASes (see also <xref target="prop-proto"/>).</t>
              </li>
            </ol>
            <t><strong>Note:</strong></t>
            <ul spacing="normal">
              <li>
                <t>For more information on the signed body component of an AS entry, see <xref target="ase-sign"/>.</t>
              </li>
              <li>
                <t>For more information on a peer entry, see <xref target="peerentry"/>.</t>
              </li>
              <li>
                <t>For more information on the hop field component, see <xref target="hopfield"/>.</t>
              </li>
              <li>
                <t>For more information on signing an AS entry, see <xref target="sign"/>.</t>
              </li>
            </ul>
          </section>
          <section anchor="propagation-of-pcbs-in-core-beaconing">
            <name>Propagation of PCBs in Core Beaconing</name>
            <t>The propagation process in core beaconing includes the following steps:</t>
            <ol spacing="normal" type="1"><li>
                <t>The core control service selects the best PCBs to forward to neighboring core ASes observed so far.</t>
              </li>
              <li>
                <t>The service adds a new AS entry to every selected PCB. This AS entry <bcp14>MUST</bcp14> at least include:
                </t>
                <ul spacing="normal">
                  <li>
                    <t>The egress interface to the neighboring core AS, in the hop field component.</t>
                  </li>
                  <li>
                    <t>The ISD_AS number of the neighboring core AS, in the signed body component of the AS entry.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t>The core control service <bcp14>MUST</bcp14> now sign the extended PCBs and append the computed signature.</t>
              </li>
              <li>
                <t>As a final step, the service propagates the extended PCBs to the neighboring core ASes, by invoking the <tt>SegmentCreationService.Beacon</tt> remote procedure call (RPC) in the control services of the neighboring core ASes (see also <xref target="prop-proto"/>).</t>
              </li>
            </ol>
          </section>
          <section anchor="prop-proto">
            <name>Propagation of PCBs in Protobuf Message Format</name>
            <t>The last step of the above described core and intra-ISD propagation procedures is implemented as follows in Protobuf message format:</t>
            <artwork><![CDATA[
   service SegmentCreationService {
       rpc Beacon(BeaconRequest) returns (BeaconResponse) {}
   }

   message BeaconRequest {
       PathSegment segment = 1;
   }

   message BeaconResponse {}
]]></artwork>
            <t>The propagation procedure includes the following elements:</t>
            <ul spacing="normal">
              <li>
                <t><tt>SegmentCreationService</tt>: Specifies the service via which the extended PCB is propagated to the control service of the neighboring AS.
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Beacon</tt>: Specifies the method that calls the control service at the neighboring AS in order to propagate the extended PCB.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>BeaconRequest</tt>: Specifies the request message sent by the <tt>Beacon</tt> method to the control service of the neighboring AS. It contains the following element:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>PathSegment</tt>: Specifies the path segment to propagate to the neighboring AS. For more information on the Protobuf message type <tt>PathSegment</tt>, see <xref target="segment"/>.</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>BeaconResponse</tt>: Specifies the response message from the neighboring AS.</t>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="effects-of-clock-inaccuracy">
          <name>Effects of Clock Inaccuracy</name>
          <t>A PCB originated by a given control service is validated by all the control services that receive it. All have different clocks. Their differences affect the validation process:</t>
          <ul spacing="normal">
            <li>
              <t>A fast clock at origination or a slow clock at reception will yield a lengthened expiration time for hops, and possibly an origination time in the future.</t>
            </li>
            <li>
              <t>A slow clock at origination or a fast clock at reception will yield a shortened expiration time for hops, and possibly an expiration time in the past.</t>
            </li>
          </ul>
          <t>This bias comes in addition to a structural delay: PCBs are propagated at a configurable interval (typically, around one minute). As a result of this and the way they are iteratively constructed, PCBs with N hops may be validated up to N intervals (so maximally N minutes) after origination. This creates a constraint on the expiration of hops. Hops of the minimal expiration time (337.5 seconds - see <xref target="hopfield"/>) would render useless any PCB describing a path longer than 5 hops. For this reason, it is unadvisable to create hops with a short expiration time, that should be around 6 hours.</t>
          <t>The control service and its clients authenticate each-other according to their respective AS's certificate. Path segments are authenticated based on the certificates of the ASes that they refer to. The expiration of a SCION AS certificate typically ranges from 3h to 5 years.
In comparison to these time scales, clock offsets in the order of minutes are immaterial.</t>
          <t>Each administrator of a SCION control service is responsible for maintaining sufficient clock accuracy. No particular method is assumed by this specification.</t>
        </section>
      </section>
      <section anchor="scalability">
        <name>Path Discovery Time and Scalability</name>
        <t>The path discovery mechanism balances the number of discovered paths and the time it takes to discover them versus resource overhead of the discovery.</t>
        <t>The resource costs for path discovery are communication overhead, processing and storage. Communication is transmitting the PCBs and occasionally obtaining the required PKI material. Processing cost is validating the signatures of the AS entries, signing new AS entries, and, to a lesser extent, evaluating the beaconing policies. Storage is both the temporary storage of PCBs before the next propagation interval, and the storage of complete discovered path segments.
All of these depend on the the number and length of the discovered path segments, that is, on the total number of AS entries of the discovered path segments.</t>
        <t>Interesting metrics for scalability and speed of path discovery are the time until all discoverable path segments have been discovered after a "cold boot", and the time until new link is usable.
Generally, the time until a specific PCB is built depends on its length and the propagation interval.
At each AS, the PCB will be processed and propagated at the subsequent propagation event. As propagation events are not synchronized between different ASes, a PCB arrives at a random point in time during the interval and is buffered before potentially being propagated.
With a propagation interval T at each AS, the mean time until the PCB is propagated in one AS therefore is T / 2 and the mean total time for the propagation steps of a PCB of length L is L * T / 2 (with a variance of L * T^2 / 12).</t>
        <t>Note that link removal is not part of path discovery in SCION. For scheduled removal of links, operators let path segments expire. On link failures, endpoints route around the failed link by switching to different paths in the data plane.</t>
        <t>To achieve scalability in its routing process, SCION uses a divide-and-conquer approach, partitioning  ASes into ISDs. In order to benefit from this, an ideal topology SCION should keep the inter-ISD core network to a moderate size. For more specific observations, we distinguish between intra- and inter-ISD beaconing.</t>
        <section anchor="intra-isd-beaconing">
          <name>Intra-ISD Beaconing</name>
          <t>In the intra-ISD beaconing, PCBs are propagated top-down, along parent-child links, from core to leaf ASes. Each AS discovers path segments from itself to the core ASes of its ISD.</t>
          <t>Typically, this directed, acyclic graph is narrow at the top, widens towards the leafs, and is relatively shallow; intermediate provider ASes have a large number of children, while they only have a small number of parents. The chain of intermediate providers from a leaf AS to a core AS is typically not long (e.g. local, regional, national provider, then core).</t>
          <t>Each AS potentially receives PCBs for all down-path segments from the core to itself. While the number of distinct provider chains to the core is typically moderate, the multiplicity of links between provider ASes has multiplicative effect on the number of PCBs. Once this number grows above the maximum recommended best PCBs set size of 50, ASes trim the set of PCBs propagated. As the choice is among different ways to transit the local AS, operators are well equipped to choose among this set of PCBs.
Ultimately, the number of PCBs received by an AS per propagation interval remains bounded by 50 for each parent link of an AS, and at most 50 PCBs per child link are propagated. The length of these PCBs, and thus the number of AS entries to be processed and stored, is expected to be moderate and not grow considerably with network size. The total resource overhead for beacon propagation is easily manageable even for highly connected ASes.</t>
          <t>To illustrate this with some numbers, an AS with a rather large number of 100 parent links receives at most 5000 PCBs during a propagation interval. Assuming a generous average length of 10 AS entries for these PCBs, this corresponds to 50000 AS entries. Due to the variable length fields in AS entries, the sizes for storage and transmission cannot be predicted exactly, and we'll assume an average of 250 bytes per AS entry. At the shortest, and thus chattiest, recommended propagation interval of 5 seconds, this corresponds to an average bandwidth of around 2.5MB/s, and processing 10000 signature verifications per second.
If the same AS has 1000 child links, the propagation of the beacons will require signing one new AS entry for each of the propagated PCBs for each link (at most 50 per link), that is at most 50000 signatures per propagation event.
The total bandwidth for the propagation of these PCBs for all 1000 child links would, again very roughly, be around 25MB/s.
All of these are manageable with even modest consumer hardware.</t>
          <t>On a cold start of the network, path segments to each AS are discovered after a number of propagation steps proportional to the longest path. As mentioned, the longest path is typically not long. With a 5 second propagation period and a generous longest path of length 10, all path segments are discovered after 25 seconds on average.</t>
          <t>When a new parent-child link is added to the network, the parent AS will propagate the available PCBs in the next propagation event. If the AS on the child side of the new link is a leaf AS, path discovery is thus complete after one single propagation interval. Otherwise, child ASes at distance D below the new link, learn of the new link after D further propagation intervals.</t>
        </section>
        <section anchor="inter-isd-beaconing">
          <name>Inter-ISD Beaconing</name>
          <t>In the inter-ISD core beaconing, PCBs are propagated omnidirectionally along core links. Each AS discovers path segments from itself to any other core AS.
The number of distinct paths through the core network is typically very large. To keep the overhead manageable, at most 5 path segments to every destination AS are discovered, and the propagation frequency is slower than in the intra-ISD beaconing (at least 60 seconds between propagation events).</t>
          <t>Without making strong assumptions on the topology of the core network, we can assume that shortest paths through real world, internet-like networks are relatively short; for example, the Barabási-Albert random graph model predicts a diameter of log(N)/log(log(N)) for a network with N nodes <xref target="BollRio-2000"/>. The average distance scales in the same way.
We cannot assume that the selected PCBs are strictly shortest paths through the network, but it's reasonable to assume that they will not be very much longer than the shortest paths either.</t>
          <t>With N the number of participating core ASes, an AS receives up to 5 * N PCBs per propagation interval per core link interface.
For highly connected ASes, the number of PCBs received thus becomes rather large. In a network of 1000 ASes, a highly connected AS with 300 core links receives up to 1.5 million PCBs per propagation interval.
Assuming an average PCB length of 6 and the shortest propagation interval of 60 seconds, this corresponds to roughly 150 thousand signature validations per second. In terms of bandwidth, this corresponds to very roughly 38MB/s.
All of these are manageable on a present day small server or desktop machine.
For much larger, more highly connected ASes, the path-discovery tasks of the control service can be distributed over many instances in order to increase the PCB throughput.</t>
          <t>On a cold start of the network, full connectivity is obtained after a number of propagation steps corresponding to the diameter of the network. Assuming a network diameter of 6, this corresponds to roughly 3 minutes on average.</t>
          <t>When a new link is added to the network, it will be available to connect two ASes at distances D1 and D2 from the link, respectively, after a mean time (D1+D2)*T/2.</t>
        </section>
      </section>
    </section>
    <section anchor="path-segment-reg">
      <name>Registration of Path Segments</name>
      <t><strong>Path registration</strong> is the process where an AS transforms selected PCBs into path segments, and adds these segments to the relevant path databases, thus making them available to other ASes.</t>
      <t>As mentioned previously, a non-core AS typically receives several PCBs representing several path segments to the core ASes of the ISD the AS belongs to. Out of these PCBs, the non-core AS selects those down-path segments through which it wants to be reached, based on AS-specific selection criteria. The next step is to register the selected down-segments with the control service of the relevant core ASes, according to a process called <em>intra-ISD path-segment registration</em>. As a result, a core AS's control service contains all intra-ISD path segments registered by the non-core ASes of its ISD. In addition, each core AS control service also stores preferred core-path segments to other core ASes, in the <em>core-segment registration</em> process. Both processes are described below.</t>
      <section anchor="intra-reg">
        <name>Intra-ISD Path-Segment Registration</name>
        <t>Every <em>registration period</em> (determined by each AS), the AS's control service selects two sets of PCBs to transform into two types of path segments:</t>
        <ul spacing="normal">
          <li>
            <t>Up-segments, which allow the infrastructure entities and endpoints in this AS to communicate with core ASes; and</t>
          </li>
          <li>
            <t>down-segments, which allow remote entities to reach this AS.</t>
          </li>
        </ul>
        <t>The up- and down-segments do not have to be equal. An AS may want to communicate with core ASes via one or more up-segments that differ from the down-segment(s) through which it wants to be reached. Therefore, an AS can define different selection policies for the up- and down-segment sets. Also, the processes of transforming a PCB in an up-segment or a down-segment differ slightly. Both processes are described below.</t>
        <section anchor="term-pcb">
          <name>Terminating a PCB</name>
          <t>Both the up- and down-segments end at the AS. One could therefore say that by transforming a PCB into a path segment, an AS "terminates" the PCB for this AS ingress interface and at this moment in time.</t>
          <t>The control service of a non-core AS <bcp14>MUST</bcp14> perform the following steps to "terminate" a PCB:</t>
          <ol spacing="normal" type="1"><li>
              <t>The control service adds a new AS entry to the PCB. This new AS entry <bcp14>MUST</bcp14> be defined as follows:
              </t>
              <ul spacing="normal">
                <li>
                  <t>The next AS <bcp14>MUST NOT</bcp14> be specified.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>In Protobuf message format, this means that the value of the <tt>next_isd_as</tt> field in the <tt>ASEntrySignedBody</tt> component <bcp14>MUST</bcp14> be "0".</t>
                    </li>
                  </ul>
                </li>
                <li>
                  <t>The egress interface in the hop field component <bcp14>MUST NOT</bcp14> be specified.
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>In Protobuf message format, this means that the value of the <tt>egress</tt> field in the <tt>HopField</tt> component <bcp14>MUST</bcp14> be "0".</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>If the AS has peering links, the control service <bcp14>MAY</bcp14> add corresponding peer entry components to the signed body of the AS entry - one peer entry component for each peering link that the AS wants to advertise. The egress interface ID in the hop field component of each added peer entry <bcp14>MUST NOT</bcp14> be specified.
              </t>
              <ul spacing="normal">
                <li>
                  <t>In Protobuf message format, this means that the value of the <tt>egress</tt> field in the <tt>HopField</tt> component <bcp14>MUST</bcp14> be "0".</t>
                </li>
              </ul>
            </li>
            <li>
              <t>As a last step, the control service <bcp14>MUST</bcp14> sign the modified PCB and append the computed signature.</t>
            </li>
          </ol>
          <t><strong>Note:</strong></t>
          <ul spacing="normal">
            <li>
              <t>For more information on the signed body component of an AS entry, see <xref target="ase-sign"/>.</t>
            </li>
            <li>
              <t>For more information on a peer entry, see <xref target="peerentry"/>.</t>
            </li>
            <li>
              <t>For more information on the hop field component, see <xref target="hopfield"/>.</t>
            </li>
            <li>
              <t>For more information on signing an AS entry, see <xref target="sign"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="transforming-a-pcb-into-an-up-segment">
          <name>Transforming a PCB into an Up-Segment</name>
          <t>Every registration period, the control service of a non-core AS performs the following steps to transform PCBs into up-segments:</t>
          <ol spacing="normal" type="1"><li>
              <t>The control service selects the PCBs that it wants to transform into up-segments from the candidate PCBs in the beacon store.</t>
            </li>
            <li>
              <t>The control service "terminates" the selected PCBs by performing the steps described in <xref target="term-pcb"/>. From this moment on, the modified PCBs are called <strong>up-segments</strong>.</t>
            </li>
            <li>
              <t>The control service now adds the newly created up-segments to its own path database.</t>
            </li>
          </ol>
          <t><strong>Note:</strong> For more information on possible selection strategies of PCBs, see <xref target="selection"/>.</t>
        </section>
        <section anchor="transforming-a-pcb-into-a-down-segment">
          <name>Transforming a PCB into a Down-Segment</name>
          <t>Every registration period, the control service of a non-core AS performs the following steps to transform PCBs into down-segments:</t>
          <ol spacing="normal" type="1"><li>
              <t>The control service selects the PCBs that it wants to transform into down-segments from the candidate PCBs in the beacon store.</t>
            </li>
            <li>
              <t>The control service "terminates" the selected PCBs by performing the steps described in <xref target="term-pcb"/>. From this moment on, the modified PCBs are called <strong>down-segments</strong>.</t>
            </li>
            <li>
              <t>The control service now registers the newly created down-segments with the control services of the core ASes that originated the corresponding PCBs. This is done by invoking the <tt>SegmentRegistrationService.SegmentsRegistration</tt> remote procedure call (RPC) in the control services of the relevant core ASes (see also <xref target="reg-proto"/>).</t>
            </li>
          </ol>
          <t><strong>Note:</strong> For more information on possible selection strategies of PCBs, see <xref target="selection"/>.</t>
        </section>
      </section>
      <section anchor="core-path-segment-registration">
        <name>Core Path-Segment Registration</name>
        <t>The core beaconing process creates path segments from core AS to core AS. These core-segments are then added to the control service path database of the core AS that created the segment, so that local and remote endpoints can obtain and use these core-segments. In contrast to the intra-ISD registration procedure, there is no need to register core-segments with other core ASes (as each core AS will receive PCBs originated from every other core AS).</t>
        <t>In every registration period, the control service of a core AS performs the following operations:</t>
        <ol spacing="normal" type="1"><li>
            <t>The core control service selects the best PCBs towards each core AS observed so far.</t>
          </li>
          <li>
            <t>The core control service "terminates" the selected PCBs by performing the steps described in <xref target="term-pcb"/>. From this moment on, the modified PCBs are called <strong>core-segments</strong>.</t>
          </li>
          <li>
            <t>As a final step, the control service adds the newly created core-segments to its own path database.</t>
          </li>
        </ol>
        <t><strong>Note:</strong> For more information on possible selection strategies of PCBs, see <xref target="selection"/>.</t>
      </section>
      <section anchor="reg-proto">
        <name>Path-Segment Registration on Code-Level</name>
        <t>The control service of a non-core AS has to register the newly created down-segments with the control services of the core ASes that originated the corresponding PCBs. This registration step is implemented as follows in Protobuf message format:</t>
        <artwork><![CDATA[
   enum SegmentType {
       SEGMENT_TYPE_UNSPECIFIED = 0;
       SEGMENT_TYPE_UP = 1;
       SEGMENT_TYPE_DOWN = 2;
       SEGMENT_TYPE_CORE = 3;
   }

   service SegmentRegistrationService {
       rpc SegmentsRegistration(SegmentsRegistrationRequest) returns (
         SegmentsRegistrationResponse) {}
   }

   message SegmentsRegistrationRequest {
       message Segments {
           repeated PathSegment segments = 1;
       }

       map<int32, Segments> segments = 1;
   }

   message SegmentsRegistrationResponse {}
]]></artwork>
        <ul spacing="normal">
          <li>
            <t><tt>SegmentType</tt>: Specifies the type of the path segment to be registered. Currently, only the following type is used:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>SEGMENT_TYPE_DOWN</tt>: Specifies a down-segment.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>map&lt;int32, Segments&gt; segments</tt>: Represents a separate list of segments for each path segment type. The key is the integer representation of the corresponding <tt>SegmentType</tt>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="lookup">
      <name>Path Lookup</name>
      <t>The <em>path lookup</em> is a fundamental building block of SCION's path management, as it enables endpoints to obtain path segments found during path exploration and registered during path registration. This allows the endpoints to construct end-to-end paths from the set of possible path segments returned by the path lookup process. The lookup of paths still happens in the control plane, whereas the construction of the actual end-to-end paths happens in the data plane.</t>
      <section anchor="lookup-process">
        <name>Lookup Process</name>
        <t>An endpoint (source) that wants to start communication with another endpoint (destination), requires up to three path segments:</t>
        <ul spacing="normal">
          <li>
            <t>An up-path segment to reach the core of the source ISD (only if the source endpoint is a non-core AS),</t>
          </li>
          <li>
            <t>a core-path segment to reach
            </t>
            <ul spacing="normal">
              <li>
                <t>another core AS in the source ISD, in case the destination AS is in the same source ISD, or</t>
              </li>
              <li>
                <t>a core AS in a remote ISD, if the destination AS is in another ISD, and</t>
              </li>
            </ul>
          </li>
          <li>
            <t>a down-path segment to reach the destination AS.</t>
          </li>
        </ul>
        <t>The actual number of required path segments depends on the location of the destination AS as well as on the availability of shortcuts and peering links. More information on combining and constructing paths is provided by <xref target="I-D.scion-dp"/>.</t>
        <t>The process to look up and fetch path segments consists of the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>First, the source endpoint queries the control service in its own AS (i.e., the source AS) for the required segments. The control service has up-path segments stored in its path database. Additionally, the control service checks if it has appropriate core- and down-path segments in store as well; in this case it returns them immediately.</t>
          </li>
          <li>
            <t>If there are no appropriate core-segments and down-segments, the control service in the source AS queries the control services of the reachable core ASes in the source ISD, for core-path segments to core ASes in the destination ISD (which is either the own or a remote ISD). To reach the core control services, the control service of the source AS uses the locally stored up-path segments.</t>
          </li>
          <li>
            <t>Next, the control service of the source AS combines up-path segments with the newly retrieved core-path segments. The control service then queries the control services of the remote core ASes in the destination ISD, to fetch down-path segments to the destination AS. To reach the remote core ASes, the control service of the source AS uses the previously obtained and combined up- and core segments.</t>
          </li>
          <li>
            <t>Finally, the control service of the source AS returns all retrieved path segments to the source endpoint.</t>
          </li>
          <li>
            <t>Once it has obtained all path segments, the source endpoint combines them into an end-to-end path in the data plane.</t>
          </li>
          <li>
            <t>The destination endpoint, once it receives the first packet, <bcp14>MAY</bcp14> revert the path in the received packet in order to construct a response. This ensures that traffic flows on the same path bidirectionally.</t>
          </li>
        </ol>
        <t><xref target="_table-3"/> below shows which control service provides the source endpoint with which type of path segment.</t>
        <table anchor="_table-3">
          <name>Control services responsible for different types of path segments</name>
          <thead>
            <tr>
              <th align="left">Segment Type</th>
              <th align="left">Responsible control service(s)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Up-segment</td>
              <td align="left">Control service of the source AS</td>
            </tr>
            <tr>
              <td align="left">Core-segment</td>
              <td align="left">Control service of core ASes in source ISD</td>
            </tr>
            <tr>
              <td align="left">Down-segment</td>
              <td align="left">Control service of core ASes in destination ISD (either the local ISD or a remote ISD)</td>
            </tr>
          </tbody>
        </table>
        <section anchor="sequence-of-lookup-requests">
          <name>Sequence of Lookup Requests</name>
          <t>The overall sequence of requests to resolve a path <bcp14>SHOULD</bcp14> be as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Request up-segments for the source endpoint at the control service of the source AS.</t>
            </li>
            <li>
              <t>Request core-segments, which start at the core ASes that are reachable with up-segments, and end at the core ASes in the destination ISD. If the destination ISD coincides with the source ISD, this step requests core segments to core ASes that the source endpoint cannot directly reach with an up-segment.</t>
            </li>
            <li>
              <t>Request down-segments starting at core ASes in the destination ISD.</t>
            </li>
          </ol>
        </section>
        <section anchor="caching">
          <name>Caching</name>
          <t>For the sake of efficiency, the control service of the source AS <bcp14>SHOULD</bcp14> cache each returned path segment request. Caching ensures that path lookups are fast for frequently used destinations. The use of caching is also essential to ensure that the path-lookup process is scalable and can be performed with low latency.</t>
          <t>In general, to improve overall efficiency, the control services of all ASes <bcp14>SHOULD</bcp14> do the following:</t>
          <ul spacing="normal">
            <li>
              <t>Cache the returned path segments.</t>
            </li>
            <li>
              <t>Send requests in parallel when requesting path segments from other control services.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="behavior-of-actors-in-the-lookup-process">
        <name>Behavior of Actors in the Lookup Process</name>
        <t>As described above, the source endpoint resolves paths with a sequence of segment requests to the control service of the source AS. The control service in the source AS answers directly, or forwards these requests to the responsible control services of core ASes. In SCION, the instances that handle these segment requests at the control services are called <em>source AS segment-request handler</em> and <em>core AS segment-request handler</em>, respectively. This section specifies the behavior of the segment-request handlers in the lookup process. First, the use of wildcards in the lookup process is briefly addressed.</t>
        <section anchor="wildcard">
          <name>Use of Wildcard Addresses in the Lookup Process</name>
          <t>Endpoints can use wildcard addresses to designate any core AS in path-segment requests. The segment-request handlers <bcp14>MUST</bcp14> expand these wildcard addresses and translate them into one or more actual addresses. <xref target="_table-4"/> below shows who is responsible for what.</t>
          <t><strong>Note:</strong> For general information on the use of wildcard addresses in SCION, see <xref target="serv-disc"/>.</t>
          <table anchor="_table-4">
            <name>Use of wildcards in path segments requests</name>
            <thead>
              <tr>
                <th align="left">Segment Request</th>
                <th align="left">Wildcard Represents</th>
                <th align="left">Expanded/Translated By</th>
                <th align="left">Translated Into</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Up-segment</td>
                <td align="left">"Destination" core AS (where up-segment ends)</td>
                <td align="left">Control service of the <em>source AS</em></td>
                <td align="left">Actual address destination core AS in source ISD</td>
              </tr>
              <tr>
                <td align="left">Core-segment</td>
                <td align="left">Source core AS (where core-segment starts)<sup>1</sup></td>
                <td align="left">Control service of the <em>source AS</em></td>
                <td align="left">Actual address source core AS in source ISD</td>
              </tr>
              <tr>
                <td align="left">Core-segment</td>
                <td align="left">Destination core AS (where core-segment ends)</td>
                <td align="left">Control service of the <em>source core AS</em></td>
                <td align="left">Actual address destination core AS in destination ISD</td>
              </tr>
              <tr>
                <td align="left">Down-segment</td>
                <td align="left">"Source" core AS (where down-segment starts)<sup>2</sup></td>
                <td align="left">Control service of the <em>source AS</em></td>
                <td align="left">Actual address source core AS in destination ISD</td>
              </tr>
            </tbody>
          </table>
          <t>1) Includes all core ASes for which an up-segment from the source AS exists.<br/>
2) Includes all core ASes in destination ISD with a down-segment to destination AS.</t>
        </section>
        <section anchor="segment-request-handler-of-a-non-core-source-as">
          <name>Segment-Request Handler of a Non-Core Source AS</name>
          <t>When the segment-request handler of the control service of a <em>non-core</em> source AS receives a path segment request, it <bcp14>MUST</bcp14> proceed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Determine the requested segment type.</t>
            </li>
            <li>
              <t>In the case of an up-segment request, look up matching up-segments in the path database and return them.</t>
            </li>
            <li>
              <t>In the case of a core-segment request from a source core AS to a destination core AS:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Expand the source wildcard into separate requests for each reachable core AS in the source ISD.</t>
                </li>
                <li>
                  <t>For each core-segment request,
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>If possible, return matching core-segments from cache;</t>
                    </li>
                    <li>
                      <t>otherwise, request the core-segments from the control services of each reachable core AS at the source (start) of the core-segment. Add the retrieved core-segments to the cache.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>In the case of a down-segment request:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Expand the source wildcard into separate requests for every core AS in the destination ISD (destination ISD refers to the ISD to which the destination endpoint belongs).</t>
                </li>
                <li>
                  <t>For each segment request,
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>If possible, return matching down-segments from cache;</t>
                    </li>
                    <li>
                      <t>otherwise, request the down-segment from the control services of the core ASes at the source (start) of the down-segment. Sending the request may require looking up core-segments to the source core AS of the down-segment. Add the retrieved down-segments to the cache.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="segment-request-handler-of-a-core-as">
          <name>Segment-Request Handler of a Core AS</name>
          <t>When the segment-request handler of a <em>core AS</em> control service receives a path segment request, it <bcp14>MUST</bcp14> proceed as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>Validate the request:
              </t>
              <ul spacing="normal">
                <li>
                  <t>The source of the path segment <bcp14>MUST</bcp14> be this core AS.</t>
                </li>
                <li>
                  <t>The request <bcp14>MUST</bcp14> either be
                  </t>
                  <ul spacing="normal">
                    <li>
                      <t>for a core-segment to a core AS in this ISD or another ISD, or</t>
                    </li>
                    <li>
                      <t>for a down-segment to an AS in this ISD.</t>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>
            <li>
              <t>If the destination is a core or wildcard address, then load matching core-segments from the path database and return.</t>
            </li>
            <li>
              <t>Otherwise, load the matching down-segments from the path database and return.</t>
            </li>
          </ol>
          <t><xref target="app-c"/> shows by means of an illustration how the lookup of path segments in SCION works.</t>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>As described previously, the goal of SCION’s beaconing process in the control plane is to securely discover and disseminate paths between any two ASes. This section describes security considerations for SCION's control plane, that focuses on <em>inter</em>-domain routing. SCION does not provide intra-domain routing, nor does it provide end-to-end payload encryption. These topics lie therefore outside the scope of this section.</t>
      <t>This section focuses on three kinds of security risks in the control plane. The first risk is when an adversary controls one or all core ASes of an ISD and tries to manipulate the beaconing process from the top down (see <xref target="topdown-manipulate"/>). Also "ordinary" (non-core) adversaries that try to manipulate the beaconing process pose a risk to the control plane (see <xref target="manipulate-beaconing"/>). The third kind of security risks are Denial of Services (DoS) attacks, where attackers overload different parts of the infrastructure (see <xref target="dos-cp"/>).</t>
      <section anchor="topdown-manipulate">
        <name>Manipulation of the Beaconing Process by a Core Adversary</name>
        <t>The first kind of risk to the beaconing process comes from an adversary controlling one or more core ASes in an ISD. If the adversary stops all core AS(es) within an ISD from propagating PCBs, the discovery of new paths halts. In this case, downstream ASes will notice that PCBs are no longer being propagated, but all previously discovered (and still valid) paths remain usable for data-plane forwarding until they expire. This is an unlikely scenario, as it would require compromise of all core ASes within an ISD.</t>
      </section>
      <section anchor="manipulate-beaconing">
        <name>Manipulation of the Beaconing Process by a Non-Core Adversary</name>
        <t>This section examines several possible approaches open to an "ordinary" non-core adversary to manipulate the beaconing process in the SCION control plane, and shows for each case to what extent SCION's design can prevent the corresponding attack or help to mitigate it.</t>
        <ul spacing="normal">
          <li>
            <t>Path hijacking through interposition (see <xref target="path-hijack"/>)</t>
          </li>
          <li>
            <t>Creation of spurious ASes and ISDs (see <xref target="fake-ases"/>)</t>
          </li>
          <li>
            <t>Peering link misuse (see <xref target="peer-link-misuse"/>)</t>
          </li>
          <li>
            <t>Manipulation of the path selection process (see <xref target="manipulate-selection"/>)</t>
          </li>
        </ul>
        <section anchor="path-hijack">
          <name>Path Hijacking through Interposition</name>
          <t>An malicious AS M might try to manipulate the beaconing process between two neighbor ASes A and B, with the goal to hijack traffic to flow via M. If M can interpose itself on the path between A and B, then it could attempt several potential attacks:</t>
          <ul spacing="normal">
            <li>
              <t>The adversary M could intercept and disseminate a PCB on its way from A to the neighboring AS B, and inject its own AS entry into the PCB toward downstream ASes.</t>
            </li>
            <li>
              <t>The adversary could modify the hop fields of an already existing path, in order to insert its own AS in the path.</t>
            </li>
            <li>
              <t>The adversary could fully block traffic between AS A and AS B, in order to force traffic redirection through an alternate path that includes its own AS.</t>
            </li>
          </ul>
          <t>The first type of attack is detectable and blocked by downstream ASes (e.g. B), because a PCB disseminated by AS A towards AS B contains the "Next ISD AS" field in the entry of AS A, pointing to AS B, and protected by A's signature. If M manipulates the PCB while in flight from A to B, then verification of the manipulated inbound PCBs will fail at AS B, as the adversary's PCBs cannot contain A's correct signature.
The second type of attack is made impossible by the hop field's MAC, which protects the hop field's integrity and chains it with the previous hop fields on the path.
The third type of attack generally cannot be prevented, however the alternate path would be immediately visible to endpoints, as traffic <bcp14>MUST</bcp14> include hop fields from AS M.</t>
        </section>
        <section anchor="fake-ases">
          <name>Creation of Spurious ASes and ISDs</name>
          <t>An alternative scenario is when an adversary tries to introduce and spoof a nonexistent ASes. This would enable the adversary to send traffic with the spoofed AS as a source, allowing the adversary to complicate the detection of its attack and to plausibly deny the misbehavior.</t>
          <t>However, spoofing a new AS requires a registration of that AS with the ISD core to obtain a valid AS certificate; otherwise the adversary cannot construct valid PCBs. As this registration includes a thorough check and authentication by a CA, this cannot be done stealthily, which defeats the original purpose.</t>
          <t>Similarly to creating a fake AS, an adversary could try to introduce a new, malicious ISD. This involves the generation of its own TRC, finding core ASes to peer with, and convincing other ISDs of its legitimacy to accept the new TRC. Although this setup is not entirely impossible, it requires substantial time and effort, and may need the involvement of more than one malicious entity. Here, the "costs" of setting up the fake ISD may outweigh the benefits.</t>
        </section>
        <section anchor="peer-link-misuse">
          <name> Peering Link Misuse</name>
          <t>The misuse of a peering link by an adversary represents another type of attack. Consider the case where AS A wants to share its peering link only with one of its downstream neighbors, AS B, and therefore selectively includes the peering link only in PCBs sent to B. An adversary may now try to gain access to this peering link by prepending the relevant PCBs to its own path. For this, the adversary needs to be able to (1) eavesdrop on the link from A to B, and (2) obtain the necessary hop fields by querying a control service and extracting the hop fields from registered paths.</t>
          <t>Even if an adversary succeeds in misusing a peering link as described above, SCION is able to mitigate this kind of attack: Each AS includes an egress interface as well as specific “next hop” information to the PCB before disseminating it further downstream. If a malicious entity tries to misuse a stolen PCB by adding it to its own segments, verification will fail upstream as the egress interface mismatches. Therefore, the peering link can only be used by the intended AS.</t>
        </section>
        <section anchor="manipulate-selection">
          <name>Manipulation of the Path-Selection Process</name>
          <t>Endpoint path control is one of the main benefits of SCION compared to the current Internet, as SCION endpoints can select inter-domain forwarding paths for each packet. However, with the benefits of path selection comes the risk of endpoints selecting non-optimal paths. This section discusses some mechanisms with which an adversary can attempt to trick endpoints downstream (in the direction of beaconing) into choosing non-optimal paths. The goal of such attacks is to make paths that are controlled by the adversary more attractive than other available paths.</t>
          <t>In SCION, overall path selection is the result of three steps. First, each AS selects which PCBs are further forwarded to its neighbors. Second, each AS chooses the paths it wants to register at the local control service (as up-segments) and at the core control service (as down-segments). Third, the endpoint performs path selection among all available paths resulting from a path lookup process. The following text describes attacks that aim at influencing the path-selection process.</t>
          <t>These attacks are only successful if the adversary is located within the same ISD and upstream relative to the victim AS. It is not possible to attract traffic away from the core as traffic travels upstream towards the core. Furthermore, the attack may either be discovered downstream (e.g., by seeing large numbers of paths becoming available), or during path registrations. After detection, non-core ASes will be able to identify paths traversing the adversary AS and avoid these paths.</t>
          <t><strong>Announcing Large Numbers of Path Segments</strong> <br/>
This attack is possible if the adversary controls multiple (at least two) ASes. The adversary can create a large number of links between the ASes under its control, which do not necessarily correspond to physical links. This allows the adversary to multiply the number of PCBs forwarded to its downstream neighbor ASes. This in turn increases the chance that one or several of these forwarded PCBs are selected by the downstream ASes.</t>
          <t>In general, the number of PCBs that an adversary can announce this way scales exponentially with the number of consecutive ASes the adversary controls. However, this also decreases their chance of being chosen by a downstream AS for PCB dissemination or by an endpoint for path construction, as these relatively long paths have to compete with other, shorter paths. Furthermore, both endpoints and downstream ASes can detect poorer quality paths in the data plane and switch to better paths.</t>
          <t><strong>Wormhole Attack</strong> <br/>
A malicious AS M1 can send a PCB not only to their downstream neighbor ASes, but also out-of-band to another, non-neighbor colluding malicious AS M2. This creates new segments to M2 and M2's downstream neighbor ASes, simulating a link between M1 and M2 which may not correspond to an actual link in the network topology.</t>
          <t>Similarly, a fake path can be announced through a fake peering link between two colluding ASes, even if in different ISDs. An adversary can advertise fake peering links between the two colluding ASes, thus offering short paths to many destination ASes. Downstream ASes might have a policy of preferring paths with many peering links and thus are more likely to disseminate PCBs from the adversary. Similarly, endpoints are more likely to choose short paths that make use of peering links. In the data plane, whenever the adversary receives a packet containing a fake peering link, it can transparently exchange the fake peering hop fields with valid hop fields to the colluding AS. To avoid detection of the path alteration by the receiver, the colluding AS can replace the added hop fields with the fake peering link hop fields the sender inserted.</t>
          <t>To defend against this attack, methods to detect the wormhole attack are needed.  Per link or path latency measurements can help reveal the wormhole and render the fake peering link suspicious or unattractive. Without specific detection mechanisms these so-called wormhole attacks are unavoidable in routing.</t>
        </section>
      </section>
      <section anchor="dos-cp">
        <name>Denial of Service Attacks</name>
        <t>The beaconing process in the SCION control plane relies on control-plane communication. ASes exchange control-plane messages within each other when propagating PCBs to downstream neighbors,  when registering PCBs as path segments at the core control services, or during core path lookup. Volumetric DoS attacks, where attackers overload a link, may make it difficult to exchange these messages. SCION limits the impact of volumetric DoS attacks, which aim to exhaust network bandwidth on links; in this case, ASes can switch to alternative paths that do not contain the congested links. In addition, reflection-based attacks are prevented, as thanks to path-awareness, response packets are returned on the same path to the actual sender.</t>
        <t>Other mechanisms are required to avoid transport protocol attacks, where the attacker tries to exhaust the resources on a target server, such as a control service server, by opening many connections to this server. Possible means to mitigate this kind of DoS attacks are basically the same as for the current Internet, e.g., filtering, geo-blocking or using cookies.</t>
        <t>Thanks to its path-awareness, SCION enables more fine-grained filtering mechanisms based on certain path properties. For example, control-plane RPC methods that are available to endpoints within an AS are strictly separate from methods available to endpoints from other ASes. Specifically, expensive recursive path segment and trust material lookups are thus shielded from abuse by unauthorized entities.
For RPC methods exposed to other ASes, the control service implementation minimizes its attack surface by rejecting illegitimate callers based on ISD/AS, path type and length and any other available data points as soon as possible, i.e. immediately after determining the request type. For example:</t>
        <ul spacing="normal">
          <li>
            <t><tt>SegmentCreationService.Beacon</tt> can only be called by direct neighbors and thus calls from peers with a path length greater than one can immediately be discarded.</t>
          </li>
          <li>
            <t><tt>SegmentRegistrationService.SegmentsRegistration</tt> can only be called from within the same ISD, thus the source address <bcp14>MUST</bcp14> match the local ISD and the number of path segments <bcp14>MUST</bcp14> be 1.</t>
          </li>
        </ul>
        <t>A combination of the mechanism above is used to prevent flooding attacks on the control service. In addition, the control service <bcp14>SHOULD</bcp14> be deployed in a distributed and replicated manner so that requests can be balanced and a single instance failure does not result in a complete failure of the control plane of a SCION AS.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
      <t>The ISD and SCION AS number are SCION-specific numbers. They are currently allocated by Anapaya Systems, a provider of SCION-based networking software and solutions (see <eref target="https://docs.anapaya.net/en/latest/resources/isd-as-assignments/">Anapaya ISD AS assignments</eref>). This task is currently being transitioned from Anapaya to the SCION Association.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.scion-dp" target="https://datatracker.ietf.org/doc/draft-dekater-scion-dataplane/">
          <front>
            <title>SCION Data Plane</title>
            <author initials="C." surname="de Kater" fullname="Corine de Kater">
              <organization>SCION Association</organization>
            </author>
            <author initials="N." surname="Rustignoli" fullname="Nicola Rustignoli">
              <organization>SCION Association</organization>
            </author>
            <author initials="S." surname="Hitz" fullname="Samuel Hitz">
              <organization>Anapaya Systems</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="I-D.scion-cppki" target="https://datatracker.ietf.org/doc/draft-dekater-scion-pki/">
          <front>
            <title>SCION Control-Plane PKI</title>
            <author initials="C." surname="de Kater" fullname="Corine de Kater">
              <organization>SCION Association</organization>
            </author>
            <author initials="N." surname="Rustignoli" fullname="Nicola Rustignoli">
              <organization>SCION Association</organization>
            </author>
            <author initials="S." surname="Hitz" fullname="Samuel Hitz">
              <organization>Anapaya Systems</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="RFC4632">
          <front>
            <title>Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan</title>
            <author fullname="V. Fuller" initials="V." surname="Fuller"/>
            <author fullname="T. Li" initials="T." surname="Li"/>
            <date month="August" year="2006"/>
            <abstract>
              <t>This memo discusses the strategy for address assignment of the existing 32-bit IPv4 address space with a view toward conserving the address space and limiting the growth rate of global routing state. This document obsoletes the original Classless Inter-domain Routing (CIDR) spec in RFC 1519, with changes made both to clarify the concepts it introduced and, after more than twelve years, to update the Internet community on the results of deploying the technology described. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="122"/>
          <seriesInfo name="RFC" value="4632"/>
          <seriesInfo name="DOI" value="10.17487/RFC4632"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC5952">
          <front>
            <title>A Recommendation for IPv6 Address Text Representation</title>
            <author fullname="S. Kawamura" initials="S." surname="Kawamura"/>
            <author fullname="M. Kawashima" initials="M." surname="Kawashima"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>As IPv6 deployment increases, there will be a dramatic increase in the need to use IPv6 addresses in text. While the IPv6 address architecture in Section 2.2 of RFC 4291 describes a flexible model for text representation of an IPv6 address, this flexibility has been causing problems for operators, system engineers, and users. This document defines a canonical textual representation format. It does not define a format for internal storage, such as within an application or database. It is expected that the canonical format will be followed by humans and systems when representing IPv6 addresses as text, but all implementations must accept and be able to handle any legitimate RFC 4291 format. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5952"/>
          <seriesInfo name="DOI" value="10.17487/RFC5952"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC9114">
          <front>
            <title>HTTP/3</title>
            <author fullname="M. Bishop" initials="M." role="editor" surname="Bishop"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The QUIC transport protocol has several features that are desirable in a transport for HTTP, such as stream multiplexing, per-stream flow control, and low-latency connection establishment. This document describes a mapping of HTTP semantics over QUIC. This document also identifies HTTP/2 features that are subsumed by QUIC and describes how HTTP/2 extensions can be ported to HTTP/3.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9114"/>
          <seriesInfo name="DOI" value="10.17487/RFC9114"/>
        </reference>
        <reference anchor="gRPC" target="https://grpc.io/">
          <front>
            <title>gRPC, an open-source universal RPC framework</title>
            <author>
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="proto3" target="https://protobuf.dev/programming-guides/proto3/">
          <front>
            <title>Protocol Buffers Language Guide version 3</title>
            <author>
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Connect" target="https://connectrpc.com/docs/protocol/">
          <front>
            <title>Connect Protocol Reference</title>
            <author>
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CHUAT22" target="https://doi.org/10.1007/978-3-031-05288-0">
          <front>
            <title>The Complete Guide to SCION</title>
            <author initials="L." surname="Chuat" fullname="Laurent Chuat">
              <organization>ETH Zuerich</organization>
            </author>
            <author initials="M." surname="Legner" fullname="Markus Legner">
              <organization>ETH Zuerich</organization>
            </author>
            <author initials="D." surname="Basin" fullname="David Basin">
              <organization>ETH Zuerich</organization>
            </author>
            <author initials="D." surname="Hausheer" fullname="David Hausheer">
              <organization>Otto von Guericke University Magdeburg</organization>
            </author>
            <author initials="S." surname="Hitz" fullname="Samuel Hitz">
              <organization>Anapaya Systems</organization>
            </author>
            <author initials="P." surname="Mueller" fullname="Peter Mueller">
              <organization>ETH Zuerich</organization>
            </author>
            <author initials="A." surname="Perrig" fullname="Adrian Perrig">
              <organization>ETH Zuerich</organization>
            </author>
            <date year="2022"/>
          </front>
          <seriesInfo name="ISBN" value="978-3-031-05287-3"/>
        </reference>
        <reference anchor="RFC1122">
          <front>
            <title>Requirements for Internet Hosts - Communication Layers</title>
            <author fullname="R. Braden" initials="R." role="editor" surname="Braden"/>
            <date month="October" year="1989"/>
            <abstract>
              <t>This RFC is an official specification for the Internet community. It incorporates by reference, amends, corrects, and supplements the primary protocol standards documents relating to hosts. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="3"/>
          <seriesInfo name="RFC" value="1122"/>
          <seriesInfo name="DOI" value="10.17487/RFC1122"/>
        </reference>
        <reference anchor="RFC5398">
          <front>
            <title>Autonomous System (AS) Number Reservation for Documentation Use</title>
            <author fullname="G. Huston" initials="G." surname="Huston"/>
            <date month="December" year="2008"/>
            <abstract>
              <t>To reduce the likelihood of conflict and confusion when relating documented examples to deployed systems, two blocks of Autonomous System numbers (ASNs) are reserved for use in examples in RFCs, books, documentation, and the like. This document describes the reservation of two blocks of ASNs as reserved numbers for use in documentation. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5398"/>
          <seriesInfo name="DOI" value="10.17487/RFC5398"/>
        </reference>
        <reference anchor="RFC6996">
          <front>
            <title>Autonomous System (AS) Reservation for Private Use</title>
            <author fullname="J. Mitchell" initials="J." surname="Mitchell"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document describes the reservation of Autonomous System Numbers (ASNs) that are for Private Use only, known as Private Use ASNs, and provides operational guidance on their use. This document enlarges the total space available for Private Use ASNs by documenting the reservation of a second, larger range and updates RFC 1930 by replacing Section 10 of that document.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="6"/>
          <seriesInfo name="RFC" value="6996"/>
          <seriesInfo name="DOI" value="10.17487/RFC6996"/>
        </reference>
        <reference anchor="RFC9217">
          <front>
            <title>Current Open Questions in Path-Aware Networking</title>
            <author fullname="B. Trammell" initials="B." surname="Trammell"/>
            <date month="March" year="2022"/>
            <abstract>
              <t>In contrast to the present Internet architecture, a path-aware internetworking architecture has two important properties: it exposes the properties of available Internet paths to endpoints, and it provides for endpoints and applications to use these properties to select paths through the Internet for their traffic. While this property of "path awareness" already exists in many Internet-connected networks within single domains and via administrative interfaces to the network layer, a fully path-aware internetwork expands these concepts across layers and across the Internet.</t>
              <t>This document poses questions in path-aware networking, open as of 2021, that must be answered in the design, development, and deployment of path-aware internetworks. It was originally written to frame discussions in the Path Aware Networking Research Group (PANRG), and has been published to snapshot current thinking in this space.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9217"/>
          <seriesInfo name="DOI" value="10.17487/RFC9217"/>
        </reference>
        <reference anchor="RFC9473">
          <front>
            <title>A Vocabulary of Path Properties</title>
            <author fullname="R. Enghardt" initials="R." surname="Enghardt"/>
            <author fullname="C. Krähenbühl" initials="C." surname="Krähenbühl"/>
            <date month="September" year="2023"/>
            <abstract>
              <t>Path properties express information about paths across a network and the services provided via such paths. In a path-aware network, path properties may be fully or partially available to entities such as endpoints. This document defines and categorizes path properties. Furthermore, the document identifies several path properties that might be useful to endpoints or other entities, e.g., for selecting between paths or for invoking some of the provided services. This document is a product of the Path Aware Networking Research Group (PANRG).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9473"/>
          <seriesInfo name="DOI" value="10.17487/RFC9473"/>
        </reference>
        <reference anchor="BollRio-2000" target="https://kam.mff.cuni.cz/~ksemweb/clanky/BollobasR-scale_free_random.pdf">
          <front>
            <title>The diameter of a scale-free random graph</title>
            <author initials="B." surname="Bollobás" fullname="Béla Bollobás">
              <organization/>
            </author>
            <author initials="O." surname="Riordan" fullname="Oliver Riordan">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 1705?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Many thanks go to William Boye (Swiss National Bank), Matthias Frei (SCION Association), Kevin Meynell (SCION Association), Juan A. Garcia Prado (ETH Zurich), and Roger Lapuh (Extreme Networks) for reviewing this document. We are also very grateful to Adrian Perrig (ETH Zurich), for providing guidance and feedback about each aspect of SCION. Finally, we are indebted to the SCION development teams of Anapaya and ETH Zurich, for their practical knowledge and for the documentation about the SCION Control Plane, as well as to the authors of <xref target="CHUAT22"/> - the book is an important source of input and inspiration for this draft.</t>
    </section>
    <section numbered="false" anchor="app-a">
      <name>Control Service gRPC API</name>
      <t>The following code block provides, in protobuf format, the API by which control services interract.</t>
      <figure anchor="_figure-11">
        <name>Control Service gRPC API definition</name>
        <artwork><![CDATA[
enum SegmentType {
    // Unknown segemnt type.
    SEGMENT_TYPE_UNSPECIFIED = 0;
    // Up segment.
    SEGMENT_TYPE_UP = 1;
    // Down segment.
    SEGMENT_TYPE_DOWN = 2;
    // Core segment.
    SEGMENT_TYPE_CORE = 3;
}


// This API is exposed by the control services of core ASes expose this on the SCION dataplane and also by all
// control services on the "intra-domain protocol" network.
service SegmentLookupService {
    // Segments returns all segments that match the request.
    rpc Segments(SegmentsRequest) returns (SegmentsResponse) {}
}

message SegmentsRequest {
    // The source ISD-AS of the segment.
    uint64 src_isd_as = 1;
    // The destination ISD-AS of the segment.
    uint64 dst_isd_as = 2;
}

message SegmentsResponse {
    message Segments {
        // List of path segments.
        repeated PathSegment segments = 1;
    }

    // Mapping from path segment type to path segments.
    // The key is the integer
    // representation of the SegmentType enum.
    map<int32, Segments> segments = 1;
}

// This API is only exposed by core ASes and only on the SCION dataplane.
service SegmentRegistrationService {
    // SegmentsRegistration registers segments at the remote.
    rpc SegmentsRegistration(SegmentsRegistrationRequest) returns (
        SegmentsRegistrationResponse) {}
}

message SegmentsRegistrationRequest {
    message Segments {
        // List of path segments.
        repeated PathSegment segments = 1;
    }

    // Mapping from path segment type to path segments.
    // The key is the integer
    // representation of the SegmentType enum.
    map<int32, Segments> segments = 1;
}

message SegmentsRegistrationResponse {}

service SegmentCreationService {
    // Beacon sends a beacon to the remote.
    rpc Beacon(BeaconRequest) returns (BeaconResponse) {}
}

message BeaconRequest {
    // Beacon in form of a partial path segment.
    PathSegment segment = 1;
}

message BeaconResponse {}

message PathSegment {
    // The encoded SegmentInformation. It is used for signature input.
    bytes segment_info = 1;
    // Entries of ASes on the path.
    repeated ASEntry as_entries = 2;
}

message SegmentInformation {
    // Segment creation time set by the originating AS. Segment
    // expiration time is computed relative to this timestamp.
    // The timestamp is encoded as the number of seconds elapsed
    // since January 1, 1970 UTC.
    int64 timestamp = 1;
    // The 16-bit segment ID integer used for MAC computation.
    uint32 segment_id = 2;
}

message ASEntry {
    // The signed part of the AS entry. The body of the SignedMessage
    // is the serialized ASEntrySignedBody. The signature input is
    // defined as follows:
    //
    //  input(ps, i) = signed.header_and_body || associated_data(ps, i)
    //
    //  associated_data(ps, i) =
    //          ps.segment_info ||
    //          ps.as_entries[1].signed.header_and_body ||
    //          ps.as_entries[1].signed.signature ||
    //          ...
    //          ps.as_entries[i-1].signed.header_and_body ||
    //          ps.as_entries[i-1].signed.signature
    //
    proto.crypto.v1.SignedMessage signed = 1;
    // The unsigned part of the AS entry.
    proto.control_plane.v1.PathSegmentUnsignedExtensions unsigned = 2;
}

message ASEntrySignedBody {
    // ISD-AS of the AS that created this AS entry.
    uint64 isd_as = 1;
    // ISD-AS of the downstream AS.
    uint64 next_isd_as = 2;
    // The required regular hop entry.
    HopEntry hop_entry = 3;
    // Optional peer entries.
    repeated PeerEntry peer_entries = 4;
    // Intra AS MTU.
    uint32 mtu = 5;
    // Optional extensions.
    proto.control_plane.v1.PathSegmentExtensions extensions = 6;
}

message HopEntry {
    // Material to create the data-plane hop field.
    HopField hop_field = 1;
    // MTU on the ingress link.
    uint32 ingress_mtu = 2;
}

message PeerEntry {
    // ISD-AS of peer AS. This is used to match peering segments during
    // path construction.
    uint64 peer_isd_as = 1;
    // Remote peer interface identifier. This is used to match
    // peering segments
    // during path construction.
    uint64 peer_interface = 2;
    // MTU on the peering link.
    uint32 peer_mtu = 3;
    // Material to create the data-plane hop field
    HopField hop_field = 4;
}

message HopField {
    // Ingress interface identifier.
    uint64 ingress = 1;
    // Egress interface identifier.
    uint64 egress = 2;
    // 8-bit encoded expiration offset relative to the segment creation
    // timestamp.
    uint32 exp_time = 3;
    // MAC used in the dataplane to verify the hop field.
    bytes mac = 4;
}

enum SignatureAlgorithm {
    // Unspecified signature algorithm. This value is never valid.
    SIGNATURE_ALGORITHM_UNSPECIFIED = 0;
    // ECDS with SHA256.
    SIGNATURE_ALGORITHM_ECDSA_WITH_SHA256 = 1;
    // ECDS with SHA384.
    SIGNATURE_ALGORITHM_ECDSA_WITH_SHA384 = 2;
    // ECDS with SHA512.
    SIGNATURE_ALGORITHM_ECDSA_WITH_SHA512 = 3;
}

message SignedMessage {
    // Encoded header and body.
    bytes header_and_body = 1;
    // Raw signature. The signature is computed over the concatenation
    // of the header and body, and the optional associated data.
    bytes signature = 2;
}

message Header {
    // Algorithm used to compute the signature.
    SignatureAlgorithm signature_algorithm = 1;
    // Optional arbitrary per-protocol key identifier.
    bytes verification_key_id = 2;
    // Optional signature creation timestamp.
    google.protobuf.Timestamp timestamp = 3;
    // Optional arbitrary per-protocol metadata.
    bytes metadata = 4;
    // Length of associated data that is covered by the signature, but
    // is not included in the header and body. This is zero, if no
    // associated data is covered by the signature.
    int32 associated_data_length = 5;
}

// Low-level representation of HeaderAndBody used for signature
// computation input. This should not be used by external code.
message HeaderAndBodyInternal {
    // Enocded header suitable for signature computation.
    bytes header = 1;
    // Raw payload suitable for signature computation.
    bytes body = 2;
}

message VerificationKeyID {
    uint64 isd_as = 1;
    bytes subject_key_id = 2;
    uint64 trc_base = 3;
    uint64 trc_serial = 4;
}

]]></artwork>
      </figure>
    </section>
    <section numbered="false" anchor="app-b">
      <name>SCION data plane use by the SCION control plane</name>
      <t>The SCION control plane RPC APIs rely on QUIC connections carried by the SCION dataplane. The main difference between QUIC over native UDP and QUIC over UDP/SCION is the need for a UDP/SCION connection initiator to identify the relevant peer (service resolution) and to select a path to it. Since the control service is itself the source of path segment information, the following bootstraping strategies apply:</t>
      <ul spacing="normal">
        <li>
          <t>Neighboring ASes craft one-hop-paths directly. This allows multihop paths to be constructed and propagated incrementally.</t>
        </li>
        <li>
          <t>Constructed multihop paths are registered with the control service at the origin core AS. The path to that AS is the very path being
registered.</t>
        </li>
        <li>
          <t>Paths to far ASes are available from neighboring ASes. Clients obtain paths to remote ASes from their local control service.</t>
        </li>
        <li>
          <t>Control services respond to requests from remote ASes by reversing the path via which the request came.</t>
        </li>
        <li>
          <t>Clients find the relevant control service endpoint by resolving a "service address" (that is an address where the <tt>DT/DL</tt> field of the common header is set to 1/0 (see <xref target="I-D.scion-dp"/>).</t>
        </li>
      </ul>
      <t>The mechanics of service address resolution are the following:</t>
      <ul spacing="normal">
        <li>
          <t>To resolve the address of the control service at a given AS, a client sends a ServiceResolutionRequest RPC (which has no parameters) to an enpoint address constructed as follows:
          </t>
          <ul spacing="normal">
            <li>
              <t>Common Header:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Path type: SCION (0x01)</t>
                </li>
                <li>
                  <t>DT/DL: "Service" (0b0100)</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Address Header:
              </t>
              <ul spacing="normal">
                <li>
                  <t>DstHostAddr: "SVC_CS" (0x0002)</t>
                </li>
              </ul>
            </li>
            <li>
              <t>UDP Header:
              </t>
              <ul spacing="normal">
                <li>
                  <t>DstPort: 0</t>
                </li>
              </ul>
            </li>
          </ul>
        </li>
        <li>
          <t>The ingress border router at the destination AS resolves the service destination to an actual endpoint address. This document does not mandate any specific method for this resolution.</t>
        </li>
        <li>
          <t>The ingress border router forwards the message to the resolved address.</t>
        </li>
        <li>
          <t>The destination service responds to the client with a ServiceResolutionResponse. That response contain one or more transport options.</t>
        </li>
        <li>
          <t>The client uses the address and port from the "QUIC" option to establish a QUIC connection, which can then be used for regular RPCs.</t>
        </li>
      </ul>
      <t>The following code block provides the full service resolution API in the Protobuf message format.</t>
      <figure anchor="_figure-12">
        <name>Service Resolution gRPC API definition</name>
        <artwork><![CDATA[
package proto.control_plane.v1;

// A ServiceResolutionRequest must always fit within a UDP datagram. If
// the request does not fit, there is no mechanism for clients and
// servers to establish control-plane reachability.
message ServiceResolutionRequest {}

// A ServiceResolutionResponse must always fit within a UDP datagram. If
// the response does not fit, there is no mechanism for clients and
// servers to establish control-plane reachability.
message ServiceResolutionResponse {
    // Supported transports to reach the service,
    //
    // List of known transports:
    // - QUIC
    //
    // Unknown values should be ignored by clients.
    map<string, Transport> transports = 1;
}

message Transport {
    // Protocol specific server address descriptor.
    //
    // Supported address format for QUIC:
    //  192.168.0.1:80
    //  [2001:db8::1]:80
    //
    //  Missing ports / zero port / invalid port values should be
    // treated by clients as errors.
    string address = 1;
}

]]></artwork>
      </figure>
    </section>
    <section numbered="false" anchor="app-c">
      <name>Path-Lookup Examples</name>
      <t>To illustrate how the path lookup works, we show two path-lookup examples in sequence diagrams. The network topology of the examples is represented in <xref target="_figure-8"/> below. In both examples, the source endpoint is in AS A. <xref target="_figure-9"/> shows the sequence diagram for the path lookup process in case the destination is in AS D, whereas <xref target="_figure-10"/> shows the path lookup sequence diagram if the destination is in AS G. ASes B and C are core ASes in the source ISD, while E and F are core ASes in a remote ISD. Core AS B is a provider of the local AS, but AS C is not, i.e., there is no up-segment from A to C. "CS" stands for controle service.</t>
      <figure anchor="_figure-8">
        <name>Topology used in the path lookup examples.</name>
        <artwork><![CDATA[
+----------------------------+     +----------------------------+
|                            |     |                            |
|                            |     |                            |
|    +------------------+    |     |    +------------------+    |
|    |      Core        |    |     |    |          Core    |    |
|    |                  |    |     |    |                  |    |
|    | .---.     .---.  |    |     |    |            .---. |    |
|    |(  C  )---(  B  )-----------------------------(  F  )|    |
|    | `+--'     `+-+'---------+   |    |    .---.   `+-+' |    |
|    |  |         | |   |    | +------------(  E  )   | |  |    |
|    |  |         | |   |    |     |    |    `-+-'----+ |  |    |
|    +--|---------|-|---+    |     |    +------|--------|--+    |
|       |         | |        |     |           |        |       |
|       |         | |        |     |           |        |       |
|       |+--------+ |        |     |           |        |       |
|       ||          |        |     |           |        |       |
|       ||          |        |     |           |        |       |
|     .-++.         |        |     |         .-+-.      |       |
|    (  D  )      .-+-.      |     |        (  G  )-----+       |
|     `---'      (  A  )     |     |         `---'              |
|                 `---'      |     |                            |
|   ISD 1                    |     |                    ISD 2   |
+----------------------------+     +----------------------------+
]]></artwork>
      </figure>
      <figure anchor="_figure-9">
        <name>Sequence diagram illustrating a path lookup for a destination D in the source ISD. The request (core, x, x) is for all pairs of core ASes in the source ISD. Similarly, (down, x, D) is for down-segments between any core AS in the source ISD and destination D.</name>
        <artwork><![CDATA[
+---------+          +---------+          +---------+        +---------+
|Endpoint |          |Source AS|          | Core AS |        | Core AS |
|         |          | CS (A)  |          | CS (B)  |        | CS (C)  |
+----+----+          +----+----+          +----+----+        +-----+---+
    +++                   |                    |                   |
    | |                   |                    |                   |
+---+-+-------+           |                    |                   |
|send requests|           |                    |                   |
| in parallel |           |                    |                   |
+---+-+-------+           |                    |                   |
    | |                   |                    |                   |
    | |  request (up)     |                    |                   |
    | +----------------->+++                   |                   |
    | |< -- -- -- -- -- -+++                   |                   |
    | | reply (up,[A->B]) |                    |                   |
    | |                   |                    |                   |
    | |                   |                    |                   |
    | |                   |                    |                   |
    | |request (core,*,*) |                    |                   |
    | +----------------->+++                   |                   |
    | |                  | |request (core,B,*) |                   |
    | |                  | +----------------->+++                  |
    | |                  | |<-- -- -- -- -- --+++                  |
    | |                  | | reply(core,[B->C])|                   |
    | |< -- -- -- -- -- -+++                   |                   |
    | |reply (core,[B->C])|                    |                   |
    | |                   |                    |                   |
    | |                   |                    |                   |
    | |request (down,*,D) |                    |                   |
    | +----------------->+++                   |                   |
    | |            +-----+-+-----+             |                   |
    | |            |send requests|             |                   |
    | |            | in parallel |             |                   |
    | |            +-----+-+-----+             |                   |
    | |                  | |                   |                   |
    | |                  | |request (down,B,D) |                   |
    | |                  | +----------------->+++                  |
    | |                  | |<-- -- -- -- -- --+++                  |
    | |                  | | reply(down,[B->D])|                   |
    | |                  | |                   |                   |
    | |                  | |                   |request (down,C,D) |
    | |                  | +-------------------+----------------->+++
    | |                  | <-- -- -- -- -- -- -+ -- -- -- -- -- --+++
    | |   reply (down,   | |                   | reply(down,[C->D])|
    | |   [B->D, C->D])  | |                   |                   |
    | |< -- -- -- -- -- -+++                   |                   |
    | |                   |                    |                   |
+---+-+----------+        |                    |                   |
|combine segments|        |                    |                   |
+---+-+----------+        |                    |                   |
    | |                   |                    |                   |
    +++                   |                    |                   |
     |                    |                    |                   |
 +---+----+           +---+----+          +----+---+          +----+---+
 +--------+           +--------+          +--------+          +--------+
]]></artwork>
      </figure>
      <figure anchor="_figure-10">
        <name>Sequence diagram illustrating a path lookup for a destination G in a remote ISD. The request (core, x, (2, x)) is for all path segments between a core AS in the source ISD and a core AS in ISD 2. Similarly, (down, (2, x), G) is for down-segments between any core AS in ISD 2 and destination G.</name>
        <artwork><![CDATA[
+---------+     +---------+      +---------+   +---------+   +---------+
|Endpoint |     |Source AS|      | Core AS |   | Core AS |   | Core AS |
|         |     | CS (A)  |      | CS (B)  |   | CS (E)  |   | CS (F)  |
+---+-----+     +----+----+      +----+----+   +----+----+   +----+----+
    |                |                |             |             |
   +++               |                |             |             |
   | |               |                |             |             |
+--+-+------+        |                |             |             |
|   send    |        |                |             |             |
|requests in|        |                |             |             |
| parallel  |        |                |             |             |
+--+-+------+        |                |             |             |
   | |               |                |             |             |
   | |  request (up) |                |             |             |
   | +------------->+++               |             |             |
   | |<- -- -- -- --+++               |             |             |
   | |    reply      |                |             |             |
   | | (up,[A->B])   |                |             |             |
   | |               |                |             |             |
   | |               |                |             |             |
   | |   request     |                |             |             |
   | |(core,*,(2,*)) |                |             |             |
   | +------------->+++    request    |             |             |
   | |              | |(core,B,(2,*)) |             |             |
   | |              | +------------->+++            |             |
   | |              | |<- -- -- -- --+++            |             |
   | |              | | reply (core,  |             |             |
   | |              | | [B->E,B->F])  |             |             |
   | |<- -- -- -- --+++               |             |             |
   | | reply (core,  |                |             |             |
   | | [B->E,B->F])  |                |             |             |
   | |               |                |             |             |
   | |               |                |             |             |
   | |               |                |             |             |
   | |   request     |                |             |             |
   | |(down,(2,*),G) |                |             |             |
   | +------------->+++               |             |             |
   | |        +-----+-+-----+         |             |             |
   | |        |send requests|         |             |             |
   | |        | in parallel |         |             |             |
   | |        +-----+-+-----+         |   request   |             |
   | |              | |               | (down,E,G)  |             |
   | |              | +---------------+----------->+++            |
   | |              | <- -- -- -- -- -+ -- -- -- --+++            |
   | |              | |               |    reply    |             |
   | |              | |               |(down,[E->G])|             |
   | |              | |               |             |   request   |
   | |              | |               |             | (down,F,G)  |
   | |              | +---------------+-------------+----------->+++
   | |              | < -- -- -- -- --|-- -- -- -- -+ -- -- -- --+++
   | |              | |               |             |    reply    |
   | | reply (down, | |               |             |(down,[F->G])|
   | | [E->G,F->G]) | |               |             |             |
   | |<- -- -- -- --+++               |             |             |
   | |               |                |             |             |
+--+-+----+          |                |             |             |
| combine |          |                |             |             |
|segments |          |                |             |             |
+--+-+----+          |                |             |             |
   | |               |                |             |             |
   +++               |                |             |             |
    |                |                |             |             |
+---+----+       +---+----+       +---+----+    +---+----+    +---+----+
+--------+       +--------+       +--------+    +--------+    +--------+
]]></artwork>
      </figure>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+y923YbR5Yg+o6vyEOtNSYhABJJSbbpsqcpUrLZJUtqUS53
Va8+VgJIklkCkGhkghJLVK/5jXmbeZzfmP6T8yVnXyN2RAYuslVd3bOG3WWR
QGZcduzY90u/3+80ZTMpjrKd85OzF8+zk2rWLKpJ9nKSz4qdTj4cLopr/+3L
nc4ob4rLanFzlJWzi6pTL4fTsq5LeO9mXuCH42JewH9mTaczrkazfAqfjhf5
RdMfF2/h5UW/HsHj/RFPNceZ+vcfdGCaw86dLF8UOUx49ur10x348121eHu5
qJZz+Oxl3lxlx+/giex50eA35ewye/X9TudtcQN/jo+ysxlMMCua/inO2Lku
ZsviCIbJNo8BD/EWdl4VdZEvRlfZ9/gSfTPNywl8M89ni8u/KxfNxaBaXNI3
+CB8c9U08/ro3r13794NyoK/v4dv9fGB8rq4964Y3qP37+10YD1lc7UcwosE
jLyuq1GZN/DrPYHO/Jez/ik+OQGY1Y2ZIn5jwGMNyip4994moA+umulkp9PJ
l81VtTjqZP0sg/Orj7KTQTYust/je7AA+OFTPKkW5ayIvoJ9HmWMHsd+Tfxd
wWAb/TIufqFV/N3l9P1gdNUxcz0fZK+WdVNezqpJaWd7Xo6qSd76cov5ZuXo
72i7eAh2rvNB9kPZ/MXOcp5Pl8XEfEzjH8/yeX6TZ+c3dVNM62D0K3j073J+
YACo1unMqsUUVnENmJZlAPkBw3o8P6IX5Ybxmk/zJufbRd+NASpH2cH9g0N+
NF9cFnDWetTwdd4s8tHbYuGxCm5V8mzxYTrYezSWO1b66cu/q054/SFvgHs8
euJMNx3rJ84QnOTqw1x9nv6YRvP52zJxUkIK+3RY2cvfn332A4N5/+9RbT6q
V09PHjw6PDjiXx8efHVff/36oX769f37+unX+/sP8NfLVy9PgmPdwU96WT7L
KuBQ/bpaLkZFtpzBxV3U+SSDb7OLBawOucLONqd9uZiPkOzCl/NF1VSH4Xwv
8TMAYfZ4eXEBc2TP8tnlMr8ssu+XJZwazgtgyw63moxmGC4vBuPiGv+4hKVO
gXn1L3Gwmr8/xLUA5s6KURMuRj7M3KJeFbCmYjYqotkfJGcf8eu44VE1RZSW
GWGoe50OygKGCJ788NPx64ODcAWvrwpY2nQ+KRqFQFMxFkVLOEjfraqk67R/
f7B///6X977+8qv+Yf/+4X7/PiDFV/379FZdLMqixvXofTo7f/z8KAuf/rJ/
uPnmPRtkJ1fLvIlQ91m+BLg10XeEvE9e/5D9aQkrAB6XHPLHQfasuJy1rvKP
+eLtso6/227M00H2OIcdR0Oe5tflOPpm6wF/yJf1VdFaJo/Z+pKGfdHAaV4D
On9PY78tsp/4apXNDezvclwMl8COkzP+ZhqRGPPlIPsRXp+0NvES8G/R+m47
0BwP4PXForyMxjweL0ogLNF3iTGBQO3vHzhidvj1V/Lro6+/fqQU7GD/S/31
wZdEVB5Xk8mrsuofCJ1ztwov1biENeCeqossz+pRPin6F4uiyBb5bFxNQfbN
51fJK/U2nw6mFxeDEVDBwegv9/71bV1MUVAdAdN7e3MPp62Gef2qT6P+gqP+
wqMO5uOLzVfo8SDjMf7tf9YRyB7/2/8C5hJ/G73/AthTCZJ9HmP3iwnilvsS
fvr9fpYPa+S+IJO9virrDKjUcopXFejjaFEOizprAF4iBGckLCHQ8MM5KAb9
HBWDHkyNTBo2mZezbMZqAgn6ZQM0EG6/8L7dc4BKPiwngOI9FRiQw4yzsxpY
JzLF7MUMNI33Tf+ygKvNH8mQ9d4AvnUrADiXo2x0leMOAF+A645q/JInK3Hx
eZOVDSgP17AVXLHbi1LS/giuxnBSZKCDzSvYSD0ApSi7gCF7/rNsBMg6uqqq
GqaFxRTFLJsuJ00JxJnHrea40hrfgeFQR8Il4qfT8i+8C1iZwgZfgYkQGXmx
IYhh6YuinsN4JS4NWAXgbD2q4ARl5JqnrQl20/ytfDzN8msQumlDsENcgt8X
HnKR0RldVsC/FVJf1O3p4eURKJbAeHiCGXJh2mhdXCKKwE7fXcEVJcjAPDOA
CwwzHYKENUaEqHDZgB5jXBqvFVcEl6GewpHMUeYDwJb0NrKynGdHqFhUvCgX
dUPbX9Y1nOJV9Y4XUryfTypBEAJYPin/AnM3V6CFXl7BenLYFs6OW3Cv6fpR
cZY9jumJRXEJKAQsfjzInuSwMz4ZuK7VrJpWwG1qIp/Z7vH5Hm1b3zBjjkYV
7xj2WsIH1btZNgdJcHQDWhVsGxZKlAa+rufFqLy4ETDS2kBAmBeLBvgxrSif
XILE2lxNd+s9fGMJpy7wqosJ3CzcOrwzKsZwxxidHNzoTMJ7THNMqurtcs6v
1XSKsGWD6dWwQQwJYQWUIrtYzsY5/gmoM1yWE9rmcFKN3hKCCqEAerIcKbrD
qP2m6sM/gvFCdqbleDwpOp07aH9YVGN+o9NxFzc35IWpy8wbH+B4GzpWS2Dy
2m0W0S/78EEYw8ePcKEbgOWkelebfRKA53M4GkIhwk6Gqt6s0aKqGXB6beUM
aLugn1yUox5SIZgR9gsbr/Gx5uomPs2BJ0mANpupJa6NyBccDUwGC6gaBO4I
4TDO3gFO4CiLXEfxV22gULwCiAwLwoHrYgIrkfdwPxfIRN4hDJEQ1EedTveY
6QaR5i6cN2wV1n+NQudVeXk1uTGUBa75FBggA46JLF6HGs9Z4JIhrRJA0rRE
CZHoLODa/MuyhGsWk+5eBp+P3sJUVwCASRECCmjqW3obTh+GvoDFAKjqbHdY
4fB8LSY50Iqrao4P5rMbxu18Ugk5xvXsEXR1b0j4ytkSRS65WXMYFKV8Eg7G
pOqggAxw7Z4Xo+UiDR9Y0QThTPyHMAHHU0x10j6SKrgZizE8TyPAO3BXz17i
rxflexjrz0AY4Z17kyJ/CyAZF7Myn/Sriz4I6tfliJGjQtTI8qaBhwG7ngR8
agx0BXUF2AyvZFFVDWETEJuyvsKZFwWAuZr1kkvEQYao6eVAzi+XQPrw+JsG
LtcSqSW8D08cnzPnVkqOV7WawZOCjEhWCfIs8BBtDqjKIDuGD+CCjJaTfEE3
a5TXyn6IjxbZZVFdwHEwZneN/CCHUE7xGHi3tf9WZYQAhUIuh2v3bAf2cl2V
RNOK94iP8MsEeHcj1AEAlsveYRhAi0tCEhzE8LmG1lzDXpkaEwI1ZY3fwYpC
ogr7rAsAAI1LHDM3TEsINN0eWHuBHMkLSae8o92z81NGaJVK4INaWEo5A3St
gdjO+ObBUq6KXJmdqPNyGXlF1UyuV+3ICOwb2RHdL2RcAsgpCCf4CpKOl78/
w8N4DesHGgYYHRxETkQB0LAnRBCE/HwGEKo9oI/Pi5ohMKkuga5M2PxMl8kY
yB2y0okhsoNGMs66MVhqgku91wUMm0x0dMRZ+DjLL3Ef8DCI/kXj7yvfEhkT
caf7mj5/BZ+jrHoBV0HEjd3Xr072ugpmZFeg1StDhgHr8hLpNI6YjRABLpBY
8ir+cfDw/tfZ9WHG940ZFRppkFEhzuAaYcxLPC8cZXjjV9odITfADenszc0c
AQbXToS0+NpH1A6NEuU1HgxAm8kIwkqkLmY6JFnXTtBfgjw7yt4WSCIvFjlz
eGRTsoIVQqxgzhIwxQkISArgIJV1wAxTwHFYtsrqNZKBsXs+MS7wUji+Dx8i
g+THj4CJgTcGcRL4L4K5DumAohFA1orVCKkaSTzSRvgCVLtyljcqvwYkUq8b
HgUfmzsZImToNunLTUfk8WLRY7rhgKIvTx6zWMeCbCEcHY+f+GYPmZj5OpBK
xuUFWaMaPj3YuzeU48ZH+WJB93bZyJ6ETltqpZtgRYgJ7pj3YNg3C0WMiEZJ
OpbDGTI3E7a8KJa1vdmBlBKhD5FSlSQKj49CeJgQIRD4Ay+6CUlE+fr4vI0P
4zkiwzqFNuG78zQNhdQ7d7LXxQKOvwKCdJN9uANLmdaIYt1jrw+ce32g20Ur
S0JZIOqgQh5I0Mi2adtIgMZIm1EDRzugovkgewp7Lt7naPnrBfIniiQz57PL
VCKQ673o0SZA7iHUWXprEmmviIRlsySVDuGGm3ms7AbX/9qr+n2+wo4HsRyF
r7kbU3uljo+NrgIOGt5CGXhLNZclsGqeX/I9IyYtM960NOheVg6KQc+9WbwH
kXJ2SbJbSrBRhNdBZtXYX1+7suZqifpEQzhQKABUthX5qEbEogWC6ili7r8s
i5oFhnoJtDH3+ioLSLqXYtwzip9cGPwIiOC/LPMJC6RjoNRj+IuEXyTIF3jI
RTMaZD/zHcjVqwDCGM0IWhrRGRyC9EjUcokYjIkYwCW2Jh1BoQEQrJg6IDsA
lCGJAQSb+i1SU9QNRb2N1HZ78uc8aoRUDl+Fy1iZTBAuohDuTuqV99slpW4V
AsXmAa/eyweC2Mp2mvxtgduAtclELbOX7I9oPO6LLASlEzzGVh7DOy9XG086
4OBjJoxLkMNRQI7pRY3UpKj3VA5xXEXRBc8z3jPM1JTMqJxlzl8a3Hw/0Mz1
Wu+WM72XPNuOEz939mjDqlgIeVMSrCdYNyC+9zO9ffotmVV5YFxLRNByM47c
pBxuCQgspMNfiAGJBSO0/X78SPQsz4AmFO/ym2y4KMeXxLHVRoO6/AzVKD4H
tSHhYKUaiLyijohrvlJjwYMvD0EGw20/9bcAGTntPjZnqdwn/pnI1OFIDRAa
WSRu0R2jCjpbmcRofwIqtVgRtcnF4uakqeWcbyZKuKGysQuvL+cqkvTo1UVh
/kYQAvjezfQzxoAfQJl+WhaTcbb7w1Nmc6JKwrqRDRSWQ/UY+VTwCbBuGAo+
+QhY8xKVKtjTzbypyOousix6yljoOD7vk2LdFsEETPgBbh21/gtcKBtwQwj2
zNd0hZyU2ZKKjnh3ePlzmQIUqWqqEiIQ0ctKRBuQLpFmnJ06YZmFJ7cyizAE
zjPYgMLz7DkDlEjJJrgR2PZ0WYh6qFSSkQRGpJ05jsLiQC0GcguzfIg8ABcH
o8EtqS4L4t2ETQZEcNb1Xs+MbaDmTcOxgZd3mNRRcZ9nQm16WUuGcmSPjAii
II6TKqGQqpj0kqDImgzBE8VoBCOQWzocOhgi9jVISEgtMHBKrxHISoRHrDgV
s+tyUc3oKHZZwnAy25+Xi7Iel3Q0e2TBAHGcKPEUhIkJGXhlJQipISOos4Xw
VUULaoXmVJbRF9lFMRZfBy2Wn2J4PivyC+E5xySA5XyAO8X4sthRkfD8tMd7
mak4hlcZkKjIp14y+/H4BMf5kXUuPAarjZ3ABtzdAR7DurEVo3vZDgyxA3sB
Moy8l7z0sM2dNUPu0LWZFdds84JHx+USFjUiHiQiww5INGiwTn8L7HQMC6p3
SCgBilui/ES87mqBJqOdZ2gdfJbfoBxqnkWEpZ2zeNM/EUnIEPjzBlEZbtdT
luJf5QQ+QJUZWcnIdINySt1MbkI9Mjb81GriYMIj5FwpCeCtkErcWr64aZE0
gEHBQGUqDhsQG/IN8kYesK/SnJm9pj0AHuEuZL8w9DmTE9zVy5brAxAO9AMY
ZlFNP4FqB44SxMVIuBOrnp9NGdfuPr5teJC/WgHDBG2J4u5I7hG2pH+p8yOf
kpkEKNTuwV7EtnRY92BeZxHvGy4bHaqaw/0tGxTMF2y/2SNhY/dwL2KRK5br
BDQgBj+t5L5qUQ3pZ55kEWQ6OF9tOmBOgId64kwO4islsl63jQZeqC0Xq4RW
gvQUaVRkW+AZLpYLuheqnBXeLqBz8vCzory8GlYLtesNUGDI8SEnMdShyFA2
zlyx0sNYL4d1AcrVDC/h0PBv1ckCD0h3k+mOBDpvJUMkNs/AsPAUC3hiygvt
e4FNL9SK0L+TBPAAx4QRJ3XlSAJ83mc3IOyA3ITsaUD7wwlamWfMEvBsTp3E
WrMjFw1yGMRbA9H86fz1To//zZ6/oN9fPfmHn85ePTnF389/OH72zP3SkSfO
f3jx07NT/5t/8+TFjz8+eX7KL8OnWfBRB5jAH3dYZNx58fI1ULzjZzt8o6zN
JWcbz1Cs8PNFQa7WuhM46h6fvPzf/2P/Acjg/w8I4Qf7+19//Ch/fLX/5QP4
A5TvGc9G7gX+E4W0Tj6fF/kiE+I6yudlA/Dt4ZWvr9D1imo74sM/IWT++Sj7
3XA033/wnXyAGw4+VJgFHxLM2p+0XmYgJj5KTOOgGXweQTpc7/Efg78V7ubD
3/3XCYY39ve/+q/fYYAHYtFLFyTwjEwIH+4QReiTQeGjM/KLrQ2fMzEPEgGH
5ARFKpYrrsuczRHeBNhSePwYqGQDEpNQ769/NSNuNUUKxWN1Ol46XK0U/6eT
Dmdqzd/SHkDriFV/54uxz9bCZzAEn7bAJiJrlz4injtyQGZuOc+RtPdHVyXo
IPI5njtyvHnBlnA9k35GJo+uDO4Q4l2VNkwUpdMmLKsmE0WLrZy4hRGFJwsY
kfRrEIvx8MlaygLYcFmjHU7ccEgDr8o5mv9mo8lyLO4ysoH2R3BG1RRWsStG
O7Tk6GdzFFvFxkiPWx4inmGBQTDTAEHx0kDOgUQ5+VUJDHgxurrxF4FMMQs1
EtI6COggyMQQAogInxWUa52ScfRcwTXCR1o7tkvmFfNedLEMYosiOt0uYGMz
IS8gR8KRZlyO95LgIIvpjQo1oChgxBPhrxPiZjeEJTTHLuEKjKiC3R4GBRpM
Y/s0+TXwunjViEOW6sJBoKhZ3/dOKrX5zSplzjvXeH9uKM5mRyOt/uA/Izya
FvlMbnzuj2VcwQQUawHyyA1bZkA6cTIGisp6NmRC95Ztb+IV5cisgi+Y0Btc
4i5MOwWFYk8usUo830i0UySvCuH08KKF8KoxioDW0+OIn0holUnF/0xf8RCC
krNYek7PJVtG0RVnHXTs+QXSLbDeHeC9i2a0bGoSCtgQTjui+ccUE0V2QdEU
xD3BWhJDhliEJUeZDgoaKiqAoxIkwV5IsSQWbVmzoKBLkmimkDiqArCjtwdN
pKxPOzuO0Dum2HSdzWwSTudDaUiALEjwYBqTJNCIr7i3eooiC6K7i8oJyCrA
Bo/opOeIx0W1XFjdCJ457T3pPeUnvof1/Cv8dO72V/3c7dxmq370mzv+GVwb
0ej4GfnXkih8awBTDMyQ8nf0FkIBnt7NYIPZXleW1oW/T+Bv/zSO+KZ/p/+F
GVH+1mfu81rjTfGHDIfbCAT091343k2ceQbZyZLDrfhYf/ld1qf/+y4L0KND
ELgfQQT+hi9gs6ewWfcm/P0E/u5kK7b8aQtb8/GaBX2P0Ncf+PupW1A/WhD8
zZj24Si7w0jf3+fw6m8pZyHCe6aPjP0Y/DQjdrcDwieJYkxBJDAB7TGBRIp2
+9Lp5iDnUWgcBoOAzsQXsyRRdcFOEQ7guUQDED86498DYy0JZvaTQBbMs/1H
/SHGauo0C2YUpDJQXFQJmmgQmIPuN3ePi/ejYq7cCNgAPHsfOWzbS71HnJRj
/HpidxYz/1VVFzMRyEfVWNzvPJeNiZmwgwcnR9MuMt5ZIbrxqKJg1ETEAisH
r9hFquKlsxvHsZetuAlLR02YpDqmf2NgczDnp0Y5W9GKzQ8SepnaCNrWSIev
WG/hEL6j2LmaVuiNK0cDkSjaoUshHDJFrxWc1bNPF4vgaQz+xxBdjiRcim+l
rvr6yrZ2uq61AUVB58dkiyHvLrkNVSGxJjcOHnYhMPBIKNpLKNWG4BU2JxlN
wTw/2hzS8vpK7FlbuopIlogC8qzzo5o5bxIfCzB+UhAIFisdS13vF+naUEuO
xvavkaDEGGw8Kd7aZzyErch4ugjGaIy4VakUml5f6XxXGNSHIXvs9KQw4Xlj
0XKD4bjrIiDoRbJQ1cv5HOStmrMc+pI6YcN++XDj7ALaq5A+dvSu2HNAcsOY
ZOecP+p09gcZ27KtO38XoOU81XsUZOBj1z49ZoUCiGjX//TPu3f8wIPOgc5u
gwe2mI9No2g+vCjeEQ73wtQAdXOrzQ+uxnIxq01ov9pVycgRmUXJVDse1yYR
xJuahSCCvlZc57PGORlMXEWPheSVBHUlbCz56QNMAESHHkRAJZdrAIQYAdPT
pWU0IY/qOhzRK5VJsKqLG9DwEwy2mYnv5ClpgmUdRhi4CMDdfE9t95ICUTfF
nGhSKuVBjCJD95L1tLs3JeEl5e41i3fxzgQWilHHESjspJa4k0QeTAB6XjP6
5DGk1cevCAuj27tcLEgigIc+fBDJ7ODjR7grcLOMYuJFrOC6KeUvvSUhtP1t
oWKIlLheCXli77ILQQPhnx/5TmTXVzZiR6XYT5s7fPpuJ/ukn9sNz8dr2TS+
jLdyC9ergcbvt0akm/fK3bxVM67W+zYs9Ta13JWHfDd8kWd9xpfNvIDne2Ju
kzwdv2hXY//d9ZGue9GLv2qpqzFq9XHE+s+B6j+/+mplm681qkzEZLvdyOna
7X6OULhk2JuE2f3KeL3C59FhyF4qGJAFBWCamLAUCgIYdIhCQD/7XnJBUaAG
XbAor51s7aJFMVgLOCYlHJfVmMXDXirakbU8lXfVd1p7ozxzbG/X9hktwnjU
YsjRG9bl6a32GkkBx42R0Zja0tPQG7YUUgApR1pTimCfoslK5drEy1V0CdNN
68DSOs/LhZr3RL/rA/eYiEZtffYaIygbDUUHdO34mH40U+ciUQxRoICzxGiK
fvYjZhrQZq0fFKd5W9xIIh2FnLPSBQMFoqP4YFALceFM6GbNG0rowsOBu4D1
Pqj2EMHyCYUyNuW0WHmghESMHIV4nMm3DBp4OaYVCvC/qH0eQtncSORJatgJ
ple5lL1pMS7pTvpdi/N6hnG/i2RkrYq3oVtcfE2Sp0nBWOi1fg6qzBFc5rX3
ZIpOKDRSU8Lt7IJsnGLHD4LxV9+3zDmd0ZhQUxaWLrSdJBXTle5FyXaWGLHq
ZckJUISiXaIdYs8YF0CCbijTVrLy4NQ1Sw1Jw3GUSIAyy+zSibNeLvqGDD5E
iygombPFunJFAy2qi/q0GVQDX3QpDHyMo3LQZcsI+001fqYGmctml2LWXklJ
cT1PF/9DZ1Sn3YcBqVVrXbAior1ROI84QWyQDmWuuRgdujBd77/oDlYOEgxg
R6TQi651TKRGacXgyHvWA9JF76lw2uBlMWiAolBn7AXiUchyQYHNic8x1xRR
hJh1K6SqnFG23xDrTBxHfhjjIgkMmohEEr5sQqPUCkiZhiY90EKEFkRXmpJU
MVUUbYISr0YooNPo3Y6ClEUhsb6w1r6iyCXK8SXUUqcYoBtl4LrJvCnAmGrU
TCOLIRZ4r50PGcRotwpKMUEzrIKYqEofY/Y0cUA/bbaBJWmCWcbhQ6PCJ8LY
ePk4Ws0kqmE9gNc2d00zaoYEeWeHBsqGtm2mxBy+qFF8uPYO6qcXqPsJQzLn
0optVlMNJU25LBC94ePlgklAFLrcy+qb6bRoFpKuZ07gxkWcS06H15ez+XIx
r1Q4MaYr55LLfjw+IRjUBf7agjuiJhISBseNlzEE4hydXaPodqFCCT3gBEeB
A8tdw2WDnn0moQgw4QH8LS0Zwa8+PuXvzks3DGm+jI1cjHIfCybzQOQlUhSX
8+HObDkdEhv7yOgbGIxDsT5G1N9R+O3x+XdZswQJDWV5tMZfXtkEAclU4CnJ
OofCMo1yEYziy47o099lh30auRfYuu1gKA+4mLi0rXthY+QIo1sDCVaT22JR
EiufFLPL5qrnXePkXWCR8BJr3aA5hz0iPZenQOalYcE5GdcPevjfR0SvyNsz
oThdmZSztyQ7BItkaPGVVVslry2VEJzs9DKnHdH2e8RFOJ/RyTjxIHD4P1Tv
MB6ZJ8EoPOA5jADMQqIR+CuWZ4zZ8tED9BPVxvXTwO3Zf5Thp3RxRz4rh05X
fblAMRvggA++Sj6qqlJTvG8Ab7kiASeiZ5ReCYwgr9ESR9njZA31MSeU4zyj
eAZedwjio+zNg/7Fxf37R/tHF2+EBdS+mAi7gCg0a1zA/Z/UJmvAXZKsBmVg
yvIgY3Z72kCkPeZsmZklCiSC5BhQhDQ7zjd3OaRGm6byaXW2WwwuB4BV5/0z
uC4vzl8+7WXnr/YkzMJaqS/yIVJDfeFlL/vx5bPzPb0mqQoavSB7tVig11Fp
ybiK7wAnHDJvZJs5b0QFSQTLc4YHiA3sNvGYhhAQbyNfJut0vKAiFhwbdObd
j9GtY1SxSjOVTWAlaEbq5XVZvFN4m/mRZotG1unc0jfG4nJK8u48aVb6LT+3
ncgp/+n2l21/MIjgfmhHQli9A919hLoCQfaz7SrbB+q1/9BNhVVxF9dCkjUo
1hthaiZ46NvF5Kx8Ul1i0BvgEVcEOPz6K3IQp6d6BHM9OtSpXi7Ka9Qs0CWV
GAtLpdFYJ0aYIwtRUTsLwVzGYPWIJTKc6tEDmOrB/a8fyFRcDYBD+M6By03G
ROkZl1hkyeuRCqILSktW7/RlPmc7wc51PgMxaseRCpoKZnn4X2bDev5Nn/95
9PDh4cMYlBdLEhlgE7/y8G7Jckf3xAcuJO9FTSa3E2UxPXN7NNZLtw2yh1TZ
Y6Zy/q6s6z6LCS7YUPVD+dzUNKqri4Yc7oQaYs6tOWrgn7R8H86ODtoaRWA6
oX/e9cUeR/XAVNm9V8zucSXke1rro75X1uN+XvfNAPf29pRSqZnOkCv/WUiy
HnwVB0gIrSJNXoUfimcADZSiXctpiUVeQJ5nKWZRsNgSBBaGFQkMKyGwPP7+
JXz0vLZ5ogB2LHf61deHLNACMwN+SBHBoGzXlIhdTZ301Y4sxiuTt/bpQ0c5
IE95Op7Qfc/GF1jimCL/Dw/8AwwWXIJLipClS7iH7Bz0oauZLNUVYSFIashc
IangckRYlAAkgleBRMDSKsAjX06apMjgebQBKCyBTGp6MLBUFNI0TkWqxRLV
OGtU6hBWBTy4mvV97RrgPBg/h4lYV8V7DlhBoJBYNAFlA/+4/wVw9WnZwAsg
gtw/gv97g7O+uYCfI/efN0EoeGikWCwnuIz5fHJDlgnc+JujozfZX4pFRcZT
Eudxy0WuegXtSqP9lfoJ05Sn0PJMwKCCP7AhKbSWK6Kr9FnPc6n5844IH6kg
8CWLSyzqv6fzQlvFQksRGLBr6QAMZixm3nAHUoW4Fv154OZRo3Tk+uTs9BUm
OdPAQBzomLDULx1Tq2qEm5+s0HBGgMiHB7Qhs6Ld+/0HB18/+PrRlwdfP9zT
BToU4pBOPq97+4/weNL3rJfAsZmbeiE3RBb14/Ef2bXZngqrV2G5Itzw1XJK
WXj5WKoJRbssLzgOGkv7etOvGK/lKr9hQZcstTjtuKyJJnlxlmJWgdU83N9x
F+0cRf980n/JunGCON7iXxFjyc7LvxT+r88pQrXEprbo9HkFKWTIek3NDveD
/QbiVAsen7xDnnC/f9/Qg9vsXx8MDlkeACSYDIwU0sK4T59wf8MOnejxGX5o
wgO9SW6KxP6Ox+NSAh7nv2GrNCHpejjn4cEbnpDFqtYO03IqiRDbCqsyYZ7T
hAcPZMJ/3X80+Iq3OKUtRrPOt5Rf2QQV0dJYmr2XkGTdygJW81c+bC9lOvew
J0uRkPk6SLkuhNOglcjbN2ZO2lSR7Wd39awlC/dA9T9cfler+KUUsnRXVxhc
ywksbl4XzEihS2yALcj16IzjrGBjrBKFs6BEU6CZhONQFwVVCbHma2PGdCE5
esKJdeXeSkiBeWf9+4nlcI4wyslng+yHAkOddu7vqNjqhlXvOIqrTzURzdhf
exnJ3f+8e0dfESk5O9YigSflgssWnkok7kirtr7EkoY4CoXWHqsvlJ1lE7aq
JUuYkgO8Ym+ZpJ2qBYrz5yquUZiNdO6xnVvAqdGeHN05keLDXDg5cFK5AsmN
Cd3lZFv0fmAtEaxOmeUX6I+bYCVsLH5BxdoqV3ySLLW5kCu3RHIOgxqYj9mr
pO+NcvaAYF5MfllqjU+7j8giNSFjW+PjE2tZPYmkpoZmEiiUw/ZcXK+qjeXk
rZDyOJIa78vlOGtvWWvwmDEtu/KM0wItP2U9JT+/r+hJ9SzLOSKkJsS6Urvs
vyWhES1IetocaY2lDvFSkBvFuYs5fZrLaJLS0PY6udC9nrV9qfjd9j2zm8yV
rXBPgajZR+s/zYD+QPVHOtOvFA2VmIO4doE9FrrFXTti3ZWSqZI9rknjrbXB
ZzztrOXvJNusC1S80UBzwOw+lqmhg3wNC8/KqBiwsWZyuZ8wDB/FdVsggb2h
R3ZHPjg57SmVYECSFVtVj7PnFfIB9PRp1ZbA55RPUMS9kZKntYmljuImwjpK
gceU61HnErvBGXcq+aOUjqPVWDrjBnF5WUvwpfE5XhQNBnj4uEV+kVcKwj5c
YBPyPq/mS66IKnQnvB6C8w6yeEmxaYitAlPQfdOD5ScQJfFUqRakqDEs10u1
fnF68XZ9/SFBR/ndhEVH9Xax1jQq/KB0YOw4P6nmqav8WuJz5eKHAaOA4qSX
e8cbs1W6PIvyspw5H90XUspgCH8hBhMgbInluIpAGy5oQ2huGDJSL1mT6eny
iqYr0TKhs3WK7W2A+GOFL02QFeMvrGxlbQQsekAmdLOwvUwLcyLJ4kWwm4/I
gHpXS4pmGSv13m2CykLuhBQN9qzTuX3IOiqesqRTSowuF1Gh1WgVFbfZoVRt
Mg5GZASLwe+Gi++MK+IpFRNjcoD4a7Q0ml3BEEsF6u7L15wjvYiFHliE8NG2
LWd21HotVdHUB6OIREGj/4CF7lG0eFzU5KsRd59he8hqOIgbc7Fy50F1XJ4A
qFkhMvjAzFONqHQwllogE4QTKtAGMkHTH8YjYMrMsCCezpAj755U5gb5S51s
cz8ukyTxdSQyc8xEU7xsEzS7TMq3Bcs/V1jxYXaUnYqsQ15ACZYkuY3kwyUg
iQ4kDiDLOXpcSJG4+IqgOqkaTHFnM6VwruS4NV/WbCjQL6kKlLuxVIkiUV11
RNYjwewarsjoysXdvytrTDEjOUnz8F8VLkVqlwuIcGbHFaPCnslMZkB74zLt
nDI6inw6YTFE8mNHVU7kE4Pq6pvZ6GoBtPsvYbYY31wZtY6pEQADtMXWMcjt
uXaBk0wFlnMOw9NAsyTJctVPrBdPezBx4E3o4bMrjWsRhWUHVPQp3pOdkEUD
KuyKS8JmV2jQBSLheyoQoIGckWrM3lC+2B8+4POklJ5rVUtNKJR0NS1szDFn
rqwhRTKEja6yHe5FtWOSEk2Bwol2wUotg9/EhbASibsIpqb4MPRLwvQY4Inz
f/gg3a0+fgR+sJiPnG/1GyyzCGP08c65TzOp8c9FetzwFJf6w+vXL+8dGrsx
9hOD9QBk8KtDFyhEctQ//HR2cu+n05divMQ2ZPAs1WjyK+UAARdAS4Zl1Vp6
Gb5tq5IrhQ1qkR7PKRbqPSwJSEY///jR+7ZNcFAcHHn88iwqDaldxKRcd3vo
oR267TF31RFIxhLUN5UtECAu/ZXaUEj7khUbk9BEm0IBSOGSKED9d0LYR75K
tsUGYeYLcQm7OmEmPpwjyZurX5VHZe32Xu9hogForqFCddZ1a+xG6p74rT13
xrXlsyBaSupOt2XNyHHQipKnliSaQpuOl2+PmgyidTHjPWd2DqPRi/rXpW1S
WfpFcUmaLFW46HErmYKLRBPZlvfjbgqkUrm6ldWca1dTcGFYlS+wdGjMDjEJ
FhcLp9ADVZ/CSXDAH9KAq2Iyl6ohNDvHsU61yIlrS8Nga3czABW3mFyQgoZR
bRrZ2E6YCDJytUsNp8yiZtTNxK5k5ojDsnZlNdfFHkmCUgSDwOTypR1pdvGL
DJKuU8K6ZgoyccxRu5MIHlOrmuvlnOkK2wtsXS0K2VdkUB3XaZSJ6NaNNXVE
Lgrn3SIHQoJhNSO4ZiBVC4vP9JFgu2iJycQHTxVW5EWctI5tLhkb3/w75Ubg
KYmGbU6Hw7OjInRSa8VuLqjBYfMON4JZZ+Bd0n2ZcRrnVEV0N7hJMdn1tX9c
rR8pOZgiTjRla5zAP1YXfg0io/llUEEFN7ukSsOZalllIx1x9xzseQC/TDRK
U3JFauEatjaBr8404bqme1IfEEXJCdYh1oYdYaa5LL5tdIlsHpyScyFudwzw
6XRecKsAELZ7UojQJ5TXGzPK++tSyufFwpU1G3P0QyP6OxrFHe0EnveugJ3l
YSa3FxOOz7+oXbEKqvoQ1a0QW9/YJCFx1ggpiFJ4hGq8dTp0tBKq5qo0h7W9
gFdTGHBcQYdDUGbVcjZyNWvFRa1cSU0tOdcQPrvg+G8uBmHj6sVgY4v4UOkq
Uz80Ok6yNAgLIhHCF0c0o0ilI+6m5uyY4tJgycPOKdqbZ78+89DnZDSJ6HjR
vp+8b4R50I47Hc5Fsl0KmH6Bbla7SpLeZgw4niQNFMKgmeIse9TB8mrHrbiS
icMEUy2FMyfC3CJflE6vfrXwRGiPLjRNjbSHro9NOVfscp/FmIjN6LSbugYw
lI3EBTDuB+OlsNlus6cO+4IA7dK0KKZ+LIA3whQ+CYC86bZWSvh4LrEz+pgi
VE1V5iW4PZNaf4RdohK4Kt+7cg/3wnrfu4V86nfhsyzj5gleii9rIgXCuz3b
c/IGE3G3XCeLqSSHyEzfqT/jqczqnEMqHKOlhrLe1Hs1Hw3rPXkjiOjFQBOX
H8hx9fqOE+FWvRgnXJrpbHkAfGxPDVhwmi/NfelnZ5PJklJQ4diesEW7jgtq
cR0hvk1c0JOaaXjrOA5rryH1CO15AzabO5X5Ut0xrWAW8G4Uqd6yB0aX5fDS
XDujPSCZZEdu4dvxFZdYHhPr/Ygu4pLwD3PNwu+55fyjZ/4k6XpRjq78Ts51
s3eGO6y2B48wsTabyf54RODA14CzXhe1mQjfb93AnYMdEavzml8d7nBLMhW8
2q/s7wy06DAMqyUobGqFe8czOZO9wQZFlcVJ3qguLsgi5XqqFL4ACxdU2xV9
nWwPO9yDo5+9WDZHB12Bkf1wv7vTMyua3JDrlhK216bnf0qpgFsDhU1lAsJk
9i2ePYD/7W9+ltZ7R/4XrNft5G7wQjuz/m5qt7eIC37hd2UkfvuuGdc/aN/+
Vn44WomeyW/lbfpryI/c3pWf4G2tN7dxbvegfVuwwu/S1YcLC8XJg/vB222o
XQdvX6+F2ooffOn6Vx5j+4c3gJed/mpVITjMXTTzShppiSOTiIAkZn3yAmT7
GJRCMwVhdUiFWuTJ8bqARHku6kloj5pRg4gNxIdfP4wuq9oRdUdDJZyoJzij
BLpSaXFed8Fao9mfuEgi+5aRw79Dq4HP12XiNrzxtNGqbzSi+q/j3SjzZ8q7
81DW/2hnwO9Z4cUvwnm/wgJ16wT90Kl+vIYyyopJWKDYkXdVJM2LMmflQ3yg
zv5AU//cC6yNhtUBpef9PYjPp8+TOqFqVfUsKXrEeg+KOEvsjY3s0xdToAoA
ThFrJUFWTm/LdpB57wS6OJzdJrKepB8rn07Sqs80dtaiResejQjPRjKzkcps
JDK+dqdjQYfpZe5mgDzZXj+DwcLoufaovnZkRLn8nBshJj8Psjs4Jcz+sxSm
3OYt/YuLVm566RH8j8Iiw61EjCGCZfRI8GbESt2vt6lHwjcdG139pnskfJM4
4z+undM9Er7ZYp/tN90jHQsVF5l8u5Jntx8haFkI3Tr0ELlhFNzFMX5sMMhA
zssS+PLZ7OiAH1m5Fv+IEUMs5G77uM9HuvmUHMGPPOTHPUS9bIGPoGHmD0f7
/EZKnrCPGLHEgosf+fnowbpz8Y/4VzsWXCmhMBolOFIvZRC4DsNH/eMp6cys
S1/teIh+G/zQMRbBSV/EjzhIdyKIftpa9NVOCqIGJAmJMQHpzgoxG39WSI4J
SP870HazePwPiUn0V6ctQA4/mwB5oFHNKwpkoyYfyko7I+w2Msb/FNpd5GKH
ghrpbZwXsbInPRDFETG84S2RyprQko/c6DxksSM2Y/9W2SoSDPJdoBzXuDBd
EiqjZIGH91G1TryOinJLXP1Ty5uyc4m7vcL/lLrlP++4Xjso9LBFnDenvh8y
a+621fPDnb0BTxSZ0owg6upChuHOFcvLXJDswroIZmRyEWkPy3RVc6eNh/JY
T4+Hs8D/tE4+C66ooUNrBCnlCfErwh0+0yxrGUf6hWtZQ0zF1l3c/0TioxAr
R2LWLlQAjGKUCIdrlpogr+sedpQr+XBAjt3Ih3aubcQ098ydYLztxbRoW58g
psV/eKEiFLbaYlr8pnlklbBlBIyVoxgZZIWwFUr0yVGsyLZK2PLy2Mq1GJFt
lbBlRDZ/ZS0RCES2dcIWSgl9kUIvb724eUWfBiKbvhoIW4GAsWotRmRLC1vx
Gd22/hueUUrY4sH/ZF65Nu9f+zPSR1YIWzT4w81ntG8B0BK2ePDD9aP4R4yw
ldYfVo6S1k46MSyi5+MzCoZ3r3Y8LL6NBFUqrG7w5c+tJxyMOmlYbLcW9+o6
ITSFL2kYreUQAb5sUUD3OiFWjj6bWHmIYuVjG+Wj/qF8CEJSj3xgHF5bU5Iv
lXDjmARJM67TWRgmXtnF9+ZOmBwVpkGlejXzbNf7svei0VyZfeu83CF3/GQS
R/vsyEpNXII4BMtCvCamMY8N5caJVq6ip9W+eryQnXqWz0H+brhvbGZWQ3tC
WGEE3oyDgl9z6IOeDIqNVLTQN/nmdCcKC4D1Hg9c4e/S+PdAQncG3QcfP8pD
gTZQI+Axe0K9+SviPPAS9sIor7WCNC7dG5NHHz8ymmhVW26XTTdbwgdI2Fb5
N1xEtcj+jIkTuY9yk0enKyVdGPoJeXWDRjru0z8mnvxTa5TIM7XtZ/Ewt5n1
WhmyoNwnIBWe3AWpSvshJdm/Q//cObQfcmrxHWscbAt2t4m/tvhs7TAHLLPd
OTBgyB7xZw+Dt/5Kq/lMJ5WpU+BA/lQN8wDIoHz1KPzmYafT/yw//9Gwrz2M
/wmxjxfwUHAgwr4AiQ/WnW1C2PLDrFtNiH0MlEeywv/TsO9h+M3+58K+/2z4
R3PdOTTLeCgnvg7/Dv9K+Mcz87ExOB7JCv9T4p+CULHs8K9P/f798c+h32/G
P/7Zhv49+CtxX/rnzoH57D81/VuDf236F+s8D1Tleaki7XKeqIGBEYR42Dsf
fb/mdc3fNVMEGzmPhjXZ2FP1O00GTStM0Kk/qsdQQXVJuXVpThS4d6INHaQz
Hqk0s+xHefgpPcxr6XP6+0fTe+YhyNs2sNqoYBrjGU57tE2gVkYv3steHr/+
ITt/8v2PT56/7kR9Ye5u/iNZLelu51aBfza7qNjoyHL5ffsHicGDwSAzF5a/
eS64+bnW0+1Ll8g7+N+uBUPXfJF1PcwSur7eGDfatfzbbT9zN15by7Rw27l9
Dfph3eTTOcIrOzttzbndOOtOubXmlf93vfEJAtCq+lifWDdL2qj+NJMaLU/e
N4M04M/5AYcba0D0G1e0CnorYXdnBYw2H0hrE7/ilc1HGv3fdfLTFUfa/vDu
BoBqZ9xzLS0vC8X//MBlJOST5N16XI1vdGufbUVJ0IXUgChCC5Z3IhhtOIxf
f07u2rWISAoO6Q23zZZYqMufw/HkEquF/YHq7AsL+31xgz1b2yv/TbOuhnUA
0tReV4NwLXw3QThF1rr+1RZ9jbcb7f2uf/VWa55nt1jsAu2psFD89ZxLadye
L4d/xjpEDOvbzzLrOkis/fkVBCNNOBzBuJtc8N32RsJP7rqPO7cMwdvnWHBV
fsciRETpb2/RcaGCwy1KCvaT57e3P77+6RYZx+3nW1ECcF2HvN1VwkIM6hDu
Wz626niuiTZ019Hw5PEk8cp6LBJPBABEDBfZHCANy8WjeUqZP+ScgT/pLzoV
egJ/kWOkXymqYrBSjrtrVnQ3/iK5ohWQZODc4cu9/opsuEEbbsl68EegX3MO
K8Dt4C3I8cT89eT9vNQSQ+hXoCd+PD6RZf+mmWO966HrRF7N+5Tyw3pJGSVJ
tcOTaq3AIErUCg3K1S8x6gvmQGHNvKDqGiaKU/q6U3JsipbpskxFp8ZFMadQ
JNcW0M3yhdfOXIO9sLkCVzSiujfaSMPPFRQdwUoWoc7Vy+BxZACaxUX1MvYG
UggXB0BQPqOdtBQ/UWQ/JjuDbtaBws/WKV9J7evW6l1rda5tZmfV0/Wmo5rR
QWP4BlOr6oa7YgVlFCSrkDNlZ7YwOvsJG1WXMPv8ibj1pHQXpyxrqR1jprGF
kYfSB5pzfkPEpaqsw0k1eivFDLx6zfUKuIoC4sEKHGD/FZIX/RztEHoYH5Tu
DG+orgV//AtuP/s22/9Gv4b1FuTwOz7nM8nrX9SF+W12QM99pIkACG/sMG+O
1CeIUNRORZQsPV82Ls0Sd+S6P9nOlFRxHOvboIPUFwrx7SjfyF7O/JG90WJ2
zmaC5TZGK/KzKbWUC44nhjIz+aRlLvfjqw5ycuUljr+HaPDGgwf2f6KdEHG2
NwJBO/CvxhaAet+PeMSbSEwwsitwbYvaWRlx/0CtD2ebCK5fmYBz1ULWgxBI
VV+wdM+X6zZ0Qxf6QaGdJk4xV+l4mSagQlmKS7XfjnjvBiWsbQKNB1ghuK4g
brR4Z5NhBsuGmeTi47dTlM+VggkJXdjideOdoTzYtdyHM49SE3iLo2tlT5cj
dQPf6LhxOxxDHH0D7NZiTM0nJTYbphGcMiSz/binnMDWHz3wXCAgm0v48vDA
k9VxSCyZWrpX5QJLHX8/orSQEtrP/dUrieOgSynkQKgm9n+VuyilKxtTpUXa
g3mxTYchycRn0ftcL21otsRLzi09rgvX/86zP+5r5VddO9ot3X+lPDbMBfJY
RRUKJvkc2UFdYhQOzffi/OwfsyfzChazu//1l/f79/fh/zOsc47/n/30+mRv
EHKZsQBOWlgYDm2g4xp7hOl6YWDP6yvX0h3vF7z56sk//HT26smpwx2GRFC0
SrEkKsXEFdVBFt5zLUi/qD2EeTYUlZUpUlsEdwDX1i6SaPz5On2+fMMvSi2m
aaWXREGUBYAFq/1wFzQreJ6LzAgrojG4sdaqwpl+3ZH40arIm3RkRIU6VwAa
gaXHGIBHvm9hb1BejdmJkyo/WHbz0d/5VT8xnd0Q0W0tw2u1u08ZVxnJnRW8
J7mWz/jQFraaTaaAz2Kr38pOv8FE/3ls9MpguWAr1wFp8U3H9yRN1jHioBiI
rYVgJULh1g6p1xOwsOnrCiYgs4/ZP+jqk6h+SkS/0ZJWrvRYsohejzfBpZpM
uSSZAivJX7Vm8SIElq739VGSYire6kAf0+amQafrWVxVKIBL1N0xzwRxtD2v
IpI7KW1060UMSlV3WpitQuMF3U1qWCBUqCrlJAlGWNXDZUVWnDCam6I+VTCq
yXbhNhHLGGeu8lLcGtrbHEjxfROsQLhqDBnfrZx2P1hds4brNRnVQd8xFWlo
cPYv7zGISX9au1NZmNsvs4QlQsDW92rPqz0oMMms8IAj5hjWQqQukLOKSlRi
V2DT47jNSYTQOIc6qidmXzFv+UQPoKc0jnAlaPMmYhfQ+N+8gtV84M562r+e
wYSrXPfM53Ecb+9k3AQYOZLAoSjn5D2I0clFHsnsU1yMm9ZjtD5HppzOFeqA
7QtuKtrl3ijjdQCfsRgTzSycUduaynMihGoPH2xjzcWHHUOrlTlIZyTqdM0l
2G3RNaz85AuzD6JAmbD010bytQWNCyEWktBiQiVSmYDm0pmgR78P4eS1IpsB
5GrFuc+8IsNeDoVr1dTbZh+hZUUgFdHzBBvk5fZhjX1cLVPN3Tf88S/w8S/4
8Zs9sXUu8ncGIXbfuN/fULHsgmWBJsE4U0p1wO4iS2S0goANiq3SrSPmd1tY
CeA7MeBHDRWFY7zhm3w8G+P1PZNewc5E4PW1+Hqouga/OmlMtvvDi5+endpO
hXhMyIaoDTEuMwGk5Do8sO7dA3rPSrb0xKiXJbcJXrm6QQrSAYBh1Fdw0vP8
ZlLl408fUk4stnSsERQcfsv98R4L0NH4MzKsbjMEXzs7AH6x+XWDzaxFhmKK
s0i2Ob+Q/Q9mtQmFMkHG7de3LQ5y+wlvJ6JHkowUxtyOWSZ444qAi62DOrYf
sbXsFQEb68MzkltdJx98egTEp4db/Io5PFWTu0pUWjWRUHCl2udSBgB46W5s
SUE6HplO9tzl8c6XUEQQ51jE+XRi1681n1yCrtlcTbVj0lKqr7qx5cHYQhfw
e6KMvhNN8L7WP/1UEWFPJpaz8oZIfnhLr1tAolr8d6Xql+1aCzdfcMdJ9lbS
/FAvpO0fOwA7iPzigd5mkfagfwFAWQO00PkXc65joR9dVtXlpBhoa4SBdzxY
C/fhuiF4boeW32YP3NNsDvcVZn/BJ36ZFLNLkAy/zR4Kw7DAsJQErhDQEQeX
JZvey3r8S16nJAS+eamdy6vNYvQLZhwGWzLf1XyHdQvGaJ84AFBLzwPRc/N9
IF03cUow1A/VRIp88CLKv6CZFAFq+mMTRrUg5MUUbGgmzrg1TzmzS8u4myIp
uHhtLM93VKvFck1dKm8S9pjUUIrNS2moxVvaWEE8WfqmOzmTcj7Nhd076pBP
lJFCLAXJay/dN9Elwq+E6AKvvsLOFk4lMeRE1RZjrTLUqNVMS10QX9T25GlO
RUCY7dRQmi5+1o0WzC3fV7f42gWus2ea6GkJZaRa2NORI1ec08iSVfUpmVUx
1sXr4k9XrQyba/226aPAl5S3IY1/aYQDZKGS0VyTZ8837hpd5XMs9HNuBvuD
Gyxs6PWj64lje5S0m36dB0JlqufXyj3hsAg9okXcPIAID4O5veyVOHCeEmx/
/YJb/snTiB2G5xc6A23Qx4uXr2ENx8+I4ClrwNAI0+e3MT1KFsOyWWAHuDlo
p65Vkb64dvQ0d2kRZ2E6yMV9wfNAjqL+E57Ouu32suGS26xVTcs4L8IBniHq
IUzxqHC0s4i6ZWNre2p0Pqtai1gz/2o9hExNH5zKs8qptaX5ry2Gtw2P1rhl
Be/PNWPKzpcwMW6X3LBdmPJ2EcmbzYufHJD8WeKRP2M48sr1eH2EFP2UrUys
TJFmboK2xPnBiItY9CbyeW0ba9TDSg/cooRbKdimmJbHf5KMrxurrHtqWxE/
sbc10n7r6W0EXPlmBhjxi/vai7eAHXz+V9X8F168lXBdNB9iCj+ItYNNRN+D
OIRl2iydgI4/xkFjXFDGqfJt9iiWmTfLZBpyxp7HcSYtFsRUi2OYHa8bCKOD
6wZGobqCru+wRrSILW5Y+IrFNLoDl4ytBfFust03CtM3ez4O2LJx2zxReyO6
4BNbi9kjpWsMhBebQ3PiissSGpKI/+DA4KQlyy3bW7DgI/qEwxPtactWJ3Jd
K9Hmgt4UsH2HKmjqXTE33hb3mpkcPzOzAy453+JfnDg4zd+X0+WUWwVOS26B
u5yVcLmAhO1p06AQgl+4Zqc0cmF9hM9kR7t8p/csdu7qNveot5r9StUr7o23
KAJPYu3cbM574Di6IBXqP8UFNWnmTpzs3TczBL1wyim2RUTdymnMaGZlfA37
aHofpG3WuVqqDDcWtA7pw+erDJos07EP82PsREq5dOTmGgUJeyQbL8/vfwe6
1Xfl7+7hP9LYymhTNCa1D8pRVCrH2HxX+u5g4LsDIpP13J+GcIZhgd+wHl2M
v8EuRHD7JtqHTbAFhVPv7uFdwn7t2mJeBrQ5+NpGwjkvmD4t6l3oENOiSUwt
bMRzIr7JrcuZ1EKTk0qVbRU25bMZyBhhOHboQYqYZLDcFZHXG4KkzVGtCyDd
Kop4pbk+HfPt29z4SGwDxBaE7lmLv+0dpdGQ2l0AAVytDTBh6eK34BXWYnW4
ldfagRwwIR7r205wn3YxOpWTKm7dwPf5O/h9/p3SP/xo/h089b//hw4pj+Gb
lHPhByj7+9sN4R4M3l797l4MKkf2poA109xcd0bDJH9XI0DBndQ1KBCJzVrj
MrdZT5iYXYjx5zA7tBX2nU8xNOx8DsV9gxNUazT7c2DqVNZxQ2NehBN8Q990
trszh/WCzo/OeyRt9loAc0Vrjg9F87NdUXABSN2I7lwJg1VbFBZpKbtzgGO5
B4IkI9AgdgkDvkW6vrzS6aQ/h6Hm9SDIcbldoxPCsz6N45/2/3mwch2fPoYH
xLq34U5uOzRcw8+wQDuKd9qQ/M4xT07tBPlARcrIzJBMjbw1b96ufXJN0mTk
0FufRhGnn61JGl3/pgmlWafuipCXjxogYCgIe90hEAeSX5iYlRXdKFVqiCPA
/d8qECb6toS9EHH+FfrIruoZ2sBOKZEL+9zbVpFO7dLrUGt06aOEQ0zV2Q9G
weXTQ42Nxe9E3oXU8PmFlddW4oV7N87RMoH8RAdTAsz6hp4pODoYtk4OPQbp
Y1NFkrsQ1ivOjbmWlpYPU1oDFZAD+UlVMrBp2UY3qWKCFO3i+AnXiiEcfGIf
3ELWB91vk2Jt7/EqIrfNONtnam+oCPHJRR+2pWCb0qU5BPFXJmp/QnptamYT
n6AJGD2nNVMDWdtYgFqpG9tCzxk5+LZMbtrWDpEsok6cRxipsKLRZ9DeM2z0
yDqbT7U0FJd6w2avK5L8EYPhu8sCTRntXlh1RCYkunFjMpDmpr7DFJ0hiogF
7MspPixuDasFKnzYOx1dkNLntgUBIcbe0aySrfU2+6wYSTYi9tV3iszoqipH
mlA0x2b0lYluwBZlF4uCutNfVRX6pzgPx82pPaDhf5QDMaoqXJx0ObOVl1vt
rPGUdI/eBIjtjQveR36JfULloMJtDjonK0eLpNSauTToH2hrobFOi4t8OWkM
/Qg3xQlJQxaD4xQm0ZPH1WhJ+uu4KtgbxDC9oXbYSo6nBSgBs7KWKACBjXQz
ZtibfvDBjuoYQGyO/hQWzAcfsmDa76ezYCHfsXFaSE7COl3oNwcxYy7ez38h
V7C1SkvcSD5KxVvINFGmX4sBGeVvpSxDGsrI1N/rqcuvt55vr+C+ey23tTVl
U+6pS94kh0Wad5qlE7ZKoKgL6nXWYRpP+kFT6W/N7CRAFQk4tfsQbgCTFffI
rMrHJaN+xYOKeSiRStqErEDyV4kSgwyjJr7AeAqj4Bo5K1C92eXMZYrmo1El
7ZcrpdpYTv0oe+Me/zbb3c/uOuTay7rZ7sGD7qP78P/3Dh4+2nvDRI4MDSDe
+HlqY7U9PPxy8DCr9Y6bZ8LcV/YktF3flH/rs2e/cFUVVqRC+3gWa7vao6Xy
knoS6VJXE6TpmwCu9rt6OfX1zrF7kvYvRhN8PpLD3Jy8mnZARPYTc9x5vYF6
avkR76b84F0E2wuFa+VCO/pWouFG6XDrrMuta6t9shC4NtVfhcCwHBKBAVVe
+IN+d+Gq8qejCdvXtUzOLGmQN5J9yC0EjC/ISxP5bFYtOd8b6WMjtiDb3pRY
/4xDyVC9OTZDiQTj/FSJogJ9HLWs2QHjIzQu+JYz0WxNx1Nsz13Nigx79W6y
T+Ov3hMbM1jy1a12AfPX7hQTzJaeYBX48Ju1CnSL65q513lbFXJMMuU7leoB
trBltKYLxF2BXCfVRvzYuyjdvmK+n2BkZi3uXLWYCq8vQ/FU2ah/8XMs9NO0
aLyPZmm63MG/j1HC2ntsA754OZukoX7mOJcrC/zo48e9v715w92ulu5vI5hu
+QNQVAUat8knVtgPbtO/ogtk8MPTgZpXHPg9db1jB2yzj1Sihy/SaFfnfnv5
ZEBYmKybmaxS6T90C1z77i3IVcqi7rQW2OdS4HrN1s37MoBOvKXEvP7rW3/t
29vYer/uZy2cr01nT8sY79in7fC8ryI+dPuIYMa6Z1q/t5GvhZ/4iTZT8p+s
HScurPfIFTQ3XNb2kFxLCKS+OdeTM8FAHzTQ4CMlPObSM5N8cOQZRsU2tnNP
yrfFBnMRhZqPwsBRoGNTIK0UTpC75pzOt0g7QN3Dh0MM7FK1D7vPJ9fk8oHG
Vpr4DQoKcYnmLuXERohqf1GXox69DrINFT8g4UIyETl8bXU1pWgIn+0ZeIv7
viqGeWFDQn0rzsWUZHB6SnNla3rJ6npZoL7YCl6kO7ah9yYZOtZego3EW5n1
GiwqEXCXWB7l8oU6O9vc6CmxEdW2sRdWqRldUVC738eOsLnEd4hpxeTCFk7L
RRVM4AOHE0e1eVAmdnUik3NolDBgO18BAzOL5a+vllijgy6nmCiT47WvgMbT
OANfPmqW5J8PgyzTIJhFQcssdoldlQRw1w+MC4ngcBhTg95LWI0myE7yBaao
xIWL+v4Cmt0aQvQHDSRiMqRGBywNSjEA9AHij1h+lrVmLTgJT8ORSPDb65ns
ebhnXZXO5BkXQuW2XGe7LncU8K2b/cAhTt5SsBto/GqFkrhytnIs2S3uZyOd
ZjkjI0BB4rvM4+QfxG21Qs2XiznabAGTaJlCz/OwThdF644p2HyHZ9xBbYmV
KEzuwMHyUHok04O49V3XOD8HiH5LEYPF2pIwW+TGaLErdhe29yTEuq22RbVi
gg0poGg/9UorSg/L0I2oP9+YLRguCCJYRe/Xg8Q33jAZG8k9eR1DPBmum2JU
8Kd2enVkCtcwvZHMpf4JapuNSD4rysurYbVgOyKmZp1jpoxlxdP8Roa4Lm48
jYmnKmekji/Z20NdBYF2UWxIMbikr90ytKDqpJAgUgqzYmWD7VRso0qsn1jb
swpOyah/Z6fw4XPZCieP7Y7IYsZSfY8lox5JEHB242JecNkkEjVQ86d3XGQk
wLbuE5DQAvfMPcEvkstoukQqyJ4JVg/Veo/QqRaX+az8i5YTJneKEkpyOmkn
7gIdVBceAAO7k0DLtl/4rS9ngN8TOCJgAChQSo8Z03YTRidR6QNtCwnmPO4p
o3Y6jgfiHD4ULagJorAB19jcGQEJA7EyTiUHKhRcEfzc9lCkQQF1dGUUWaoP
wHqOtZaSdH2nmiOFFsEqXVPRasF2bhyvh6SJXTo0ktpaa/yc/GrY75FJOUB/
WVjfu8azesdhnk0Ir+bVpBzdqGaOMiqtgd11DjgFoiiCo+fg1MPVFZNySp6d
8YAj3BwUBDzEYkGbn+OKEbIo1eCIBNMF4kpTehclPD1GyiE7w8s06EnaEmBy
Wf8ZScyM1P3RApipa2ja0AkhbUABKCJ0VMrjHt6W/G3BNanRtr7Eqp9+oxSN
O0SkTh1/jcLrc2RyyIp7rrahAJB3XougHlQrg9lobczrcq4iMS0Wo5IEC3Q8
opL/rqzVF0mCPHx1XSJ/HnSeiqkCaQV9JBhBfDF3Nnr4o8ZgQkwCRoO8j/j3
G+qR3e+6KpFLkAgCm3YiiPUWAbQpGwsGvambYoqgGJaXl8AFJPy85kO/rPKJ
kaH9rLhxdwNAnKpbB+xCqa/grmM6JTw/zIflBIUYYgoTQija27QoHFlh84pM
CmSFWI9AmC4DwBGpesJ+lcHtY+HXuTC1Qjq6MMtZnwg6iTSTwM7UoClKKqb7
OWeYF+BjfBEdBKODhAzU4twDN7xIILNSklLuNPbWnRbvcBfjksrKkWcF7b5T
SoamcpTLSVPOJ4Dml8UMqAaG5S5yUPvgefUznDfM5nAnQpow9DKAfqfzMxZs
ZxpED2spdzzGi3IB51HDOKb+NjE2wAVQFzBREb8VbS062Z6tcNtlSsSDdWGJ
jq6EF22IlsiidiX54J0Z0+QwtYX6+l6U7xEeGABWzEY3DNyubcFMfAMIVxeO
vNHgZv81CeVSnBBJo1zgnCGuIWAAA1qtsxa6fTrbot1dr+20IyphCCOdv6gG
5pZKLgBvC3NEego7XQI+jF90Bxopn/rS3D+A07SCB3Ye3t/RPmsXzFCFwXjD
JtU6cs8HjxML8syk0zm1EkUTkH3grA2m8RK3EmEKzhAVU66C+LYo5hxrHJEC
J1kmN5UENQc2qwozxgsA3KjwJycniWMNsjNJRRVP4Qj0YsX18Ahc6R9Q3PpB
b+RoySVK/CCXkKWFg1d0h/Fi4dV5PkKqhhyT+KWeYRJlw1PkSiR0LKIrbDxI
eeXR/fid1mkS34bbqmQXw0hsbwjKJvcUhu6t2qWRRyzr2usMZiBKtdFy5grE
l0z9nnBXB9Nb78uPH6XapG+1XUfIBYsJW1gTVmCwjGNILOnInygR2abnLCOo
2EHoKHQ3GNYdjQ4j6s1yjh0tJsVF43QtqRBAr7OU0tVQp7LmbCpVqlr1oEmL
dWRFC5bqCflEOZbTYk8TylXY2pzrmY+jZDhc0Bess82Q2JgO86gp8iXVKmu6
TWJJoXDps1RiLSw77n9PcRQrYigC5j9YB1DY+FXDR9W1rpi6qzBrkZcgfCWE
qjlrGYs0EIIzikYzTBhgAPtoOGotEYbxH2XH2SXFDy/M6MGY5QwDIWrNrS/f
gjR8VVUkRV2UTCBzTD1YNCPUFNvpvX+Vg3ncf9I/6z/75MOBu+dFu1CedQ3q
u1YE74o10ErlUY17NS4kokhEWLNCNycekTSEsHlJQrPY6IpSHON9nQ9PDPHE
fTAIvmWRm4afsa0cPZFzliLu6R1ziWnO8ebt2MHgMh6G6WHM2xVSQRQXYcqm
Qr2V9NmsxRorqq9CQrZKyD2OD1VWac36R3YLrOaQjVslckpLa1ywKMdrslpB
jGwIlH5aoMmV9Q+U7rk3T7AZGtmVJIdHgWAXM7ZrIF/EtZKl4CIvJ2TINHga
nfj2OFuHSBtfhhpIymn/+/4P/b+nFZ8AHj8FTP77T8Bk9YKeqzIfXuk76rmD
U+/y790OhSHggtDycZS9fEalmJCpHh8RDmbPuGxG/IOPPD4KXq9Xldc2Ps91
dSGcNw7Hpv7KbV/erZ3fPpOxJ3AA4wzcJ/JX+H74iH2sc7ubAeXL9sTvCX+d
4F/B++EjwWMw/5v+nf4X7uk3MPAXfv67GfytH5offYz2T10pdY3sDW3v323D
r8K9zyt6zGsMgHYrv8J/+vpIBD954k3/rqwxPT89cqcfdtBkt+lteKi35vzN
/PpPHA0VuDzNuu0Cwj9TfaTX9cEUHLzV5YXrvRuPwf8MAB6D1UPeTa1f3gFA
PzGAjvaUWqmfH949pXfbOBNuKbX/8AyzaB+yxDtuW+arNgzN/mVN/ZfPCGCy
vT7+Db8/hd9b4JPP+RO/FVmlvzC6YpqtEy4v2NAGIOg6v6fFyC94OCue7fvv
2uEWNGuH1x3i6uoFbK47Y4nQulNY8wP7+kEPAn4/M6fw93oK634sToWn0A9O
4VN+WuCDxfzeLIao9lF2annohmHMojob+EfwRog87tp1gtFbXCSYGRb/zJD6
Tvq6phfNUEyRt5hJ6XLxM1pem8M4HsPLf9Pvti4Cn6Bu79bRrb6777dm+7eZ
jvpYZ4q/N7vw+7uVI7hNgJ8ofScFC/msQ8vpd1uEdEBRNoMOLAdpS8iV6BiQ
xiAW0SXstojAGxoA8MOyl3DyTG9UIpgJfu50mLOsOmClid32q91OzJSCWWXf
d9pHng1oNN73U7O0O37f35t9+zN3x0MD3Hbs7N1obTEQ4m3xUQ7i7wd9v7Yf
ZNSuXyMu8cyvrY2P/kzsguPJ7XfBrZDvVE4lkubAExIlJg1xhNOXGuEk1hZn
JaGqc87KQjJyX7VHr2s7pS9tPimLeuCjoEIXnBO/rS9OZlCf3DGWSyV7OhpH
sKIl+jNGGI65CI1iXBWlm+06Cx9XEWfD7Z4a8ZwaoNZWnR93i3b6lveX7ClX
+RxUNmcK4LAkzeFbZWCLjGjZCgcjjSGeMLYXk+WTO0ANOCqjqho8h7n4GDDR
ZWJCu3BACWGxG1DbIvuje2yQQAegD+EBwPYxNIAUV10i+v9g/Lcle2LpQK9g
RxNcrduiOndjkJkqPbMqziFUc6+vhnlTYBeaGWiRo6YnkRW4yyav30ZJRpVz
N7G9MRpbqqiacIFgdzzwko56CLr7WzGnlAs0QCzEk82mMBznBbyMKQOk3b2m
8qtR/oY5pxXpHGzZfFWMirl1+8aB9OpGKebOXRXgNiLHeClVl8jYlU/ZoRIh
YBvtjjqd/UH2E6j5bR9OKmjBhZFJkBMfhis+VPk2wLu2apI+gMEBZzMO/KF7
pfEKeHJSTuy1ZgjZIG6tpcNmNAeGhup5LrCeZxAqsVvvaVlX3LKvmYRfkK1D
J45KmuAl94FIgvHFDFGxTgIEneWYiIoWH7IuSV4GPuuq/8JKcOL2Wr7hKpbc
8vFGrTjkj6ICH95j1D4HtmqyoQizLw7IKxkeL+Kko8E2GEaJGhcOdJe01isW
+FvY1Tup0NgchPRr+VmuTNVeojeSErgblysWgsx7BqV+8XjJ7oMwolWL20ng
qJrfJGgQsf0m09SXgp01ddVzo7dQLfC4mD0CHF0kLHrp/S5G1XJC/tNhOTbW
Y3H/MufoCfRrW9EptFFxWRfp+eUvLN5QohnkxkI+Nsh8rOXP5AngQ5gi1ueT
d/lNzdQS1o5ueT67XP3DYyDUtc8YgEXTHONqCejcp9gH4jzY3YQxb1Jcwsan
5GvH2hcYHRGuT/zGHAd3xLFILBr0JFGInqvnmMyUSxTiZeFDEJFI5RhyRjCh
HI9S4rX48Gia/IYd7mWDMWfeAm7yonmzy7lx9TqfB+58XNg7+S4nyFdsDCXa
PugcikePESRsHIll0Ed4CS6WkzQt5Elqj8aV+Ol0QErP8v4+ysU3dNtdzLbr
kwOI8BQLUznrQgO/NLVjVUnkVgiNrfElX/lGwanYJ7gaZ45tPHbk5MMdZiYu
JirBiSh3Jin1rKhPToyNGdHTlodcnLgI1/EKD+46NqUuiNARHwaVsGhnwgNi
kaXnjyo3sPVJ78EJSe1NIsgpupiPx1zC6V3YQJDDZIzUKdwnrJjj3LICTCzb
nkl3iFZqtPaaRX+B1llu57YP/BCthGdXaNNCRFoXbjUiYMAvrbw3qdvpFrUy
ZL0xIfUy6Jn7FNls4OxL48KPx3+kjo1R+8dEFqIrWR8Vs7Wr+CYq1mnW665n
mCKpNbxgBE+ExtcoB9SFr2wUFxzQGEeOUzcT2qqPPpchPjkibin0o9exaB5u
kqfw4XgUEj5m9OMoAFRstP+vFNkzBbUfkMyBEScY54QXOX0GRq/iIE47j4uP
XaB7JnX70Fl1Xb1Vj49WMTwR+eOcZxkwnXoD8tMUq6d5uRi1mWz31UuQB10v
0KhghMPMSFsJs8xxH1xWncKqfSqEtmlaSZG3SMpY03spNWyYJpwuGbtuSQmk
W1HzaHNpv8QegtZPq3gMGQ0de1nLUGLBdiMvea0yYoyMK3mCqz4chnkbV/8Q
x8ArAA/nC0fi/+qkfRu6LMvcktKvoMurh9uSRh+uAXxIesj5bOhA/VsIToLQ
tMdfDbS/IZXx2LWe1Ky9Ry73TbsCPuXy6h/MMCKvTXKxJehiuBOMt1zQgjin
TkW4pLWBLCauXlCQTrddCr+eWRrOPp9/MR8Jjdjlf16xfrwHRwBYgVWp9XOK
Vyj2sg8f2w2Rgnf96CarzoW/aLmA9AA8Cc7hC3il7TEriFTQ+nIFmrWy4hVa
16Ad+KLsASOlPDEXDLsi7STJ6IQwvBHcbmXkg4JTjVmUQSxPm0JEzglHDpRs
G8kdrp1S+IMTai1CrCLuODAGxPVy0kupK/2UvUt3T29sap2UUGKbgdlaXhA/
FSsYqVnX8ebW5aFkmmD+oGwzF421MGQkTQBRsNfdStW4YoRgo/yTiwvilQC5
E6rkcTbLR6PlIh/ddDrHEvTGUYdsmckporBVkQtxUzK65DkMXU+RSEIyyWkB
xQzoPTxJ4q73IYxwKWzPLRfuc6r7Rev1RslAjKDsw2NMs5IhEGVdl3eEPlXn
R/uA+3rhjLMUjXRDDDWXQM1ilqjjhGoAxmX2RImnbM0byvUyU9GjrWTF42j2
1uLCta9YHBlLPnFt8ZNhzgpJK8MypzLu7IWwaem5q0QMTHlcTPKbI5/3Y0gS
Bd07Qy2a9zVYOdt1eQywtkW1nJHzAZMgQQTYE64P2Iu157QhkFavfpffsP0U
p0MDimayuJwN1G18sshzjpsVX4NHS7YlPXeLQpZccTkSSrB4LstBU+4FBnWa
4xGJjm2UXFwM584pyFCFHQdiCd1Fa5a36Usd79ZRhBmeUj4kTPHM3pFlcoH0
dIE27QlXM7mhGyq8nU37HGdczS41E/OhLOWp2i4wcJGKF7CBbQbKaumTfLke
LgFQfEqEbu28ULrI8B0uDI2UfKiP4NUl5ZgkbSModgC5GWEsYRNWiiTNsc82
wjhBAqgAUjaJkmw1umYnjbO/UtxlUBVmaEMTzZth3UtV5W9gsgviaCzshgeb
S2ZQ2NnB5Oks8tmlhhMfXuEOHmY3RY5AOZtJcltZ881quAgZogGGxaOcyre/
urioi8bljzCLhdkFQ/kqTNGSiw3RBlKIOR8jkpHPVmpVymIT5FqjP7WB8RRx
WezZ9fLiAlOUZo4YCVPAwuWUvF+y10z4MV7Wul5O1Xpv+gGYFF8+plOXM0b1
Vin7yKQWfLD5AWqDDHPNfOXIITw5GxVx2Lw+KsGdnpIw6Wsox68OPIrw7ZS8
UEuCDODwqJ3z5pYg6O0eHFXYOdyVefdL1Uw+76jVMXs2v5+SyThRagBKs30e
3ZZcKKlxIbG+qeRolNeaCVgNfS8QV/V6TIXxHZ6g5KGT4qIN39YXTZ5+qP1R
kRG1CRgdmD6H1XDaYIakCe0WKP1h7hSnheroXsPXLLgBJaKhrFKKN5xOqpVA
purQkF1Mzs6Yyo3puRM3b+PNmxRNEaOHSepAWcSVBmSPsFINg2EUK+3a5FnE
iEc0TiQdpmpc/0J828Nw01gDrBYD2wMZueQuw4tyxEhnU3MIleZYJlZ99yE2
umsgvcFgx/oAJzQFpNSH3ptlMXPMs51RhbS/qpqdXnjFeGzEEbKRUiUxTlP9
HtMRWQyIV+LN7KLsDJflpLEp5sg6BPA6Xer04RwbdaR4/6DWFdZYi1YWt/Zi
wMRYTBgMUYvi6ElOaX3qStdk9c1sdLUA/MY8TI2Q8HItGyI4+SFfLDirG2Um
uOBj4BZcHKEUuUBcsc2VEaOIgSJkaMixXoZ5RXmnRAa46Y/f16DzM/PxFKiy
1y7xXmGFdQrtuSj8Qu2TKm5INVf1+sITr7N72YE7HB6KMN6Jp/GhubAHBgtm
FfAJP8PxnmVdGXNXpJFrYJ5I8/FJ+vb/PYDv9w/QiOKbahDaoQUH9yilQ7Tm
THQpYCfEI1lCqkdXoNtPKB+F35Y8B7zCUgQakTDKB5NyGoPsxSzIioC3fBYw
FSxWQYkUA3io4LwL5Js1bHF05WJdgqT1dqFRjg2CkysBCcPsPL4pWkbK+QhZ
FHAJb5jZ0Yej6gNBBnxfoG1uUcGAXKScpH98XzOZYFFn56c1hes4lX8I9/kC
OKromSVX3oCR8cwroPHV5Y1MLLKiy30kHCT7E5mkNCuEmMi0GhcUeIapnUaX
diSCTbVa6+4dkU3c7bKsr9zNYwuXGrtkMpvXiCpwwg+KcpqsMHZy9pKKD+y0
jw5G9JxVFA+AJ9fn8mOCPQQh2inscFLkFxLGoHUXFCPrCLPoPQmC8K4UtVhz
9RZYIqKDV7FIBON8GNSNQHIbYasf8tLTfQDyA4qodh+u5gBDLP2IQhHayLUX
bH4huqQp84vJV1fkZv+GwQpiX5mzqRRxiuMz1IXFEQKe4RFMADqUAzkpWN6m
IgXq86LyBCafjmAp0V0g+JUzKYDRnlhz+BS8jEsukKQ2QjoSBDoqqh/BCZQ9
bJBG0lQvm0mFBTc2EUd2U+wNfPc3S3ldpQ7OBkeFHrkr4EU/caTuINlBDcc7
yH5WkITCLCD2qPHgJSDUATIEe9PLI/ScQzrKkQRwcakbvSLxmdX+ec7GK9ji
IuKLXxYnTL/gerU+5/RygfZhtjnT7FLsc1FQQQuyB7aTt3HAh/clRBHkmqmY
RF1qtuVnyINp41wjHnWPKZ6kp5gUOIPg4egTxmVJkbVkHG/xuwLOCGXl+VxK
5kk1fxqz0Qx83XHnpwkH0KgEE0JEcYBtYBxzWizSrBcYDJ3jEPkBv/HwvvEy
c/1NrtcqjsRekIMPTzNsCCeU1ES0ie9NIK7WWn+B+fQyVp+MTMrp86HIxMEa
VPAJuB77vPg5R7XxMbxhiA0uETpHUxRxcZdASsT9tROL24oXBTlyOEgAQ/Qz
1yXiej4D8Z6LrKFdkixg5eUVW4ekNAQRWmKXJqSZjpaWg/U0NPJQI4VF2oAn
0R4RE7H9+/ft+dT+6vuzuS+nI2JcWv5CZAa9mR+gUh3YVg8jx1Bp8ae2f9+e
ishR7hw5ktXFP9Cx4QLsS4PsdOls1SREIcxkBjIzkYxhdTrWBv8iE6omRUhj
S/eOsHB1w3gCBFlqz1HDJ0axd8UXcMfYQIDg1e3Bvg4Ah7m/wZxrpLKbEYtx
0Oxk6awbg6pA/BoMLG96AU1J3jCkKr5yWgpKZjVY0QV4oPQ+ZyHtYPDwx8f3
1JzqVed9Aq5vVmZDy3grPOugI+EsFGAnMS34chaIBrFM7CqLcKAhaS6izzsF
vKICwsYR7QhHFEKs3lH3PRGJXUNEqGQBfLjn1NUAje9bk0BMzVgt6vg77MGY
kvYDAuRYZAwRNndinSaqI4hSOtU/RoTypsYDOptIaUfiZ2gCXWMiDEibaq7K
AGgIRAKkHJB0Ci43ilLCBEmbKbQpVKoXR3dWrh4MTpbQi43s0lJ08BPAaZYt
XPUGNBg20mXHJj30Wt+npRiQHJheKbqHDktuGUuswxOZYFSvdu3f79GZzFsm
1dZOD7zRunL3aCAlgzhMoiUIt0pzOiizO0JrTnOBpsCf6JMG1C2etAGJou7j
yNTsS2ugTjzugL19wsmMvZZ+KHkDznwkvoEZ3sXZ5WSFDSJ70UjBrp4rQ8z8
AQU60mBPpZqJXQtWMssXs9YSedJTV1UlNWftNRrRdVIajdW5Nqg11XRWuqR6
QjhWb+hduqmfrL6gz4Jt/K47y+sV4q7UQzOVz62aGNwDOihi0tSlyqmYTo7w
JKHnaVviYtNAYzKxMWxbt7yXND25GlMUWMxlMsj7Uq7UJIkEc0DQo/vuIhm5
PDIyodbxs1ScneZvORpqgcdBnHUuxXjUzCiqtxbNM6AjdZkaTjBHVkcOcdoI
7AvU4+ElblcDuANj9KkWtUsUQ/AEqiEM9A1zGw0cxxU8zkEA/Lf/WZf94wkc
daM2L1ZJkTpPVH5g8wTXEiLKVF3uPt+7h//wr1ylKDeFJMjrN0MSn3348Lia
TF6VVf8A2Ao3pSocl3eXj90tLvoJ+TOoDYPOz4UKNBY8rI7YjDGqB4km2EY3
3YZeQN+wmnHZfKH+N3W4RbNI1TcRqNjdgclO1qNnJSOZkUufCIYAKEKBnh02
5ZzN8CYmKqowyQ7Sh1kXRnCaRVKymusFZvrpo1KfrpK/12tLRGG1MokVusna
5E+aZe/7zpKamIqx4RAlCkem4i3uDx5mU4AzlZtat1GQLpx87kVFNFR62fyR
dza4Q1khjfqLnhZHRcrJ9kEqw5teuyqDLGa6kIdAyEQQoTWk1kqzJH+lZ7DC
VHb41WYJiiNRuSRLNs5d+UgMlEQPOVLLt0BusEHZVTkTFGCcxQNc9NhytwYp
KPXTM1xM/fPVPiPHpSSy4DVelEPfcH7KdRn5ctdBVJLWYHKWbLme8yWGPmyU
/i6Wk4kuu7wm+2otvrYtZb5WqU9283gCZ+YLFELFevvso/WYc+g8xKtEsvVS
mBaKDZI0uWLsjCJv3lUtQabOTvfpDpweeNMWCzPea0/KoADLuxh2T/fvnh7s
dV/fOyAfcfaquGT/tUZAIos+VxYdpQkvisuPGKRNDy3Mm92u5pFqhDEVbBJ6
R9orxmTFWcBk427VkR5z3C/fDistsJtVcgBZasybHGMNCLGXtfJpci4H4DR5
bFGasy9xhfTNlCKzEQZKzWoUWIC0tCsn6TctEadlP8YPUDARaRlF0tllTcEP
L5ZNqLEJETeL8sHWaDRL2DqVF0rFO5OpRZmQOfpbTAKObcDZzpsaSIm49xLi
WjLu08lLoqE7UVqLW4arIrsiZtCdo+WONgolN+WKKXe6a+JnbXZ8gIdBYFPP
G6O/qNuUTUMUkbyGY3to6lZ9mmRUrM77AzLTW6QXZtC1wnKowwOXcZ1T7MtC
AoXjw6xC4b3wrSG79HgSCK4OdvY4THYnydoFJpMyJJEi3imDd7uvAbwBddBk
NaYCT4h3dO3Em6sCMM4nDsOh9Tus/8gBki7GXMkH0wt8BMM361btSe46Mu97
YsKXQFMUKTR0kWtsHRYpRq+bNHfxfsNSSv+xQ8O2dCGsdmfxDb4HUwaYH04q
Qe1uIro9OQUbS1YbqWPLOXvNwjskhe3IT8P3F5QesmESWcV4O7zc6xdJAc6o
PKtLb+kBxFIw2/E9J7GL4PzuzRQl6BLpW+xxoU3jKYhq7hrjahIGhAsYsqqJ
xx6XkY4oYrgke2kC4LfIUZ7BkLLdeoI1Lic321+SO9lrQmqW6nm+D3cQ0fvz
0RCuxGMNpkkfZzFzMQ8Yr/xiVkgCtPfo1xR5mXMcdmp3TBgN0iu0dxpZW1Hv
OMHLpE8mshlzXQ88MK2kMyiJCSuiCSlowDIjSkDRqt7kYA8ThxBH/MJ2eBc2
m2irTE7ZjdZatd+6HHRf0NV1IHKpOZIduaKbLect9JF6r+x4xCCifpJOO6UG
EcrN3uAc2qBQu58ynX6TaArk8310Azv3d9alja5OQfqr7kp6+EYb8p2bV+zj
YPC3ziqFnf8V0kpbx3J2uu5k1mecJo/sb3RghyI2uVymFWdEnS4012xajTlV
dsvc1v+b3LlFciezmVWUf4bSjchmKoElBLDVOfwB9RbCnUz5DOUur6wZ4WE1
HbcJob6qsBUcIpHOiiTtov6B+8HWKlhZEqDFDEO1E5ir7N3F4NKeg2pDeCzK
2/dcJQXPKrW4rr0GLDyovtI12+p2VyaQYwKnKrzI3dBoI5VZAlGNyyqARBGq
vq2m7ynkcz3OvPzFXvlLCYRlZTNd1GI9TmanKOT8TZEyELM+I1qG4tv/QYgZ
bGwDaqoGnMLP7VT+OnCK+MwPk+gm3xrOz+FOr6U5xBi5+aqEYqukalKxWrDs
d78pxbhtr4jyiwFOJr34r38lOdd/pbauEnyQ5O8sKpJVlfAcmqI/6jBE1Kh5
LH/YEto+C82arToVllJFaMBIoKjEl0FUmrriLzmGDGULp0erjo7aJRuFuU0q
m5vjZZJRhhaFko0s0tt6QjKlWNFjhYzDmKmrUWD0CuFASB/ZaLLdvA4NQBJR
wkmYdB8N8hPc2RMaDLRHGQjyzadR1A3U1HW0+rWlHThkNdjiqloOyXH/g9DB
4CiFDm5Vf2UFvw5R42/HsSX1K23Gq7BMyLjoP6Oqmh884fq4pdZP5fgiK/Df
gi8EV0LN07+lgEIxW07V90EVKF1Rg/Mn3//45PnrX17/8eWTX356fv7yycnZ
07Mnp9m32f1v0g+9dFUPWt+dvvj5OXx7kP725MWrJ/DtoamYEFV2SDC8sLpD
ivvtpj5sV37wRWzTz6+rCLFmBr+++GH/Da2+mDMKJcpI1AFEeWoaMZ//Dmj6
4UHPDfpd+51tlhpXovDVJBAdWsn/VERAo/+icgVkGlXfwSA74V4m6GSi2PuQ
HjdS7pTajXSoNEILYYLZQ5MmFSpYCwV4+ZV6q7idGjaPatBrWJNm7YUAHw5t
NwQLZHL+trhRVx/aQTBGwvnBgmDK8NoGcGTPI7fxqKq3yzlQoQn9IiRImjfR
R12OFrtYzsY5joAhj8tyQqMOJXWXE16+qLXmLTrTxThKrTi14KhpSlip9BDJ
QBTpaIty2v6iLIk4j5B9zBIjoU/SJgaBEUzssujxY+xUg1YTDitxOoaEwPve
1JFXCm+r90kZcHnfDwJSPhNHCdb9K6n6A5dXjkReynLyrXbkK9ek0dW3oe7b
7bVHowaJU8iR5KglIbbTOZ45sGBdAIxDl1qyTh/jAIFU4WWpbekHMDFkez0N
3tXwE25I1vYVHZOrIL666qARxqSlYTlSHsXGXbrCZfC5Wwlhq2GXez2YKG87
99xMdN91Qy53ZhZNSn6/kUZVRBFzZRhXZd+qFjy+HTlXcZrHvVg9pKkh2hNn
V952OodACwcSV4IgjY/acOnSIWab5NPmipNILO7FkYI1p5Pk7gVx+rtmpVrn
lF18gR16kP2YkLsA2YalqSluGmC7staSw0PXL1GF+rUJg8DUM8B7xEPqSF00
EWmVHuF146ShdCFPLFndSyIcphIqR2qVHZg5ERTAtVsOikEwCKCn87+5E/HK
U0ocROkvujS2nihOF0q7UfXf1DKpfHEtrd5xAsqMnC8o2YxujnentboNco1Y
QYVvnPOW7krZOMmmwZiQciopbJMb46aQSt+g7LXm9fpu7M5L7yS8twDzNadj
bAtwdyhSxUvCCQKgnSLbMQKt1+w9IYrl+h9KzzZ8CLGC3KOeGuxROG9EAONl
r9Q7w50vXRe+SvrpMpLEyENa1/PifbPluHxDiwQWOkWDtZEFZuwX18nIijRu
k0FjuxMjiG2CO1Vo4DufitSpUvQyPIB4ok+FvWng50PouOX3kP5QVzXN4I/k
AZKcNTe2NaNes5wMHQr45IYjAjboPJS8Rrn8fqFxWkSaADqE4CsunpJIPkmJ
JY+kWaI5AB1U+l6UrnSWmFCoc8A8H70t4BH0WS7QPNN4KUymcYG2/GwQH+nl
v9zVD3OV8evlwlXGWeQXVASZxMjKMHiaaRimCgywcSv1yO0fur6twP7e1RK4
kaghy70GUzClqyRl8UTLCZpkdjq3qmb8l9mwnn9D+vJt9soUuYkmxFCSxM9t
J9W1Z11DpVU/2CjOR/+48bOTTbibWhOZV8OxkiMFJMDIiGakUxt9suVILQJu
6DZbRfHTmHrfUqsZQQLtNHMS07C4EJGPzkmHVVFHmQ73DKakC64FweK86PfS
Y4OqmlC0sn9Q6gyKzaiuJpR1TjOYhsomcAPlHTUbBJ5BEVRiXBVP+CYSRQxf
xw2Yu4ZssbrhhguMUpx1oXyarsfSRppJBFn77TRncBES8UGPYEtSBl+5mZUB
OD8abV0OrAHlDqUBn0oRk0zOuGACQqwSGY6oVmZjxJsVZqFVj4BFcnKzebeC
PycUsn7Z6TzVo8zf0kEVUv5qtC27EcwZYfAZ2yucThxoJgKlgU4dUlijN0sP
bXQTIJ5JfhHChjqamA2J7LBkh8ZIxiV9v64yjCGj+gSU3kST+WOguNVQT6f8
JaolMuGILAm4F/s3TE2ngsRcO0eTV+CS6/qQhFFOkZb727cBmlz9hRqVwO8C
yXEVKh+kH58QeJmfJaBbo+HpvCCjiCAjGVRwEcUEDQkz/abdtINMHar0husT
g8Hj4ioH4YVT5EdUQEDQq2VKsK4B6VuVQnshP7WoclpvzxCrCG/qVY6tFnFJ
ypMtbSCf1e/QlaoXD/VzLZOtEe/x1IvVLLUO+AY5u8gS1hP7nKYLSFdnbCkl
k7T2mSaiob/E78MnBDBp4LEXXcLgro9VTz8VpilEnbrqwMQ6NDjQeBdhPKTD
jNgIZvRmubDvysl4ROBOvkLVnkB6vcDky/F4QWUYlH79xEP8LEOgZrtwbcTa
iJl9uKOzYcB04LvE1eiXbiIukVdw0BT3sjZmmyjqnQ9OC6avAAuFbBXv55Ix
lZ7UVRiYSOqvSNE2algMOO6lQabS5oOWtFmlyh2+Axxseb6EiqUirqLjMsst
HZZ779fimhKayPvlJFPHuW79kRkzePrnNntC4CrG914rTMbZ45vEg+b7M4TX
Bqn2U2TalEz86Q+mJOLbbOfUM7Mdh2C7nLFjQqfRELe3Wn725KALDx0H+BEI
AAaFjYCckrHh5LS+Y7CoINWBBI9673f1cv7d/u/u4T+/cpF1ONk26ztN7Cu1
yC1hJ0NsD8BYXEzpF3DCDMbW4Yah9QaOB58Zju1lesXkgSomPyUIcuznYCKH
Gsj+HlwyKf+eU4agypy+AWIY+u+dKY5vFe/R0jr43XDxXedg5YCJDYioEACQ
aXVo61Y9icmx0p8fmByzK/15NetT7M65LkvSBdfwt1XZmTRgV70N3cAeowVy
kgIxJR5y+D7yqih0HjWwU03hccZhbqEXuATJhipeJInwCc/ATadWcCDyLDBb
zc4Vx7bRQuxsQ7GTWBJ3F4vmCi+dAk2KkkVoScGKiWslmQJPHJPUFx3rIWbo
XKZOZHKu0pb9tm29lejup/pKat09F7TvHX89BYGDW2iW5pgtFNO/0bdJpuY6
GAoQ1UhTwYwJiXLFpkJdcpfox56N4XBaIwpGqjZYE2wrLxIXTsbG1sEGN032
8dtOisKoogNqmVniDyg5z62X0jYr0y4iZTrUjM69+Mx/1XEnYlC3Ou4AfmtP
OzRXrD3kIOiAND9b/ZiaSeQ3rnISXnm+6enTj+5nco42IoUACRFpC+p7wrNt
R3Jzp8t0W6T3NxPYP0idfAs/k7WkldkS4SWau6F56Wzdcm/qRlj2Z7vhsFB8
4UoeAf0JqzaK/0zti9YDTM5kM0rMDjm3wYxgc4HsXSlrnRF5dyTiS+XHSUV1
ZFaTvXUsg7iFqQhEg+EL6y7W+gE7lGwyn/dHe6LpDG8kG4fZnqt1hzu8kozT
MAIjcFxylVYq6sKSA2DuaLlAz/WJlvAjg1Nk4LAZ6zjFZcXFLmi8/++//fc6
EfGbCvWQbO4aJ8VKMq42O/k6S9C1OERTrCVaKQe1Uq1KsLLLdq07GQU7IbzR
YJ0o7oSMFBfViHxXMFiX8qy6/XGFZRu1uu5AwDauilobxaIbQ6J6w4exleyC
Hy39k4Fn6IYwo5iNFjdzjd2hFgHVHKt9T0q6n5KeCaNSPSsiG6NKo788BPAc
A4iY/XAQCnb5rtnSJBBalFh+I3VArNuzzwmfwgMjoxqWRsHUNGooLK/Uqq6H
siyjpjardkUmp/msnC9V308gjLsQWGoE74pvQA2f0OXxY2AbaszRzXYofx9W
tZPtqlS659Zaes/WzVaLoMbiOe89MsQxBrs1+aH6bhhc1WuyX5ZAXLS9egR3
tG+dFrNSrpDyxd3T6hwW3jT56G3d02oW9Ce1y4YNEeLYqtELH8MR5Zm7ZY6r
uj+a72mQ7o+6ahPi4pvDqhWJugAx33KH/iFxChI8x/ii27WwSyQCUP0flpcT
ODXRwodqBQp0pDz0ZPi36wa7mRg83MUWL6hCubd4zriDNtMzX5kG1s9F7Ti+
bCIB/S6+o2e7zNKytJgTe/Pzxgd9zyqt6RQXbOdSUeRs9t5yU3xvl4uw4shU
EGhPFsT1ZKXSPnvSgG/0GTPFqEvyj5Z1v3FVyzWvBZWlGZb3wvCIUQE3p6w0
aFFb0LAwhWmHALJS5OPgjgeQ/XTUcgqpRa/UhfoYETesN0aOd1f8RMMVtbI5
EqB5MRPZwFAHFyDnsWYbgiBUMuyxIvyDTon4slPMOF7u/2/vWnfbOJb0fz/F
wPkR0SKpy0myjpITgLr4co7l47XlBNjAkEfkSJyE5BCcoRXFCnAeZBfYZ9lH
OU+yXdeu7pmhKEWbC7BBkIhkT01fqqurqqvqK9D3yAAZevqQmxV9sbDsqMGM
47BV2vHA/uNsgqGE07zKsUJiDt7MHkWxjvMfXDPShalWAp5dbjoI0kn3P7pw
qXWnAxcsDFKHgmnu5BIUiiQ9fIbg4qV/9jz9MetBrRt88pVNXnZsAe7SDZvX
2oNfevQLPtHEEayTROjWjWLVZxh0WM/GoT+rDf15MPSPdsy/YNTnNIXKDzTS
5Nh1/mK8/pEgWghoIAKxRjM2wDnb7/qLU1SMHFF6ucZTQEwOuKuhMMYxiq9j
ZANZs0zKJxbGLSHv1begjprD3SdsU8co2XRemZ3AZcrlDMH7tJNATB7zs/he
AB6rKV4M0UBRdYDKhVJz0IyAB52iyvs/QOEoE/eXYdY5FU8Zc0kuTOGJxWe/
1kfqIabQUKixJkKLapFO3OOjK3KtyTVfNyoIVkKMjOmRcfi0vRPKgF1xhLes
nC7CG14HGrV9l9v7IPr5AahvyDEyyp/YZ6isKKotHRSKLem72bcHqoTBsEiA
pMSscqT14ha7SkGh8alENe/3O1BNd5guS1lZs9b4HI5LsqtgbEmAo/gQouTw
9By8eRjm+NMSF1hLfNAlYBMupOQ5A7J8KMsK3uVkoM/Op13gd59myTJqgHvN
ORZMMSwom8AWYxbB4ilBF7HiugDGuaMLcDjA08BdK0P94VMu6M9BCjwF2OEh
Y1qbsgJ0/YU1eOtLNE3BMpjquXQWMbEjeTw4kPgPnp+y1gYzHRaC9sNwAHnl
JY0oDsH2sDzu9dCokxeCzxOW9f6AGUxdMCMzhsuKufZSkOBMUKuTaTRQDD7g
+0aaYd4R6BRgXre9pWV18lhjNczR9Kb5aProzySS7NLDHAFSSJ1pNlrUEAGz
rRgtuRyNO3gl3QzlScYgPqwx0ZAzruU5jrSHMqN7TBynj54BklSoMi3VK9yl
7AxxXwV0sPAwg8yh36LKNAEix6tyXDm0pwrQPpaE+jjKZsRe7tCVe2s3m89o
CbvUEyk0eElOek5TSMNkNtxEKddl5nFoDWGfupKSPpqEyHhfeZdgNDa/oTj+
kB6nlDoEeYiz6lQopu7HguQnBmtTwQ+P+QeNyU4ZSL1EZWdM3nZr6bjDyZIr
2W2j7NxxGG02Tvlz5+YST2A3bW/yaT5JFxNaEmRGnDpguYSQGWpnBisRhqdg
prtG40CDhbTv2QeKBUFNAXehXWQ4AU5eO9HgVmwU4krDokMxEViarqQJfICw
LbCWxFumteEmbkIBwmKIfUuHeNLT8X0JrwDTGWqPXozFlVAt54KhBNOLzhkv
xLoUlcqcA+hZVcoRR4Lvl527Y5CL+INHlnKY0S7FQVN+7DnZdFjiFrFBdZbg
rdVVP3mWcTY0QI/BPRwZ0ASMt6SSz7gewJzwomLpDuicK/EyVBGH83zyP/8t
OusL0FmPSWf9WFNW2YxlnRbFQVCph4A+/NIvTGIbOytDGdtXd5q/YyCDHs9b
n200JrzTsF4R5etRmvcsk0U1J7xoYWXXHLXeZ8R6M9ZqDvCr6y/JZ4LSQu7U
faz05keKSwl+RWJzLNYP/FSyHzwvazM1X2BCjXfTcxUDqa1nE5Q9ZGk3EhzA
P1LwTSpqbux0nJHlNtDIGdKar4NQXFZDgMnY2O2IyCK+hy4DXXP+uL5C4P0V
bfImHFOn+yzSoQIbxmeXyctD87yPtUhmkFQSsEu5HA5xOK43yGMMFmInLm2I
JyObE2x2ngC1BHHixd9CLLenZdq9BJ3V60eZ/CUtwvmvf/4nFixz4/vXP/8r
iIwx+jvj0HkFEmMQKy1X7/kTVbu0trmNK5A2GmAOF5NsRuQx+IlpGjbx8a6B
0ueVuuWcdwUrdbUhu7ehC57OdC0ZWNsQWN9hhvB6FIHJqhtQQgASj6ndZNhy
+rsYtj4gq8miNcFZpFoJ++Wl7HnSafOZCjV1uCcEMGtqYFCqL9nBs4ySUKlp
WL6C3k9zI45r4zbijFCfjwuJBIBwzOqEaga2S5FBT/493PngB4S7Xe0CtwJs
0WLWK+YVgiXT3onc+nk5XGLoFSL3KBxsadMEwuMYPrFJjHV1cqcy+Fcb6bkh
N7Fqp7lOehcuWa0IEdXaU38DUkIVbDa4+XZjCseTVInnOG7xbnquMjK2IEcv
ipoPcjrinvIFhUXA+HhLCb2N5p8zpS3ONlwCYGKfBicKuokU26D5VMelbGlm
DWI0WG49eOAqFgwgT4owtUo1QMqgzJFWbkgtVFcsczco0U+2fMfXi2wp6gEP
BLdq6H93Nk+XTVTZYlKUJJosQgCDWYxmmucPGIBDO1oTnk1OPQhRfyElXEFM
kE8TNPnPJxD5K0cKB1hG3jDyApSZkoBFQdGER0lZni8nkkTr+SgvKXmVA7ht
eq5cxqisFDQHRYvKXQemGFX8vFI0TbFhQYkk/lRjJ1XfkC6OMfnc/532Ufr3
WchBaOw4kXhsqrKYbRzQOPQG2frE7Q4G50YX8TQz9Kxb8C4VSow2gIetrG4H
w5/bsujBJsH65WqAdaPiy1o4nacFABUrcFTxfodxL8q6jYeB2I6XPxS5RMXK
jn7w6NHA2S1LYooXOJKXfiRBdfRHjxIMJKNkf/U56ELVeEJv6hjyLzOQJNVl
0VFTNzLaBCS+Du4YYgvC23Bilghbn1d6x6o2F1UUFg0sR4AAcXijYTO+KqHo
uaRIx4UMQnc9DYPrYodIEzVp1aAxW9MeNggEvgh4AHPnOJ3JTQ7fQ4mHVeuk
+zd5nBCpJsTivebmDDMo6r0nKVE70YgzBMoOsBkI1CT7iUpCEiylT0P1IJyQ
4zdc4ibnzJwmxjCnezWWjJJRZmYkX8ic4DGJhilUgmfrOxgo6g6hmxHP1wWb
UCqQFUfdlnsQv1wZoM0w2irdx33IxF2SSdlpPCm7DMyxkDM6EC8IOe51AUms
tv5SKh0Nu97tJvfQIoG616C1tmDzkvMI4XzJTKn823FTf+cOnLFTb5MB7lPZ
uoPoMmKHFTNE7oKpg91CBVsKnv42PpZbRLdizgruFee9M/YQsVVK0kufGbqT
aomKXtiFXd4QUqMNvAQ23OmY4J6Pdz9t31MAGz9FjRhtGzIGWUgc7/DzLBLI
qKwiOQDcTkG+DDjDlptABhPakXXTdMU3Q5xEWUyyY0be+86NAjvV3On4aaGB
ZGzD5RbXm2CRB7X9KeV66+8IhWTTixA/ooA3YOkFYGA5RwpCOwmDfRHhMeJb
uspiXF0scI4+eS7x75V63CpIM+yjgi4iJgycc3w3DKHG5l6IJKyc9zoJTg/0
q2F2WJ0YY64GowSRh9oyu12iYhnP4z2HUREz7502DhkTGYfZz+zCNw48Sxwd
WrB+mINCkHQTuFACSXeReS+TPGRMf5xJcmOabzVWxC8x5tXTiR84dPWCD33X
6sgkrR3HsejWiGFvF5mbhqH4WOH8iftV6zhyu+0n3l3QYY13ZJhqdFKgbxRk
ELh4Si7RThpG15lf1bgYcaoQykggcykCTrzTEPKQZSMoPpW8YsDJRAQ9pxJC
+BpkKHIhEjcovOaG64d0EpHFSLiZONHqwyqX5ZzFmHvLcuZtKAJLBBg1dXL4
JTDGJB02ZdHjfLNoSMTIjjAsIqp8JiqMgh5qgTws7sHwp9Abdi7eJrIAjr+c
Qrj4ew7xCOoS9UkCKNOGTbnsmIZqEG4o6tV4NxIHwiRcfbbuYpSsSrLgtH0a
F/NcYaiVVu3GBsac6iffFpPlFMJth06+vVkjBirlXQwnCQqQnEAW8iEYvXAT
ZXZy6SdDQvkmTmjxPUA+nYNd4xbwQ2sv0NkAiNVAeJwuy0rPJQMpOyO5FdaD
6Xr1wisL9tLKiEJWleX2kSYTETyzkZGJHvHFCXm2HHuErmPZ1lzpoVqVgriv
CPyolwIu6gwjX6UeBEtOQfvj5NtaDQgWdHxUkygBgFXkLLO1iArX96lEEJK8
xSMAaiM6CRevtjcFYd+Lx1CmnV0beKFG+FdJBQZKlRBaWZcdMmWDR1daOFkL
EUKkB80UrwyDRcWpTW37ySuxrLgGfpsP1jAMjtwtBwM56eylvpxA3V9HBu15
PqEd1nWmQtHD63284XHSraStU/yYE9C1rqeUP7JrKr4/qkGHJzGgVfQuFlTm
RF9kV0wBmuBmT+vUgZwAFQc2zxOL+BiKm9evDvwxIV6vAA/Lawc+eIyhNz3I
ouRRoKYh9FrImHRu0o24WOGQasgAcPmshC22gPjLUjabxrRTdOoSUwgQemoS
JOajVlSO4diUirnpGSgqjn/ckbCE28n8ZwDCZqQdgsWzEwFGWkns7/vZUsVJ
ioiSPuC0LieifubYED5g3bmJDu0zUHh+YE9qPpHbvorTphdmKZ3auqWAt3hH
BaNmYEP0SChYq59lUrhYkwMPLOyz0mSMQFGvIAYgVa8J5G/FGRpUytEwz56t
cym3/lJHm0IG3wfueD6eIc4Fnbb+eDKo4a4NMwVoCZprTycNjfgCLZyFv4DE
ICwzEHY5oXHfN51cv+B3Q7exTw0uObYA8CtKvZD0RgyZwEsL4y3ViOpxCPxp
z2DJ09gB9WTAdYrCMBnZ8HTLJDVA8WTgoMRztw1MLKLGlUQ8Gx1GTVztq62M
nOpaXFHBtjTAdiQ1j8MfEMZ3BlhJXI/b1xwh8+4snaRo3RHUNcMzS90BvBFa
Ytopx+qzHzwnBEiGd5ZWUYojSTK8/iUBihc+nyTPBy8HtfwItJhHxXCJsgSK
SM0KapnSWcKhXLJqQlGWDkQMfufB8Nh/ie64K7o2kBqu6BAbatDWLJ2nV66X
V041mCJKKmcaLPSSiDUC1lPQwCzOq0sUy+C5cMoOHXkUeSkkKdQLIGvzixny
1LuNcVXNy72tLTfasp9Sw74jvJXNtjByq9rSM3krL0e9tOwZAlsUFQ8XEyll
FPhhkT8JtQJkI9kt0h3WNnjyyrIY5qlkPfR6PccOwx9hiQbDH2fFpdtstA8e
fNyjycxGf314nk7KDPJ5jzGPhA7OiwJofwcAsU7b3XesmWy8uXQGb/IypfpW
yb5r2Okmx24XjHO3vk8WWe4axV1xTf6efXAMdpxdzeBqtbHJ35Zw3PWTp+nC
fZm8WqRO29s4OnmW/IfTiofjDt1bvy4gXPxFOl+O3a8/VWAoJS8Zh5kKJ0Lc
V8ZhRIYFnclDNQXRH4Sx7BdwlMJVAYTkjdwBNwOzbJFfRC9GZxzyD1C9WDpb
Z8Y34OfOnjtD4+4MrCkCF8JCGspopmzbJfXA6UTZWeWvJzl9Bop/F3NK3HIm
Bnq3ZZ3hXb5PXdGUcugY7CeQf7LC3DPWpWT8XC4Xu+lfKrnlrzhg299+ix6L
5zj25fuDZ28HJ7u775IeXXJC/jBFzEMozAJiXkyOXD6bLysOf3V2KBvyin82
WrhDkZOspBdiIl6AkjB49dzZiJDdlf7SzK/h7dKwGGUcnCp11DAOdS5Fxj1m
U4bEnaBoLMPGd+Mwr32uRN5ShnxrK3k7g2nHa/hsqjnY8OPNBcrh8bmcTU0P
mYLlru2hue5vaB2WMHftD0wVqob2vqg5FBNz7VEEwcTkXjNjv8vKIjfcmJa1
sEY7KEreGYwb7wxFNbyuTpMefRikjYkZ9FDRgR9EpdepwEtYdN2R12Lmtgyi
99qSa63Smo5UkwoftuXaTYn2uCy7/8UUYHdTWa9nbsut4zzbNPSez7MN1mrp
puGLz5JyMWQQu4AXTsa1TOkbCI3KyhPa/aq5p1JtHR9cURbe9eAFlymPqk9J
izWrxnPJeEfv2O10vU6uVToXwzx6E89EvQK6/NpcCN3uZNjaRGyNovW/1DYK
qrJmt5i0bbB84dfmLVHj43YIAcPNAWyExwGKfUxUgLDOzr8GfaC5+U283wY7
8P/M1cRc62IhxLwT2Yieb/YZAgsreKeCiKVlzEIuocYb9L86J8j3zUsePFXr
AMVRTTl2FMoURsDc1IuG9azNTdgNnA35yT4eiNtsBtrBSKbruY/gk3gOtPFA
OdE8BlJgqF9nV1Wmu+wUAgADaXw0I0ccJntkUZ5BwLADQh51CtZpxg+1SGPT
x5oY4ODrghHkAZmAD2oBapEbFn5AnsdkR/MkFitgXMgw5AU43rVwZuN0HmwH
/RbVBJ5XDi30Vjelf7gGk3TuZlYIOHPUceff0tkSbqV2usnOl/+2nbw9OaBX
0Enl3xCfeDtf9M5yzxmI9UmAF7p8x4MDHhLbQXIE/mXXr9+oNumyLuEhTaCX
wK6yuSV1i0JCLM4pgckeEz2hksuFEnjP0Bk2iKFn+/oqw3XuQSHRgqPrfpIW
9MjGHNTdjhsZdbs/zlJn7566Y+gU+3l9DVYrmlzZ6BTOIX4kJtfcKvmrNpB/
5mU/2BLX101NPKt/v/Ou39q5tR/1U9XwUL/fv4FQ3vsVvbAPaz/s/KG62sfK
BUX/w04/4AphqJitl7NVnGbpksp8SgqEI28E3lsmcgQ5tSV6LpRuC7d7JvR8
HyqSdUg4Qq42PWP1skFHDUkFASXBowaoObBfTsbmhsTpOstJusCrWvP2Z8Wc
Nq77/pQy7gSnCUj8Y86+CoWaRT90IJIhBYJoQCMjlj/zIwGLBENBTt4GEmVa
LV3Dz+vvy3QV1l0/s27+YUf8i2DldLy6YMfim5ecnEyDAvjqQW+3dcoQehin
jDIW7aq5Icr5lTM+OVytBcPmH05p+CFv+els4ClcBirNStn24lolU0xur1Uv
ohtRoVMLiArYCFevgQ1fM8Jkhlf6Ct9NgYk5XGI1dkZfGvVJ5bKJkbyhT/pS
y91mnu2lfTDP+DhNsufpWyx4+3p/FnMVNfFLVoOmNxMW7HtuGKhDaz6byaN+
Vh7jAS9qhVFXivNzUHPiuNwyUoiETqS78Hw6eqeo9wTz6TQGXHkTwkbzWBWU
UxFlqFqVcJoOdTbJSSSnwmBy4ZSxajy1viKFFjcHfioNmREJPhxCjDGQByNp
2H3z/OnLwcnb10engxdP//H6+cmz41bH0tHBIWcqvnk22P38i3YK0HJw+p37
+5Sahmtp6fzl8Wfr0nFNg4UN6Hy+s7suHddUnVSqIQeHqk7vEXMNneqUAA4K
llmu+MAP5ER6abOvI63MKMqFxFe5bQ9XDrOA8/i4izqhKWhJIUeEV7OQ5QJD
Q98bS9dnRFbH7LlMhBd3k3aHz8nG2a7zprY4VTYMJkUPtHThNuYixVNy0dPg
BDSOo91NY7DZSKeumWrdMWU/2MCqMbv3oiguJllfHLn9EzUQrKnQcOq3dHqa
VWk85fJdcO6/oFtRMFrDxSKtCJmCgu/Z/NKxYOipsQLgqo3zzlTQxHyq59DP
2aJAELBZISTi9694tZpSTuBFqvwpX/OiykK+rBfFZW+CsKN1bwYx22BGKmLd
QiYvrtpabDBzotIY038531jSxUCzWcwws2XkOhpyNb+Igj5cG7Oxi6HZ2OUy
r7S+j+Ge2OqzW76206XM2O2IsdAI9+S3htP/nl05q/TjKs2Yt/jyDCIUajuD
H6oWw1Msd6d8bX4gc1LPHbyhgGK+5/mF63tvZyfGGandq6BRiReKiCTyiXFO
8i0vB3K0BeDRxczZiouZpqf49eCTJ7/ov799fhDEFw3TxSL3TB37TFEq472A
RB5DuAeHESMxFM4cOvb28BXuLv+D+2ZLs0YpfJqZOjW/+Q4lOEtpVSyCZBZy
nnHeLiqWG74Gpdwcd6QcAScVphoflkOlznzGgaq1SJdSit2YwIfIF2pzUOlC
y9+DnRVFBT7DOeHVKUCxW7DJ1d6DB4+Sl0GRGoi+g7s4iPfoOSWnRxF3gocQ
JpxgfgloQhqHfWYgKTnswNfxotwRvH5EPKRHGCYgbSNiFBGnKcNtGMXi4yZX
lxbbRNbwEXhUqoFXGW97uWYQ2RMGCNZ16pUM5jzlykVhdBa6jWfRrPWTg0mO
VoqBLeVkPrQ4kJCEhOeL5pw+npMmOCDGOJeCuZRR7SljlJPNpsIBQgUlXwxX
IoyG6ZTexD2GCgohF8eT7EvnXjFGB4WKPzR426C9P0w25CzEcH+Kz/Ghiu8P
T7YOX7zn0jgaUDKdQkFOEs1UYAEGu7O1TeEWMYRjh4NFODhnyOUag56Yrcfx
aSF2yiOCcSO0I44Qx+daCnlDjF5ykX/A4kYQQjLEyVNfOgvV1/pW8X2DlGN0
Pw57gaC9KQR/lZ1EoNAYKIn7EGyhwNMH7IGzRYckOf+IZfHyYo+F5Mb2T9s7
Hf4VJ30vech9dIu0fba9s73dQYKMkRFRPCyrZ0VZwY/w5LcHpwdvHiLZ7e1d
ehAEau2hV8Wi2ku2YX6Nz+CMyj9BMLjPao2wQhX7hX2kOO22TZD14sGlqPss
mDTESEOapk4GCVaHxg5RyKEPP/DM0l/Zc4sEo5dWHgYG+q9VcoWSHYI5F+bo
EZdECGImjsFr4CUPQodRXnzbIbHPtgKkjxkm20L7we9Q5EFhNpTR0F7zVR7C
EfmQn8co0hK0oryEzkWHtAR8Y3oIRL6LfkfBN+Smc3tAArxWRmjQLl1ObBFn
3cV4xUq6cgtSvMRnPIDYbPi62c/2Faq6g/YtO4Uo13RymV6BbKw0Ahc5HtSP
iwWVbQA6VrAq07mn8CAmW9HteR9HiCChLHgBsBfuQTB8ugxnOgwY5mLvCJvb
N5dDLSP4+Ev7GJl37jBIfvIPMMogMgFuwpZzYOHMhMzz2Ss4ncxQ3eh6Q66W
KWzHPyy3KkkPGT56SsJ80Dmj1g1U+rqYFWyF8ej9fS/EcEKs+om85Bvb2fhe
U1v5Qb4Si1XFGE2phSQZLvJ5VSz6UYf9/Ehb2jG4TjBAHW+y8+Vuf+eLx/3t
/s7e4239+vvd7e2dvdHZ4729nXf+B/39OC9R9aDRbKHVSmJlC4oaYQIYfozn
TH10fKngpw6OvmyxgPoJ2IgmUEcgM1YzeHbF4BFDx3POCpsHC5IwPNQRBV6X
bNgM2wybwpcUz7SguC19gIGIGOlX4s+XRQAxl8l7ANlGQM5GOW49zjOPMzpF
P/GPlt5WJ2/Cx488E48F+Aljjymtlx9rhl+jNG8outT3VL50VKhsK+2jsJsa
WdhQ8SFpQ0TX9xx6NHt938528EJLt/byBmh0pf2UM7728YQ74MIiK+CbqZDi
ETZ/Um9ugTz7AlPgqGOpfBtQ7GPQQVOEpGPX7oD9PpQOEIrNGBIHSzMd9JOH
oHJBqPaoZGxpFJaZtxaY+1cCV23C3klWN3lwnaz459r8t63JfVFo6OdmRKG1
CVHgt+AC2ddfx38Gza7rFGoDaKYQNhEKfderPn7Pf62kQG0CChuub0nScT+4
v/bpr/Z/XJsnrk3Yh/dupj5F+u6vzU+D2fJ9kJ5im3gefC+v8W/+fjN695F7
t7RZj0I4D+97m71PqWsRhU2LoHaNf7fww7VvFfBDUu9DElGIm+lz90lB52zz
rhSuW5v9RhT6vc3N/s0UXDPm/ZiCY5VDYpWmZkrBNXsqHL8Z9eF9T5gamg2E
WtwH0yyJKNh/TLO1ZRQkfew0/txOAZ7ZRQq/XlbHCs9j0XdOREewF5j2/JTT
v486T3R0bPrervul+erBtVZos0ymEGoB58nhed3wlVmk8Jk3ycag0/Dlfidg
RfjqoKMzvdk0ijW+pKFt4tDw86Zp39TD1V9SKNF182/rE8H+KE7l5g3tW4hc
lxYRuHHjr0EkQBK+I5F7GQ798isnVomIKb+xnHda268kUt+936zPPNqTr5Ne
L/z3DkQwU/AKxtL9ftD7Zv9d5/eb2D8KEV1gUO67j7qP7jAn97PETc2j7u23
dW8lkXW7t7onX8cM2MyBq4kQB9Jgvt/vfXPwrvN/z/bM9Te99E/HsRA06Tj2
8A/BsXJAbtZk9y2ItB9FtyHSehT91sOR5uuu+5qiANd9v23d/2SiAAcDu/Lw
BlHQTKTp2/sgEk72AU727Sa2CT8cJnsVlfrEOoFX+6YXUmHxhh1dMSt2ug9o
ug0RXIFuQj/caWrvR0NZr30LkVB/tPv2NposlX3Q6FEvhn7rntAv93Bo3Iux
sn77NiKbvbqp1fil2l+N3z3wmy0mFH+5+rua5fylvymIHcsKFUrF540Rzciq
xuV82AAnrfkKXplLfnL/dsDne84okPM0X0TZ0w2UTM1A3vSO0KESCnFSLQho
K9g11fS0I0CPQKNDoGb2h1+0fqo5BGq+gNAP0Pqp5hCo+QJCPwB9Ogo+Pen4
TRoNbTMe2mYwmKZPDxp5/oYvok9Ao75Nb0+jLi9uSWPTCK52obWaBnxGTc7+
dlsaGtuUz+5Mw6uBd+7HfcxHcg/rIjQCh8RdaIRaSYP6t04/vr5B+1t3Pkh3
aWi0Lg3ry/hd1+VeaMji3pmGeDE2druPOvfJH6Znt58P7dh+c8fWo7Gacdfs
x0rGXZNGYh0Kd5wPVLiPuu4/T9511qNxL3tuVdfXpbGq6+vSWPXIn4/Gr9+3
qMjh5ug+/R3lunxuc3/chkabM+dWNFp8Ofc1Fr9w6+7b+BtauSNYtTvJsdBN
UJNqLTS+XuUkWJNGI/PrgXzH+WAHw1Hvm6exP+dW/Qg+mVW6Iw3q1hNapTus
S32V2hYm8oJcr1ymO8+IWadIspNFeCMNXqcntE4q2WHduvTlev3wn+5ZM2xt
dCMNr7FvtjW6kcZ1Il6g67ZGN9NQI/zuNO5jLMn9nHT3YZ3e9MiNNGreohu+
aPvk3Rr2uRVftH2qh5tu348T6Wk9xrDZheSUhuSnTuRHslVt1QV0gwMo+B0D
VJp8TfS6bvL0dg4nCniJ/UxP0c/0v/PZPYNCLQIA

-->

</rfc>
