<?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.29 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-liu-sidrops-rrdp-delta-retention-policy-00" category="std" consensus="true" submissionType="IETF" xml:lang="en" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="RRDPDR">RPKI Repository Delta Protocol (RRDP) Delta File Retention Policy</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-sidrops-rrdp-delta-retention-policy-00"/>
    <author initials="L." surname="Liu" fullname="Libin Liu">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>liulb@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="Z." surname="Yan" fullname="Zhiwei Yan">
      <organization>CNNIC</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>yanzhiwei@cnnic.cn</email>
      </address>
    </author>
    <author initials="L." surname="Chen" fullname="Li Chen">
      <organization>Zhongguancun Laboratory</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>lichen@zgclab.edu.cn</email>
      </address>
    </author>
    <author initials="D." surname="Li" fullname="Dan Li">
      <organization>Tsinghua University</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <country>China</country>
        </postal>
        <email>tolidan@tsinghua.edu.cn</email>
      </address>
    </author>
    <date year="2025" month="October" day="20"/>
    <area>General [REPLACE]</area>
    <workgroup>SIDROPS</workgroup>
    <abstract>
      <?line 49?>

<t>This document updates RFC 8182 (The RPKI Repository Delta Protocol) by specifying an optimized delta file retention policy based on client access patterns. The proposed mechanism allows RRDP servers to maintain only the delta files required by active clients, reducing storage requirements while maintaining compatibility with existing clients. By tracking which serial numbers are being requested by active clients, the repository can determine the minimum serial number needed by any client and safely prune delta files that update from earlier serial numbers.</t>
      <t>The proposed mechanism provides several benefits, including reduced storage requirements, smaller notification files, and more efficient use of bandwidth and processing resources. It also maintains backward compatibility with existing RRDP clients, requiring no changes to client implementations.</t>
    </abstract>
  </front>
  <middle>
    <?line 55?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The RPKI Repository Delta Protocol (RRDP) <xref target="RFC8182"/> defines a mechanism for publishers to make available a set of current repository objects, and for relying parties to maintain a local copy of this repository that is periodically updated to match the published repository.</t>
      <t>RFC 8182 specifies that repository must maintain a set of delta files that allow relying parties to update from any recent state to the current state. It proposes a size-based delta file retention strategy, stating that "Any older Delta Files that, when combined with all more recent Delta Files, will result in the total size of deltas exceeding the size of the snapshot <bcp14>MUST</bcp14> be excluded to avoid that Relying Parties download more data than necessary.". However, as the number of existing RPKI objects grows and more are proposed, the snapshot file size increases significantly, requiring more delta files to be stored. This leads to higher storage costs and potential performance issues.
Consequently, practical implementations have adopted various strategies to mitigate these issues, such as count-based limits (maintaining a fixed number of delta files) and time-based limits (retaining delta files only for a specified duration).</t>
      <t>This document updates RFC 8182 by defining an adaptive delta file retention policy based on client access patterns. The key insight is that repositories need only maintain delta files that might be used by active relying parties. By tracking the minimum serial number accessed by active clients, repositories can safely prune older delta files that are no longer needed, while ensuring that all active clients can still perform incremental updates. This adaptive approach can be integrated with existing size-based delta file retention strategy <xref target="RFC8182"/> to provide a more comprehensive solution.</t>
      <t>This approach provides several benefits:</t>
      <ol spacing="normal" type="1"><li>
          <t>Reduced storage requirements for RRDP servers;</t>
        </li>
        <li>
          <t>Improved efficiency in delta file management;</t>
        </li>
        <li>
          <t>Maintained backward compatibility with existing RRDP clients;</t>
        </li>
        <li>
          <t>Potential performance improvements for notification file processing;</t>
        </li>
        <li>
          <t>Better adaptation to actual client update patterns.</t>
        </li>
      </ol>
      <section anchor="requirements-language">
        <name>Requirements Language</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>
    <section anchor="background">
      <name>Background</name>
      <t>This section reviews existing delta file retention strategies and illustrates their potential limitations.</t>
      <section anchor="existing-delta-file-retention-strategies">
        <name>Existing Delta File Retention Strategies</name>
        <t>Section 3.3.2 of RFC 8182 mandates that servers limit the number of deltas in the notification file such that the combined size of the underlying delta files does not exceed that of the snapshot file.  Servers are free to further limit the number of deltas included in the notification file, though.  Two common strategies are:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Count-based retention</strong>: Maintaining a fixed number of most recent delta files (e.g., the last 500 delta files). This approach is simple to implement but does not account for varying delta file sizes or client access patterns, and may lead to frequently downloading the full snapshot for clients.</t>
          </li>
          <li>
            <t><strong>Time-based retention</strong>: Keeping delta files for a specified time period (e.g., 2 hours). This approach ensures clients that update regularly can use delta files, but may not be optimal for clients with irregular update schedules and may also lead to frequently downloading the full snapshot for clients.</t>
          </li>
        </ol>
        <t>These strategies are typically implemented as configuration options in RRDP server software, allowing repository operators to choose the approach that best fits their needs.</t>
      </section>
      <section anchor="challenges-with-current-strategies">
        <name>Challenges with Current Strategies</name>
        <t>While the existing retention strategies provide some guidance, they have several limitations:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Size-based retention</strong>:
            </t>
            <ul spacing="normal">
              <li>
                <t>Does not consider client access patterns;</t>
              </li>
              <li>
                <t>Can lead to inefficient storage use if many small delta files are retained when they are no longer needed. This issue may be exacerbated when the snapshot size grows along with the number increasement of existing objects and the addition of more new objects.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Count-based retention</strong>:
            </t>
            <ul spacing="normal">
              <li>
                <t>Arbitrary fixed limits may not match actual client needs;</t>
              </li>
              <li>
                <t>Does not adapt to changing repository update frequencies;</t>
              </li>
              <li>
                <t>May discard delta files that are still needed by active clients.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><strong>Time-based retention</strong>:
            </t>
            <ul spacing="normal">
              <li>
                <t>Does not account for varying client update frequencies and may retain too many files during periods of frequent updates or too few during periods of infrequent updates;</t>
              </li>
              <li>
                <t>May retain files longer than necessary if no clients need them;</t>
              </li>
              <li>
                <t>May discard delta files that are still needed by active clients.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>These challenges highlight the need for a more adaptive approach to delta file retention that considers actual client behavior while maintaining compatibility with existing client implementations.</t>
      </section>
    </section>
    <section anchor="adaptive-delta-file-retention-policy">
      <name>Adaptive Delta File Retention Policy</name>
      <t>This document defines an adaptive delta file retention policy based on client access patterns. The key principle is that repositories need only maintain delta files that might be used by active relying parties. This approach would not like to replace the existing size-based retention strategy proposed in RFC 8182 and can be integrated with it to make RRDP work in a more efficient and adaptive manner.</t>
      <t>The policy consists of three main components:</t>
      <ol spacing="normal" type="1"><li>
          <t>A client tracking mechanism that records the serial numbers accessed by clients;</t>
        </li>
        <li>
          <t>A method for determining the minimum serial number needed by active clients;</t>
        </li>
        <li>
          <t>An algorithm for pruning delta files that are no longer needed.</t>
        </li>
      </ol>
      <t>By implementing this policy, RRDP repositories can reduce storage requirements while ensuring that all active clients can perform incremental updates.</t>
      <section anchor="client_tracking">
        <name>Client Tracking Mechanism</name>
        <t>To implement the adaptive delta file retention policy, RRDP repositories <bcp14>MUST</bcp14> track the serial numbers accessed by clients. This can be accomplished by monitoring client requests for delta files.</t>
        <t>When a client requests a delta file, it typically does so by first retrieving the notification file, identifying the appropriate delta file based on its current local serial number, and then requesting that specific delta file.</t>
        <t>Repositories <bcp14>SHOULD</bcp14> maintain a data structure that records:</t>
        <ol spacing="normal" type="1"><li>
            <t>Client identifiers (e.g., IP addresses or anonymized identifiers);</t>
          </li>
          <li>
            <t>The serial numbers requested by each client;</t>
          </li>
          <li>
            <t>Timestamps of the most recent requests.</t>
          </li>
        </ol>
        <t><xref target="data_structure"/> shows an example for the data structure to record RRDP clients.</t>
        <figure anchor="data_structure">
          <name>An example for the data structure to record RRDP clients.</name>
          <artwork><![CDATA[
| Client ID | Serial Number |       Last Access Time       |
|-----------|---------------|------------------------------|
| Client A  |       42      | July 10, 2025, at 12:00PM UTC|
| Client B  |       37      | July 11, 2025, at 08:30AM UTC|
| Client C  |       45      | July 11, 2025, at 14:15PM UTC|
]]></artwork>
        </figure>
        <t>Repositories <bcp14>MAY</bcp14> implement more sophisticated tracking mechanisms, such as:</t>
        <ul spacing="normal">
          <li>
            <t>Using probabilistic data structures (e.g., Bloom filters) to efficiently track large numbers of clients;</t>
          </li>
          <li>
            <t>Implementing privacy-preserving techniques to avoid storing identifiable client information.</t>
          </li>
        </ul>
        <t>Repositories <bcp14>SHOULD</bcp14> periodically clean this data structure to remove entries for clients that have not been seen for a configurable period (e.g., 7 days). This helps ensure that the minimum serial number calculation is based only on active clients.</t>
      </section>
      <section anchor="min_serial">
        <name>Minimum Serial Number Determination</name>
        <t>Based on the client tracking data, repositories can determine the minimum serial number needed by active clients. This is the smallest serial number that any active client might need to update from.</t>
        <t>The algorithm for determining the minimum serial number is as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Initialize min_serial to the current repository serial number;</t>
          </li>
          <li>
            <t>For each active client in the tracking data: 
a. If the client's serial number is less than min_serial, update min_serial to the client's serial number;</t>
          </li>
          <li>
            <t>Return min_serial.</t>
          </li>
        </ol>
        <t>For example, using the client tracking data from the previous section:</t>
        <ul spacing="normal">
          <li>
            <t>Current repository serial number: 50;</t>
          </li>
          <li>
            <t>Client A's serial number: 42;</t>
          </li>
          <li>
            <t>Client B's serial number: 37;</t>
          </li>
          <li>
            <t>Client C's serial number: 45;</t>
          </li>
          <li>
            <t>Minimum serial number: 37.</t>
          </li>
        </ul>
        <t>Repositories <bcp14>SHOULD</bcp14> recalculate the minimum serial number:</t>
        <ul spacing="normal">
          <li>
            <t>Whenever a new delta file is created;</t>
          </li>
          <li>
            <t>Periodically (e.g., daily) to account for client tracking data cleanup;</t>
          </li>
          <li>
            <t>Before any delta file pruning operation.</t>
          </li>
        </ul>
        <t>Repositories <bcp14>MAY</bcp14> implement a safety margin by subtracting a small value from the calculated minimum serial number. This helps ensure that clients that have recently become active but have not yet requested a delta file can still perform incremental updates.</t>
      </section>
      <section anchor="delta_pruning">
        <name>Delta File Pruning Algorithm</name>
        <t>Once the minimum serial number has been determined, repositories can safely prune delta files that are no longer needed. A delta file is no longer needed if it allows updating from a serial number that is less than the minimum serial number.</t>
        <t>The algorithm for delta file pruning is as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Determine the minimum serial number (min_serial) as described in <xref target="min_serial"/>;</t>
          </li>
          <li>
            <t>For each delta file: 
a. Extract the "from" serial number (from_serial) from the delta file metadata; 
b. If from_serial &lt; min_serial, mark the delta file for deletion;</t>
          </li>
          <li>
            <t>Delete all marked delta files;</t>
          </li>
          <li>
            <t>Update the notification file to remove references to the deleted delta files.</t>
          </li>
        </ol>
        <t>For example, if the minimum serial number is 37, delta files that update from serial numbers 1-36 can be safely deleted.</t>
        <t>Repositories <bcp14>MAY</bcp14> implement the following safeguards:</t>
        <ul spacing="normal">
          <li>
            <t>Never delete the most recent N (e.g., 5) delta files, regardless of the minimum serial number calculation;</t>
          </li>
          <li>
            <t>Maintain delta files for a minimum time period before considering them for deletion;</t>
          </li>
          <li>
            <t>Implement a gradual pruning strategy to avoid sudden changes in available delta files.</t>
          </li>
        </ul>
        <t>Publishers <bcp14>MUST</bcp14> ensure that after pruning, the notification file still contains at least one delta element, unless the current serial number is 1.</t>
      </section>
      <section anchor="integration-with-existing-size-based-retention-policy">
        <name>Integration with Existing Size-based Retention Policy</name>
        <t>The adaptive delta file retention policy described in this document <bcp14>MUST</bcp14> be integrated with the size-based retention policy specified in <xref target="RFC8182"/>.</t>
        <t>The integration <bcp14>SHOULD</bcp14> be implemented as follows:</t>
        <ul spacing="normal">
          <li>
            <t>First, determine the minimum set of delta files required by active clients using the adaptive policy;</t>
          </li>
          <li>
            <t>Then, if the total size of these delta files exceeds the snapshot file size, remove older delta files to ensure the total size of retained delta files doe not exceed the size of the snapshot file, as required by <xref target="RFC8182"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <section anchor="server-implementation">
        <name>Server Implementation</name>
        <t>Repositories implementing the adaptive delta file retention policy <bcp14>SHOULD</bcp14> follow these guidelines:</t>
        <ol spacing="normal" type="1"><li>
            <t>Client Tracking:
            </t>
            <ul spacing="normal">
              <li>
                <t>Use efficient data structures for client tracking as described in <xref target="client_tracking"/>;</t>
              </li>
              <li>
                <t>Regularly clean up tracking data for inactive clients.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Configuration Options:
            </t>
            <ul spacing="normal">
              <li>
                <t>Allow configuration of the client inactivity threshold (default: 7 days);</t>
              </li>
              <li>
                <t>Allow configuration of the safety margin for minimum serial number calculation (default: 5).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Operational Features:
            </t>
            <ul spacing="normal">
              <li>
                <t>Provide monitoring and alerting for delta file management;</t>
              </li>
              <li>
                <t>Log delta file pruning operations;</t>
              </li>
              <li>
                <t>Expose metrics on storage savings and client serial number distribution.</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Fallback Mechanisms:
            </t>
            <ul spacing="normal">
              <li>
                <t>Implement mechanisms to recover if delta files are accidentally pruned too aggressively;</t>
              </li>
              <li>
                <t>Consider maintaining an archive of pruned delta files that can be restored if needed.</t>
              </li>
            </ul>
          </li>
        </ol>
        <t>Repositories <bcp14>MAY</bcp14> implement the following optimizations:</t>
        <ul spacing="normal">
          <li>
            <t>Batch delta file pruning operations to reduce the frequency of notification file updates;</t>
          </li>
          <li>
            <t>Implement predictive algorithms to anticipate client behavior and adjust the safety margin accordingly.</t>
          </li>
        </ul>
      </section>
      <section anchor="client-behavior">
        <name>Client Behavior</name>
        <t>No changes to client behavior are required to benefit from the adaptive delta file retention policy. Existing RRDP clients will continue to function as specified in RFC 8182.</t>
      </section>
    </section>
    <section anchor="priv">
      <name>Privacy Considerations</name>
      <t>The client tracking mechanism described in <xref target="client_tracking"/> involves collecting information about client behavior, which raises privacy concerns. Repositories implementing this mechanism <bcp14>SHOULD</bcp14> take steps to protect client privacy:</t>
      <ol spacing="normal" type="1"><li>
          <t>Anonymization:
          </t>
          <ul spacing="normal">
            <li>
              <t>Use anonymized identifiers instead of storing actual IP addresses;</t>
            </li>
            <li>
              <t>Consider using techniques such as IP address hashing with a rotating salt;</t>
            </li>
            <li>
              <t>Ensure that the anonymization method still allows tracking the same client across multiple requests.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Data Minimization:
          </t>
          <ul spacing="normal">
            <li>
              <t>Store only the minimum information needed (client identifier, serial number, timestamp);</t>
            </li>
            <li>
              <t>Do not store additional information such as User-Agent strings or other HTTP headers unless necessary for debugging.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Data Retention:
          </t>
          <ul spacing="normal">
            <li>
              <t>Implement strict data retention policies;</t>
            </li>
            <li>
              <t>Delete tracking data for clients that have not been seen for a configurable period (e.g., 7 days).</t>
            </li>
          </ul>
        </li>
      </ol>
      <t>Repositories <bcp14>MAY</bcp14> implement more sophisticated privacy-preserving techniques, such as differential privacy or secure multi-party computation, to further protect client privacy while still benefiting from the adaptive delta file retention policy.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The adaptive delta file retention policy introduces several security considerations:</t>
      <ol spacing="normal" type="1"><li>
          <t>Denial of Service:
          </t>
          <ul spacing="normal">
            <li>
              <t>An attacker could potentially manipulate the minimum serial number calculation described in <xref target="min_serial"/> by repeatedly requesting delta files with very old serial numbers</t>
            </li>
            <li>
              <t>To mitigate this, repositories <bcp14>SHOULD</bcp14>:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Implement rate limiting for delta file requests;</t>
                </li>
                <li>
                  <t>Use anomaly detection to identify suspicious patterns;</t>
                </li>
                <li>
                  <t>Consider weighting client importance based on factors such as reputation or update frequency;</t>
                </li>
                <li>
                  <t>Implement the safeguards described in <xref target="delta_pruning"/> to provide additional protection.</t>
                </li>
              </ul>
            </li>
          </ul>
        </li>
        <li>
          <t>Information Leakage:
          </t>
          <ul spacing="normal">
            <li>
              <t>The client tracking mechanism could potentially leak information about client update patterns;</t>
            </li>
            <li>
              <t>Repositories <bcp14>SHOULD</bcp14> implement the privacy considerations described in <xref target="priv"/> to mitigate this risk.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Consistency:
          </t>
          <ul spacing="normal">
            <li>
              <t>Inconsistent delta file availability across multiple servers could lead to confusion or errors;</t>
            </li>
            <li>
              <t>Repositories <bcp14>SHOULD</bcp14> ensure consistent implementation across all servers.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Fallback Reliability:
          </t>
          <ul spacing="normal">
            <li>
              <t>Clients falling back to snapshot updates more frequently could increase load on servers and networks;</t>
            </li>
            <li>
              <t>Repositories <bcp14>SHOULD</bcp14> monitor fallback frequency and adjust retention policy parameters accordingly.</t>
            </li>
          </ul>
        </li>
      </ol>
      <t>These security considerations do not introduce new vulnerabilities beyond those already present in the RRDP protocol, but they should be carefully addressed in any implementation of the adaptive delta file retention policy.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC8182">
        <front>
          <title>The RPKI Repository Delta Protocol (RRDP)</title>
          <author fullname="T. Bruijnzeels" initials="T." surname="Bruijnzeels"/>
          <author fullname="O. Muravskiy" initials="O." surname="Muravskiy"/>
          <author fullname="B. Weber" initials="B." surname="Weber"/>
          <author fullname="R. Austein" initials="R." surname="Austein"/>
          <date month="July" year="2017"/>
          <abstract>
            <t>In the Resource Public Key Infrastructure (RPKI), Certificate Authorities (CAs) publish certificates, including end-entity certificates, Certificate Revocation Lists (CRLs), and RPKI signed objects to repositories. Relying Parties retrieve the published information from those repositories. This document specifies a new RPKI Repository Delta Protocol (RRDP) for this purpose. RRDP was specifically designed for scaling. It relies on an Update Notification File which lists the current Snapshot and Delta Files that can be retrieved using HTTPS (HTTP over Transport Layer Security (TLS)), and it enables the use of Content Distribution Networks (CDNs) or other caching infrastructures for the retrieval of these files.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8182"/>
        <seriesInfo name="DOI" value="10.17487/RFC8182"/>
      </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>
  </back>
  <!-- ##markdown-source:
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
W4zCzMZLr085bAcAtyNQ4pqrsTZhPBIWX8ZfkdVIvD5kcPCw393rCPAfv3C6
/sLLN/EL454ZXvMLV333T8M3ogeA2NnhFl13SEoci7JKQARKfkSMh2hcqQiR
eRvXMSQ5oEilzlZ7tgbVJAV6Rc4gVi95qlM15Ug3X8Xrec5u03K96Nh2HZLL
qRXFd+UMCkp9afWEW91sOtrmpR5kVqvmyoNo0n65bES9dVi1PCejlFVCKTtn
MpRZDbC7UlVEomLq+sRarYPJKOS+doI6CbDx+RlP+5MTIUPkxzzZhnRzoAe7
hACL6dfq1U8LpkCB2krUfYNyLrrybX18TDqN7crpg9QWfmw80UY0XVOwXug8
e4J3eN5gzh5N0So+fv4c+agvHTBtdtGA5vkvrKq83i6dfre7HD0M6wUFjivV
qpJkXe/spBNG4miU+K6Ft7CT++4UTkaKDM4B7Bn9qWwXEka0iv2uoP3JInd/
YaxhJaWaKuBoYqmRW5lLt91Qr4Xeerrd8b18s7+9lbETxBwNX/6LD0mdRrt9
fA1iuGpR+NoBjZ3V0gdeQ/GBkdPOtRb+fPAo+XqvXXkp1QxzsEoX204akSnr
CPrSWC5z6CaIS0cTi7I+Qegc4qJ94y2Ci4lmpUwpi+htJWSrGmpbpyl1rLlm
SApRQ8Nh91avm+5EziTEcCqn1Mng1tnfVGNleMQRbAcnhsGNQMRFgCNltw6X
nzuQiHr4uopz5NH0wuXWaCFOroXiclRF6U9tPi2Z0saGdjODb7vrJvh8n95a
ytBN2VQIGW5Ch01APh2dylGBieoWzmLc4xz3e0qU7G+kx2s9lptbqyPaFWRk
9+7z6XfccOHsu922aBvf4oVsddxs6ALc9yDT00ZVNJrWXSZUpToF+XY9fkPD
pM0YybYMujfxrDEoexVjZ4E2l+400Nb1O6+uoVEnJflE3XN3b2/aCZbKiYqa
OrpJI59U9HWeTybOJXeD6j5+t+4JuznJL/7+b5qaNAe19bLLzAsq3/VEivCm
41bJ9+PS1z9tFY7P2qkKx2GJn5ZqHpTyxoVmiHhTNZV1Vo180Pvu6/O1WSft
+OvBcLPO6z1fcfvoiS6GvAfRJgH741y7UnCUMeW0fqZKy5ba1KbVssYTXBaz
reQ6FMrOf6EqBFGJUifU/RkS2kZSfsOW8JwM2wdMgZm49aZ7D8zgPWgDdck1
OepwpsbPNIkdnzciW9BtnCF2ibCCUygcdDALTbkaKGczymlCSbKALd7MWrUu
KjqVyZy0CbfnZljjDo4bYEruD+aqYFMaeDI/cL+DiQrziHW4/Lv1JqwMuJbA
87nqKXfar7vEps4ZSxSBLGIzWzf0/Nfmo4AMiV4SNepWBm2d6Gfqql9Xawro
SurcyFadKsSpG09PP/T9KqJZoFQNUnL7HndvNlT2KWh20PjmOLNo++CJGei8
dl1RuW36opa92FX64ppD52ubwuvAMmIoyu198b50c9nra1iHxw9F9kARFDRD
2WA0SvoJOSnqqiusfferoVJqw60gdpM4YGKrntv8AthFsz+H/hUVChF0Lo3r
wK2wFb+qmz5U+VxVgPcXO4L+cgH1YFfUGwIF9ZlOV32O6w1rhunoQZMv9e3t
zSiKS+fa93RIgW3b8NDILGDbeScXKePt+9qipY4uymz1cRu5CPcrk7LAqgtA
M1eSWzUL+JwzckqcgelI55aQovntmfcA8T27cPe59z9BgPvdklHl6yh7TVMI
ExLGo9CmQj8tiOb30sNFlcOTme3OKRmyYXwFtwj+cHd3Lea4K7o2R5Gb7gfr
RSb1jLpNvFviIwfuuw7etEbimEHHWKOuFBdErnv33y07/e2Fha3J++bHFqme
cthqG7adIRb0w7iE1I51ZUidASsumNeWu+3HnZn95uaqwlYzHRiG1MeT8dCi
2C1thrjMOrt8coyi3U/TogZ746dNWtM2WZKchAK7J/6qExXoF2CtqnDXxHu4
OyL08nIDRq6XX8lHtujSlswKUe5SLTkxma3iImvs1hk+cCT+3VUnH+Bjkdav
bnT35xoWRu35hHgRGQCFbLbLq4eJeQB5FwY6HF1ITjtUrjOZ2upc5RmKZ5Yw
HspDt9vwaHhAz0dFhYR2k05RVvxTglCdngKHqaPR6zKO5PSTNLjTn7V613M6
TwVsoqN7E+08Y/vHHQ1KOfX3tJB+dRHh1qWS9+CXoyYm3OJt15UJgcP9Zn/a
+flDE3isp8nbNC7yuDEt6JyfOcKXzi+26MeQ2tx7AB3b5hoScEDPPPEP405o
nzqxnVhdX+Sb060IfDMmIWNt3IWqsizKrYd0gXC0fLu3y69K2T634BqVv0Hg
6DbpDzR2KD7FO3Rh/B52F0Jl377HMBz1BNvD+A5Nwb8nJF/m29zBSXNVUW/T
1mO5uIjX57Ub1hzR2jXEA2rD+VeueaVFcF37cT/+idT644CYXCx5qDP6v49g
ydDeJmpVcPMHBVQywwlTilowb1NBYw67dL/0tV3Y3BoLoZFgJlQWKBV1Sq8C
k2Ldo2pJ5+pcPPoNXuPi5MNJr8eI81NUGsgL+65M2r9sJlkP/g948Y5ujkMA
AA==

-->

</rfc>
