<?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.31 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-marenamat-netmod-core-yang-transcoding-00" category="std" consensus="true" submissionType="IETF" updates="7950, 7951, 9254" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Transcoding YANG Data">Transcoding Data Modeled with YANG</title>
    <seriesInfo name="Internet-Draft" value="draft-marenamat-netmod-core-yang-transcoding-00"/>
    <author initials="M." surname="Matejka" fullname="Maria Matejka">
      <organization>CZ.NIC</organization>
      <address>
        <postal>
          <street>Milesovska 1136/5</street>
          <city>Praha</city>
          <code>13000</code>
          <country>Czechia</country>
        </postal>
        <email>maria.matejka@nic.cz</email>
        <email>mq@jmq.cz</email>
      </address>
    </author>
    <date year="2026" month="March" day="02"/>
    <area>Operations and Management</area>
    <workgroup>Network Modeling</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 53?>

<t>YANG (RFC 7950) is a standardized data modeling language. The data
may be encoded in XML (RFC 7950), JSON (RFC 7951), plain CBOR (RFC 9254)
or CBOR with standins (draft-bormann-cbor-yang-standin).</t>
      <t>This document specifies how to convert data modeled by YANG encoded in one of
the formats into another format. Use cases include e.g. local transcoding between Netconf and Restconf
for tool compatibility, or reverse proxying while composing multiple backends.</t>
      <t>This document also defines a data annotation for additional value type
specification. That data annotation behavior updates RFC 7950, RFC 7951 and RFC 9254.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://marenamat.github.io/ietf-draft-marenamat-netmod-core-yang-transcoding/draft-marenamat-netmod-core-yang-transcoding.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-marenamat-netmod-core-yang-transcoding/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Network Modeling Working Group mailing list (<eref target="mailto:netmod@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netmod/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/netmod/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/marenamat/ietf-draft-marenamat-netmod-core-yang-transcoding"/>.</t>
    </note>
  </front>
  <middle>
    <?line 66?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Current documents focus on encoding and specifying data for a simple round-trip
between a source encoder and a destination decoder. While <xref section="1.4" sectionFormat="of" target="RFC8040"/>
at least touches the topic of RESTCONF and NETCONF (<xref target="RFC6241"/>) coexisting at one device,
there has not yet been any specification for chaining multiple encodings.</t>
      <t>At the time of this document, there are at least four kinds of data encoding
(XML, JSON, plain CBOR and standin CBOR) and at least three protocol variants
(NETCONF, RESTCONF and CORECONF). Implementing all of these may be too costly,
and therefore users will tend to deploy convertor tools and proxies to align
the otherwise incompatible data and protocols.</t>
      <t>One major usecase for this specification is a simple proxy to bridge clients
and servers implementing incompatible encodings. Another example usecase
is a reverse proxy used as a single endpoint for a device with multiple
internal endpoint. Such a proxy may be transparent when the user knowingly
deployed it, or opaque if it's a part of a third party device. The user
may even be completely unaware of such a proxy existing.</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?>

<t>TODO: define terms like Transcoder, Composer or XML Round Trip.</t>
    </section>
    <section anchor="transcoding-data-formats">
      <name>Transcoding Data Formats</name>
      <t>Encoding capabilities of XML, JSON or CBOR are quite different. While all
values in XML are strings, JSON knows also booleans and integers, and CBOR
may even use the tag features to encode various additional types, like time
values or IP addresses, as specified in <xref target="I-D.bormann-cbor-yang-standin"/>. This effectively means
that a transcoding node either loses type information, or it must infer that
information from the data representation.</t>
      <t>Generally, a transcoder <bcp14>MUST</bcp14> interpret the incoming data according to the
appropriate YANG model, and choose the appropriate output representation for
each value according to the model. Transcoders also <bcp14>SHOULD</bcp14> validate the data
and issue appropriate error messages to the user. Otherwise, the user may
get confused by an error message proxied from the endpoint, referring to
a different data format than the user is using.</t>
      <t>Transcoders <bcp14>SHOULD</bcp14> quietly canonicalize value representations according
to the YANG model. Since by <xref section="9.1" sectionFormat="of" target="RFC7950"/> most types have
a canonical representation which <bcp14>MUST</bcp14> be used for all conceivable purposes,
it's expected that no valuable information is lost by such conversion.</t>
      <t>However, transcoders <bcp14>MUST NOT</bcp14> perform any value conversion which loses data
precision.</t>
      <t>Examples:</t>
      <t>For <tt>leaf item { type int32; }</tt>, it's expected that <tt>&lt;item&gt;+3&lt;/item&gt;</tt> in XML
gets converted to <tt>"item": 3</tt> in JSON, and by that the value representation
loses its original non-canonical string representation.</t>
      <t>For <tt>leaf item { type string; }</tt>, it's expected that <tt>&lt;item&gt;+3&lt;/item&gt;</tt> in XML
gets converted to <tt>"item": "+3"</tt> in JSON.</t>
      <t>Transcoders <bcp14>MAY</bcp14> choose to warn users when they are converting a non-canonical
value representation.</t>
      <t>TODO: add CBOR examples</t>
      <section anchor="the-union-built-in-type">
        <name>The union Built-In Type</name>
        <t>According to <xref section="9.12" sectionFormat="of" target="RFC7950"/>, it's possible to specify that a value
may be of several types. Transcoders <bcp14>SHOULD</bcp14> perform a conceptual round-trip of
converting such value to the XML representation and back, to check that the
resulting value is indeed interpreted as the same type as in the original
representation.</t>
        <t>Example:</t>
        <sourcecode type="yang"><![CDATA[
leaf item {
  type union {
    type int32;
    type string;
  }
}
]]></sourcecode>
        <t>If the received JSON data is <tt>"item": "+3"</tt>, the type is to be interpreted
as a string, according to <xref section="6.10" sectionFormat="of" target="RFC7951"/>. Yet, after encoding
to XML, the type information is lost and the value gets reinterpreted as a number.</t>
        <t>Transcoders <bcp14>SHOULD</bcp14> issue a warning every time a union-type value is reinterpreted
as another member type, to avoid possible user confusion, unless the Original Type
Annotation is used and known to be understood by the other party.</t>
      </section>
      <section anchor="netconf-reinterpretation-warning">
        <name>Netconf Reinterpretation Warning</name>
        <t>An additional error tag is specified for NETCONF, and by extension to RESTCONF and CORECONF.</t>
        <artwork><![CDATA[
error-tag:      reinterpreted-value
error-type:     transport, rpc, protocol, application
error-severity: warning
error-info:     <bad-element> : identifies the elements in the data model
                  which the proxy had to reinterpret to another type.
                  May appear multiple times.
Description:    An element value has been supplied with an additional type information
                which could not be conveyed to the final destination, and by dropping
                this information, the value got reinterpreted as a different type.
]]></artwork>
        <t>TODO: properly augment <tt>ietf-netconf:error-tag-type</tt>.</t>
      </section>
      <section anchor="original-type-annotation">
        <name>Original type annotation</name>
        <t>In order to keep the type information with the value even through conversion,
transcoders (and generally encoders) <bcp14>MAY</bcp14> attach a type annotation to such a value.
The following module defines the "original-type" annotation.</t>
        <sourcecode type="yang"><![CDATA[
module ietf-yang-original-type {
  prefix "ot";
  import ietf-yang-metadata {
    prefix "md";
  }
  md:annotation original-type {
    type string;
    description "This annotation contains the original type of the annotated value.";
  }
}
]]></sourcecode>
        <t>Example: <tt>&lt;item ot:original-type="string"&gt;+3&lt;/item&gt;</tt></t>
        <t>If the Original Type Annotation is used and understood, contrary to what is
specified in <xref section="9.12" sectionFormat="of" target="RFC7950"/>, the received value <bcp14>MUST</bcp14> be validated
first against the specified original type, and <bcp14>SHOULD NOT</bcp14> be accepted as any
other member type, even if a match is found.</t>
        <t>By the same logic, this extends <xref section="6.10" sectionFormat="of" target="RFC7951"/>, so that
not only the implicit encoding of the value is taken into account, but
also the Original Type Annotation if present.</t>
        <t>TODO: make an annotation draft for CBOR by tagging keys.</t>
        <t>When encoding and decoding in and from CBOR with Standins (<xref target="I-D.bormann-cbor-yang-standin"/>),
a standin <bcp14>SHOULD</bcp14> be used whenever possible.</t>
        <t>Specifying the Original Type Annotation also resolves possible problems with
unions containing leafref as a member type. The example in <xref section="9.12.4" sectionFormat="of" target="RFC7950"/>
becomes much simpler by explicitly indicating whether the value is intended
to be interpreted as a leafref or something else. Most notably, the original
specification requires revalidation every time the target instance may have
been added or deleted, which may be error-prone for development and costly for operations.</t>
      </section>
    </section>
    <section anchor="proxying-netconf-restconf-and-coreconf-protocols">
      <name>Proxying NETCONF, RESTCONF and CORECONF protocols</name>
      <t>If the node behaves as a proxy between different protocols, it should translate
as wide range of requests as realistically possible.</t>
      <t>When the request is impossible to be fulfilled because the underlying protocol
lacks the needed capabilities, the proxy <bcp14>MUST</bcp14> indicate this failure by a
<tt>rpc-error</tt> response with the <tt>error-tag</tt> set to <tt>operation-not-supported</tt>.</t>
      <t>For example, the NETCONF operations <tt>&lt;lock&gt;</tt> and <tt>&lt;unlock&gt;</tt> are not defined
for RESTCONF, and therefore the implementation needs to decide whether to plainly
refuse them, or to somehow emulate the overall effect.</t>
      <t>When a single request can't be translated to a single underlying request,
the proxy may instead perform multiple consecutive requests. If any of these requests fails,
the proxy <bcp14>MUST</bcp14> issue appropriate rollback requests, and properly relay
all errors, so that the original request's semantics is kept intact.</t>
      <t>For example, if a complex RESTCONF PATCH operation can't be translated to one
NETCONF request, the proxy may choose to issue <tt>&lt;lock&gt;</tt>, perform multiple edits
and finalize by <tt>&lt;unlock&gt;</tt>. If such an edit fails half-way, the proxy must
revert it before unlocking and failing, so that the RESTCONF operation
fails cleanly.</t>
      <t>Detailed specification of request and response translation is out of scope
of this document, and may depend on exact context and even be specific for
the YANG models supported.</t>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>Running proxies always adds inherent complexity into the network,
and it may be better to look for tools natively supporting the required protocol,
instead of deploying a proxy.</t>
      <t>For device vendors, running a proxy may be an only solution. If a device
exposes a summary endpoint by a proxy over several sub-endpoints,
it is recommended to not expose the sub-endpoints even just for debug
purposes, as accessing a sub-endpoint directly may break some consistency
expectations on the proxy.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>It's required by <xref section="2.2" sectionFormat="of" target="RFC6241"/> that all NETCONF connections
provide authentication, data integrity, confidentiality and replay protection.
While different proxies may handle these aspects differently, it <bcp14>MUST</bcp14> be
documented how these are handled.</t>
      <t>Specifically if authentication is terminated at a proxy, the underlying endpoints
<bcp14>MUST</bcp14> be isolated in such a way that they are only accessible through the proxy.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>TODO: Do we need to require registration of the YANG module for the Original Type Annotation?</t>
      <t>Otherwise: This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC6241">
        <front>
          <title>Network Configuration Protocol (NETCONF)</title>
          <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
          <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
          <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
          <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
          <date month="June" year="2011"/>
          <abstract>
            <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="6241"/>
        <seriesInfo name="DOI" value="10.17487/RFC6241"/>
      </reference>
      <reference anchor="RFC7950">
        <front>
          <title>The YANG 1.1 Data Modeling Language</title>
          <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
          <date month="August" year="2016"/>
          <abstract>
            <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7950"/>
        <seriesInfo name="DOI" value="10.17487/RFC7950"/>
      </reference>
      <reference anchor="RFC7951">
        <front>
          <title>JSON Encoding of Data Modeled with YANG</title>
          <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
          <date month="August" year="2016"/>
          <abstract>
            <t>This document defines encoding rules for representing configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, and notifications defined using YANG as JavaScript Object Notation (JSON) text.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7951"/>
        <seriesInfo name="DOI" value="10.17487/RFC7951"/>
      </reference>
      <reference anchor="RFC7952">
        <front>
          <title>Defining and Using Metadata with YANG</title>
          <author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
          <date month="August" year="2016"/>
          <abstract>
            <t>This document defines a YANG extension that allows for defining metadata annotations in YANG modules. The document also specifies XML and JSON encoding of annotations and other rules for annotating instances of YANG data nodes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7952"/>
        <seriesInfo name="DOI" value="10.17487/RFC7952"/>
      </reference>
      <reference anchor="RFC8040">
        <front>
          <title>RESTCONF Protocol</title>
          <author fullname="A. Bierman" initials="A." surname="Bierman"/>
          <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
          <author fullname="K. Watsen" initials="K." surname="Watsen"/>
          <date month="January" year="2017"/>
          <abstract>
            <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8040"/>
        <seriesInfo name="DOI" value="10.17487/RFC8040"/>
      </reference>
      <reference anchor="RFC9254">
        <front>
          <title>Encoding of Data Modeled with YANG in the Concise Binary Object Representation (CBOR)</title>
          <author fullname="M. Veillette" initials="M." role="editor" surname="Veillette"/>
          <author fullname="I. Petrov" initials="I." role="editor" surname="Petrov"/>
          <author fullname="A. Pelov" initials="A." surname="Pelov"/>
          <author fullname="C. Bormann" initials="C." surname="Bormann"/>
          <author fullname="M. Richardson" initials="M." surname="Richardson"/>
          <date month="July" year="2022"/>
          <abstract>
            <t>YANG (RFC 7950) is a data modeling language used to model configuration data, state data, parameters and results of Remote Procedure Call (RPC) operations or actions, and notifications.</t>
            <t>This document defines encoding rules for YANG in the Concise Binary Object Representation (CBOR) (RFC 8949).</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9254"/>
        <seriesInfo name="DOI" value="10.17487/RFC9254"/>
      </reference>
      <reference anchor="I-D.bormann-cbor-yang-standin">
        <front>
          <title>Stand-in Tags for YANG-CBOR</title>
          <author fullname="Carsten Bormann" initials="C." surname="Bormann">
            <organization>Universität Bremen TZI</organization>
          </author>
          <author fullname="Maria Matějka" initials="M." surname="Matějka">
            <organization>CZ.NIC</organization>
          </author>
          <date day="30" month="August" year="2025"/>
          <abstract>
            <t>   YANG (RFC 7950) is a data modeling language used to model
   configuration data, state data, parameters and results of Remote
   Procedure Call (RPC) operations or actions, and notifications.

   YANG-CBOR (RFC 9254) defines encoding rules for YANG in the Concise
   Binary Object Representation (CBOR) (RFC 8949).  While the overall
   structure of YANG-CBOR is encoded in an efficient, binary format,
   YANG itself has its roots in XML and therefore traditionally encodes
   some information such as date/times and IP addresses/prefixes in a
   verbose text form.

   This document defines how to use existing CBOR tags for this kind of
   information in YANG-CBOR as a "stand-in" for the text-based
   information that would be found in the original form of YANG-CBOR.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-yang-standin-02"/>
      </reference>
      <reference anchor="I-D.ietf-core-comi">
        <front>
          <title>CoAP Management Interface (CORECONF)</title>
          <author fullname="Michel Veillette" initials="M." surname="Veillette">
            <organization>Trilliant Networks Inc.</organization>
          </author>
          <author fullname="Peter Van der Stok" initials="P." surname="Van der Stok">
            <organization>consultant</organization>
          </author>
          <author fullname="Alexander Pelov" initials="A." surname="Pelov">
            <organization>IMT Atlantique</organization>
          </author>
          <author fullname="Andy Bierman" initials="A." surname="Bierman">
            <organization>YumaWorks</organization>
          </author>
          <author fullname="Carsten Bormann" initials="C." surname="Bormann">
            <organization>Universität Bremen TZI</organization>
          </author>
          <date day="6" month="May" year="2025"/>
          <abstract>
            <t>   This document describes a network management interface for
   constrained devices and networks, called CoAP Management Interface
   (CORECONF).  The Constrained Application Protocol (CoAP) is used to
   access datastore and data node resources specified in YANG, or SMIv2
   converted to YANG.  CORECONF uses the YANG to CBOR mapping and
   converts YANG identifier strings to numeric identifiers for payload
   size reduction.  CORECONF extends the set of YANG based protocols,
   NETCONF and RESTCONF, with the capability to manage constrained
   devices and networks.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-core-comi-20"/>
      </reference>
      <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
        <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
        <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>
    <?line 293?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This document is a result of prior work of Maria Matějka and Carsten Bormann
on <xref target="I-D.bormann-cbor-yang-standin"/>, and design discussions with Vojtěch Vilímek over
a NETCONF-RESTCONF-CORECONF proxy.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61a63IcN3b+j6dAxj8sZWeGoiR77YnWNkVKNlMiqVD0Ok4q
VcR0Y2Yg9mXcQJMaq+gX2T/7AnmJJA+W75wD9IWknHJVVCVpGo3LuX7ngp7N
Ziq4UNiFnlw0pvJZnbtqrY9MMPqkzm1hc33jwkb/fHD6/USZ5bKx13cm0yte
MVGZCXZdN7uF9iFXKq+zypTYPG/MKsxK01g8mzCrbCjrfJbVjZ3tTLWehX6/
2ZMnyrfL0nnv6irstlh//OritdafaVP4Gqe7Krdbi3+qMJnqic1dqBtnCno4
PniJ/+oGv84vXk9U1ZZL2yxUDtIWKqsrbyvf+oUOTWsVeHmmQJbBrmdb25iA
M702Va5PTGXWtqQz1E3dXK2but1i2qkN9CjiAb0TdWV3GMkXSs90ZT8EvbZV
3IqG2sqBUf7pt6a5okU6dz40btkGCBhCXttGXduqBYlaf/okrUUek58wTtt8
T1NpvDSuwLgI9jtnw2peN7zCNNkGbzYhbP1ib48m0pC7tvM0bY8G9pZNfePt
nmyxR0vX0Hy7xOJOc3u0ZPZH1En7FJC9DyMi4tK5HDF39R/fee+PTJ5vQllM
lDJt2NQNSRm6Yts8MTAd/Bvs+yuDcQ3jWS/04b/NT48P+Rmashbkn7jC+vra
Xxm9v//sy70v+G3mAuz9bWM2shrnYdf9Z09gx/LcVoFc4vBXC7HLJMv64p8z
6A4UzEuh4DtYyzz7Nb365bv35S/0rKq6wRSojZadvz788unz/QXsLcCmVzL0
56+/eLLQxHr3vC/Ps/eejDEOPo2DpqrqIKNfPXmOpQ3U1G/39dMvnseZ2bJu
MHg8O5oviY6q4iERsw/wF1eR0/OPOJEVysrI6tItNP3kzZWrVj0zqt2Sb8Ij
ifwp/bs/1XS2UvP5XKnZbKbNEkowWVCK0eYRqOPpj7WDt8rBpsndr3CnnMCr
jD4D26vWLRx5ri82lt+p0uz00mpbkapy7Sr9rydvBntO9T+/OzvtBvYxsC0M
ph2+PDuXYSLvsQLK8BAjZGTe60dil5+U02PwdLEB3YDHlvAFsGAzt3LW6019
o0MNUVXXtgkDVkDncidQO6C7rqyuVyqAM5GoxyjWG+h1Y5s4ONc/eqsz4y29
zoo2B/Pz9VwXdWYKPfASiCXcWFvpUzErBsLzZBTYDcTVBcgrt9De0hWwfQZb
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
bc9SRJgNE1jSxf8CzSwUH9wsAAA=

-->

</rfc>
