<?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 2.6.10) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-nfsv4-uncacheable-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.2 -->
  <front>
    <title abbrev="Uncacheable Attribute">Adding an Uncacheable Attribute to NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-00"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>General</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 54?>

<t>The Network File System version 4.2 (NFSv4.2) allows a client to
cache both metadata and data for file objects, as well as metadata
for directory objects.  While caching directory entries (dirents) can
improve performance, it can also prevent the server from enforcing access
control on individual dirents.  Similarly, caching file data can lead to
performance issues if the cache hit rate is low.  This document introduces
a new uncacheable attribute for NFSv4.  Files and dirents marked as
uncacheable <bcp14>MUST NOT</bcp14> be stored in client-side caches.
This ensures data consistency and integrity by requiring clients to
always retrieve the most recent data directly from the server. This
document extends NFSv4.2 (see RFC7862).</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 68?>

<t>Discussion of this draft takes place
on the NFSv4 working group mailing list (nfsv4@ietf.org),
which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=nfsv4"/>. Source
code and issues list for this draft can be found at
<eref target="https://github.com/ietf-wg-nfsv4/uncacheable"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/ietf-wg-nfsv4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 79?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>With a remote filesystem, the client typically caches both directory
entries (dirents) and file contents in order to improve performance.
Several assumptions are made about the rate of change in the dirents
and the number of clients trying to concurrently access a file.
With NFSv4.2, this could theoretically be mitigated by directory
delegations for the dirents and practically by file delegations
for the file contents.</t>
      <t>There are prior efforts to bypass both the dirent and file caching.
Access Based Enumeration (ABE) is used in Server Message Block (SMB)
<xref target="SMB2"/> protocol to effectively limit the namespace visibility per
user. In Highly Parallel Computing (HPC) workloads, file caching
is bypassed in order to achieve consistent work flows.</t>
      <t>This document introduces the uncacheable attribute to NFSv4.2 to
implement ABE and to bypass file caching on the client. As such,
it is an <bcp14>OPTIONAL</bcp14> to implement attribute for NFSv4.2. However, if
both the client and the server support this attribute, then the
client <bcp14>MUST</bcp14> follow the semantics of uncacheable.<cref anchor="_2">What about mixed modes?</cref></t>
      <t>A client can easily determine whether or not a server supports
the uncacheable attribute with a simple GETATTR on any
dirent. If the server does not support the uncacheable
attribute, it will return an error of NFS4ERR_ATTRNOTSUPP.</t>
      <t>The only way that the server can determine that the client supports
the attribute is if the client sends either a GETATTR or a SETATTR
with the uncacheable attribute.</t>
      <t>While some argument could be made to introduce two new attributes,
the functionality of the uncacheable attribute dictates which cache
is to be bypassed. As ABE is concerned with walking the namespace,
it is only applicable to be acted on dirents which are of type attribute value of
NF4DIR. And as bypassing file caching is file based, it is only
applicable for dirents which are of type attribute value of  NF4REG.<cref anchor="_1">What about the other file types?</cref></t>
      <t>Using the process detailed in <xref target="RFC8178"/>, the revisions in this document
become an extension of NFSv4.2 <xref target="RFC7862"/>. They are built on top of the
external data representation (XDR) <xref target="RFC4506"/> generated from
<xref target="RFC7863"/>.</t>
      <section anchor="definitions">
        <name>Definitions</name>
        <dl>
          <dt>Access Based Enumeration (ABE)</dt>
          <dd>
            <t>When servicing a READDIR or GETATTR operation, the server provides
results based on the access permissions of the user making the request.</t>
          </dd>
          <dt>dirent</dt>
          <dd>
            <t>A directory entry, representing either a file or a subdirectory. In
the context of NFSv4, a dirent marked as uncacheable <bcp14>MUST NOT</bcp14> be cached
by clients.</t>
          </dd>
          <dt>dirent caching</dt>
          <dd>
            <t>A client cache that is used to avoid looking up attributes.</t>
          </dd>
          <dt>file caching</dt>
          <dd>
            <t>A client cache, normally called the page cache, which caches the
contents of a regular file. Typical usage would be to accumulate
changes to be bunched together for writing to the server.</t>
          </dd>
        </dl>
        <t>Further, the definitions of the following terms are referenced as follows:</t>
        <ul spacing="normal">
          <li>
            <t>directory delegations (<xref section="10.9" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>file delegations (<xref section="10.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>GETATTR (<xref section="18.7" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>hidden (<xref section="5.8.2.15" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>Mandatory Access Control (MAC) (<xref target="RFC4949"/>)</t>
          </li>
          <li>
            <t>NF4DIR (<xref section="5.8.1.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>NF4REG (<xref section="5.8.1.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>NFS4ERR_ATTRNOTSUPP (<xref section="15.1.15.1" sectionFormat="of" target="RFC8881"/></t>
          </li>
          <li>
            <t>mode (<xref section="6.2.4" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>offline (<xref section="2" sectionFormat="of" target="I-D.ietf-nfsv4-delstid"/>)</t>
          </li>
          <li>
            <t>owner (<xref section="5.8.2.26" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>owner_group (<xref section="5.8.2.27" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>READDIR (<xref section="18.23" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>SETATTR (<xref section="18.30" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>system (<xref section="5.8.2.36" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
          <li>
            <t>type (<xref section="5.8.1.2" sectionFormat="of" target="RFC8881"/>)</t>
          </li>
        </ul>
      </section>
      <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="caching-of-dirents">
      <name>Caching of Dirents</name>
      <t>With a remote filesystem, the client typically caches directory
entries (dirents) locally to improve performance. This cooperation
succeeds because both the server and client operate under POSIX
semantics (<xref target="POSIX.1"/>) and agree to interpretation of mode bits with
respect to the uid and gid in NFSv3 <xref target="RFC1813"/>. For NFSv4.2, these
would respectively be the mode, owner, and owner_group attributes
defined in <xref section="5" sectionFormat="of" target="RFC8881"/>.  Note that this cooperation
does not apply to Access Control List (ACLs) entries as NFSv4.2
does not implement a strict POSIX style ACL.</t>
      <t>NFSv4.2 does implement NFSv4.1 ACLs, which are enforced on the
server and not the client. As such, ACL enforcement requires the
client to bypass the dirent cache to have checks done when a new
user attempts to access the dirent.</t>
      <t>Another consideration is that not all server implementations natively
support the SMB <xref target="SMB2"/>. Instead, they layer Samba <xref target="Samba"/> on
top of the NFSv4.2 service. The attributes of hidden, system, and
offline have already been introduced in the NFSv4.2 protocol to
support Samba.  The Samba implementation can utilize these attributes
to provide SMB semantics. While private protocols can supply these
features, it is better to drive them into open standards.</t>
      <t>Another concept that can be adapted from SMB is that of Access Based
Enumeration (ABE). If a share or a folder has ABE enabled, then the
user can only see the files and sub-folders for which they have
permissions.</t>
      <t>Under the POSIX model, this can be done on the client and not
the server. However, that only works with uid, gid, and mode bits.
If we consider identity mappings, ACLS, and server local policies,
then the determination of ABE <bcp14>MUST</bcp14> be done on the server.</t>
      <t>Since cached dirents are shared by all users on a client, and the
client cannot determine access permissions for individual dirents,
all users are presented with the same set of attributes. To address
this, this document introduces the new uncacheable attribute. This
attribute instructs the client not to cache the dirent for a file
or directory object. Consequently, each time a client queries for
these attributes, the server's response can be tailored to the
specific user making the request.</t>
      <section anchor="sec_dirents">
        <name>Uncacheable Dirents</name>
        <t>If a file object or directory has the uncacheable attribute set,
then the client <bcp14>MUST NOT</bcp14> cache its dirent attributes. This means
that even if the client has previously retrieved the attributes for
a user, it <bcp14>MUST</bcp14> query the server again for those attributes on
subsequent requests. Additionally, the client <bcp14>MUST NOT</bcp14> share
attributes between different users.</t>
      </section>
    </section>
    <section anchor="caching-of-file-data">
      <name>Caching of File Data</name>
      <t>In addition to caching metadata, clients can also cache file data.
The uncacheable attribute also instructs the client to bypass its
page cache for the file. This behavior is similar to using the
O_DIRECT flag with the open call (<xref target="open"/>). This can be beneficial
for files that are not shared or for files that do not exhibit
access patterns suitable for caching.</t>
      <t>However, the real need for bypassing write caching is evident in
HPC workloads. In general, these involve massive data transfers and
require extremely low latency.  Write caching can introduce
unpredictable latency, as data is buffered and flushed later.</t>
      <section anchor="sec_files">
        <name>Uncacheable Files</name>
        <t>If a file object is marked as uncacheable, all modifications to
the file <bcp14>MUST</bcp14> be immediately sent from the client to the server. In
other words, the file data is also not cacheable.</t>
      </section>
    </section>
    <section anchor="xdr-for-offline-attribute">
      <name>XDR for Offline Attribute</name>
      <sourcecode type="xdr"><![CDATA[
///
/// typedef bool            fattr4_uncacheable;
///
/// const FATTR4_UNCACHEABLE            = 87;
///
]]></sourcecode>
    </section>
    <section anchor="extraction-of-xdr">
      <name>Extraction of XDR</name>
      <t>This document contains the external data representation (XDR)
<xref target="RFC4506"/> description of the uncacheable attribute.  The XDR
description is presented in a manner that facilitates easy extraction
into a ready-to-compile format. To extract the machine-readable XDR
description, use the following shell script:</t>
      <sourcecode type="shell"><![CDATA[
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
]]></sourcecode>
      <t>For example, if the script is named 'extract.sh' and this document is
named 'spec.txt', execute the following command:</t>
      <sourcecode type="shell"><![CDATA[
sh extract.sh < spec.txt > uncacheable_prot.x
]]></sourcecode>
      <t>This script removes leading blank spaces and the sentinel sequence '///'
from each line. XDR descriptions with the sentinel sequence are embedded
throughout the document.</t>
      <t>Note that the XDR code contained in this document depends on types from
the NFSv4.2 nfs4_prot.x file (generated from <xref target="RFC7863"/>).  This includes
both nfs types that end with a 4, such as offset4, length4, etc., as
well as more generic types such as uint32_t and uint64_t.</t>
      <t>While the XDR can be appended to that from <xref target="RFC7863"/>, the code snippets
should be placed in their appropriate sections within the existing XDR.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>For a given user A, a client <bcp14>MUST NOT</bcp14> make access decisions for
uncacheable dirents retrieved for another user B. These decisions
<bcp14>MUST</bcp14> be made by the server.  If the client is Labeled NFS aware
(<xref target="RFC7204"/>), then the client <bcp14>MUST</bcp14> locally enforce the MAC security policies.</t>
      <t>The uncacheable attribute allows dirents to be annotated such that
attributes are presented to the user based on the server's access
control decisions.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <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="RFC4506">
          <front>
            <title>XDR: External Data Representation Standard</title>
            <author fullname="M. Eisler" initials="M." role="editor" surname="Eisler"/>
            <date month="May" year="2006"/>
            <abstract>
              <t>This document describes the External Data Representation Standard (XDR) protocol as it is currently deployed and accepted. This document obsoletes RFC 1832. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="67"/>
          <seriesInfo name="RFC" value="4506"/>
          <seriesInfo name="DOI" value="10.17487/RFC4506"/>
        </reference>
        <reference anchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC7204">
          <front>
            <title>Requirements for Labeled NFS</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="April" year="2014"/>
            <abstract>
              <t>This memo outlines high-level requirements for the integration of flexible Mandatory Access Control (MAC) functionality into the Network File System (NFS) version 4.2 (NFSv4.2). It describes the level of protections that should be provided over protocol components and the basic structure of the proposed system. The intent here is not to present the protocol changes but to describe the environment in which they reside.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7204"/>
          <seriesInfo name="DOI" value="10.17487/RFC7204"/>
        </reference>
        <reference anchor="RFC7862">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 Protocol</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document describes NFS version 4 minor version 2; it describes the protocol extensions made from NFS version 4 minor version 1. Major extensions introduced in NFS version 4 minor version 2 include the following: Server-Side Copy, Application Input/Output (I/O) Advise, Space Reservations, Sparse Files, Application Data Blocks, and Labeled NFS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7862"/>
          <seriesInfo name="DOI" value="10.17487/RFC7862"/>
        </reference>
        <reference anchor="RFC7863">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 External Data Representation Standard (XDR) Description</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides the External Data Representation (XDR) description for NFS version 4 minor version 2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7863"/>
          <seriesInfo name="DOI" value="10.17487/RFC7863"/>
        </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>
        <reference anchor="RFC8178">
          <front>
            <title>Rules for NFSv4 Extensions and Minor Versions</title>
            <author fullname="D. Noveck" initials="D." surname="Noveck"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document describes the rules relating to the extension of the NFSv4 family of protocols. It covers the creation of minor versions, the addition of optional features to existing minor versions, and the correction of flaws in features already published as Proposed Standards. The rules relating to the construction of minor versions and the interaction of minor version implementations that appear in this document supersede the minor versioning rules in RFC 5661 and other RFCs defining minor versions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8178"/>
          <seriesInfo name="DOI" value="10.17487/RFC8178"/>
        </reference>
        <reference anchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <author fullname="C. Lever" initials="C." surname="Lever"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently. The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol.</t>
              <t>This document obsoletes RFC 5661. It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
        <reference anchor="I-D.ietf-nfsv4-delstid">
          <front>
            <title>Extending the Opening of Files in NFSv4.2</title>
            <author fullname="Thomas Haynes" initials="T." surname="Haynes">
              <organization>Hammerspace</organization>
            </author>
            <author fullname="Trond Myklebust" initials="T." surname="Myklebust">
              <organization>Hammerspace</organization>
            </author>
            <date day="2" month="October" year="2024"/>
            <abstract>
              <t>   The Network File System v4 (NFSv4) allows a client to both open a
   file and be granted a delegation of that file.  This delegation
   provides the client the right to authoritatively cache metadata on
   the file locally.  This document presents several extensions for both
   the opening and delegating of the file to the client.  This document
   extends NFSv4.2 (see RFC7863).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-delstid-08"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="open">
          <front>
            <title>open and create files.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
          <seriesInfo name="Linux Programmer's Manual" value=""/>
        </reference>
        <reference anchor="POSIX.1">
          <front>
            <title>The Open Group Base Specifications Issue 7</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date year="2013"/>
          </front>
          <seriesInfo name="IEEE Std 1003.1, 2013 Edition" value=""/>
        </reference>
        <reference anchor="RFC1813">
          <front>
            <title>NFS Version 3 Protocol Specification</title>
            <author fullname="B. Callaghan" initials="B." surname="Callaghan"/>
            <author fullname="B. Pawlowski" initials="B." surname="Pawlowski"/>
            <author fullname="P. Staubach" initials="P." surname="Staubach"/>
            <date month="June" year="1995"/>
            <abstract>
              <t>This paper describes the NFS version 3 protocol. This paper is provided so that people can write compatible implementations. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1813"/>
          <seriesInfo name="DOI" value="10.17487/RFC1813"/>
        </reference>
        <reference anchor="Samba" target="https://www.samba.org/">
          <front>
            <title>Samba.org. Samba Project Website.</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SMB2">
          <front>
            <title>Server Message Block (SMB) Protocol Versions 2 and 3</title>
            <author>
              <organization>Microsoft Learn</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 322?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust and Thomas Haynes all worked on the prototype at Hammerspace.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAB6zDmkAA51abXPbRpL+Pr9i1tkqSymKeo0t85J4aUmOVSXZPkm+ZMuV
VQ2BITknEOBhAFFcr/Nb9rfcL7unu2cAkJSS1KUqFgnOS0+/PP10D3Z2dlTl
qswO9DBNXT7RJtef8sQkU2tGmdXDqirdqK6srgr9/u31/VH/QJnRqLT3g8cH
qrRIcjPDimlpxtWOs9V4Jx/7+6Oduh2/s7enElPZSVEuB9pXqUrxbaC/nA5v
zr6qpMi9zX3tB7oqa6vcvORPvjrY23u1BxFKawb6J5vb0mRqUZR3k7Ko5wP9
3lb0Tb91EOp66Ss70/9lS++KXB+pO7vEr+lAn+eVLXNb7ZySkEr5yuTprcmK
HEIsrVdzN9CfqyLpaV+UVWnHHp+WM/mAI87MfA599XRSzGY2r/yvSpm6mhbl
QOkdpfGfyyH+TV+/M8scK9IjUczNtJgZ331elBOTu3+aCmIO8AOWLP3cJJZ/
tTPjsoHOisl0Wf5tQt/62FapvChnmHNvsae+entysL//Knw8+m7vRfz46ig+
fXmwdxQ/Hr84aD8eho/H+y+P2o/H8ePx8T59PN857XfsmdrMVy4dKOXycVeU
Ym7zAYsenIsewLVSncBucKYxrOP7PMLb0llPCwz0hcvrB/2xLCYlq+C515cm
r2FhrT9+uD7/pb+/suzN1OoPtPRPZHz9xnjYfG4TN3YJ69Lrc+9rq19ubHV+
dnamr6tU7+/tHfb3e/pgb/9Qn6WOpvHoxpo6WEgm8XdxVp4jGto/3mcVXpvZ
yAQZTTmx1UBPq2ruB7u7i8Wi7+nnPtba7R7jOj7ty0fSwH/bpNI/25F3lSVF
XV++OVg5u7625b0t9aX13kysfpMVyZ3ewrhtmg/XLbLo+V4fsPYPnzrYpUvK
whfjSl9YU+ZK7ezsaDPyVWkSRAfp+bHAuo+B1T/QWwEdtrXJsmLhtdFJ5hAZ
QA7Fca9HRTXVM1sZqM+wQPwBrsMOoYsRnRrxheBY2Cyjv3G4olGpKzEAkBGH
9rX+eUpTaQOCr3YEdiZr6y16hPjcxphcudm8LO6tntuSPTZPbE+7in6D3L7Q
cyAbCw15vWh4XBYzLIfxCSNkkkDlBFFVCRXj+C5P3b1L4ac6bAa5rt3MZabM
lr1GOD4kH5m2y6xJSTcdUbQjb/XajXl/0doU4pUUNM4DAhZY+maKj8CgmoAH
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
M28uAAA=

-->

</rfc>
