<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-gallagher-openpgp-messages-01" category="std" consensus="true" submissionType="IETF" updates="9580" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>OpenPGP Message Grammar</title>

    <author fullname="Andrew Gallagher" role="editor">
      <organization>PGPKeys.EU</organization>
      <address>
        <email>andrewg@andrewg.com</email>
      </address>
    </author>

    <date year="2026" month="October" day="08"/>

    <area>int</area>
    <workgroup>openpgp</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 49?>

<t>This document specifies several updates and clarifications to the grammar and semantics of OpenPGP messages.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://andrewgdotcom.gitlab.io/openpgp-messages"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-gallagher-openpgp-messages/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OpenPGP Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/andrewgdotcom/openpgp-messages"/>.</t>
    </note>


  </front>

  <middle>


<?line 53?>

<section anchor="introduction"><name>Introduction</name>

<t>OpenPGP messages have a complex grammar and sometimes poorly-understood semantics.
This document attempts to address this by:</t>

<t><list style="symbols">
  <t>Expanding on specifications where <xref target="RFC9580"></xref> does not fully describe the existing or expected behaviour of deployed implementations.</t>
  <t>Adding clarification where deployed implementations differ in their interpretation of <xref target="RFC9580"></xref> and its predecessors.</t>
  <t>Deprecating unused or error-prone features.</t>
</list></t>

<t>This document does not specify any new wire formats.</t>

</section>
<section anchor="conventions-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="signed-messages"><name>Signed Messages</name>

<t>There are two forms of signed message in OpenPGP.
In a prefix-signed message, the Signature packet or packets precede the signed data.
In a one-pass signed message, one or more One-Pass Signature packets precede the signed data, and the corresponding Signature packet(s) follow it.</t>

<t>The accepted convention is that a prefixed Signature packet signs over the next literal packet only, skipping any intervening signatures - however this is not explicitly specified in <xref target="RFC9580"></xref>.
Historically, PGP 2.X treated a prefixed Signature packet as applying to the entire following sequence of packets, but this usage is deprecated <xref target="FINNEY1998"></xref>.
See <xref target="signatures-over-signed-messages"/> for an alternative construction.</t>

<t>In addition, One-Pass Signature (OPS) nesting semantics are complex, and under-specified <xref target="SCHAUB2022"></xref>.
<xref section="5.4" sectionFormat="of" target="RFC9580"/> defines the nesting octet as:</t>

<ul empty="true"><li>
  <t>A 1-octet number holding a flag showing whether the signature is nested.
A zero value indicates that the next packet is another One-Pass Signature packet that describes another signature to be applied to the same message data.</t>
</li></ul>

<t>The terminology is imprecise, and non-zero "nesting" flags are completely unspecified.
One self-consistent interpretation is as follows:</t>

<t><list style="symbols">
  <t>A zero nesting octet means that the following OPS and its counterpart signature are not signed over by the current OPS.
  <list style="symbols">
      <t>This process is recursive if multiple sequential OPS packets have a nesting octet of zero.</t>
    </list></t>
  <t>To add multiple OPS signatures over the same message data, all OPS constructions except the innermost one have the nesting octet zeroed.
  <list style="symbols">
      <t>It is not clear what happens if the innermost nesting octet is zero but no OPS packet follows.</t>
    </list></t>
</list></t>

<t>The above implies that an OPS with a nonzero nesting octet signs over all packets between the OPS packet and its matching signature packet, including any further signatures, however it is not clear whether any current implementation supports this.</t>

<t>This is further expanded in <xref target="OPENPGPDEVBOOK"></xref>.</t>

<t>This still leaves us with an overly complex grammar that resists rigorous formalization.
We attempt to improve the formalism below.</t>

<section anchor="prefix-signed-message-constraints"><name>Prefix-Signed Message Constraints</name>

<t>Prefixed signatures are deprecated, and their use is hereby restricted:</t>

<t><list style="symbols">
  <t>A prefixed Signature packet <bcp14>MUST</bcp14> be followed by one Literal Data packet and no other packets except further prefixed Signature packets, and Marker packets.</t>
  <t>A prefixed Signature packet <bcp14>MUST NOT</bcp14> have a version number greater than 4.</t>
</list></t>

<t>Prefixed signatures <bcp14>SHOULD NOT</bcp14> be generated, but <bcp14>MAY</bcp14> be interpreted.
A receiving implementation <bcp14>MAY</bcp14> convert a prefixed signature to the equivalent OPS signature, by moving the signature after the Literal Data packet and prefixing an appropriate OPS packet.</t>

</section>
<section anchor="ops-message-constraints"><name>OPS Message Constraints</name>

<t>We constrain OPS structures to a subset of previously-allowed configurations:</t>

<t><list style="symbols">
  <t>Prefixed signatures and OPS signatures <bcp14>MUST NOT</bcp14> both be used in the same message.</t>
  <t>When generating an OPS packet that is followed by another OPS packet, the nesting octet <bcp14>SHOULD</bcp14> be set to 0.
  <list style="symbols">
      <t>Otherwise, the nesting octet <bcp14>SHOULD</bcp14> be set to 1.</t>
    </list></t>
  <t>When consuming an OPS packet, the nesting octet <bcp14>MUST</bcp14> be ignored.</t>
</list></t>

<t>This effectively deprecates the nesting octet, while maintaining backwards compatibility with legacy code.</t>

</section>
<section anchor="subject-normalization"><name>Subject Normalization</name>

<t>The <em>subject</em> of an OpenPGP signature refers to the packet(s) that are signed over.
The <em>type-specific data</em> of an OpenPGP signature refers to the section of the data stream that is passed to the signature's digest function after the optional salt and before the trailer.
The type-specific data differs from the subject in that it has been normalized, the details of which are dependent on the signature type.</t>

<t>The subject of a signature in the Literal Data or Timestamping categories (<xref target="I-D.gallagher-openpgp-signatures"/>) is the Literal Data packet that immediately follows one or more prefixed signatures, or is enclosed by one or more OPS constructions.
If no Literal Data packet is present, the signature is malformed.</t>

<t>The following normalization steps are applied to the subject of the signature to produce the type-specific data:</t>

<t><list style="symbols">
  <t>The framing of the Literal Data packet is discarded, and any partial-length packets are concatenated.</t>
  <t>The format, filename and timestamp fields are discarded.</t>
  <t>If the Signature Type is 0x01, the Literal Data packet body is converted to Canonical Text, by converting line endings to CRLF and removing any trailing whitespace (<xref target="line-ending-normalization"/>).</t>
  <t>If the Cleartext Signature Framework is being used, dash-escaping is also applied (see <xref section="7.2" sectionFormat="of" target="RFC9580"/>).</t>
</list></t>

<t>A One-Pass Signature over a Literal Data packet, a prefixed Signature over the same packet, and a detached signature over a file containing the body of the same packet are all calculated the same way.
This means that they can be losslessly transformed into each other with the exception of the Literal Data metadata fields, which an application <bcp14>MAY</bcp14> assume contain their recommended default values as per <xref section="5.9" sectionFormat="of" target="RFC9580"/>.</t>

<t>A signature of Type 0x01 <bcp14>MUST NOT</bcp14> be made over arbitrary binary data, only over UTF-8 text.</t>

<section anchor="line-ending-normalization"><name>Line Ending Normalization</name>

<t>When normalizing line endings, only bare linefeeds (an <spanx style="verb">LF</spanx> control character that is not preceded by a <spanx style="verb">CR</spanx>) are normalized to <spanx style="verb">CRLF</spanx>.
In particular, bare carriage returns <bcp14>MUST NOT</bcp14> be converted to <spanx style="verb">CRLF</spanx>.</t>

<t>Instead, carriage returns <bcp14>SHOULD</bcp14> be treated as horizontal whitespace, similarly to tab characters.
This means that a carriage return at the end of a signed message, if not followed by a linefeed, <bcp14>SHOULD</bcp14> be stripped.</t>

</section>
</section>
<section anchor="signatures-over-signed-messages"><name>Signatures over Signed Messages</name>

<t>It has been previously suggested (for example in <xref target="FINNEY1998"></xref>) that a non-zero nesting octet in a non-innermost OPS packet might be used to sign over an already-signed message, including some or all of its signatures.
This construction has never been formally specified, and such a message <bcp14>SHOULD NOT</bcp14> be created.
A receiving implementation that follows the guidance in [ops-message-constraints] will automatically invalidate some or all of its signatures.</t>

<t>To sign over an entire signed message together with its signatures, the wire format of the inner message <bcp14>SHOULD</bcp14> first be encapsulated in a Literal Data packet.
A Canonical Text signature <bcp14>MUST NOT</bcp14> be made over such a nested message, and the Cleartext Signature Framework <bcp14>MUST NOT</bcp14> be used.</t>

<t>Beware that the outer signature(s) will thus be sensitive to the inner message's packet framing, i.e. the otherwise inconsequential choice of packet header format and partial body lengths.
If the inner message is parsed and re-serialized unmodified, but using a different framing, the outer signature(s) will no longer validate.</t>

</section>
</section>
<section anchor="formal-grammar"><name>Formal Grammar</name>

<t>The message grammar in <xref section="10.3" sectionFormat="of" target="RFC9580"/> is therefore updated to:</t>

<t><list style="symbols">
  <t>Encrypted Session Key:  <br />
  Public Key Encrypted Session Key Packet | Symmetric Key Encrypted Session Key Packet.</t>
  <t>Encrypted Data: <br />
  Symmetrically Encrypted Data Packet | Symmetrically Encrypted and Integrity Protected Data Packet.</t>
  <t>Encrypted Message:  <br />
  (Encrypted Session Key)*, Encrypted Data.</t>
  <t>Prefixed Signed Message:<br />
  (Signature Packet)+, Literal Data Packet.</t>
  <t>One-Pass Signed Message:<br />
  (OPS Packet (nest=0)){n&gt;=0}, OPS Packet (nest=1), Literal Data Packet, (Signature Packet){n+1}.</t>
  <t>Signed Message: <br />
  Prefixed Signed Message | One-Pass Signed Message.</t>
  <t>Optionally Signed Message:  <br />
  Signed Message | Literal Data Packet.</t>
  <t>Unencrypted Message:<br />
  Compressed Data Packet | Optionally Signed Message.</t>
  <t>Optionally Padded Unencrypted Message:  <br />
  Unencrypted Message, (Padding Packet)*.</t>
  <t>OpenPGP Message:<br />
  Encrypted Message | Unencrypted Message.</t>
</list></t>

<t>In addition to these rules, a Marker packet (<xref section="5.8" sectionFormat="of" target="RFC9580"/>) can appear anywhere in the sequence.</t>

<t>In a One-Pass Signed Message, the OPS packets and Signature packets <bcp14>SHOULD</bcp14> appear in bracketed pairs, as per <xref section="5.4" sectionFormat="of" target="RFC9580"/>.
If a Signature packet does not match its corresponding OPS packet, then that particular signature is invalid but the entire packet sequence <bcp14>SHOULD NOT</bcp14> be rejected.</t>

</section>
<section anchor="encrypted-and-compressed-messages"><name>Encrypted and Compressed Messages</name>

<t><xref target="RFC9580"></xref> permits an encrypted message to contain another encrypted message, and a compressed message to contain another compressed message, possibly recursively.
Such messages require potentially unbounded resources for negligible added utility, and therefore <bcp14>MUST NOT</bcp14> be created.</t>

<t>In addition, encrypt-then-sign messages are not idiomatic OpenPGP, and <bcp14>MUST NOT</bcp14> be generated.</t>

<t>The guidance in <xref section="10.3.1" sectionFormat="of" target="RFC9580"/> is therefore updated to:</t>

<t><list style="symbols">
  <t>Decrypting a version 2 Symmetrically Encrypted and Integrity Protected Data packet <bcp14>MUST</bcp14> yield a valid Optionally Padded Unencrypted Message.</t>
  <t>Decrypting a version 1 Symmetrically Encrypted and Integrity Protected Data packet or -- for historic data -- a Symmetrically Encrypted Data packet <bcp14>MUST</bcp14> yield a valid Unencrypted Message.</t>
  <t>Decompressing a Compressed Data packet <bcp14>MUST</bcp14> yield a valid Optionally Signed Message.</t>
</list></t>

</section>
<section anchor="marker-packet"><name>Marker Packet</name>

<t><xref section="5.8" sectionFormat="of" target="RFC9580"/> defines the Marker Packet as follows:</t>

<ul empty="true"><li>
  <t>The body of the Marker packet consists of:</t>

  <t><list style="symbols">
    <t>The three octets 0x50, 0x47, 0x50 (which spell "PGP" in UTF-8).</t>
  </list></t>

  <t>Such a packet <bcp14>MUST</bcp14> be ignored when received.</t>
</li></ul>

<t>We update this to also include:</t>

<t><list style="symbols">
  <t>If a receiving implementation encounters a Marker Packet with any other contents, it is "a critical packet where the packet type is unknown", and the entire sequence <bcp14>MUST</bcp14> be rejected.
  See <xref section="4.3" sectionFormat="of" target="RFC9580"/>.</t>
  <t>A Marker Packet <bcp14>MAY</bcp14> be added by an application to notify non-OpenPGP software that a data stream contains OpenPGP data.
  If so, the Marker Packet <bcp14>SHOULD</bcp14> be the first packet in the sequence, and <bcp14>SHOULD NOT</bcp14> use a Legacy header, so that it can be easily detected.</t>
</list></t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The OPS nesting octet is not signed over and is malleable in principle.
An intermediary could swap an outer OPS with its inner OPS by also swapping the nesting octets.
The order of OPS nesting therefore <bcp14>MUST NOT</bcp14> be considered meaningful.</t>

<t>In addition, the normalization applied during Literal Data signature calculation may result in semantic collisions.
It is possible to construct distinct sequences of packets that map to the same sequence of octets after Literal Data normalization is applied.
It is not known whether such a pair of colliding packet sequences might also have different semantics.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="openpgp-packet-types-registry"><name>OpenPGP Packet Types Registry</name>

<t>IANA is requested to update the following existing entries in the registry, to add a reference to this document:</t>

<t><list style="symbols">
  <t>Marker Packet</t>
  <t>OPS Packet</t>
</list></t>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC9580">
  <front>
    <title>OpenPGP</title>
    <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
    <author fullname="D. Huigens" initials="D." surname="Huigens"/>
    <author fullname="J. Winter" initials="J." surname="Winter"/>
    <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
      <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9580"/>
  <seriesInfo name="DOI" value="10.17487/RFC9580"/>
</reference>

<reference anchor="I-D.gallagher-openpgp-signatures">
   <front>
      <title>OpenPGP Signatures</title>
      <author fullname="Andrew Gallagher" initials="A." surname="Gallagher">
         <organization>PGPKeys.EU</organization>
      </author>
      <date day="4" month="June" year="2026"/>
      <abstract>
	 <t>   This document specifies several updates and clarifications to the
   grammar and semantics of OpenPGP signatures.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gallagher-openpgp-signatures-03"/>
   
</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 title='Informative References' anchor="sec-informative-references">

<reference anchor="OPENPGPDEVBOOK" target="https://openpgp.dev/book/">
  <front>
    <title>OpenPGP for Application Developers</title>
    <author >
      <organization></organization>
    </author>
    <date year="2024" month="May" day="06"/>
  </front>
</reference>
<reference anchor="FINNEY1998" target="https://mailarchive.ietf.org/arch/msg/openpgp/U4Qg3Z9bj-RDgpwW5nmRNetOZKY/">
  <front>
    <title>Re: More spec-ulations - update</title>
    <author initials="H." surname="Finney" fullname="Hal Finney">
      <organization></organization>
    </author>
    <date year="1998" month="March" day="26"/>
  </front>
</reference>
<reference anchor="SCHAUB2022" target="https://mailarchive.ietf.org/arch/msg/openpgp/uepOF6XpSegMO4c59tt9e5H1i4g/">
  <front>
    <title>[openpgp] Proposing a Simplification of Message Syntax</title>
    <author initials="P." surname="Schaub" fullname="Paul Schaub">
      <organization></organization>
    </author>
    <date year="2022" month="October" day="07"/>
  </front>
</reference>


    </references>

</references>


<?line 260?>

<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>This document would not have been possible without the extensive work of the authors of <xref target="OPENPGPDEVBOOK"></xref>.</t>

<t>The author would also like to thank Daniel Huigens, Daniel Kahn Gillmor, Heiko Schäfer, Neal Walfield, Justus Winter and Paul Schaub for additional discussions and suggestions.</t>

</section>
<section anchor="document-history"><name>Document History</name>

<t>Note to RFC Editor: this section should be removed before publication.</t>

<section anchor="changes-between-draft-gallagher-openpgp-messages-00-and-draft-gallagher-openpgp-messages-01"><name>Changes Between draft-gallagher-openpgp-messages-00 and draft-gallagher-openpgp-messages-01</name>

<t><list style="symbols">
  <t>Added missing dash-escape step in type-specific data.</t>
  <t>Clarified treatment of trailing carriage return characters.</t>
  <t>Reworked formal grammar to be more human-readable.</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA6Vb63bTSpb+76eoCT+apC2T5IQ+4NVNd8jlkAGSNIGhTzOs
oSyV7TqRVGqVRPDJ8C7zY55k5sXm27uqdLPNYU2zgNhSXXbty7dvlSiKRpWu
UjUVO1eFyq9/uhavlbVyocRPpcwyWe6MYlmphSlXU2GrZJSYOJcZJiSlnFfR
QqapXCxVGRnMLxZFlLn5Nto/GNVFgsl2Kp4+frI/0kU5FVVZ2+pwf//p/uFI
lkpOhc6r0Z0pbxelqYup8OuMbtUKT5OpuMgrVeaqik5px5GtZ5m2Vpv87aoA
HRdnb89Hn1Veq+lICL9IOM0OHlU8bOc9ttD5AufCCHqeSZ3iud/vL1pV84kp
F/RKlvESr5ZVVdjpo0c0kh7pz2oShj2iB49mpbmz6pFf4xHNLVVhOnMXYK+c
TWKTPZJ5Uqq7RWIq+jbkF81NiVtVZ3ZvysSvpc2GybbC2P+Qqclx2JWyo0JP
xYfKxGNhTVmVam7xaZXRh48jWVdLUxLDIvwTYl6nqRPrMe8ofgpy5dc4r8z1
r7IC16cCfH2pVnZy9o5fKsdIT+pf/E86Mb8uDamXSnRlylFuygyrfGZZvTk/
Ib2gjxfR6WRdlaxe5LKqS2jQSOfz7tyr67NL0HF69m/Pr65eTnmnSpYLBe4F
5vllJon6/GhmzO0jN2qg71hWHBdFqmM+njhVn1WKqSVLRAjS4Kk43D88ivYf
R/t/wMPzi8vLs58Pnj59snnj7fqS2UWjLO+O/rr44e9PZ79Eb04Xxd37x3n2
5lJVV39/+XOf0jf477UplbCFiqM6ZTqtiIQzL0dmK1H6E/mfQjipvpCpONd5
rladM9EBov0fokM6083Ji+N3z3HMw3/mTLUqrs7/8LfiRi1eXx3Fj59W1VP1
+MWBPlr0z/TBz/gorktTGEuWKcWNziCIeRCFmTdodLPKK/nle456LetU3MRL
Wc/68juMDvaj/R9HoyiKhJzZqpRxNRq9XWorgGp1pvKKWQwClBUWelCCbR7D
SL9FDBY05FlRGVEtFTCHkZJHWFhDXunYEvFBxYKVTtzemU6SVI1GDwjaSpPU
MZ/2/oHufP06Gg2ni6X8rMAlWFaRqi/9fU2mKo2RojCmTFdRnSdQ4cqYDk2T
wWFlVamsqPggMoHZWnykEbPVdDTaE2dfCqxNogF5njPh7HcwVCU+eBv+iEWx
d24qhpKVSJSNSz1TzCD1RduKlynxGetUKhEzheNoU5fEqUQVqVnhKSmAIuLc
NhNQcZwwCT3e++23TROJns9VCddC+2v6AB9SlKpqFKulnNinwQS8TlQMHpiS
9z1VeELbYfM6ry22IfrL0pRRUQJnxVw5dJoMtahhhmPaCnusRA5YvdOg2gEZ
zXogTkwO3+WIJkJO1Vzn2n2/fxC3b6OkffOV9lMCHlKQi7Ri5/W7m7c7Y/dT
XF7x5zdnf3138ebslD7fvDh+9ar5MPIjbl5cvXt12n5qZ55cvX59dnnqJuOp
6D0a7bw+/hlviOCdq+u3F1eXx692HLd7+oXDQrWgBQ3/wURpR0E7Eprz/OT6
f/7r4Ejc3/8LZHJ4cPD061f/5cnBj0f4AmHnbjeTQ7fcVwh2NZJFoSTLGc5D
xLLQlUzh6CTsd2nuckFqAkbvfSDOfJyKP87i4uDomX9AB+49DDzrPWSerT9Z
m+yYuOHRhm0abvaeDzjdp/f45973wPfOwz/+OdVQy+jgyZ+fjUi7buBAwWQP
opbVBjJhudwZVkQGKuvGeaAhdnrsmYwuwFoyjbn+EvWHsQh4C7YCUcj4VlVk
I+4TW1QMm+Jxfi6wVPpFYUFRIQE5w2XJtLBKRi7vCoOuadBwn62rO0Whh7Ep
YZyFcRA2XOCh3QUD0tTcwfonzqJkHKuCdLQ1PKEJE2XVcAFv185M24ORcBi8
ca6+VCLVFfuPwBZoLgKwW10U7OsACGwU2Ia+t6EO/Do0V7m1sLl2SALcRIgC
77lqfBRbT4Njk9ELoKwpgZApbUWe43DyNwTcQCkyu2/QD3OBJaUrosQ7NTo9
YxVxiClU/6hVHivSFy+CsZjVlaOydopjCZIZNbHNhzZOAnU3SsGq23NGxC6v
Uk0cC2OneEySPVPUz/EeSQPe2vlFSIq0Bz6Bvo03KcjDq+ubXQjB+ZzWI5Pa
e9/plIR9ZNSy80MbBIHg+/sb5Tzz48kRndpzGjQyFivrhe19G7wacRKe85k4
FgeRe5DX2QyiXJo0cTHOHEEugxN9BZRhjbLRYXcAEjlWVcmEl/pVlUZ8lmlN
lpmQB1ReJxtl83LU5EQMr7jVcNzMgMDthHZ7B9mkEMQUrw8WwVUDEM6K2WQg
pUznJjWLFW0PRwzxa6sch3OTR0z+jmfTDp+/K4tKQaXrvJHCZATSIbV0HpHc
odPkSgYOnA5qvXJajlU8m/rSyJTMO6xqlRka0vj92NS8uCyrDhOIQPbgDlnY
tmcrhys1cAU0YZEJh5h7gt0/ggIKH4g48KAuLemunousTiuNk3oTqjRQgQgI
QObDuj7p0Dc6EAUibzk6a5ehuR28aGBnTURj9oo0vGtBFlhCMMdzKCcoM2Mr
Rl2mZF2piRASjDvrRRUwKU7J+d4Re5fkibE0jttftr8SJrKYCDdy0+FCkGUA
4pkh3lE2EHQdmEDD73S1JGaZfIO8OzhMJw8MnqnqTimOBbtbBgVAMIa8pgvC
fsQY54jTOgmAPa/LvqkAAQNW6zWuOMumeUFh+lGqsHVRIDV3MXeIIfE3bKM4
/PYw3094P4bhOD0Oih0/KwJhz56ceQC7GqYKzEnQDauCkuqFKU1tXUCa+vx+
MnqvQmZAxk8Wbbxa+IE2A0shLYpgHyCB4+CgH2tQYEsZFuwWYcd18DwdtZUu
fvfOovHaCNYRahMbKFSBxWFsBaeGMd7Ot7sxDulmwc4px1ixWr/yrvgUNtEV
PjTQYV9QFG8YQQBbd7KO3NeyvG1nT76HOorwvL1DQlTFCh5iwX6aRZSLo8lm
prXxJJ1zoWBljntkUIgQB7H2ZHRMUKT0Z1LhgfrRcI5zyl5w0/MDHAn8o9bw
Ph7x2vdjYm9meOm+/5LzykPSNs673ZxdkacpTVFqnKRjnk656PsGlUJuZAob
woYobt8gN3ofIgapHWY46GMGUqYLw5tZB7Ggg3JQi4RZep3B1Lle1KXLJFnn
NqovTjEA4kbAM2gVSYJzRpeD9sCZNOU9kpggQM+HDjSxnWrb0+TGszfDxhuw
2mvIjLwN2+8+4faeuKK5d+yYv2PSQUMicbLO1ijctEowP3AEoXsSIEohFY8p
juOygDf4DbHTGJip4d4ykiP+0YsZNruTlOISkoFTM424euVgLlULGRPGJcop
y009+wVbicsunjmHsmfduz2Sumzym47SQsYwyKD0bY7gnE+pupHAxK1JleUQ
Psbscb93eesjS+PcJU0lLVUya0RPqVEn/AoL/Y6KG4iUCaVyt0hrbqagB7A3
i/CZVXSm5pRG0UuyhzTQvk66r5lA50qTuT09O1mDiShy8+RNoRa5ZzFhD58A
kZlOOZmEFONlgHcFB5ZTcDGACNrf+/qwDXGuGwTn6wiC1OAtFbkqmXEW5VsT
FCM8vL//rSLy16+7LpvbjEvujFmmEkIiKKsPSXr56DpMwhfgJek5YgVjW6/T
pLDD+Av575x8zyYiOIxUFjwbrycF4Dh5YG9a3Xg272o8NEkVzsEOg/iW1QNx
GIpekzr2qrKmHYyDvCciCTbZ+VZGUhaobQyzDX6dgiCKrxH5RnAkCxhvcLku
EchJkrlkl+X34SLZWMyhs1TYdfFBED4eqzTxQUTYi6ZezAdVCWoSEUX7X/YP
xltJnpmE0xfvDx3HToC4OaXT4i1yLHZ3/j0xgEstimsLbNYnb16dM5Gl8k6R
Ts1G5zI9bGuxnSJVpcmRmxz1ZAcd7RzjhELJihK89kDnEICifhnRO1NcnbTE
6ETaZYS0TrJpUIaUWtNowEPL+XdIaX+cHPZSWuyKWGFD0uiC6U1MG28uKfTT
kWYoaQGjRLzsBRl+fRIzcTcAPy3AQgmq2i7mFJvLfWlM3RCVtEPu5MpXufu5
H0QHWIZzgonaFG44Zdnk1hkUBU1GKBDnI0J2MK52TSFhB6t7nMhwIAZPp4/j
AH6543vcRlrgap01R/SRLnyhAeBwkJ+ouUSG5xJ9Tm8L0NEtQjztSYwF1uHj
3Kk66XknEiF3mgQulzONM5crMdM5/XA5ItdUecC7t+fRE0H6xv70Ac4KHT9z
9bOBU+XgIKju0B78ojOSFD2fKwVjfQi2fHp1/omZUBoIcCmpB6PKxulR/uTr
ei7mEZ9O3nza9dl4cDlkbp/I3j5xKZGRhTShHLstAQeIJhfkdMGb3Pb40TPx
sAqWAWhKWNHa3DY2aippyE3gdH4lUaYdwx5DHBl1yUi3ALhy1p7QrmulHO4l
fJlCUaE7OMNuYVTPXYelGxQ2/B13ozhkTMjHEx8WDWoFg6owYunfqsqBPx3f
3wbNcCiLBVeqxMM5N3ck5RicsHaKfyGIastBg6pA7t+1ZYNOLJzpxbJqwmkw
lqjzGk11QkglWa3VptvMnVpj5IwJMsBWyvjb83qxdP0zHzTnpJ6P65Lebt3V
wZmtydKbgks/NYudrnwzAWOmhCCDG4m1TiSVWIl/W/Kbj4AmHETWlaFuOBd7
MR6ooalP+VunHb0d8M/XeQcdgMosVIuD/UWcF+10sgIysvSG/Jjr0rL0EB7J
wnq8Zolv8CnEr77b7UDcZlTzYnAF01b+oQnwbRfaXZLUCwx6ru64PxKKhqau
uiUfSglYAtWyti5jyq3mMrUPsnps+J1tClwucIJmTtTErRxSMlJWSLitDsZL
o7uVdrGEjmNRz2/OoF045Zyki6lcYLkuCU4mSjIeF55EVgF2HJLWeWYSr9RU
Q6h9J94lAxS6N3R/ixmIZlOTL/AuKCJ3N8/ZdMJVIhe0BqpCSQqq0Dq5g/3J
D/1SuwvYS5fGuF48gYDrT+dxueJ+zY3iG0HipVpNqUrJpcrregYXTM82jxTX
jrn//p/iZgU3TGWm3xw96e1LqjsN+zWLsE32B23aazCMhEN3nRYlZbjXpalc
o7wzvb+5B/D2wA83Er67Nx4QM+nWNPreYBqWaq3Fbb37+3HfYFuKelHjhqUI
y/3xH5KZ/ml/d/c+f/an/a9jsfbuYHfjPuMNFN3nvz/4SgSs7evlv/mIJIMt
JPNpfA4N2ayv6wW9tt4WzrzL1QZp8RonhjolnOIP9GMrAQPqrmVCUdLmPfwu
G16CkzSTzNzzcc8t3Lv+F8hc0zaicMOq/bach0IgW1mn5DFkv1ZKKVAb1z7p
ZyIcqfvGPlIod9MjVNF8E9Jvt02O40Gp35Xr1lvI3ke1twhmJb9RhK9wXONN
YfjRIAy/mPPNpUG1t7kCwt0F32jq9qMHtTQfDrSxbD/19x7eN1yb9mzoP4fe
bD8IKdUvDCGMxX2g6ahfezugvRNTUFeP2SZaUbfBQZPGhJrk2qCQ8cXtPt+Y
vj5qLAokanqWrtpeWorU7oa8fXMhqqTaNLHBVM5zcitxZmrOqLCiqctYcYMD
AcIi1QusqIQznLriWmITKngf08sVQhTX7zn700YkNg48W4pC21An2sVnwbB8
x6CzeFO999WcbvTX94iTg+/3iaeKaXNePLQYDv9/TqfbuFhRgktLshp+FwxN
tpFz8E+RA1lGEYt06S88uPol3er7tg/efp7t1HvNdAcYgvZ3MWgI4rBFD4YO
f0ej7WDYu2nQm9Xvfz/jmlm3YNLHW99Jp/rsdPQMw12RrVqWSrkkjCpkj/fH
+P/oxzF/Fg9dMQNpDyK8HbpNTarJRYLdCa9y42LvQfvN1//5npbPfljJ3wdl
dVdGqBVDFSqXqSnWXsbSrQkTZOR69bZ1KJ4bvu+5EgFQckIEALjry+4AiaBS
nFV4ap1faWv9XPSksXV+m5u7fKfNIUKOFFA2HLTFV44KegW2o0Eg67qDfaJ9
w84ZEHd4emUjMAhQQtcHKTduWgpmXrUZiuz1Djyu2sabu4saRB04a814gx51
6htUduV0LRRy+07XMaTjYqhRizTOtWFcikK3zZtugS+5KWk1936q1hvdEKiT
jVNTTyfKt9uoFuHfuNsfzRt/55G85tqVguE9DW7sc7kcyd/M1SOKEnpG1yeQ
YuauR8qV/pKKujUs197JgjvnnOI0Vw3IC7p0ih6RkEhnaXAR6pQ9eqzrr5iS
8jW6A9wheIuT8edk5yep+jmv06HL4X16Rf5Q2E3ALazdi0Db0CHUSGlGJrmb
TkVGMCTci8L+aaqtb0y4DoRzvcFVu8oI1dlxiriNNmznKpiTeQYWdu8Lde+M
eZRxzaoetf1zaRuOFsgh8bJJNpcqbMAdzTzmE3BQNYiHrC8escy47d7mtZ1b
0XQT+/jyeF0Xtczluh5SW9rbl7chqrxa8UYtwKJyBdHRatrFJ64uAa402Ndt
3DRXo0ES97G8zZV+rbG/m82wyJTHvtDQuWjL0Nn3KXudzMrdOqdWKp30OCZe
pipZ0FQ7vLp8x8ZALGd+uYJf0AeyCBMi0C8VVT4whisp3u24u/msGRuvrIQR
fh8WTKpv/ZlkfguVyOFJxYtaI0ACgPvvL+UyFz/pNM0MQOaF0reGbvn/73/P
CXQuFZTpvUy5DD8W/1rbqrbiPZs5w0HntwLcDUNvWZhG/aOas2Xr63pc03QG
AYadBta4+5UQ76WpmGCAuzjjX2yZOoGEtq5d8unYRWSApKYPW3BJwt+zIUU6
wZkpbnzuryj99m9V7TOR3/PbV+7uPMGKdgFM2yFS3CNkZVtr9ZGnOnGX7Ulx
KQTm45OEQzdrWLnu1rn3YAikEpjsSqft7SO+WMhN0WUN64uodEsAPRn9Hzyb
eFiKNgAA

-->

</rfc>

