<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-housley-asn1-layman-guide-02" category="info" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="Layman's Guide to ASN.1">A Layman's Guide to a Subset of ASN.1, BER, and DER</title>
    <seriesInfo name="Internet-Draft" value="draft-housley-asn1-layman-guide-02"/>
    <author initials="B." surname="Kaliski" fullname="Burton S. Kaliski Jr.">
      <organization abbrev="Verisign Labs">Verisign</organization>
      <address>
        <postal>
          <street>12061 Bluemont Way</street>
          <city>Reston</city>
          <region>VA</region>
          <code>20190</code>
          <country>US</country>
        </postal>
        <email>bkaliski@verisign.com</email>
        <uri>https://www.verisignlabs.com/</uri>
      </address>
    </author>
    <author initials="C." surname="Bonnell" fullname="Corey Bonnell">
      <organization>TurboLight Solutions</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>corey.bonnell@turbolightsolutions.com</email>
      </address>
    </author>
    <author initials="D." surname="Hook" fullname="David Hook">
      <organization>Keyfactor</organization>
      <address>
        <postal>
          <country>AU</country>
        </postal>
        <email>david.hook@keyfactor.com</email>
      </address>
    </author>
    <author initials="R." surname="Housley" fullname="Russ Housley">
      <organization abbrev="Vigil Security">Vigil Security, LLC</organization>
      <address>
        <postal>
          <country>US</country>
        </postal>
        <email>housley@vigilsec.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="17"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 137?>

<t>This note gives a layman's introduction to a
subset of the Abstract Syntax Notation One (ASN.1), Basic
Encoding Rules (BER), and Distinguished Encoding Rules
(DER). The purpose of this note is to provide
background material sufficient for understanding and
implementing standards that make use of ASN.1.</t>
      <t>This memo is not an IETF standard, and has not been shown to
have IETF community consensus. This memo offers tutorial information.</t>
    </abstract>
  </front>
  <middle>
    <?line 149?>

<section anchor="intro">
      <name>Introduction</name>
      <t>It is a generally accepted design principle that abstraction
is a key to managing software development. With abstraction,
a designer can specify a part of a system without concern
for how the part is actually implemented or represented.
Such a practice leaves the implementation open; it
simplifies the specification; and it makes it possible to
state "axioms" about the part that can be proved when the
part is implemented, and assumed when the part is employed
in another, higher-level part. Abstraction is the hallmark
of most modern software specifications.</t>
      <t>The Open Systems Interconnection (OSI) <xref target="X200"/> series of
standards involve a great deal of abstraction. OSI is an
internationally standardized architecture for the
interconnection of computers from the physical layer up to
the user application layer. Objects at higher layers are
defined abstractly and intended to be implemented with
objects at lower layers. For instance, a service at one
layer may require transfer of certain abstract objects
between computers; a lower layer may provide transfer
services for strings of ones and zeroes, using encoding
rules to transform the abstract objects into such strings.
OSI is called an open system because it supports many
different implementations of the services at each layer.</t>
      <t>OSI's method of specifying abstract objects is called ASN.1
(Abstract Syntax Notation One) <xref target="X680"/>, and one
set of rules for representing such objects as strings of
ones and zeros is called the BER (Basic Encoding Rules) <xref target="X690"/>.
ASN.1 is a flexible notation that allows
one to define a variety data types, from simple types such
as integers and bit strings to structured types such as sets
and sequences, as well as complex types defined in terms of
others. BER describes how to represent or encode values of
each ASN.1 type as a string of eight-bit octets. There is
generally more than one way to BER-encode a given value.
Another set of rules, DER (Distinguished Encoding
Rules <xref target="X690"/>, which is a subset of BER, gives a unique
encoding to each ASN.1 value.</t>
      <t>The purpose of this note is to describe a subset of ASN.1,
BER and DER sufficient to understand and implement OSI-based
applications, Public-Key Cryptography Standards (PKCS), and
Internet protocols that make use of ASN.1. The features described include an
overview of ASN.1, BER, and DER and an abridged list of
ASN.1 types and their BER and DER encodings. Features which are not
used in the specifications listed above are not described in this
note. For information on the other features, and for more detail generally,
the reader is referred to <xref target="X680"/> and <xref target="X690"/>, which define ASN.1, BER, and DER.</t>
      <t>Sections 2-4 give an overview of ASN.1, BER, and DER, in that order.
Section 5 lists some ASN.1 types, giving their notation,
specific encoding rules, examples, and comments about their
application. Section 6 concludes with an example,
X.500 <xref target="X500"/> distinguished names.</t>
      <section anchor="background">
        <name>Background</name>
        <t>The first version of this document was published on June 3, 1991 as
part of the initial public release of PKCS.  It was published as
NIST/OSI Implementors' Workshop document SEC-SIG-91-17.</t>
        <t>The second version of this document was published on November 1, 1993
as a RSA Laboratories Technical Note.</t>
        <t>The third version of this document is the Internet-Draft
<xref target="I-D.kaliski-asn1-layman-guide"/>, which is a republication of the
second version.  It includes the following notice:</t>
        <ul empty="true">
          <li>
            <t>This document represents a republication of A Layman's Guide to a
Subset of ASN.1, BER, and DER, originally authored and published by
RSA Security USA LLC.  This document is submitted with permission
from, and on behalf of RSA Security USA LLC.  By publishing this
document, change control is transferred to the IETF and the Internet
technical community in full conformance with the provisions of BCP 78
and BCP 79.</t>
          </li>
        </ul>
        <t>This document is the fourth version, and the first under the transfer
of change control.  The changes from the third version include:</t>
        <ul spacing="normal">
          <li>
            <t>Discussion of <tt>CLASS</tt> was added as the replacement for <tt>ANY</tt> following the modern ASN.1 specification;</t>
          </li>
          <li>
            <t>Discussion of <tt>UTF8String</tt>, <tt>GeneralizedTime</tt>, and <tt>RELATIVE-OID</tt> were added;</t>
          </li>
          <li>
            <t>The use of <tt>T61String</tt> is discouraged;</t>
          </li>
          <li>
            <t>Clarified the allowable numbers in the first and second values of an <tt>OBJECT IDENTIFIER</tt>; and</t>
          </li>
          <li>
            <t>References were updated, and PKCS documents are now referenced by their RFC number.</t>
          </li>
        </ul>
        <t>This work is not a product of the IETF, does not represent a standard, and has not achieved community consensus.</t>
      </section>
      <section anchor="terminology-and-notation">
        <name>Terminology and notation</name>
        <t>In this note, an octet is an eight-bit unsigned integer. Bit 8 of the
octet is the most significant and bit 1 is the least significant.</t>
        <t>The following meta-syntax is used for describing ASN.1 notation in the
ASN.1 notation figures and accompanying text:</t>
        <table>
          <name>ASN.1 notation meta-syntax.</name>
          <thead>
            <tr>
              <th align="left">Notation</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>BIT</tt></td>
              <td align="left">all-caps (and monospace HTML and PDF) denotes literal characters in the type and value notation; in examples, it generally denotes an octet value in hexadecimal</td>
            </tr>
            <tr>
              <td align="left">
                <tt>n1</tt></td>
              <td align="left">lowercase denotes a variable, identifier, or value. In explanatory text the variable is surrounded by single quotes, e.g. <tt>'n1'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>Type1</tt></td>
              <td align="left">Initial-caps denotes a type. In explanatory text the type is surrounded by single quotes, e.g. <tt>'Type1'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>[]</tt></td>
              <td align="left">brackets indicate that a term is optional</td>
            </tr>
            <tr>
              <td align="left">
                <tt>{}</tt></td>
              <td align="left">braces group related terms</td>
            </tr>
            <tr>
              <td align="left">
                <tt>|</tt></td>
              <td align="left">vertical bar delimits alternatives with a group</td>
            </tr>
            <tr>
              <td align="left">
                <tt>...</tt></td>
              <td align="left">ellipsis indicates repeated occurrences</td>
            </tr>
            <tr>
              <td align="left">
                <tt>=</tt></td>
              <td align="left">equals sign expresses terms as subterms</td>
            </tr>
          </tbody>
        </table>
        <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="_section-2">
      <name>Abstract Syntax Notation One</name>
      <t>Abstract Syntax Notation One, abbreviated ASN.1, is a
notation for describing abstract types and values.</t>
      <t>In ASN.1, a type is a set of values. For some types, there
are a finite number of values, and for other types there are
an infinite number. A value of a given ASN.1 type is an
element of the type's set. ASN.1 has four kinds of type:
simple types, which are "atomic" and have no components;
structured types, which have components; tagged types, which
are derived from other types; and other types, which include
the <tt>CHOICE</tt> type and the <tt>ANY</tt> type. Types and values can be
given names with the ASN.1 assignment operator (::=) , and
those names can be used in defining other types and values.</t>
      <t>Every ASN.1 type other than <tt>CHOICE</tt> and <tt>ANY</tt> has a tag, which
consists of a class and a nonnegative tag number. ASN.1
types are abstractly the same if and only if their tag
numbers are the same. In other words, the name of an ASN.1
type does not affect its abstract meaning, only the tag
does. There are four classes of tag:</t>
      <dl newline="true">
        <dt>Universal:</dt>
        <dd>
          <t>for types whose meaning is the same in all applications;
these types are specified in <xref target="X680"/>.</t>
        </dd>
        <dt>Application:</dt>
        <dd>
          <t>for types whose meaning is specific to an application, such as X.500
directory services; types in two different applications may have the same
application-specific tag and different meanings.</t>
        </dd>
        <dt>Private:</dt>
        <dd>
          <t>for types whose meaning is specific to a given enterprise.</t>
        </dd>
        <dt>Context-specific:</dt>
        <dd>
          <t>for types whose meaning is specific to a given structured type;
context-specific tags are used to distinguish between component types
with the same underlying tag within the context of a given structured
type, and component types in two different structured types may have the
same tag and different meanings.</t>
        </dd>
      </dl>
      <t>The types with universal tags are defined in X.208, which
also gives the types' universal tag numbers. Types with
other tags are defined in many places, and are always
obtained by implicit or explicit tagging (see Section 2.3).
Table 1 lists some ASN.1 types and their universal-class
tags.</t>
      <table>
        <name>Some types and their universal-class tags.</name>
        <thead>
          <tr>
            <th align="left">Type</th>
            <th align="left">Decimal Tag Number</th>
            <th align="left">Hexadecimal Tag Number</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">INTEGER</td>
            <td align="left">2</td>
            <td align="left">02</td>
          </tr>
          <tr>
            <td align="left">BIT STRING</td>
            <td align="left">3</td>
            <td align="left">03</td>
          </tr>
          <tr>
            <td align="left">OCTET STRING</td>
            <td align="left">4</td>
            <td align="left">04</td>
          </tr>
          <tr>
            <td align="left">NULL</td>
            <td align="left">5</td>
            <td align="left">05</td>
          </tr>
          <tr>
            <td align="left">OBJECT IDENTIFIER</td>
            <td align="left">6</td>
            <td align="left">06</td>
          </tr>
          <tr>
            <td align="left">UTF8String</td>
            <td align="left">12</td>
            <td align="left">0c</td>
          </tr>
          <tr>
            <td align="left">RELATIVE-OID</td>
            <td align="left">13</td>
            <td align="left">0d</td>
          </tr>
          <tr>
            <td align="left">SEQUENCE and SEQUENCE OF</td>
            <td align="left">16</td>
            <td align="left">10</td>
          </tr>
          <tr>
            <td align="left">SET and SET OF</td>
            <td align="left">17</td>
            <td align="left">11</td>
          </tr>
          <tr>
            <td align="left">PrintableString</td>
            <td align="left">19</td>
            <td align="left">13</td>
          </tr>
          <tr>
            <td align="left">T61String</td>
            <td align="left">20</td>
            <td align="left">14</td>
          </tr>
          <tr>
            <td align="left">IA5String</td>
            <td align="left">22</td>
            <td align="left">16</td>
          </tr>
          <tr>
            <td align="left">UTCTime</td>
            <td align="left">23</td>
            <td align="left">17</td>
          </tr>
          <tr>
            <td align="left">GeneralizedTime</td>
            <td align="left">24</td>
            <td align="left">18</td>
          </tr>
        </tbody>
      </table>
      <t>ASN.1 types and values are expressed in a flexible,
programming-language-like notation, with the following
special rules:</t>
      <ul spacing="normal">
        <li>
          <t>Layout is not significant; multiple spaces and line breaks can be considered as a single space.</t>
        </li>
        <li>
          <t>Comments begin with a pair of hyphens (<tt>--</tt>), and comments end with another pair of hyphens or a line break.</t>
        </li>
        <li>
          <t>Identifiers (names of values and fields) and type references (names of types) consist of upper- and
lower-case letters, digits, hyphens, and spaces;
identifiers begin with lower-case letters; type
references begin with upper-case letters.</t>
        </li>
      </ul>
      <t>The following four subsections give an overview of simple
types, structured types, implicitly and explicitly tagged
types, and other types. Section 5 describes specific types
in more detail.</t>
      <section anchor="_section-2-1">
        <name>Simple types</name>
        <t>Simple types are those not consisting of components; they
are the "atomic" types. ASN.1 defines several; the types
that are relevant to the PKCS standards are the following:</t>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>BIT STRING</tt>,</dt>
              <dd>
                <t>an arbitrary string of bits (ones and zeroes).</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>IA5String</tt>,</dt>
              <dd>
                <t>an arbitrary string of IA5 (ASCII) characters <xref target="RFC0020"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>INTEGER</tt>,</dt>
              <dd>
                <t>an arbitrary integer.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>NULL</tt>,</dt>
              <dd>
                <t>a null value.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>OBJECT IDENTIFIER</tt></dt>
              <dd>
                <t>an object identifier, which is a
sequence of integer components that identify an
object such as an algorithm or attribute type.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>RELATIVE-OID</tt>,</dt>
              <dd>
                <t>a relative object identifier, which is a
sequence of integer components interpreted relative to
some object identifier established by context.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>OCTET STRING</tt>,</dt>
              <dd>
                <t>an arbitrary string of octets (eight-bit values).</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>UTF8String</tt>,</dt>
              <dd>
                <t>an arbitrary string of international characters using UTF-8 encoding.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>PrintableString</tt>,</dt>
              <dd>
                <t>an arbitrary string of printable characters.  The allowable characters are listed in <xref target="_section-5-12"/>.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>T61String</tt>,</dt>
              <dd>
                <t>an arbitrary string of T.61 (eight-bit) characters.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>UTCTime</tt>,</dt>
              <dd>
                <t>a "coordinated universal time" or Greenwich Mean Time (GMT) value.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>GeneralizedTime</tt>,</dt>
              <dd>
                <t>a time value in the local time zone, GMT, or the difference between local and GMT.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>Simple types fall into two categories: string types and non-
string types. <tt>BIT STRING</tt>, <tt>IA5String</tt>, <tt>OCTET STRING</tt>,
<tt>PrintableString</tt>, <tt>T61String</tt>, and <tt>UTCTime</tt> are string types.</t>
        <t>String types can be viewed, for the purposes of encoding, as
consisting of components, where the components are
substrings. This view allows one to encode a value whose
length is not known in advance (e.g., an octet string value
input from a file stream) with a constructed, indefinite-
length encoding (see Section 3).</t>
        <t>The string types can be given size constraints limiting the
length of values.</t>
      </section>
      <section anchor="_section-2-2">
        <name>Structured types</name>
        <t>Structured types are those consisting of components. ASN.1
defines four, all of which are relevant to the PKCS
standards:</t>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>SEQUENCE</tt>,</dt>
              <dd>
                <t>an ordered collection of one or more types.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>SEQUENCE OF</tt>,</dt>
              <dd>
                <t>an ordered collection of zero or more occurrences of a given type.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>SET</tt>,</dt>
              <dd>
                <t>an unordered collection of one or more types.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt><tt>SET OF</tt>,</dt>
              <dd>
                <t>an unordered collection of zero or more occurrences of a given type.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>The structured types can have optional components, possibly
with default values.</t>
      </section>
      <section anchor="_section-2-3">
        <name>Implicitly and explicitly tagged types</name>
        <t>Tagging is useful to distinguish types within an
application; it is also commonly used to distinguish
component types within a structured type. For instance,
optional components of a <tt>SET</tt> or <tt>SEQUENCE</tt> type are typically
given distinct context-specific tags to avoid ambiguity.</t>
        <t>There are two ways to tag a type: implicitly and explicitly.</t>
        <t>Implicitly tagged types are derived from other types by
changing the tag of the underlying type. Implicit tagging is
denoted by the ASN.1 keywords <tt>[class number] IMPLICIT</tt> (see <xref target="_section-5-1"/>).</t>
        <t>Explicitly tagged types are derived from other types by
adding an outer tag to the underlying type. In effect,
explicitly tagged types are structured types consisting of
one component, the underlying type. Explicit tagging is
denoted by the ASN.1 keywords <tt>[class number] EXPLICIT</tt> (see
<xref target="_section-5-2"/>).</t>
        <t>The keyword <tt>[class number]</tt> alone is the same as explicit
tagging, except when the "module" in which the ASN.1 type is
defined has implicit tagging by default. ("Modules" are
among the advanced features not described in this note.)</t>
        <t>For purposes of encoding, an implicitly tagged type is
considered the same as the underlying type, except that the
tag is different. An explicitly tagged type is considered
like a structured type with one component, the underlying
type. Implicit tags result in shorter encodings, but
explicit tags may be necessary to avoid ambiguity if the tag
of the underlying type is indeterminate (e.g., the
underlying type is <tt>CHOICE</tt> or <tt>ANY</tt>).</t>
      </section>
      <section anchor="_section-2-4">
        <name>Other types</name>
        <t>Other types in ASN.1 include the <tt>CHOICE</tt> and <tt>ANY</tt> types. The
<tt>CHOICE</tt> type denotes a union of one or more alternatives; the
<tt>ANY</tt> type denotes an arbitrary value of an arbitrary type,
where the arbitrary type is possibly defined in the
registration of an object identifier or integer value.</t>
      </section>
    </section>
    <section anchor="_section-3">
      <name>Basic Encoding Rules</name>
      <t>The Basic Encoding Rules for ASN.1, abbreviated BER, give
one or more ways to represent any ASN.1 value as an octet
string. (There are certainly other ways to represent ASN.1
values, and ASN.1 syntax itself does not dictate the encoding
but BER is the standard for interchanging such values in OSI.)</t>
      <t>There are three methods to encode an ASN.1 value under BER,
the choice of which depends on the type of value and whether
the length of the value is known. The three methods are
primitive, definite-length encoding; constructed, definite-length
encoding; and constructed, indefinite-length encoding. Simple
non-string types (such as <tt>BOOLEAN</tt>, <tt>INTEGER</tt>, <tt>NULL</tt>, and
<tt>OBJECT IDENTIFIER</tt>) employ the primitive,
definite-length method; structured types employ either of
the constructed methods; and simple string types employ any
of the methods, depending on whether the length of the value
is known. Types derived by implicit tagging employ the
method of the underlying type and types derived by explicit
tagging employ the constructed methods.</t>
      <t>In each method, the BER encoding has three or four parts:</t>
      <ul empty="true">
        <li>
          <dl>
            <dt>Identifier octets.</dt>
            <dd>
              <t>These identify the class and tag
number of the ASN.1 value, and indicate whether
the method is primitive or constructed.</t>
            </dd>
          </dl>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <dl>
            <dt>Length octets.</dt>
            <dd>
              <t>For the definite-length methods, these
give the number of contents octets. For the
constructed, indefinite-length method, these
indicate that the length is indefinite.</t>
            </dd>
          </dl>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <dl>
            <dt>Contents octets.</dt>
            <dd>
              <t>For the primitive, definite-length
method, these give a concrete representation of
the  value. For the constructed methods, these
give the concatenation of the BER encodings of the
components of the value.</t>
            </dd>
          </dl>
        </li>
      </ul>
      <ul empty="true">
        <li>
          <dl>
            <dt>End-of-contents octets.</dt>
            <dd>
              <t>For the constructed, indefinite-length
method, these denote the end of the contents. For the other
methods, these are absent.</t>
            </dd>
          </dl>
        </li>
      </ul>
      <t>The three methods of encoding are described in the following
sections.</t>
      <section anchor="_section-3-1">
        <name>Primitive, definite-length method</name>
        <t>This method applies to simple types and types derived from
simple types by implicit tagging. It requires that the
length of the value be known in advance. The parts of the
BER encoding are as follows:</t>
        <dl>
          <dt>Identifier octets.</dt>
          <dd>
            <t>There are two forms: low tag number (for
tag numbers between 0 and 30) and high tag number (for tag
numbers 31 and greater).</t>
          </dd>
        </dl>
        <ul empty="true">
          <li>
            <dl>
              <dt>Low-tag-number form.</dt>
              <dd>
                <t>One octet. Bits 8 and 7 specify
the class (see Table 2), bit 6 has value "0",
indicating that the encoding is primitive, and
bits 5-1 give the tag number.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>High-tag-number form.</dt>
              <dd>
                <t>Two or more octets. First octet
is as in low-tag-number form, except that bits 5-1
all have value "1". Second and following octets
give the tag number, base 128, most significant
digit first, with as few digits as possible, and
with the bit 8 of each octet except the last set
to "1".</t>
              </dd>
            </dl>
          </li>
        </ul>
        <table>
          <name>Class encoding in identifier octets.</name>
          <thead>
            <tr>
              <th align="left">Class</th>
              <th align="left">Bit 8</th>
              <th align="left">Bit 7</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">universal</td>
              <td align="left">0</td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">application</td>
              <td align="left">0</td>
              <td align="left">1</td>
            </tr>
            <tr>
              <td align="left">context-specific</td>
              <td align="left">1</td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">private</td>
              <td align="left">1</td>
              <td align="left">1</td>
            </tr>
          </tbody>
        </table>
        <dl>
          <dt>Length octets.</dt>
          <dd>
            <t>There are two forms: short (for lengths
between 0 and 127), and long definite (for lengths between 0
and 2^1008 -1).</t>
          </dd>
        </dl>
        <ul empty="true">
          <li>
            <dl>
              <dt>Short form.</dt>
              <dd>
                <t>One octet. Bit 8 has value "0" and bits 7-1
give the length. For example the length for an encoding that has 32 contents octets would
encode simply as <tt>20</tt></t>
              </dd>
            </dl>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <dl>
              <dt>Long form.</dt>
              <dd>
                <t>Two to 127 octets. Bit 8 of first octet has
value "1" and bits 7-1 give the number of
additional length octets. Second and following
octets give the length, base 256, most significant
digit first. For example the length for an encoding that has 3200 contents octets would
encode simply as <tt>82 0c 80</tt>, the first octet indicating that the length is in the
following 2 octets and the next two octets give the value of the
length.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <dl>
          <dt>Contents octets.</dt>
          <dd>
            <t>These give a concrete representation of the
value (or the value of the underlying type, if the type is
derived by implicit tagging). Details for particular types
are given in <xref target="_section-5"/>.</t>
          </dd>
        </dl>
        <section anchor="_section-3-1-1">
          <name>Prefixes and Magic Numbers</name>
          <t>It is worth noting that definite-length encodings, by their nature, are
simple enough to parse without the need for a complete ASN.1 decoder
and prefixes to the contents octets can often be treated like magic
numbers in order to recognise the contents octets that are following.</t>
          <t>For example, the private key field of an encoded ML-DSA-44 private key, which is defined as a <tt>CHOICE</tt> item with the following structure:</t>
          <sourcecode type="asn.1"><![CDATA[
ML-DSA-44-PrivateKey ::= CHOICE {
     seed [0] OCTET STRING (SIZE (32)),
     expandedKey OCTET STRING (SIZE (2560)),
     both SEQUENCE {
         seed OCTET STRING (SIZE (32)),
         expandedKey OCTET STRING (SIZE (2560))
         }
     }
]]></sourcecode>
          <t>can be recomposed as a series of contents octets preceeded by one of
the following prefixes and
breakdowns:</t>
          <table>
            <name>Prefixes for an ML-DSA private key CHOICE item.</name>
            <thead>
              <tr>
                <th align="left">Prefix</th>
                <th align="left">CHOICE Item</th>
                <th align="left">Breakdown</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>80 20</tt></td>
                <td align="left">
                  <tt>seed</tt></td>
                <td align="left">tag <tt>0x80</tt>, short form, length 1 octet, value 32</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>04 82 0a 00</tt></td>
                <td align="left">
                  <tt>expandedKey</tt></td>
                <td align="left">tag <tt>0x04</tt>, long form, length 3 octets, value 2560</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>30 82 0a 26</tt></td>
                <td align="left">
                  <tt>both</tt></td>
                <td align="left">tag <tt>0x30</tt>, long form, length 3 octets, value 2598</td>
              </tr>
            </tbody>
          </table>
          <t>As can be seen from the table, the first octet of each prefix can be
used to distinguish the <tt>CHOICE</tt> item that has been used to describe the
ML-DSA-44 private key value.</t>
          <t>The three-octet lengths for <tt>expandedKey</tt> and <tt>both</tt> start with 0x82
and indicate that the real length of the contents octets is two
octets long.  In the case <tt>both</tt> <tt>CHOICE</tt> item, the contents octets
will contain the the prefixes given in the first two rows, as they
appear at the start of the encodings of each of the elements in the
<tt>SEQUENCE</tt>.</t>
        </section>
      </section>
      <section anchor="_section-3-2">
        <name>Constructed, definite-length method</name>
        <t>This method applies to simple string types, structured
types, types derived from simple string types and structured
types by implicit tagging, and types derived from anything
by explicit tagging. It requires that the length of the
value be known in advance. The parts of the BER encoding are
as follows:</t>
        <dl>
          <dt>Identifier octets.</dt>
          <dd>
            <t>As described in <xref target="_section-3-1"/>, except that bit 6 has value "1",
indicating that the encoding is constructed.</t>
          </dd>
          <dt>Length octets.</dt>
          <dd>
            <t>As described in <xref target="_section-3-1"/>.</t>
          </dd>
          <dt>Contents octets.</dt>
          <dd>
            <t>The concatenation of the BER encodings of the components of the value:</t>
          </dd>
        </dl>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>For simple string types and types derived from
them by implicit tagging, the concatenation of the
BER encodings of consecutive substrings of the
value (underlying value for implicit tagging). For example an <tt>OCTET STRING</tt> of length 8 encoded as a definite-length constructed encoding would encode as: <tt>24 0c 04 04 00000000 04 04 00000000</tt></t>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>For structured types and types derived from them
by implicit tagging, the concatenation of the BER
encodings of components of the value (underlying
value for implicit tagging).</t>
              </li>
            </ul>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <ul spacing="normal">
              <li>
                <t>For types derived from anything by explicit
tagging, the BER encoding of the underlying value.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Details for particular types are given in <xref target="_section-5"/>.</t>
      </section>
      <section anchor="_section-3-3">
        <name>Constructed, indefinite-length method</name>
        <t>This method applies to simple string types, structured
types, types derived simple string types and structured
types by implicit tagging, and types derived from anything
by explicit tagging. It does not require that the length of
the value be known in advance. The parts of the BER encoding
are as follows:</t>
        <dl>
          <dt>Identifier octets.</dt>
          <dd>
            <t>As described in <xref target="_section-3-2"/>.</t>
          </dd>
          <dt>Length octets.</dt>
          <dd>
            <t>One octet, <tt>80</tt>.</t>
          </dd>
          <dt>Contents octets.</dt>
          <dd>
            <t>As described in <xref target="_section-3-2"/>.</t>
          </dd>
          <dt>End-of-contents octets.</dt>
          <dd>
            <t>Two octets, <tt>00 00</tt>.</t>
          </dd>
        </dl>
        <t>Since the end-of-contents octets appear where an ordinary
BER encoding might be expected (e.g., in the contents octets
of a sequence value), the <tt>00</tt> and <tt>00</tt> appear as identifier and
length octets, respectively. Thus the end-of-contents octets
is really the primitive, definite-length encoding of a value
with universal class, tag number 0, and length 0.</t>
        <t>Considering our previous example of an 8 byte <tt>OCTET STRING</tt> in constructed form with 4 byte elements, the indefinite length
encoding would produce: <tt>24 80 04 04 00000000 04 04 00000000 0000</tt></t>
      </section>
    </section>
    <section anchor="_section-4">
      <name>Distinguished Encoding Rules</name>
      <t>The Distinguished Encoding Rules for ASN.1, abbreviated DER,
are a subset of BER, and give exactly one way to represent
any ASN.1 value as an octet string. DER is intended for
applications in which a unique octet string encoding is
needed, as is the case when a digital signature is computed
on an ASN.1 value. BER and DER are defined in <xref target="X690"/>.</t>
      <t>DER adds the following restrictions to the rules given in
<xref target="_section-3"/>:</t>
      <ol spacing="normal" type="1"><li>
          <t>When the length is between 0 and 127, the short
form of length must be used</t>
        </li>
        <li>
          <t>When the length is 128 or greater, the long form
of length must be used, and the length must be
encoded in the minimum number of octets.</t>
        </li>
        <li>
          <t>For simple string types and implicitly tagged
types derived from simple string types, the
primitive, definite-length method must be
employed.</t>
        </li>
        <li>
          <t>For structured types, implicitly tagged types
derived from structured types, and explicitly
tagged types derived from anything, the
constructed, definite-length method must be
employed.</t>
        </li>
      </ol>
      <t>Other restrictions are defined for particular types (such as
<tt>BOOLEAN</tt>, <tt>BIT STRING</tt>, <tt>SEQUENCE</tt>, <tt>SET</tt>, and <tt>SET OF</tt>), and can be found in
<xref target="_section-5"/>.</t>
    </section>
    <section anchor="_section-5">
      <name>Notation and encodings for some types</name>
      <t>This section gives the notation for some ASN.1 types and
describes how to encode values of those types under both BER
and DER.</t>
      <t>The types described are those presented in <xref target="_section-2"/>. They
are listed alphabetically here.</t>
      <t>Each description includes ASN.1 notation, BER encoding, and
DER encoding. The focus of the encodings is primarily on the
contents octets; the tag and length octets follow Sections 3
and 4. The descriptions also explain where each type is used
in PKCS and related standards. ASN.1 notation is generally
only for types, although for the type <tt>OBJECT IDENTIFIER</tt>,
value notation is given as well.</t>
      <section anchor="_section-5-1">
        <name>Implicitly tagged types</name>
        <t>An implicitly tagged type is a type derived from another
type by changing the tag of the underlying type.</t>
        <t>Implicit tagging is used for optional <tt>SEQUENCE</tt> components
with underlying type other than <tt>ANY</tt> in many protocols, including
<xref target="RFC5280"/> and <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-implicit-tag">
          <name>Implicit tagging ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
[[class] number] IMPLICIT Type

class = UNIVERSAL | APPLICATION | PRIVATE
]]></sourcecode>
        </figure>
        <t>where <tt>'Type'</tt> is a type, <tt>'class'</tt> is an optional class name, and
<tt>'number'</tt> is the tag number within the class, a nonnegative
integer.</t>
        <t>In ASN.1 modules whose default tagging method is implicit
tagging, the notation <tt>[[class] number] Type</tt> is also
acceptable, and the keyword <tt>IMPLICIT</tt> is implied. (See <xref target="_section-2-3"/>.) For
definitions stated outside a module, the explicit inclusion of the keyword
<tt>IMPLICIT</tt> is preferable to prevent ambiguity.</t>
        <t>If the class name is absent, then the tag is context-specific. Context-specific
tags can only appear in a component of a structured or <tt>CHOICE</tt> type.</t>
        <t>Example: PKCS #8 <tt>PrivateKeyInfo</tt> type <xref target="RFC5958"/> has an optional
<tt>attributes</tt> component with an implicit, context-specific tag:</t>
        <sourcecode type="asn.1"><![CDATA[
PrivateKeyInfo ::= SEQUENCE {
  version Version,
  privateKeyAlgorithm PrivateKeyAlgorithmIdentifier,
  privateKey PrivateKey,
  attributes [0] IMPLICIT Attributes OPTIONAL }
]]></sourcecode>
        <t>Here the underlying type is <tt>Attributes</tt>, the class is absent
(i.e., context-specific), and the tag number within the
class is 0.</t>
        <section anchor="ber-encoding">
          <name>BER Encoding</name>
          <t>Primitive or constructed, depending on the
underlying type. Contents octets are as for the BER encoding
of the underlying value.</t>
          <t>Example: The BER encoding of the <tt>attributes</tt> component of a
<tt>PrivateKeyInfo</tt> value is as follows:</t>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>the identifier octets are <tt>80</tt> if the underlying
<tt>Attributes</tt> value has a primitive BER encoding and
<tt>a0</tt> if the underlying <tt>Attributes</tt> value has a
constructed BER encoding</t>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>the length and contents octets are the same as the
length and contents octets of the BER encoding of
the underlying <tt>Attributes</tt> value</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="der-encoding">
          <name>DER Encoding</name>
          <t>Primitive or constructed, depending on the
underlying type. Contents octets are as for the DER encoding
of the underlying value.</t>
        </section>
      </section>
      <section anchor="_section-5-2">
        <name>Explicitly tagged types</name>
        <t>Explicit tagging denotes a type derived from another type by
adding an outer tag to the underlying type.</t>
        <t>Explicit tagging is used for optional <tt>SEQUENCE</tt> components
with underlying type <tt>ANY</tt> throughout in many protocols, including
the version component of the <tt>Certificate</tt> type <xref target="RFC5280"/>.</t>
        <t>Implicit tagging is used for optional <tt>SEQUENCE</tt> components
with underlying type other than <tt>ANY</tt>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-explicit-tag">
          <name>Explicit tagging ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
[[class] number] EXPLICIT Type

class = UNIVERSAL | APPLICATION | PRIVATE
]]></sourcecode>
        </figure>
        <t>where <tt>'Type'</tt> is a type, <tt>'class'</tt> is an optional class name, and
<tt>'number'</tt> is the tag number within the class, a nonnegative
integer.</t>
        <t>If the class name is absent, then the tag is context-
specific. Context-specific tags can only appear in a
component of a <tt>SEQUENCE</tt>, <tt>SET</tt> or <tt>CHOICE</tt> type.</t>
        <t>In ASN.1 "modules" whose default tagging method is explicit
tagging, the notation <tt>[[class] number ] Type</tt> is also
acceptable, and the keyword <tt>EXPLICIT</tt> is implied. (See
<xref target="_section-2-3"/>.) For definitions stated outside a module, the
explicit inclusion of the keyword <tt>EXPLICIT</tt> is preferable to
prevent ambiguity.</t>
        <t>Example 1: The CMS <tt>ContentInfo</tt> type <xref target="RFC5652"/> has an optional
content component with an explicit, context-specific tag:</t>
        <sourcecode type="asn.1"><![CDATA[
ContentInfo ::= SEQUENCE {
  contentType ContentType,
  content [0] EXPLICIT ANY DEFINED BY contentType OPTIONAL }
]]></sourcecode>
        <t>Here the underlying type is <tt>ANY DEFINED BY contentType</tt>, the
class is absent (i.e., context-specific), and the tag number
within the class is 0.</t>
        <t>Example 2: the <tt>Certificate</tt> type <xref target="RFC5280"/> has a version component
with an explicit, context-specific tag, where the <tt>EXPLICIT</tt>
keyword is omitted:</t>
        <sourcecode type="asn.1"><![CDATA[
Certificate ::= ...
  version [0] Version DEFAULT v1988,
   ...
]]></sourcecode>
        <t>The tag is explicit because the default tagging method for
the ASN.1 module in <xref target="RFC5280"/> that defines the <tt>Certificate</tt>
type is explicit tagging.</t>
        <section anchor="ber-encoding-1">
          <name>BER Encoding</name>
          <t>Constructed. Contents octets are the BER
encoding of the underlying value.</t>
          <t>Example: the BER encoding of the content component of a
<tt>ContentInfo</tt> value is as follows:</t>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>identifier octets are <tt>a0</tt></t>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>length octets represent the length of the BER
encoding of the underlying <tt>ANY DEFINED BY</tt>
                    <tt>contentType</tt> value</t>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>contents octets are the BER encoding of the
underlying <tt>ANY DEFINED BY contentType</tt> value</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="der-encoding-1">
          <name>DER Encoding</name>
          <t>Constructed. Contents octets are the DER
encoding of the underlying value.</t>
        </section>
      </section>
      <section anchor="_section-5-3">
        <name>ANY</name>
        <t>In the original ASN.1 specification, the
<tt>ANY</tt> type denotes an arbitrary value of an arbitrary
type, where the arbitrary type is possibly defined in the
registration of an object identifier or associated with an
integer index.</t>
        <t>In <xref target="RFC5652"/>, the <tt>ANY</tt> type is used for content of a particular content
type within the <tt>ContentInfo</tt> type.  In <xref target="RFC5280"/> and <xref target="RFC5652"/>, the <tt>ANY</tt>
type is used for parameters of a particular algorithm within the
<tt>AlgorithmIdentifier</tt> type.  In <xref target="RFC5280"/>, the <tt>ANY</tt> type is used for
attribute values within the <tt>Attribute</tt> type.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-any">
          <name>ANY ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
ANY [DEFINED BY identifier]
]]></sourcecode>
        </figure>
        <t>where <tt>'identifier'</tt> is an optional identifier.</t>
        <t>In the <tt>ANY</tt> form, the actual type is indeterminate.</t>
        <t>The <tt>ANY DEFINED BY</tt> identifier form can only appear in a
component of a <tt>SEQUENCE</tt> or <tt>SET</tt> type for which identifier
identifies some other component, and that other component
has type <tt>INTEGER</tt> or <tt>OBJECT IDENTIFIER</tt> (or a type derived
from either of those by tagging). In that form, the actual
type is determined by the value of the other component,
either in the registration of the object identifier value,
or in a table of integer values.</t>
        <t>Example: The <tt>AlgorithmIdentifier</tt> type <xref target="RFC5280"/> has a component of
type <tt>ANY</tt>:</t>
        <sourcecode type="asn.1"><![CDATA[
AlgorithmIdentifier ::= SEQUENCE {
  algorithm OBJECT IDENTIFIER,
  parameters ANY DEFINED BY algorithm OPTIONAL }
]]></sourcecode>
        <t>Here the actual type of the <tt>parameter</tt> component depends on
the value of the <tt>algorithm</tt> component. The actual type would
be defined in the registration of object identifier values
for the <tt>algorithm</tt> component.</t>
        <section anchor="ber-encoding-2">
          <name>BER Encoding</name>
          <t>Same as the BER encoding of the actual value.</t>
          <t>Example: The BER encoding of the value of the <tt>parameter</tt>
component is the BER encoding of the value of the actual
type as defined in the registration of object identifier
values for the <tt>algorithm</tt> component.</t>
        </section>
        <section anchor="der-encoding-2">
          <name>DER Encoding</name>
          <t>Same as the DER encoding of the actual value.</t>
          <t>In the modern ASN.1 specification, the <tt>CLASS</tt> construction replaces the
<tt>ANY</tt> type.</t>
          <t>Example: The <tt>AlgorithmIdentifier</tt> type can be implemented as shown
below, which is a simplification of the definition in <xref target="RFC5912"/>:</t>
          <sourcecode type="asn.1"><![CDATA[
ALGORITHM ::= CLASS {
  &id OBJECT IDENTIFIER UNIQUE,
  &Params OPTIONAL,
} WITH SYNTAX {
  IDENTIFIER &id
  [PARAMS [TYPE &Params]]
}

AlgorithmIdentifier{ALGORITHM:AlgorithmSet} ::= SEQUENCE {
  algorithm ALGORITHM.&id({AlgorithmSet}),
  parameters ALGORITHM.&Params({AlgorithmSet}{@algorithm}) OPTIONAL }
]]></sourcecode>
          <t>Of course, the BER and DER encoding are unchanged.</t>
          <t>The <tt>AlgorithmSet</tt> makes it easier for implementers to determine all
of the algorithm identifiers and the associated type for parameters, if
any are defined.</t>
        </section>
      </section>
      <section anchor="_section-5-4">
        <name>BIT STRING</name>
        <t>The <tt>BIT STRING</tt> type denotes an arbitrary string of bits
(ones and zeroes). A <tt>BIT STRING</tt> value can have any length,
including zero. This type is a string type.</t>
        <t>The <tt>BIT STRING</tt> type is used for digital signatures on
for digital signatures on certificates and for public keys in certificates in
<tt>SubjectPublicKeyInfo</tt> type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-bit-string">
          <name>BIT STRING ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
BIT STRING
]]></sourcecode>
        </figure>
        <t>Example: <tt>SubjectPublicKeyInfo</tt> type <xref target="RFC5280"/> has a component
of type <tt>BIT STRING</tt>:</t>
        <sourcecode type="asn.1"><![CDATA[
SubjectPublicKeyInfo ::= SEQUENCE {
  algorithm AlgorithmIdentifier,
  publicKey BIT STRING }
]]></sourcecode>
        <section anchor="ber-encoding-3">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the first contents octet gives the number of bits
by which the length of the bit string is less than the next
multiple of eight (this is called the "number of unused
bits"). The first contents octet is always encoded; if
the length of the bit string is 0 bits, then the first
contents octet will have the value 0 and there not be any
subsequent contents octets. The second and following contents
octets give the value of the bit string, converted to an octet string.
The conversion process is as follows:</t>
          <ol spacing="normal" type="1"><li>
              <t>The bit string is padded after the last bit with
zero to seven bits of any value to make the length
of the bit string a multiple of eight. If the
length of the bit string is a multiple of eight
already, no padding is done.</t>
            </li>
            <li>
              <t>The padded bit string is divided into octets. The
first eight bits of the padded bit string become
the first octet, bit 8 to bit 1, and so on through
the last eight bits of the padded bit string.</t>
            </li>
          </ol>
          <t>In a constructed encoding, the contents octets give the
concatenation of the BER encodings of consecutive substrings
of the bit string, where each substring except the last has
a length that is a multiple of eight bits.</t>
          <t>Example: The BER encoding of the <tt>BIT STRING</tt> value
"011011100101110111" can be any of the following, among
others, depending on the choice of padding bits, the form of
length octets, and whether the encoding is primitive or
constructed:</t>
          <artwork><![CDATA[
03 04 06 6e 5d c0                               DER encoding

03 04 06 6e 5d e0                       padded with "100000"

03 81 04 06 6e 5d c0              long form of length octets

23 09        constructed encoding: "0110111001011101" + "11"
   03 03 00 6e 5d
   03 02 06 c0
]]></artwork>
        </section>
        <section anchor="der-encoding-3">
          <name>DER Encoding</name>
          <t>Primitive. The contents octets are as for a
primitive BER encoding, except that the bit string is padded
with zero-valued bits. Additionally, <tt>BIT STRING</tt>s that represent
named bit lists, such as the value of the Key Usage certificate
extension <xref target="RFC5280"/>, have all trailing 0 bits removed
before it is encoded.</t>
          <t>Example: The DER encoding of the <tt>BIT STRING</tt> value
"011011100101110111" is:</t>
          <artwork><![CDATA[
03 04 06 6e 5d c0
]]></artwork>
          <t>Example: The DER encoding of a Key Usage certificate extension value,
asserting only the <tt>digitalSignature</tt> bit:</t>
          <artwork><![CDATA[
03 02 07 80
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-5">
        <name>BOOLEAN</name>
        <section anchor="ber-encoding-4">
          <name>BER Encoding</name>
          <t>Primitive. A single octet in length, for <tt>FALSE</tt> the octet is set to zero, for <tt>TRUE</tt>, the octet is non-zero.</t>
        </section>
        <section anchor="der-encoding-4">
          <name>DER Encoding</name>
          <t>Primitive. A single octet in length, for <tt>FALSE</tt> the octet is set to zero, for <tt>TRUE</tt>, the octet is set to 0xFF.</t>
          <t>Example: The DER encoding of the <tt>BOOLEAN</tt> value
<tt>TRUE</tt> is:</t>
          <artwork><![CDATA[
01 01 FF
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-6">
        <name>CHOICE</name>
        <t>The <tt>CHOICE</tt> type denotes a union of one or more alternatives.</t>
        <t>The <tt>CHOICE</tt> type is used to represent the union of an
extended certificate and an X.509 certificate in the
<tt>ExtendedCertificateOrCertificate</tt> type specified in <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-example">
          <name>CHOICE ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
CHOICE {
  [identifier1] Type1,
  ...,
  [identifierN] TypeN }
]]></sourcecode>
        </figure>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are optional, distinct
identifiers for the alternatives, and <tt>'Type1'</tt>, ..., <tt>'TypeN'</tt> are
the types of the alternatives. The identifiers are primarily
for documentation; they do not affect values of the type or
their encodings in any way.</t>
        <t>The types must have distinct tags. This requirement is
typically satisfied with explicit or implicit tagging on
some of the alternatives.</t>
        <t>Example: In <xref target="RFC5652"/>, the <tt>ExtendedCertificateOrCertificate</tt> type is
a <tt>CHOICE</tt> type:</t>
        <sourcecode type="asn.1"><![CDATA[
ExtendedCertificateOrCertificate ::= CHOICE {
  certificate Certificate, -- X.509
  extendedCertificate [0] IMPLICIT ExtendedCertificate }
]]></sourcecode>
        <t>Here the identifiers for the alternatives are <tt>certificate</tt>
and <tt>extendedCertificate</tt>, and the types of the alternatives
are <tt>Certificate</tt> and [0] <tt>IMPLICIT ExtendedCertificate</tt>.</t>
        <section anchor="ber-encoding-5">
          <name>BER Encoding</name>
          <t>Same as the BER encoding of the chosen
alternative. The fact that the alternatives have distinct
tags makes it possible to distinguish between their BER
encodings.</t>
          <t>Example: The identifier octets for the BER encoding are <tt>30</tt>
if the chosen alternative is <tt>certificate</tt>, and <tt>a0</tt> if the
chosen alternative is <tt>extendedCertificate</tt>.</t>
        </section>
        <section anchor="der-encoding-5">
          <name>DER Encoding</name>
          <t>Same as the DER encoding of the chosen
alternative.</t>
        </section>
      </section>
      <section anchor="_section-5-7">
        <name>IA5String</name>
        <t>The <tt>IA5String</tt> type denotes an arbitrary string of IA5
characters. IA5 stands for International Alphabet 5, which
is the same as ASCII. The character set includes non-printing
control characters. An <tt>IA5String</tt> value can have any
length, including zero. This type is a string type.</t>
        <t>The <tt>IA5String</tt> type is used in the PKCS #9 <xref target="RFC2985"/> electronic-mail
address, unstructured-name, and unstructured-address
attributes.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-ia5string">
          <name>IA5String ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
IA5String
]]></sourcecode>
        </figure>
        <section anchor="ber-encoding-6">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the IA5
string, encoded in ASCII. In a constructed encoding, the
contents octets give the concatenation of the BER encodings
of consecutive substrings of the IA5 string.</t>
          <t>Example: The BER encoding of the <tt>IA5String</tt> value
"test1@example.com" can be any of the following, among others,
depending on the form of length octets and whether the
encoding is primitive or constructed:</t>
          <artwork><![CDATA[
16 11 74 65 73 74 31 40 65 78 61 6d 70 6c 65 2e 63 6f 6d DER encoding

16 81 11                       long form of length octets
   74 65 73 74 31 40 65 78 61 6d 70 6c 65 2e 63 6f 6d

36 17     constructed encoding: "test1" + "@" + "example.com"
   16 05 74 65 73 74 31
   16 01 40
   16 0B 65 78 61 6d 70 6c 65 2e 63 6f 6d
]]></artwork>
        </section>
        <section anchor="der-encoding-6">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
          <t>Example: The DER encoding of the <tt>IA5String</tt> value
"test1@example.com" is</t>
          <artwork><![CDATA[
16 11 74 65 73 74 31 40 65 78 61 6d 70 6c 65 2e 63 6f 6d
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-8">
        <name>INTEGER</name>
        <t>The <tt>INTEGER</tt> type denotes an arbitrary integer. <tt>INTEGER</tt>
values can be positive, negative, or zero, and can have any
magnitude.</t>
        <t>The <tt>INTEGER</tt> type is used for version numbers in many protocols,
including <xref target="RFC5280"/> and <xref target="RFC5652"/>.  The <tt>INTEGER</tt> type is used
for cryptographic values such as modulus, exponent, and
primes in the PKCS #1 <tt>RSAPublicKey</tt> and <tt>RSAPrivateKey</tt> types <xref target="RFC8017"/>.
The <tt>INTEGER</tt> type is used for a message-digest iteration count
in PKCS #5 <tt>PBEParameter</tt> type <xref target="RFC8018"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-integer">
          <name>INTEGER ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
INTEGER [{ identifier1(value1) ... identifierN(valueN) }]
]]></sourcecode>
        </figure>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are optional distinct
identifiers and <tt>'value1'</tt>, ..., <tt>'valueN'</tt> are optional integer
values. The identifiers, when present, are associated with
values of the type. <tt>INTEGER</tt> is always signed.</t>
        <t>Example: <tt>Version</tt> type <xref target="RFC5280"/> is an <tt>INTEGER</tt> type with
identified values:</t>
        <sourcecode type="asn.1"><![CDATA[
Version ::= INTEGER  { v1(0), v2(1), v3(2) }
]]></sourcecode>
        <t>The identifier v1 is associated with the value 0. The
<tt>Certificate</tt> type <xref target="RFC5280"/> uses the identifier v1 to give a default
value of 0 for the version component:</t>
        <sourcecode type="asn.1"><![CDATA[
Certificate ::= ...
  version Version DEFAULT v1,
  ...
]]></sourcecode>
        <section anchor="ber-encoding-7">
          <name>BER Encoding</name>
          <t>Primitive. Contents octets give the value of
the integer, base 256, in two's complement form, most
significant digit first, with the minimum number of octets.
The value 0 is encoded as a single <tt>00</tt> octet.</t>
          <t>Some example BER encodings (which also happen to be DER
encodings) are given in Table 3.</t>
          <table>
            <name>Example BER encodings of INTEGER values.</name>
            <thead>
              <tr>
                <th align="left">Integer value</th>
                <th align="left">BER encoding</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0</td>
                <td align="left">
                  <tt>02 01 00</tt></td>
              </tr>
              <tr>
                <td align="left">127</td>
                <td align="left">
                  <tt>02 01 7F</tt></td>
              </tr>
              <tr>
                <td align="left">128</td>
                <td align="left">
                  <tt>02 02 00 80</tt></td>
              </tr>
              <tr>
                <td align="left">256</td>
                <td align="left">
                  <tt>02 02 01 00</tt></td>
              </tr>
              <tr>
                <td align="left">-128</td>
                <td align="left">
                  <tt>02 01 80</tt></td>
              </tr>
              <tr>
                <td align="left">-129</td>
                <td align="left">
                  <tt>02 02 FF 7F</tt></td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="der-encoding-7">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
        </section>
      </section>
      <section anchor="_section-5-9">
        <name>NULL</name>
        <t>The <tt>NULL</tt> type denotes a null value.</t>
        <t>The <tt>NULL</tt> type is used for algorithm parameters in several
places in as required algorithm parameters, including <xref target="RFC4055"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-null">
          <name>NULL ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
NULL
]]></sourcecode>
        </figure>
        <section anchor="ber-encoding-8">
          <name>BER Encoding</name>
          <t>Primitive. Contents octets are empty.</t>
          <t>Example: The BER encoding of a <tt>NULL</tt> value can be either of
the following, as well as others, depending on the form of
the length octets:</t>
          <artwork><![CDATA[
05 00

05 81 00
]]></artwork>
        </section>
        <section anchor="der-encoding-8">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are empty; the DER
encoding of a <tt>NULL</tt> value is always <tt>05 00</tt>.</t>
        </section>
      </section>
      <section anchor="_section-5-10">
        <name>OBJECT IDENTIFIER</name>
        <t>The <tt>OBJECT IDENTIFIER</tt> type denotes an object identifier, a
sequence of integer components that identifies an object
such as an algorithm, an attribute type, or perhaps a
registration authority that defines other object
identifiers. An <tt>OBJECT IDENTIFIER</tt> value can have any number
of components, and components can generally have any
nonnegative value. This type is a non-string type.</t>
        <t><tt>OBJECT IDENTIFIER</tt> values are given meanings by registration
authorities. Each registration authority is responsible for
all sequences of components beginning with a given sequence.
A registration authority typically delegates responsibility
for subsets of the sequences in its domain to other
registration authorities, or for particular types of object.
There are always at least two components.</t>
        <t>The <tt>OBJECT IDENTIFIER</tt> type is used to identify content in
<tt>ContentInfo</tt> type <xref target="RFC5652"/>, to identify algorithms in
<tt>AlgorithmIdentifier</tt> type <xref target="RFC5280"/> and <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-object-identifier">
          <name>OBJECT IDENTIFIER ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
OBJECT IDENTIFIER
]]></sourcecode>
        </figure>
        <t>The ASN.1 notation for values of the <tt>OBJECT IDENTIFIER</tt> type is</t>
        <figure anchor="fig-object-identifier-value">
          <name>OBJECT IDENTIFIER value ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
{ [identifier] component1 ... componentN }

componentI = identifierI | identifierI (valueI) | valueI
]]></sourcecode>
        </figure>
        <t>where <tt>'identifier'</tt>, <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are
identifiers, and <tt>'value1'</tt>, ..., <tt>'valueI'</tt> are optional integer
values.</t>
        <t>The form without <tt>'identifier'</tt> is the "complete" value with all
its components; the form with <tt>'identifier'</tt> abbreviates the
beginning components with another object identifier value.
The identifiers <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are intended
primarily for documentation, but they must correspond to the
integer value when both are present. These identifiers can
appear without integer values only if they are among a small
set of identifiers defined in <xref target="X680"/>.</t>
        <t>Example: The following values both refer to the object
identifier assigned to RSA Data Security, Inc.:</t>
        <sourcecode type="asn.1"><![CDATA[
{ iso(1) member-body(2) 840 113549 }
{ 1 2 840 113549 }
]]></sourcecode>
        <t>(In this example, which gives ASN.1 value notation, the
object identifier values are decimal, not hexadecimal.)
Table 4 gives some other object identifier values and their
meanings.</t>
        <table>
          <name>Some object identifier values and their meanings.</name>
          <thead>
            <tr>
              <th align="left">Object identifier value</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">{ 1 2 }</td>
              <td align="left">ISO member bodies</td>
            </tr>
            <tr>
              <td align="left">{ 1 2 840 }</td>
              <td align="left">US (ANSI)</td>
            </tr>
            <tr>
              <td align="left">{ 1 2 840 113549 }</td>
              <td align="left">RSA Data Security, Inc.</td>
            </tr>
            <tr>
              <td align="left">{ 1 2 840 113549 1}</td>
              <td align="left">RSA Data Security, Inc. PKCS</td>
            </tr>
            <tr>
              <td align="left">{ 2 5 }</td>
              <td align="left">directory services (X.500)</td>
            </tr>
            <tr>
              <td align="left">{ 2 5 8 }</td>
              <td align="left">directory services-algorithms</td>
            </tr>
          </tbody>
        </table>
        <section anchor="ber-encoding-9">
          <name>BER Encoding</name>
          <t>Primitive. Contents octets are as follows,
where <tt>'value1'</tt>, ..., <tt>'valuen'</tt> denote the integer values of the
components in the complete object identifier:</t>
          <ol spacing="normal" type="1"><li>
              <t>The first two components (<tt>'value1'</tt> and <tt>'value2'</tt>) are encoded
as a single value 40 * <tt>'value1'</tt> + <tt>'value2'</tt>, then encoded using
the same base-128, most-significant-digit-first scheme
described in step 2. When <tt>'value1'</tt> is 0 or 1, <tt>'value2'</tt> is
limited to the range 0 to 39, so this combined value fits
in a single octet (This is unambiguous, since <tt>'value1'</tt> is
limited to values 0, 1, and 2; <tt>'value2'</tt> is limited to the range
0 to 39 when <tt>'value1'</tt> is 0 or 1; and, according to
<xref target="X680"/>, n is always at least 2.). When <tt>'value1'</tt> is 2, <tt>'value2'</tt>
is unbounded, so <tt>'value1'</tt> and <tt>'value2'</tt> may require multiple octets.</t>
            </li>
            <li>
              <t>The following octets, if any, encode <tt>'value3'</tt>, ...,
<tt>'valuen'</tt>. Each value is encoded base 128, most
significant digit first, with as few digits as
possible, and the most significant bit of each
octet except the last in the value's encoding set
to "1". As a consequence of encoding each component with as few
digits as possible, the first octet of a component's encoding is never
0x80 (128 decimal).</t>
            </li>
          </ol>
          <t>Example: The first octet of the BER encoding of RSA Data
Security, Inc.'s object identifier is 40 * 1 + 2 = 42 =
<tt>2a</tt> (hexadecimal). The encoding of 840 = 6 * 128 + <tt>48</tt> (hexadecimal) is <tt>86 48</tt> and the
encoding of 113549 = 6 * 1282 + <tt>77</tt> (hexadecimal) * 128 + <tt>d</tt> (hexadecimal) is <tt>86 f7
0d</tt>. This leads to the following BER encoding:</t>
          <artwork><![CDATA[
06 06 2a 86 48 86 f7 0d
]]></artwork>
        </section>
        <section anchor="der-encoding-9">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
        </section>
      </section>
      <section anchor="_section-5-11">
        <name>OCTET STRING</name>
        <t>The <tt>OCTET STRING</tt> type denotes an arbitrary string of octets
(eight-bit values). An <tt>OCTET STRING</tt> value can have any
length, including zero. This type is a string type.</t>
        <t>The <tt>OCTET STRING</tt> type is used for salt values in the
<tt>PBEParameter</tt> type <xref target="RFC8018"/>.  The <tt>OCTET STRING</tt> type is used for
message digests, encrypted message digests, and encrypted content
in <xref target="RFC5652"/>. The <tt>OCTET STRING</tt> type is used for private keys and
encrypted private keys in PKCS #8 <xref target="RFC5958"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-octet-string">
          <name>OCTET STRING ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
OCTET STRING [SIZE ({size | size1..size2})]
]]></sourcecode>
        </figure>
        <t>where <tt>'size'</tt>, <tt>'size1'</tt>, and <tt>'size2'</tt> are optional size constraints.
In the <tt>OCTET STRING SIZE (size)</tt> form, the octet string must
have <tt>'size'</tt> octets. In the <tt>OCTET STRING SIZE (size1..size2)</tt>
form, the octet string must have between <tt>'size1'</tt> and <tt>'size2'</tt>
octets. In the <tt>OCTET STRING</tt> form, the octet string can have
any size.</t>
        <t>Example: The <tt>PBEParameter</tt> type in <xref target="RFC8018"/> has a component of type
<tt>OCTET STRING</tt>:</t>
        <sourcecode type="asn.1"><![CDATA[
PBEParameter ::= SEQUENCE {
  salt OCTET STRING SIZE(8),
  iterationCount INTEGER }
]]></sourcecode>
        <t>Here the size of the salt component is always eight octets.</t>
        <section anchor="ber-encoding-10">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the contents octets give the value of the octet
string, first octet to last octet. In a constructed
encoding, the contents octets give the concatenation of the
BER encodings of substrings of the <tt>OCTET STRING</tt> value.</t>
          <t>Example: The BER encoding of the <tt>OCTET STRING</tt> value <tt>01 23 45
67 89 ab cd ef</tt> can be any of the following, among others,
depending on the form of length octets and whether the
encoding is primitive or constructed:</t>
          <artwork><![CDATA[
04 08 01 23 45 67 89 ab cd ef                   DER encoding

04 81 08 01 23 45 67 89 ab cd ef  long form of length octets

24 0c            constructed encoding: 01 ... 67 + 89 ... ef
   04 04 01 23 45 67
   04 04 89 ab cd ef
]]></artwork>
        </section>
        <section anchor="der-encoding-10">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
          <t>Example: The BER encoding of the <tt>OCTET STRING</tt> value <tt>01 23 45
67 89 ab cd ef</tt> is</t>
          <artwork><![CDATA[
04 08 01 23 45 67 89 ab cd ef
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-12">
        <name>PrintableString</name>
        <t>The <tt>PrintableString</tt> type denotes an arbitrary string of
printable characters from the following character set:</t>
        <artwork><![CDATA[
        A, B, ..., Z
        a, b, ..., z
        0, 1, ..., 9
    (space) ' ( ) + , - . / : = ?
]]></artwork>
        <t>This type is a string type.</t>
        <t>The <tt>PrintableString</tt> type is used in PKCS #9 <xref target="RFC2985"/>
challenge-password and unstructured-address attributes, and in several
distinguished names attributes <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-printablestring">
          <name>PrintableString ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
PrintableString
]]></sourcecode>
        </figure>
        <section anchor="ber-encoding-11">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
printable string, encoded in ASCII. In a constructed
encoding, the contents octets give the concatenation of the
BER encodings of consecutive substrings of the string.</t>
          <t>Example: The BER encoding of the <tt>PrintableString</tt> value "Test
User 1" can be any of the following, among others, depending
on the form of length octets and whether the encoding is
primitive or constructed:</t>
          <artwork><![CDATA[
13 0b 54 65 73 74 20 55 73 65 72 20 31          DER encoding

13 81 0b                          long form of length octets
   54 65 73 74 20 55 73 65 72 20 31

33 0f               constructed encoding: "Test " + "User 1"
   13 05 54 65 73 74 20
   13 06 55 73 65 72 20 31
]]></artwork>
        </section>
        <section anchor="der-encoding-11">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
          <t>Example: The DER encoding of the <tt>PrintableString</tt> value "Test User 1" is</t>
          <artwork><![CDATA[
13 0b 54 65 73 74 20 55 73 65 72 20 31
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-13">
        <name>RELATIVE-OID</name>
        <t>The RELATIVE-OID type denotes a relative object identifier, a
sequence of integer components that identifies an object
relative to some object identifier that is established by
context. A RELATIVE-OID value has at least one component.
Components can have any nonnegative value.</t>
        <t>Unlike the OBJECT IDENTIFIER type, a RELATIVE-OID value is
not complete on its own. It is meaningful only with respect
to a base object identifier known from the context in which
the value appears. A RELATIVE-OID value has at least one
component; the special encoding of the first two components
used for OBJECT IDENTIFIER (see <xref target="_section-5-10"/>) does not
apply.</t>
        <t>ASN.1 notation:</t>
        <artwork><![CDATA[
RELATIVE-OID
]]></artwork>
        <t>The ASN.1 notation for values of the RELATIVE-OID type is</t>
        <artwork><![CDATA[
{ component1 ... componentN }

componentI = identifierI | identifierI (valueI) | valueI
]]></artwork>
        <t>where identifier1, ..., identifierN are identifiers, and
value1, ..., valueN are optional integer values. As with
OBJECT IDENTIFIER, the identifiers are intended primarily for
documentation, but they must correspond to the integer value
when both are present.</t>
        <t>Example: If the base object identifier established by context
is that assigned to RSA Data Security, Inc.,
{ 1 2 840 113549 }, then the following RELATIVE-OID value
identifies { 1 2 840 113549 1 1 }:</t>
        <artwork><![CDATA[
{ 1 1 }
]]></artwork>
        <t>(In this example, which gives ASN.1 value notation, the
relative object identifier values are decimal, not
hexadecimal.)</t>
        <t>BER encoding. Primitive. The contents octets encode
value1, ..., valuen, where value1, ..., valuen denote the
integer values of the components in the relative object
identifier. Each value is encoded base 128, most significant
digit first, with as few digits as possible, and the most
significant bit of each octet except the last in the value's
encoding set to "1". As a consequence of encoding each component
with as few digits as possible, the first octet of a component's
encoding is never 0x80 (128 decimal). Unlike OBJECT IDENTIFIER,
the first two components are not combined; every component is encoded
independently.</t>
        <t>Example: The BER encoding of the RELATIVE-OID value
{ 32473 3 2 } encodes 32473 = 1 * 128^2 + 125 * 128 + 89 (decimal) as
81 fd 59, 3 as 03, and 2 as 02. This leads to the following BER
encoding:</t>
        <artwork><![CDATA[
0d 05 81 fd 59 03 02
]]></artwork>
        <t>DER encoding. Primitive. Contents octets are as for a
primitive BER encoding.</t>
      </section>
      <section anchor="_section-5-14">
        <name>SEQUENCE</name>
        <t>The <tt>SEQUENCE</tt> type denotes an ordered collection of one or
more types.</t>
        <t>The <tt>SEQUENCE</tt> type is used throughout by just about every standard
that makes use of ASN.1.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-sequence">
          <name>SEQUENCE ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
SEQUENCE {
  [identifier1] Type1 [{OPTIONAL | DEFAULT value1}],
  ...,
  [identifierN] TypeN [{OPTIONAL | DEFAULT valueN}] }
]]></sourcecode>
        </figure>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are optional, distinct
identifiers for the components, <tt>'Type1'</tt>, ..., <tt>'TypeN'</tt> are the
types of the components, and <tt>'value1'</tt>, ..., <tt>'valuen'</tt> are optional
default values for the components. The identifiers are
primarily for documentation; they do not affect values of
the type or their encodings in any way.</t>
        <t>The <tt>OPTIONAL</tt> qualifier indicates that the value of a
component is optional and need not be present in the
sequence. The <tt>DEFAULT</tt> qualifier also indicates that the
value of a component is optional, and assigns a default
value to the component when the component is absent.</t>
        <t>The types of any consecutive series of components with the
<tt>OPTIONAL</tt> or <tt>DEFAULT</tt> qualifier, as well as of any component
immediately following that series, must have distinct tags.
This requirement is typically satisfied with explicit or
implicit tagging on some of the components.</t>
        <t>Example: <tt>Validity</tt> type <xref target="RFC5280"/> is a <tt>SEQUENCE</tt> type with two
components:</t>
        <sourcecode type="asn.1"><![CDATA[
Validity ::= SEQUENCE {
  start Time,
  end Time }
]]></sourcecode>
        <t>Here the identifiers for the components are <tt>start</tt> and <tt>end</tt>,
and the types of the components are both <tt>Time</tt>.</t>
        <section anchor="ber-encoding-12">
          <name>BER Encoding</name>
          <t>Constructed. Contents octets are the
concatenation of the BER encodings of the values of the
components of the sequence, in order of definition, with the
following rules for components with the <tt>OPTIONAL</tt> and <tt>DEFAULT</tt>
qualifiers:</t>
          <ul spacing="normal">
            <li>
              <t>if the value of a component with the <tt>OPTIONAL</tt> or
<tt>DEFAULT</tt> qualifier is absent from the sequence,
then the encoding of that component is not
included in the contents octets</t>
            </li>
            <li>
              <t>if the value of a component with the <tt>DEFAULT</tt>
qualifier is the default value, then the encoding
of that component may or may not be included in
the contents octets</t>
            </li>
          </ul>
        </section>
        <section anchor="der-encoding-12">
          <name>DER Encoding</name>
          <t>Constructed. Contents octets are the same as
the BER encoding, except that if the value of a component
with the <tt>DEFAULT</tt> qualifier is the default value, the
encoding of that component is not included in the contents
octets.</t>
        </section>
      </section>
      <section anchor="_section-5-15">
        <name>SEQUENCE OF</name>
        <t>The <tt>SEQUENCE OF</tt> type denotes an ordered collection of zero
or more occurrences of a given type.</t>
        <t>The <tt>SEQUENCE OF</tt> type is used in distinguished names <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-sequence-of">
          <name>SEQUENCE OF ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
SEQUENCE [SIZE ({size | size1..size2})] OF Type
]]></sourcecode>
        </figure>
        <t>where <tt>'Type'</tt> is a type, and where <tt>'size'</tt>, <tt>'size1'</tt>, and <tt>'size2'</tt> are
optional size constraints.  In the <tt>SEQUENCE SIZE (size1..size2) OF</tt>
form, the <tt>SEQUENCE</tt> must have between <tt>'size1'</tt> and <tt>'size2'</tt> items present. In
the <tt>SEQUENCE OF</tt> form, the <tt>SEQUENCE</tt> can have any number of items, including zero.</t>
        <t>Example: The <tt>RDNSequence</tt> type <xref target="RFC5280"/> consists of zero or more
occurrences of the <tt>RelativeDistinguishedName</tt> type, most
significant occurrence first:</t>
        <sourcecode type="asn.1"><![CDATA[
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
]]></sourcecode>
        <section anchor="ber-encoding-13">
          <name>BER Encoding</name>
          <t>Constructed. Contents octets are the
concatenation of the BER encodings of the values of the
occurrences in the collection, in order of occurrence.</t>
        </section>
        <section anchor="der-encoding-13">
          <name>DER Encoding</name>
          <t>Constructed. Contents octets are the
concatenation of the DER encodings of the values of the
occurrences in the collection, in order of occurrence.</t>
          <t>Example:  The <tt>Extensions</tt> type in <xref target="RFC5280"/> requires that at least one item
be present in the <tt>SEQUENCE OF</tt>:</t>
          <sourcecode type="asn.1"><![CDATA[
Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
]]></sourcecode>
          <t>There are some widely used ASN.1 specifications that define an <tt>OPTIONAL SEQUENCE OF</tt>
component without a size constraint. In this case, the sender can encode either
an empty <tt>SEQUENCE</tt>, or it can elect to not encode the <tt>SEQUENCE</tt>. Absent some
requirement established in the prose of the specification, it is preferable to
not encode the empty <tt>SEQUENCE OF</tt>, as it minimizes the size of the message.</t>
        </section>
      </section>
      <section anchor="_section-5-16">
        <name>SET</name>
        <t>The <tt>SET</tt> type denotes an unordered collection of one or more
types.  The <tt>SET</tt> type is not used in the <tt>ESSSecurityLabel</tt> <xref target="RFC5035"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-set">
          <name>SET ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
SET {
  [identifier1] Type1 [{OPTIONAL | DEFAULT value1}],
  ...,
  [identifierN] TypeN [{OPTIONAL | DEFAULT valueN}] }
]]></sourcecode>
        </figure>
        <t>where <tt>'identifier1'</tt>, ..., <tt>'identifierN'</tt> are optional, distinct
identifiers for the components, <tt>'Type1'</tt>, ..., <tt>'TypeN'</tt> are the
types of the components, and <tt>'value1'</tt>, ..., <tt>'valueN'</tt> are
optional default values for the components. The identifiers
are primarily for documentation; they do not affect values
of the type or their encodings in any way.</t>
        <t>The <tt>OPTIONAL</tt> qualifier indicates that the value of a
component is optional and need not be present in the set.
The <tt>DEFAULT</tt> qualifier also indicates that the value of a
component is optional, and assigns a default value to the
component when the component is absent.</t>
        <t>The types must have distinct tags. This requirement is
typically satisfied with explicit or implicit tagging on
some of the components.</t>
        <t>Example. The <tt>SET</tt> type is used in the <tt>ESSSecurityLabel</tt> type <xref target="RFC5035"/>.</t>
        <sourcecode type="asn.1"><![CDATA[
ESSSecurityLabel ::= SET {
  security-policy-identifier SecurityPolicyIdentifier,
  security-classification SecurityClassification OPTIONAL,
  privacy-mark ESSPrivacyMark OPTIONAL,
  security-categories SecurityCategories OPTIONAL }
]]></sourcecode>
        <section anchor="ber-encoding-14">
          <name>BER Encoding</name>
          <t>Constructed. Contents octets are the
concatenation of the BER encodings of the values of the
components of the set, in any order, with the following
rules for components with the <tt>OPTIONAL</tt> and <tt>DEFAULT</tt>
qualifiers:</t>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>if the value of a component with the <tt>OPTIONAL</tt> or
<tt>DEFAULT</tt> qualifier is absent from the set, then the
encoding of that component is not included in the
contents octets</t>
                </li>
              </ul>
            </li>
          </ul>
          <ul empty="true">
            <li>
              <ul spacing="normal">
                <li>
                  <t>if the value of a component with the <tt>DEFAULT</tt>
qualifier is the default value, then the encoding
of that component may or may not be included in
the contents octets</t>
                </li>
              </ul>
            </li>
          </ul>
        </section>
        <section anchor="der-encoding-14">
          <name>DER Encoding</name>
          <t>Constructed. Contents octets are the same as
for the BER encoding, except that:</t>
          <ol spacing="normal" type="1"><li>
              <t>If the value of a component with the <tt>DEFAULT</tt>
qualifier is the default value, the encoding of
that component is not included.</t>
            </li>
            <li>
              <t>There is an order to the components, namely
ascending order by tag (care: the <tt>CONSTRUCTED</tt> bit is not part of the tag value, see below). By ascending order, imagine every set element's encoding is padded with zeroes so that every encoding is the same length and then each padded encoding is treated as an <tt>INTEGER</tt> with the smallest encodings sorted to the start of the <tt>SET</tt>.</t>
            </li>
          </ol>
          <t>A simple pseudo-code version of the sort (in-place) would look like:</t>
          <sourcecode type="pseudocode"><![CDATA[
    Sort(ASN1Object[] elements)
    {
        boolean swapped = true;
        while (swapped)
        {
            swapped = false;
            for (var i = 0; i != Length(elements) - 1; i++)
            {
                if (!LessThanOrEqual(DER(elements[i]), DER(elements[i+1])))
                {
                    swapped = true;
                    var ei = elements[i];
                    elements[i] = elements[i + 1];
                    elements[i+1] = ei;
                }
            }
        }
    }

    LessThanOrEqual(byte[] encA, byte[] encB)
    {
        // clear CONSTRUCTED bit in tag byte if set
        var a0 = encA[0] & ~CONSTRUCTED
        var b0 = encB[0] & ~CONSTRUCTED
        if (a0 != b0)
        {
            return a0 < b0;
        }

        var last = Min(Length(encA), Length(encB)) - 1;

        for (var i = 1; i < last; ++i) {
            if (encA[i] != encB[i])
                return encA[i] < encB[i]
        }

        return encA[last] <= encB[last]
    }
]]></sourcecode>
          <t>Where <tt>Length()</tt> returns the length of an array, <tt>Min()</tt> returns the mathematical minimum of two values and <tt>DER()</tt> returns the DER encoding of the <tt>ASN1Object</tt> passed to it, and the <tt>~</tt> operator provides the ones compliment of a value, as it does in languages like C, Java, and C#. Likewise for <tt>&amp;</tt> - the bitwise AND.</t>
          <t>NOTE: As you can see from the <tt>LessThanOrEqual()</tt> function, <tt>SET</tt> elements in DER encodings are ordered first according to their tags (class and number), but the <tt>CONSTRUCTED</tt> bit is not part of the tag.</t>
          <t>Links to examples of different implementations of the DER <tt>SET</tt> sort can be found in <xref target="_section-7"/>.</t>
          <t>For <tt>SET OF</tt> (see below), this is unimportant. All elements have the same tag and DER requires them to either all be in constructed form or all in primitive form, according to that tag. The elements are effectively ordered according to their contents octets.</t>
          <t>For <tt>SET</tt>, the elements will have distinct tags, and each will be in constructed or primitive form accordingly. Failing to ignore the <tt>CONSTRUCTED</tt> bit could therefore lead to ordering inversions, so in general it is best to make sure it is not present in the encoding of the tag.</t>
        </section>
      </section>
      <section anchor="_section-5-17">
        <name>SET OF</name>
        <t>The <tt>SET OF</tt> type denotes an unordered collection of zero or
more occurrences of a given type.</t>
        <t>The <tt>SET OF</tt> type is used for sets of attributes in PKCS #9 <xref target="RFC2985"/>.
The <tt>SET OF</tt> type is used for sets of message-digest algorithm
identifiers, signer information, and recipient information
in <xref target="RFC5652"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-set-of">
          <name>SET OF ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
SET [SIZE ({size | size1..size2})] OF Type
]]></sourcecode>
        </figure>
        <t>where <tt>'Type'</tt> is a type, and where <tt>'size'</tt>, <tt>'size1'</tt>, and <tt>'size2'</tt> are
optional size constraints.  In the <tt>SET SIZE (size1..size2) OF</tt>
form, the <tt>SET</tt> must have between <tt>'size1'</tt> and <tt>'size2'</tt> items present. In
the <tt>SET OF</tt> form, the <tt>SET</tt> can have any number of items, including zero.</t>
        <t>Example: The <tt>RelativeDistinguishedName</tt> type <xref target="RFC5280"/> consists of
one or more occurrences of the <tt>AttributeValueAssertion</tt> type, where
the order is unimportant:</t>
        <sourcecode type="asn.1"><![CDATA[
RelativeDistinguishedName ::=
  SET SIZE (1..MAX) OF AttributeTypeAndValue
]]></sourcecode>
        <section anchor="ber-encoding-15">
          <name>BER Encoding</name>
          <t>Constructed. Contents octets are the
concatenation of the BER encodings of the values of the
occurrences in the collection, in any order.</t>
        </section>
        <section anchor="der-encoding-15">
          <name>DER Encoding</name>
          <t>Constructed. Contents octets are the same as
for the BER encoding, except that there is an order, namely
ascending lexicographic order of BER encoding. Lexicographic
comparison of two different BER encodings is done as
follows: Logically pad the shorter BER encoding after the
last octet with dummy octets that are smaller in value than
any normal octet. Scan the BER encodings from left to right
until a difference is found. The smaller-valued BER encoding
is the one with the smaller-valued octet at the point of
difference.</t>
          <t>There are some widely used ASN.1 specifications that define an <tt>OPTIONAL SET OF</tt>
component without a size constraint. In this case, the sender can encode either
an empty <tt>SET</tt>, or it can elect to not encode the <tt>SET</tt>. Absent some
requirement established in the prose of the specification, it is preferable to
not encode the empty <tt>SET OF</tt>, as it minimizes the size of the message.</t>
        </section>
      </section>
      <section anchor="_section-5-18">
        <name>T61String</name>
        <t>The <tt>T61String</tt> type denotes an arbitrary string of T.61
characters. T.61 is an eight-bit extension to the ASCII
character set. Special "escape" sequences specify shift the
character interpretation dynamically, where interpretation of
subsequent character values as, for example, Japanese; the
initial interpretation is Latin. The character set includes
non-printing control characters. The <tt>T61String</tt> type allows only
the Latin and Japanese character interpretations, and implementors'
agreements for directory names exclude control characters
<xref target="NIST92"/>. A <tt>T61String</tt> value can have any length, including
zero. This type is a string type.</t>
        <t>The <tt>T61String</tt> type is used in PKCS #9 unstructured-address
and challenge-password attributes <xref target="RFC2985"/>, and in several
attributes documented in <xref target="RFC5280"/>.</t>
        <t>Note: The use of <tt>T61String</tt> is generally discouraged, and the use
of <tt>UTF8String</tt> is preferred.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-t61string">
          <name>T61String ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
T61String
]]></sourcecode>
        </figure>
        <section anchor="ber-encoding-16">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
T.61 string, encoded in ASCII. In a constructed encoding,
the contents octets give the concatenation of the BER
encodings of consecutive substrings of the T.61 string.</t>
          <t>Example: The BER encoding of the <tt>T61String</tt> value "clés
publiques" (French for "public keys") can be any of the
following, among others, depending on the form of length
octets and whether the encoding is primitive or constructed:</t>
          <artwork><![CDATA[
14 0f                                           DER encoding
   63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73

14 81 0f                          long form of length octets
   63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73

34 15      constructed encoding: "clés" + " " + "publiques"
   14 05 63 6c c2 65 73
   14 01 20
   14 09 70 75 62 6c 69 71 75 65 73
]]></artwork>
          <t>The eight-bit character <tt>c2</tt> is a T.61 prefix that adds an
acute accent (') to the next character.</t>
        </section>
        <section anchor="der-encoding-16">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
          <t>Example: The DER encoding of the <tt>T61String</tt> value "cl'es
publiques" is</t>
          <artwork><![CDATA[
14 0f 63 6c c2 65 73 20 70 75 62 6c 69 71 75 65 73
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-19">
        <name>UTCTime</name>
        <t>The <tt>UTCTime</tt> type denotes a "coordinated universal time" or
Greenwich Mean Time (GMT) value. A <tt>UTCTime</tt> value includes
the local time precise to either minutes or seconds, and an
offset from GMT in hours and minutes. It takes any of the
following forms:</t>
        <artwork><![CDATA[
YYMMDDhhmmZ
YYMMDDhhmm+hh'mm'
YYMMDDhhmm-hh'mm'
YYMMDDhhmmssZ
YYMMDDhhmmss+hh'mm'
YYMMDDhhmmss-hh'mm'
]]></artwork>
        <t>where:</t>
        <ul empty="true">
          <li>
            <t><tt>YY</tt> is the least significant two digits of the year (00 to 99)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>MM</tt> is the month (01 to 12)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>DD</tt> is the day (01 to 31)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>hh</tt> is the hour (00 to 23)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>mm</tt> are the minutes (00 to 59)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>ss</tt> are the seconds (00 to 59)</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>Z</tt> indicates that local time is GMT,
<tt>+</tt> indicates that local time is later than GMT, and
<tt>-</tt> indicates that local time is earlier than GMT</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>hh'</tt> is the absolute value of the offset from GMT in hours</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t><tt>mm'</tt> is the absolute value of the offset from GMT in minutes</t>
          </li>
        </ul>
        <t>This type is a string type.</t>
        <t>The <tt>UTCTime</tt> type is used for signing times in PKCS #9 signing-time
attribute <xref target="RFC2985"/> and for certificate validity periods
in <tt>Validity</tt> type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-utctime">
          <name>UTCTime ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
UTCTime
]]></sourcecode>
        </figure>
        <section anchor="ber-encoding-17">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
string, encoded in ASCII. In a constructed encoding, the
contents octets give the concatenation of the BER encodings
of consecutive substrings of the string. (The constructed
encoding is not particularly interesting, since <tt>UTCTime</tt>
values are so short, but the constructed encoding is
permitted.)</t>
          <t>Example: The time this sentence was originally written was
4:45:40 p.m. Pacific Daylight Time on May 6, 1991, which can
be represented with either of the following <tt>UTCTime</tt> values,
among others:</t>
          <artwork><![CDATA[
"910506164540-0700"

"910506234540Z"
]]></artwork>
          <t>These values have the following BER encodings, among others:</t>
          <artwork><![CDATA[
17 0d 39 31 30 35 30 36 32 33 34 35 34 30 5a

17 11 39 31 30 35 30 36 31 36 34 35 34 30 2D 30 37 30 30
]]></artwork>
        </section>
        <section anchor="der-encoding-17">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
        </section>
      </section>
      <section anchor="_section-5-20">
        <name>GeneralizedTime</name>
        <t>The <tt>GeneralizedTime</tt> type consists of a calendar date and time.
A <tt>GeneralizedTime</tt> value includes the local time precise to fractions
of seconds.  A <tt>GeneralizedTime</tt> value can include midnight at the start
of a day, but it excludes midnight at the end of a day.  A
<tt>GeneralizedTime</tt> value uses one of the following three forms:</t>
        <ol spacing="normal" type="1"><li>
            <t>a local time of day;</t>
          </li>
          <li>
            <t>a local time of day with the difference between local time and UTC; or</t>
          </li>
          <li>
            <t>a UTC time of day.</t>
          </li>
        </ol>
        <t>Accuracy of the time takes one of the following three forms:</t>
        <ol spacing="normal" type="1"><li>
            <t>hours, minutes, and seconds, with fractions of a second to any number of decimal places;</t>
          </li>
          <li>
            <t>hours and minutes, with fractions of a minute to any number of decimal places; or</t>
          </li>
          <li>
            <t>hours, with fractions of an hour to any number of decimal places.</t>
          </li>
        </ol>
        <t>This type is a string type.  It uses a subset of <tt>VisibleString</tt>.</t>
        <t>The <tt>VisibleString</tt> starts with a four-digit representation of the year, a
two-digit representation of the month, and a two-digit representation of
the day, without use of separators.</t>
        <t>The <tt>VisibleString</tt> continues with the time of day to an accuracy of one hour
one minute, one second, or fractions of a second, using either comma or full
stop as the decimal sign.</t>
        <t>The <tt>VisibleString</tt> ends with upper-case letter Z to indicate a UTC time.</t>
        <t>The <tt>VisibleString</tt> ends the signed difference between local time and UTC, with the
minutes component optionally omitted if the difference is an integral
number of hours.</t>
        <t>All possible forms of <tt>GeneralizedTime</tt> cannot be enumerated, but it is worth noting
that <xref target="RFC5280"/> requires dates after 2049 use the following form, which uses the
same as above, except that a four digit year is provided:</t>
        <artwork><![CDATA[
YYYYMMDDhhmmssZ
]]></artwork>
        <t>The <tt>GeneralizedTime</tt> type is used for certificate validity periods
in <tt>Validity</tt> type <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-generalizedtime">
          <name>GeneralizedTime ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
GeneralizedTime
]]></sourcecode>
        </figure>
        <section anchor="ber-encoding-18">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
string, encoded in <tt>VisibleString</tt>. In a constructed encoding, the
contents octets give the concatenation of the BER encodings
of consecutive substrings of the string. (The constructed
encoding is not particularly interesting, since <tt>GeneralizedTime</tt>
values are usually very short, but the constructed encoding is
permitted.)</t>
          <t>Example: Local time 6 minutes, 27.3 seconds after 9 pm on 6 November 2050.</t>
          <artwork><![CDATA[
"20501106210627.3"
]]></artwork>
          <t>This value has the following BER encodings, among others:</t>
          <artwork><![CDATA[
18 10 31 39 38 35 31 31 30 36 32 31 30 36 32 37 2e 33
]]></artwork>
        </section>
        <section anchor="der-encoding-18">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
          <t>Example: <xref target="RFC5280"/> uses the <tt>GeneralizedTime</tt> value of "99991231235959Z"
to indicate that a certificate has no well-defined expiration date.</t>
          <t>This value has the following DER encodings:</t>
          <artwork><![CDATA[
18 10 31 39 38 35 31 31 30 36 32 31 30 36 32 37 2e 33
]]></artwork>
        </section>
        <section anchor="der-encoding-19">
          <name>DER Encoding</name>
          <t>Primitive. Contents octets are as for a
primitive BER encoding.</t>
          <artwork><![CDATA[
18 0f 39 39 39 39 31 32 33 31 32 33 35 39 35 39 5a
]]></artwork>
        </section>
      </section>
      <section anchor="_section-5-21">
        <name>UTF8String</name>
        <t>The <tt>UTF8String</tt> type supports the encoding of character sets which
covers most of the world's writing systems; see <xref target="RFC3629"/>.  This
type is a string type.</t>
        <t>The <tt>UTF8String</tt> type is used with many naming attributes in <xref target="RFC5280"/>.</t>
        <t>ASN.1 notation:</t>
        <figure anchor="fig-utf8string">
          <name>UTF8String ASN.1 notation</name>
          <sourcecode type="asn.1"><![CDATA[
UTF8String
]]></sourcecode>
        </figure>
        <section anchor="ber-encoding-19">
          <name>BER Encoding</name>
          <t>Primitive or constructed. In a primitive
encoding, the contents octets give the characters in the
UTF-8 string. In a constructed encoding,
the contents octets give the concatenation of the BER
encodings of consecutive substrings of the UTF-8 string.</t>
          <t>Example: The character sequence U+D55C U+AD6D U+C5B4 (Korean "hangugeo",
meaning "the Korean language") is encoded in UTF-8, and then this value
has the following DER encodings, among others:</t>
          <artwork><![CDATA[
0c 09 ed 95 9c ea b5 ad ec 96 b4
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="_section-6">
      <name>An example</name>
      <t>This section gives an example of ASN.1 notation and DER
encoding: the <tt>Name</tt> type <xref target="RFC5280"/>.</t>
      <section anchor="abstract-notation">
        <name>Abstract notation</name>
        <t>This section gives the ASN.1 notation for the <tt>Name</tt> type <xref target="RFC5280"/>.</t>
        <sourcecode type="asn.1"><![CDATA[
Name ::= CHOICE {
  RDNSequence }

RDNSequence ::= SEQUENCE OF RelativeDistinguishedName

RelativeDistinguishedName ::=
  SET OF AttributeValueAssertion

AttributeValueAssertion ::= SEQUENCE {
   AttributeType,
   AttributeValue }

AttributeType ::= OBJECT IDENTIFIER

AttributeValue ::= ANY
]]></sourcecode>
        <t>The <tt>Name</tt> type identifies an object in an X.500 directory.
<tt>Name</tt> is a <tt>CHOICE</tt> type consisting of one alternative:
<tt>RDNSequence</tt>. (Future revisions of X.500 may have other
alternatives.)</t>
        <t>The <tt>RDNSequence</tt> type gives a path through an X.500 directory
tree starting at the root. <tt>RDNSequence</tt> is a <tt>SEQUENCE OF</tt> type
consisting of zero or more occurrences of <tt>RelativeDistinguishedName</tt>.</t>
        <t>The <tt>RelativeDistinguishedName</tt> type gives a unique name to an
object relative to the object superior to it in the
directory tree. <tt>RelativeDistinguishedName</tt> is a <tt>SET OF</tt> type
consisting of zero or more occurrences of
<tt>AttributeValueAssertion</tt>.</t>
        <t>The <tt>AttributeValueAssertion</tt> type assigns a value to some
attribute of a relative distinguished name, such as country
name or common name. <tt>AttributeValueAssertion</tt> is a <tt>SEQUENCE</tt>
type consisting of two components, an <tt>AttributeType</tt> type and
an <tt>AttributeValue</tt> type.</t>
        <t>The <tt>AttributeType</tt> type identifies an attribute by object
identifier. The <tt>AttributeValue</tt> type gives an arbitrary
attribute value. The actual type of the attribute value is
determined by the attribute type.</t>
      </section>
      <section anchor="der-encoding-20">
        <name>DER encoding</name>
        <t>This section gives an example of a DER encoding of a value
of type <tt>Name</tt>, working from the bottom up.</t>
        <t>The name is that of the Test User 1. The name is represented by the following path:</t>
        <artwork><![CDATA[
                       (root)
                          |
                   countryName = "US"
                          |
     organizationName = "Example Organization"
                          |
             commonName = "Test User 1"
]]></artwork>
        <t>Each level corresponds to one <tt>RelativeDistinguishedName</tt>
value, each of which happens for this name to consist of one
<tt>AttributeValueAssertion</tt> value. The <tt>AttributeType</tt> value is
before the equals sign, and the <tt>AttributeValue</tt> value (a
printable string for the given attribute types) is after the
equals sign.</t>
        <t>The <tt>countryName</tt>, <tt>organizationName</tt>, and <tt>commonName</tt> are
attribute types defined in <xref target="RFC5280"/> as:</t>
        <sourcecode type="asn.1"><![CDATA[
attributeType OBJECT IDENTIFIER ::= { joint-iso-ccitt(2) ds(5) 4 }

countryName OBJECT IDENTIFIER ::= { attributeType 6 }

organizationName OBJECT IDENTIFIER ::= { attributeType 10 }

commonName OBJECT IDENTIFIER ::= { attributeType 3 }
]]></sourcecode>
        <t>Note: <tt>joint-iso-ccitt</tt> and <tt>joint-iso-itu-t</tt> are interchangeable for (2).</t>
        <section anchor="attributetype">
          <name>AttributeType</name>
          <t>The three <tt>AttributeType</tt> values are <tt>OCTET STRING</tt> values, so
their DER encoding follows the primitive, definite-length
method:</t>
          <artwork><![CDATA[
06 03 55 04 06                                   countryName

06 03 55 04 0a                              organizationName

06 03 55 04 03                                    commonName
]]></artwork>
          <t>The identifier octets follow the low-tag form, since the tag
is 6 for <tt>OBJECT IDENTIFIER</tt>. Bits 8 and 7 have value "0,"
indicating universal class, and bit 6 has value "0,"
indicating that the encoding is primitive. The length octets
follow the short form. The contents octets are the
concatenation of three octet strings derived from
subidentifiers: 40 * 2 + 5 = 85 = <tt>55</tt> (hexadecimal); 4; and
6, 10, or 3.</t>
        </section>
        <section anchor="attributevalue">
          <name>AttributeValue</name>
          <t>The three <tt>AttributeValue</tt> values are <tt>PrintableString</tt> values,
so their encodings follow the primitive, definite-length
method:</t>
          <artwork><![CDATA[
13 02 55 53                                             "US"

13 14                                 "Example Organization"
   45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
   74 69 6f 6e

13 0b                                          "Test User 1"
   54 65 73 74 20 55 73 65 72 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for <tt>PrintableString</tt>, 19 (decimal), is between 0 and
30. Bits 8 and 7 have value "0" since <tt>PrintableString</tt> is in
the universal class. Bit 6 has value "0" since the encoding
is primitive. The length octets follow the short form, and
the contents octets are the ASCII representation of the
attribute value.</t>
        </section>
        <section anchor="attributevalueassertion">
          <name>AttributeValueAssertion</name>
          <t>The three <tt>AttributeValueAssertion</tt> values are <tt>SEQUENCE</tt>
values, so their DER encodings follow the constructed,
definite-length method:</t>
          <artwork><![CDATA[
30 09                                     countryName = "US"
   06 03 55 04 06
   13 02 55 53

30 1b              organizationName = "Example Organizaiton"
   06 03 55 04 0a
   13 14 ... 6f 6e

30 12                             commonName = "Test User 1"
   06 03 55 04 0b
   13 0b ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for <tt>SEQUENCE</tt>, 16 (decimal), is between 0 and 30.
Bits 8 and 7 have value "0" since <tt>SEQUENCE</tt> is in the
universal class. Bit 6 has value "1" since the encoding is
constructed. The length octets follow the short form, and
the contents octets are the concatenation of the DER
encodings of the attributeType and attributeValue
components.</t>
        </section>
        <section anchor="relativedistinguishedname">
          <name>RelativeDistinguishedName</name>
          <t>The three <tt>RelativeDistinguishedName</tt> values are <tt>SET OF</tt>
values, so their DER encodings follow the constructed,
definite-length method:</t>
          <artwork><![CDATA[
31 0b
   30 09 ... 55 53

31 1d
   30 1b ... 6f 6e

31 14
   30 12 ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for <tt>SET OF</tt>, 17 (decimal), is between 0 and 30. Bits
8 and 7 have value "0" since <tt>SET OF</tt> is in the universal
class Bit 6 has value "1" since the encoding is constructed.
The lengths octets follow the short form, and the contents
octets are the DER encodings of the respective
<tt>AttributeValueAssertion</tt> values, since there is only one
value in each set.</t>
        </section>
        <section anchor="rdnsequence">
          <name>RDNSequence</name>
          <t>The <tt>RDNSequence</tt> value is a <tt>SEQUENCE OF</tt> value, so its DER
encoding follows the constructed, definite-length method:</t>
          <artwork><![CDATA[
30 42
   31 0b ... 55 53
   31 1d ... 6f 6e
   31 14 ... 20 31
]]></artwork>
          <t>The identifier octets follow the low-tag-number form, since
the tag for <tt>SEQUENCE OF</tt>, 16 (decimal), is between 0 and 30.
Bits 8 and 7 have value "0" since <tt>SEQUENCE OF</tt> is in the
universal class. Bit 6 has value "1" since the encoding is
constructed. The lengths octets follow the short form, and
the contents octets are the concatenation of the DER
encodings of the three <tt>RelativeDistinguishedName</tt> values, in
order of occurrence.</t>
        </section>
        <section anchor="name">
          <name>Name</name>
          <t>The <tt>Name</tt> value is a <tt>CHOICE</tt> value, so its DER encoding is the
same as that of the <tt>RDNSequence</tt> value:</t>
          <artwork><![CDATA[
30 42
   31 0b
      30 09
         06 03 55 04 06          attributeType = countryName
         13 02 55 53                   attributeValue = "US"
   31 1d
      30 1b
         06 03 55 04 0a     attributeType = organizationName
         13 14       attributeValue = "Example Organization"
            45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
            74 69 6f 6e

   31 14
      30 12
         06 03 55 04 03           attributeType = commonName
         13 0b                attributeValue = "Test User 1"
            54 65 73 74 20 55 73 65 72 20 31
]]></artwork>
          <t>Which if pretty-printed in strict order would provide an X.500 <tt>Name</tt> that looked like:</t>
          <artwork><![CDATA[
countryName=US,organizationName=Example Organization,commonName=Test User 1
]]></artwork>
          <t>Occasionally, just occasionally you will also come across a '+' syntax in X.500 Names so instead the name might look like:</t>
          <artwork><![CDATA[
countryName=US,organizationName=Example Organization+commonName=Test User 1
]]></artwork>
          <t>This case is interesting, the reason for this being that the '+' means the last two attribute value pairs
end up in the same RDN, or more specifically the same <tt>SET</tt> as can be seen in
the encoding below.</t>
          <artwork><![CDATA[
30 40
   31 0b
      30 09
      06 03 55 04 06
      13 02 55 53
   31 31
      30 1b
         06 03 55 04 0a
         0c 14
            45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
            74 69 6f 6e
      30 12
         06 03 55 04 03
         0c 0b
            54 65 73 74 20 55 73 65 72 20 31
]]></artwork>
          <t>That said, while the above is a correct definite-length encoding for the X.500 name we are looking at, it is not the correct DER encoding for
the X.500 name we are looking at as the correct DER encoding looks like:</t>
          <artwork><![CDATA[
30 40
   31 0b
      30 09
      06 03 55 04 06
      13 02 55 53
   31 31
      30 12
         06 03 55 04 03
         0c 0b
            54 65 73 74 20 55 73 65 72 20 31
      30 1b
         06 03 55 04 0a
         0c 14
            45 78 61 6d 70 6c 65 20 4f 72 67 61 6e 69 7a 61
            74 69 6f 6e
]]></artwork>
          <t>which, if pretty-printed directly, would give:</t>
          <artwork><![CDATA[
countryName=US,commonName=Test User 1+organizationName=Example Organization
]]></artwork>
          <t>The difference between the two encodings being that the <tt>SET</tt> has been correctly sorted for DER encoding
in the final encoding.</t>
          <t>There are a few morals to this particular tale. As you can imagine '+' in an X.500 name is best
avoided as sometimes people forget about the sorting or insist on definite-length encoding to preserver order
requiring DER encoding to be done every time for signature generation and verification. Ideally if you have to include a '+' (it really does happen) it
is also better to write out the X.500 name in DER format at the start, so anyone else trying to verify
a signature that might be associated with the use of the name will always get a correct result. Where it
is not possible to write out the X.500 name in DER format, so anyone checking the subsequent encoding will
be presented with a definite-length encoding instead, special care must be taken to calculate and evaluate
any signatures or MACs based on the name using the DER encoding, rather than the definite-length encoding,
otherwise recipients will not be able to verify the data.</t>
          <t>One final note, as <tt>Name</tt> is of type <tt>CHOICE</tt>, whenever it is tagged it will always encode as explicitly tagged, even if it's in a module with which starts with a definitions block reading <tt>DEFINITIONS IMPLICIT TAGS ::=</tt>. This convention is followed as <tt>CHOICE</tt> encodings need to maintain the original encoding of the ASN.1 primitive, or structure, making up the <tt>CHOICE</tt>. Overwriting the tag by following the implicit tagging rule could change the meaning of the <tt>CHOICE</tt> item completely!</t>
        </section>
      </section>
    </section>
    <section anchor="_section-7">
      <name>Useful Links</name>
      <t>The following table provides alternate implementations of the DER <tt>SET</tt> sort
for a variety of languages.</t>
      <table>
        <name>Example Implementations of DER SET Sorting.</name>
        <thead>
          <tr>
            <th align="left">Language</th>
            <th align="left">Project</th>
            <th align="left">Link</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">C</td>
            <td align="left">OpenSSL</td>
            <td align="left">
              <xref target="OPENSSL-DER-SET"/></td>
          </tr>
          <tr>
            <td align="left">C#</td>
            <td align="left">Bouncy Castle</td>
            <td align="left">
              <xref target="BCCSHARP-DER-SET"/></td>
          </tr>
          <tr>
            <td align="left">Java</td>
            <td align="left">Bouncy Castle</td>
            <td align="left">
              <xref target="BCJAVA-DER-SET"/></td>
          </tr>
          <tr>
            <td align="left">Rust</td>
            <td align="left">Rust Crypto</td>
            <td align="left">
              <xref target="RUSTCRYPTO-DER-SET"/></td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Security considerations are discussed throughout this memo.  Implementations that employ ASN.1 need to take care when parsing
and decoding data to avoid buffer overflows, denial of service through resource exhaustion, and arbitrary code execution. These
considerations are not unique to ASN.1; they need to be considered by all data parsers and decoders.</t>
      <t>In relation to resource exhaustion, while ASN.1 allows for arbitrary nesting of constructed objects and very large lengths of individual data objects, we recommend that limits for both these are enforced appropriate for the use-case the parser, or decoder, is used for. Such limits can provide a useful early warning of corrupted data while also (usually) providing a recoverable situation for the parser, or decoder, encountering the issue. In addition to issues with nesting, the need to sort sets for DER can also cause issues if a large set is presented in a situation where DER encoding is required, such as with a signature verification. In situations where ASN.1 encodings are possibly being accepted from unknown third parties, a more sophisticated algorithm, such as a stable Dual-Pivot Quicksort, should be utilized. Doing so may avoid worst-case situations resulting in high CPU and/or memory usage when producing or verifying the sorted, distinguished encoded value for a SET type.</t>
      <t>Implementers of ASN.1 parsers and decoders are encouraged to use fuzz testing to identify security vulnerabilities and other flaws.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="X680" target="https://www.itu.int/rec/T-REC-X.680">
          <front>
            <title>Information technology -- Abstract Syntax Notation One (ASN.1): Specification of basic notation</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.680"/>
          <seriesInfo name="ISO/IEC" value="8824-1:2021"/>
        </reference>
        <reference anchor="X690" target="https://www.itu.int/rec/T-REC-X.690">
          <front>
            <title>Information technology -- ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2021" month="February"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.690"/>
          <seriesInfo name="ISO/IEC" value="8825-1-2021"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.0020.xml">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC20"/>
        </reference>
        <reference anchor="RFC2985" target="https://www.rfc-editor.org/info/rfc2985" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2985.xml">
          <front>
            <title>PKCS #9: Selected Object Classes and Attribute Types Version 2.0</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #9 v2.0 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from that specification. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2985"/>
          <seriesInfo name="DOI" value="10.17487/RFC2985"/>
        </reference>
        <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml">
          <front>
            <title>UTF-8, a transformation format of ISO 10646</title>
            <author fullname="F. Yergeau" initials="F." surname="Yergeau"/>
            <date month="November" year="2003"/>
            <abstract>
              <t>ISO/IEC 10646-1 defines a large character set called the Universal Character Set (UCS) which encompasses most of the world's writing systems. The originally proposed encodings of the UCS, however, were not compatible with many current applications and protocols, and this has led to the development of UTF-8, the object of this memo. UTF-8 has the characteristic of preserving the full US-ASCII range, providing compatibility with file systems, parsers and other software that rely on US-ASCII values but are transparent to other values. This memo obsoletes and replaces RFC 2279.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="63"/>
          <seriesInfo name="RFC" value="3629"/>
          <seriesInfo name="DOI" value="10.17487/RFC3629"/>
        </reference>
        <reference anchor="RFC4055" target="https://www.rfc-editor.org/info/rfc4055" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4055.xml">
          <front>
            <title>Additional Algorithms and Identifiers for RSA Cryptography for use in the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>This document supplements RFC 3279. It describes the conventions for using the RSA Probabilistic Signature Scheme (RSASSA-PSS) signature algorithm, the RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) key transport algorithm and additional one-way hash functions with the Public-Key Cryptography Standards (PKCS) #1 version 1.5 signature algorithm in the Internet X.509 Public Key Infrastructure (PKI). Encoding formats, algorithm identifiers, and parameter formats are specified. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4055"/>
          <seriesInfo name="DOI" value="10.17487/RFC4055"/>
        </reference>
        <reference anchor="RFC5035" target="https://www.rfc-editor.org/info/rfc5035" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5035.xml">
          <front>
            <title>Enhanced Security Services (ESS) Update: Adding CertID Algorithm Agility</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>In the original Enhanced Security Services for S/MIME document (RFC 2634), a structure for cryptographically linking the certificate to be used in validation with the signature was introduced; this structure was hardwired to use SHA-1. This document allows for the structure to have algorithm agility and defines a new attribute for this purpose. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5035"/>
          <seriesInfo name="DOI" value="10.17487/RFC5035"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5280.xml">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC5652" target="https://www.rfc-editor.org/info/rfc5652" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5652.xml">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC5958" target="https://www.rfc-editor.org/info/rfc5958" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
          <front>
            <title>Asymmetric Key Packages</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document defines the syntax for private-key information and a content type for it. Private-key information includes a private key for a specified public-key algorithm and a set of attributes. The Cryptographic Message Syntax (CMS), as defined in RFC 5652, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type. This document obsoletes RFC 5208. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5958"/>
          <seriesInfo name="DOI" value="10.17487/RFC5958"/>
        </reference>
        <reference anchor="RFC5912" target="https://www.rfc-editor.org/info/rfc5912" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5912.xml">
          <front>
            <title>New ASN.1 Modules for the Public Key Infrastructure Using X.509 (PKIX)</title>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Public Key Infrastructure using X.509 (PKIX) certificate format, and many associated formats, are expressed using ASN.1. The current ASN.1 modules conform to the 1988 version of ASN.1. This document updates those ASN.1 modules to conform to the 2002 version of ASN.1. There are no bits-on-the-wire changes to any of the formats; this is simply a change to the syntax. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5912"/>
          <seriesInfo name="DOI" value="10.17487/RFC5912"/>
        </reference>
        <reference anchor="RFC8017" target="https://www.rfc-editor.org/info/rfc8017" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC8018" target="https://www.rfc-editor.org/info/rfc8018" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8018.xml">
          <front>
            <title>PKCS #5: Password-Based Cryptography Specification Version 2.1</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document provides recommendations for the implementation of password-based cryptography, covering key derivation functions, encryption schemes, message authentication schemes, and ASN.1 syntax identifying the techniques.</t>
              <t>This document represents a republication of PKCS #5 v2.1 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 2898.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8018"/>
          <seriesInfo name="DOI" value="10.17487/RFC8018"/>
        </reference>
        <reference anchor="I-D.kaliski-asn1-layman-guide" target="https://datatracker.ietf.org/doc/html/draft-kaliski-asn1-layman-guide-00" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.kaliski-asn1-layman-guide.xml">
          <front>
            <title>A Layman's Guide to a Subset of ASN.1, BER, and DER</title>
            <author fullname="Burt Kaliski" initials="B." surname="Kaliski">
              <organization>Verisign, Inc.</organization>
            </author>
            <date day="2" month="April" year="2026"/>
            <abstract>
              <t>This note gives a layman's introduction to a subset of the Abstract Syntax Notation One (ASN.1), Basic Encoding Rules (BER), and Distinguished Encoding Rules (DER). The particular purpose of this note is to provide background material sufficient for understanding and implementing the RSA Data Security, Inc. Public Key Cryptography Standards (PKCS) family of standards. This document represents a republication of A Layman's Guide to a Subset of ASN.1, BER, and DER, originally authored and published by RSA Security USA LLC. This document is submitted with permission from, and on behalf of RSA Security USA LLC. By publishing this document, change control is transferred to the IETF and the Internet technical community in full conformance with the provisions of BCP 78 and BCP 79.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kaliski-asn1-layman-guide-00"/>
        </reference>
        <reference anchor="NIST92">
          <front>
            <title>Stable Implementation Agreements for Open Systems Interconnection Protocols. Part 11 (Directory Services Protocols)</title>
            <author>
              <organization>NIST</organization>
            </author>
            <date year="1992" month="December"/>
          </front>
          <seriesInfo name="NIST SP" value="500-202"/>
        </reference>
        <reference anchor="X200" target="https://www.itu.int/rec/T-REC-X.200">
          <front>
            <title>Information technology -- Open Systems Interconnection -= Basic Reference Model: The basic model</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="1994" month="July"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.200"/>
        </reference>
        <reference anchor="X500" target="https://www.itu.int/rec/T-REC-X.500">
          <front>
            <title>Information technology –- Open Systems Interconnection –- The Directory: Overview of concepts, models and services</title>
            <author>
              <organization>ITU-T</organization>
            </author>
            <date year="2008" month="November"/>
          </front>
          <seriesInfo name="ITU-T Recommendation" value="X.500"/>
        </reference>
        <reference anchor="OPENSSL-DER-SET" target="https://github.com/openssl/openssl/blob/3206bb708246/crypto/asn1/tasn_enc.c#L399">
          <front>
            <title>OpenSSL: DER SET encoding sort implementation (tasn_enc.c)</title>
            <author>
              <organization>OpenSSL Project</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="BCCSHARP-DER-SET" target="https://github.com/bcgit/bc-csharp/blob/0c87b54b4b78/crypto/src/asn1/Asn1Set.cs#L277C38-L277C44">
          <front>
            <title>Bouncy Castle (C#): DER SET encoding sort implementation (Asn1Set.cs)</title>
            <author>
              <organization>Bouncy Castle</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="BCJAVA-DER-SET" target="https://github.com/bcgit/bc-java/blob/126ac9e14a0f/core/src/main/java/org/bouncycastle/asn1/ASN1Set.java#L500">
          <front>
            <title>Bouncy Castle (Java): DER SET encoding sort implementation (ASN1Set.java)</title>
            <author>
              <organization>Bouncy Castle</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RUSTCRYPTO-DER-SET" target="https://github.com/RustCrypto/formats/blob/master/der/src/asn1/set_of.rs#L456">
          <front>
            <title>RustCrypto: DER SET encoding sort implementation (set_of.rs)</title>
            <author>
              <organization>RustCrypto</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 2569?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank Adrian Farrel, Carl Wallace, Daniel Van Geest, Eliot Lear, Mike StJohns, and Sean Turner for their reviews and insightful feedback which meaningfully improved this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA92963YbyZEg/D+fIk2dMyLdAASAd2rkMUVS3bQpUitAbbd7
ewcFoEjWCEDBVYDYsCSffYd9ge/v9xq7b7JPsnHLW1XhQrk17l2Op0VWZeUl
MjLuEVmv19UsmY3iE32qr6LFOJo8zfW382QY61mqI92Z9/N4ptNbfdq5brRq
+uXF25qOJkN9fvFWRf1+Fn84qfiSWqthOphEY+h8mEW3s/p9Os9H8aIe5ZNW
fUTf1O/wi3qzrYbRDBq2m+2DevO43jpU+bw/TvI8SSezxRReJZNhPI3hP5OZ
GkDjuzRb4NPbVKlkmp3oWTbPZ+1m8xh6ex8vHtJseKIvJ7M4m8Sz+jlOQal8
BpP/92iUTqDLSaqmyYn+cZYOajpPs1kW3+bw22KMv/ykVDSf3afZidJ1rXkl
L+fZLJ3oTkP/MRol+ftE/yFrKA0/ySSH1/Y5PUuzuxP9fZwleXI3oScGZOYh
wK6f05scRo9nJ7rVbh609MvRPB7D0vWfogW9HiQzWO7bOIfh6UEW3wFsoKdT
fp8OYXpb7WbruLklT+aTGcLoXYf+jsdRMjrR/fc8wd9/kCk0BumYGswzAMb9
bDbNT549e3h4aJgWI5gjtnrmAeIszeKFfplOJvFo5ABw1gieEQC686yfXiV3
9zPdSUfzGUw7XzXDAXbd6HM3v5/h1yP8Ojcf84ztVM6jD8lQf5em7908zhvu
AU3ij/HiNhrM0iwc+fSdP/IQe2rcw4e/f2/aFwZ7O89z6Jow2Q33thE8431P
7pKR7sQDgOtsUdNXV2chCgTvVwFEDs7vP+AXeTygKSlE/WwczZIPMWCofvvq
rNlsN+XX9vHRvvy6e9A+ll/3mvvm6X5z1/7aPjKf7R/st82vx/tH9teWeXrU
bB26X6nBZf28IThVPtrY4Pqy0z2mDrQWavM7+kPrzizqj2J9OZ6O4jGc7Aj3
V5/ewVHAP3MNS9Q3cOx1Z5HP4nEu39GxHiCGDOiLN1kKhzgd5Q39JspmutXS
2+dJFuMGLgDG2YdkEOeu2Q7vhDne8FPnTcO50t9Mj1rHx+16q80HFE5DnCPU
T2QW2Fh33pzo/WazDqQLHv8ZCJCsNMru8Dz7ByqZzRvJZPYMJvasW397cVb/
cwM+qILMpdldWN0sHtxP0lF6t9BAsPm9D5QSOOovpNXLKE8GQDVu4yyeDGL9
GqjEyEy/ex/rPjUY4+NlILnsvqsXYLJXbx4ugQm1hhEBRWEHh7SAE22W+ef9
x4Jn/1Hg+d///X9sBCCvHULBoopZxc0HRJn4ATkffDaIpzNgDASmnNhfLii1
KdBg+Uf1VuuRQOPF37y5uO50rurAcuudi241/O6S2f28T1Q6hZXn+cj+2x+l
/We7wFb6/cPmUXvv4NkgW0xn6TM8rc9m8N9/B+RoDJ5c7R4f+8DeQhjCyCfI
7TUMraFdOkwmd8QtdRIe223X1c7WMsBIl3gU/wNgDq9enp11vjt9+2bj9fUH
8Af8tz7I76NsyutrDo4O+/t7/b3+4ZFZX54NeI2n8J9OPGsM8idX7cPDs92j
Ov27txcs9yWQ38FCn0U5/K23z57sbLpyN8DylQe907r/cPr96eNX/R/Rh4jX
3GofRIPjuLUXNW+fIdekFQPPmDyjRjDssz6NOqBBBRida5orNnlyVThfRRj8
ARptDgWv583h8PZdp3v29oc33ZuNYQFMeHbGe8xkIGeAjKHPOHs2hP+3ew/y
67+nt40Mtn5v/yBYq+tm0xXazpYvz3Wq1MRn0H8+OHok7YMPvoQ1nPZBlgTZ
BagfTPxnfZ3K9G8mMW1So7VjKE9nGg+S22TADYDaMUOYyCebk7d2q95cxieX
kTezPmjRuXl2eXF2oo+APtVbJ9gfgez4sSA7/jKQIVDc3mfzUQxSXQk4zE4v
TLO32Exvg060U5OOzqJJOoEvRqVWZ9CKNackn8HzeZLfx8NSM8DDpcLJLwT1
4yqo79dbdYK6qtfrIKMyCinVvU9yRIdY3wEeA/PTI6PtAeyzdDhnjorqIups
oi7OgKtugoc1hqmqhOlacCkCV4N4+HSeTdM85sHNnOFfmNg0S0Guj1U/Gry/
y4D8DDXgAgAMtimf38IOJ3DESdaEd3FGSiIOAv8oSwKIKOCbKBtCt/fRDHp5
H+s5D0rraQjAxqC8aZ4EdKIvL7qv7Le8rPuI3/ZjEFPy+/QBQajuow8xt8Zd
m09AMUD5IwdGPs9xnabv9BZEOpjFHKQWXEbiELzBWzhOhkOgr+rJpb9NH5/Q
rn1W6nKGE4z0XTyJs2g0WuhogHIOAHkYk2o6zZLJIIHV82INTiBZoC9BRULo
AjJEd0wxb2cPURbD9x/iUTpFoDX0n4Bs+9/WVCQDxJkeAHByOmUwvJ6i6A6g
jEAFR7lNP8C36XzGIlg2UbhDACrCLmqM8xjM5jR9u1GwAmiXxdMszunPhurM
B/c4AM0B5OBRHCEyYz8FEo9C03OdzFSOL+D0S7PcpwXPaQsTRoAcfwHUyxNU
ZWATYaMB9bain5N0nG/B2nEJdsoES1x3PybEhNk+3AMOQANl1uQthbElyvP5
2GtpVx9Dy3QRA5pOoGEKr7KavgdtOc7qI9wGatmwZxGXmPCK7gFq4yh7rwDi
4zSfkXibTdw2BkvOCbXj1WL19k3nckd//Iha0OfPQpNgR5U7N8nkQzoCJAfE
y2KAxDAG7MU9dxNsaOiGthYQjew3NAPaZNNR8jeARpQN7hMg57M5zBZxA2GY
FOZEEvx4Op/hebnN0jHD736RE5kGagZ4OJ/ixuELOM2Zjqaw9UL2qQFMqY/i
KsxpJuDlF/Agi9Uwvk0mOCFZBB4mRBCYCtCTIZ6SfhwgKGK2Sl2fo/TBdtnQ
r2AtyQTXOohreBxY28CG6SRWPOdxtAAk/+scdBcNo05yoAi02jibRYgOhvzK
MKofzx6Q2lhwPEdq7gamHoVW2h6V0XQIwNAjnHTcUpwIq0J/i7M0Bu1oniMR
MDxUEQ/FlXNPQJ0I8MVZIZBSoMJwPqXzhpLth+0ZIVD5UBqa0I8HEZJcOHT5
fDoFKS1HErRQw+SW1Nyi1JYbfmRXAmCMIxiQt1bheE+RrgKxGWJjoUjEAUrT
tfNiG+f2Ki5HZwGknM+f+Rjj5gmDZPDc+oSKaCgCwuJF7gFcBQD3J4JrA34J
TLNCPOEpHMMUGoqlHKLdt6P4Z6JXRtITGj8CfMhxKNw5Rmto/SGCgwysCISI
SKM5FrabjhIRyZgf0dxVRDsa39HRgMn2cZ9kEbjRs2xO53XofUQLjQFDWbP+
6xxtFTAEPH6IRyP8F3EWpiwfmfOWoDSXjRk8SPvg7CAkgL8MsqQPLYlbpA7G
yBkIRWNY1GjO1ImQgYGD/eN4kUwatypG42MdF5IOZjBNkjcyFC6UY57jNCM+
OcFN1g8RsUaYS11Gi0h+mvCosBVMq7WPDTVSQrarBR7FgpHZzBqwggRmTZvp
xC4yzxtBDcQHAKWyUi1MyFupTEStkZ0MKINh2BmgENTiC/DlKPjKiVFMCM2B
RMpeBxUDGJZHY2Hlb+Z9+Kv+RxApWHm6yyKg0WggFMax/eaPZx2WCZWx6iO1
YoPeMnmMRMNbYDSAcrldDGLOYDTHbZmo1LP1VHg5mP8iOc2S4R18OoL9Qaxx
CMOYDvuZZNqHiYE8UnQzBd42ZK8AZAVzZSwuShg5DUMsJUVuye2DBdBWKdwq
wzCcjpNyl4xjZvm8JCQ5hKzDGNjEyMl/NeJ/wJRh63DzM7QaZsy9DBmjHoo4
KGSiAnaAXh1mw7lu1/cIM4merwZ5jVeH3C4bIoWWTvQ+QQWIRTqOvQObE84T
itMeGJpWUwamBdWupuOfI8RJgQmrSEhxjayWZD6CNrSZwQHJoog6OfFwXI30
VVNksEPw7JP4MwwOMroPUIh68uSlVUP49N0mcFQ0gCQXeYXO4DAdzOnIPAA5
muLxoG6gxR/mAO3dGhpiW0CrlBGbSZoFlQH1AfpgAHsIki6fBzw+DdD5ih1C
B2jHfoZM19rh0yx/qv+UZu9BM5m6qXRAx+5cfls/btVbh0I7clAwAYSbT/8a
dn/cBxxr0RJ2FZHbtx30QPbTLEKNBqDbRTWdRLRrRHEeDLrOVowlkm3B6ffx
40oXRYGYAqsg2FmlH4XKcJEMxsTgAQ55myLnRAQD5AMh40Sp37G6ZidneVDl
KJX+V+hjpQe2BgckAd2L1TcyGMRMcR3E+wvoBaFrPE36HYL66qyhCxNMkBv3
x8nMCKh6CsyVfbDQBzJ8I8aAFAbqwy1Oa0nXLxdmDnwugVT9zg5V0wPglHcx
HibQRke0cSJwCsWhfURFWEir3VToZmZRw2nJQDFu5yN8wmQQvR20BpL2UajN
jSz48uyNPjyCfrBr+uPY6O1FTLpN5xn0Iftes5PhI0tcjv620jLK38HSGuxh
4IeeAhJisuASYM1v0eAxmOcGwXtnV6edTo+OUTQc0oHVTKino2jAXBVpeu/0
+oeeh4fYRjQ6ppShBlse6F331VGHhJ5eTfe+ZbaAelY3Gcc9Xnvv7cXVaffy
+4v6zeU5TArFIJoV9te9t8y31z1oSV8ISqCEA4BkdMcNz0YgT4JmzbAkmZPc
gJM50oXcMEQGMsuEfPyMxIZUt3fz8g8XZ119eX5x3b18dXnxtkdqOfRv/V05
z3A+RXuZqNJIB+0+58JZH5jb4Td4YoSPvH11JnMy+PEAJNHadRCt0K5iaC+i
aw26jvm9kzmjJbYfEMaSGA0AVcYe5BRdPH9iq8QPrVkWJCAnqdWIpaJoykqz
J7DOJ2RoGRqZHMRjeHpkyJr9iJEFoI3NCUkmMyu+t0wL5CVBE6HKDulAh4rq
OStC8BGJN4icIrdgE0ZGq3bwXqvC09vkjqQlkr0GKPyDhkdYHf88g1PyyWpZ
n/TrOJrgq0/qU938eL+pT72Xl90eNAREqw+iKYiS2O04naT5FE6Q/q77+opR
4/zVDkwVYYry1wwPAJ5cVO88vGQdweCjnfRzfO/kCgCc0w5Mp3aj+FP44B6+
GMLBHMNQONdJC6dKWvkAObf9kpQwPCbQNQbB4AHKkAGIJA8EEkYHmjCJyOmN
kKLpmu+YvmckeDCWo8IOz/86xxFAJmrcNXTv6aT1tEdT6cI6aTaXLFQw8NyE
EA7LhyUobTgkjSSj/vgTDtkHmL+PyTwwRJJlbJCk72G36ZRtQvTNx8/mG5gY
ilZTlHzwzIt+iI0+YRsguDPiHP0IsXKUALuDtYzEyvTBinXSDX7YaDTwU9BE
k2meuCmhiDyNaZR0AAxQSA5+8oI++Os8As2EbKkAIsDnHKUFmlBEvNZM7uMJ
OyxebBXOgXeeGluf+bSh2RWDm3K99fpdp7tV43/19Q39/vbiv7y7fHtxjr93
vju9urK/KGnR+e7m3dW5+819eXbz+vXF9Tl/DE918EhtvT79YYtJ2NbNm+7l
zfXp1ZbRRBzvRJIqFi/k2bDwGcuZgfYCjPd//n+tPRCXf4PxKq3WMYjM/MdR
63AP/kBjpxE44Azxn4BaCxTN4wg1HjzTGtAymQGkyWDApnTUz4E4/fZHhMxP
J/pf+4Npa+938gAXHDw0MAseEszKT0ofMxArHlUMY6EZPC9AOpzv6Q/B3wbu
3sN//bcR6l/11tG//U4B21jpd9Efn+Ssy9TbgFCr2tYkVCkhFBfxEzmMcnQ6
pO3WWua0YubZDeJY0kVkaUNk7B/SivRYUu5ErUP9NVaIUBHwBCBDRkhwHzmt
lrVdHpo+JNtshDwm+LYBwjbTX/I1sF3GM/+w5TkWi4Uwd3zzlMxUDWmLXBzl
Q/0eCAIbGTFQUfk2sZqn728BgRwngy0RAT4g5yC7VjpBSeS5KtrGzMfU1muo
Z9HdXaGRYr9LlqA4QUKmBw12V3gPrMLDYicp/r2z724uzy56jr3RU5IqmdJ3
C5sqXgzFACT91oncDKMoR+rHcARlAlmE3j45ebGj2ZADGgvwOP5UfCLGJEJW
BbLAedsaYNQFEPOFv3HSEo1wdjUktdIi7knPBNgZkKGsReYEQoPBCCbLAgds
zGQS3xE/wA8c3pDJV6aSxb69nyw4sA6d3DqSldyKJAmdKCPdEnmU1sQ+edpE
0gnjCR4i5boRnWAZ3d7CCdbEuMyBG7MQVONxCWFhSPzEWCujjNUZXiiL0dAG
hCngPh9IEnqx1QQm826SoFoSjU7UCXtVaL0PtFUyjpEIecVMhn2D3nNEqdwY
hj1nEu+tMSfBJp66r9aMZ205qBlP/OFq1orMIVNDG/lnTP7PpVPkVQ+pdq4C
f9Lk/6DDZpbm24DqbvyIPMNeLzJLRMo3cATROf+ItQgFiplZJjlyrjPQHkGS
soN+QX8FcvIc8T3oExfCm0NnDo29zmKlfW8RER4eW9kTTntPKvCIRXMAC74U
KVlG82msmxFhtLW9+f2Xt6jkMvC3SdEsVu5I997gIU19btDbLd9zJ2Cg4pGl
qaM8FWu6YQH507ADo7Ma6sh+PaZDFd2jo0qT3i58i6jI6CFa5Crto9uOxWTy
PQ8Sdlf8LL8j2UdAb+dxbA2S7cbuTkN1ScBvLTGPeuZpO/k6kQGFkwQYfcLZ
64qfT+eim3RhrdfMej/p7zylxX/haWCFn6oXyxurT5fX3YtvL96W59OumGOz
4iG9UJ9A9dOd7tvL628Lr3ar+ql4KP3cnHUvqnr6tFfVT8VD6ef6HUiQVa/2
q/qpeGjmUzR+mFcHVf1UPJR+nNGn8KpVhumn5mBpP75dKOynDNNPzeHSfjog
iV9cn10Qyto/bl59apXX8KnVXNFPV7rowtf+N4cV/bSW9gPkfEIx6gUgfWod
V/SzHH+sPaz4ql1ew6fWcvy5PN1f0k/FflXAzPTzrnuGZr3yq3bFflXAzPRT
MBN6/ZTX8Kl1tKwfpwB3rPS/nGoRaSV9uEjkRDBFqmo0bqK7zuFdU9MMnYvj
MQCxPoqA20V3cX2UvHeWnJoTY61pi11JQO84NhANtVfRAr1FYg70zGLP9Xg+
mlHkFMlVPDdS0kCfit5bWZckUGCgbNWNjHWEPkL1VZ8Zx1Q/BtJvTBPTKCEF
6H4xBZ0419u9er23U3BlxZOh8VAxPyp+Bawl8iZF411ayxL0ymK5VbRYz0ri
0TDnQEaSSjNna3Uf0IbsaBGw8ckcNPasTjI/2bbqZNwaxTM0rNWAcd8lGGEv
c+OlMOyeq8SblAeHcj8s5SlvSl5znoHfvGS9JPGYvNzis6zyV7J6p0SPKuts
hnVLDJDh3iiVk9pmviyoZM7FuO+FLzhRjWQvlCCc65ZMxB0/AsNX7ustOB/B
W1Y8SOFKZ2ZzJMYhUC/JxCJaitVaZZZ84likQXX4Ax7/504+Umyny2LyPX6I
OB4AX5Ph3QWCmQEs+Mll1nMMu1cDmRcF/ayfgJKD0rwNyeij8rNdCEECOQh7
sCRyVQfQCENQzy4vd3wL78ePkkZFugl2xnJIuStjUKdWyNW5CciDoAqZ2Irf
VXkpuCeO8QlMuc4JqUwQDE5VRvK2iG2h8umCYhi4N6MG4UxHd2kGeD+mcz6D
hffnM94jnljgyeG5k80UUf4fmpxv9LM9YlgkUvZSzzrOkb8aX6VRGwR4ntS1
ajc5LkdvO8cHkyzBCN+ztbyTINTQRwoObINO6kc2joA7LkgHq3qfmqZez+Ib
dA4wb1A8HhICQgqzOdf79VbbIKdzsq0YuNs4aHmQ8dHdQOeMPXyEA1uDNM1g
hWTz81QdaLGFqPRtBkrhA+IC+l00Mf3tb193d3ykLzkPqWvswzk+yKGUDqRv
/bcUDY7QEbk08KVR5gDRjC7K7fHEQ8NGgbzdohGCoglRf5QU4QTj+AUYTkyY
ACCV/7QREp6AiJTQsLztwVawyclAlY0f/lAwbX8+Igoge0EXpYSxmpAsYqcG
6dDArZbRbTyisdBU7zSiCRRZmsRWssufeBnH+mmJ9bNharxBZGFQo3hyN7s3
Es77CZrWUZoafiD/+ja6bzzvoyyTegBeNQXhiEyRaLsdERTiaLxjpBhcCHFP
XDZmd7ORtm5GtSE7gb6L2i7HnVQAUcwMgHfSOyjUM3TljZOZ+MRN787oTFy0
aGMIOCkaykstHDddtiPGXmiYJYoXNTKVQTNnF67iky5gmrmi0YTMQae4KHIc
j0Yuzhm30kR3GVzzPgZFaPX3yEZtB75Ly7PhOAYCqpXpbj555IS63lyWffyI
2Qg+hBuEOEFmIusq9A+LBOwv2J4FWxSByO6jxOUaOa4KUXbRRSdWGnZ/385H
RcOas0VRzL5vY8TEA+KxaHhCSZ6suRXWOVW0mpnuimAoxJKrClgwPGk7EdwO
18QTwHuHTlOAFoOdZzKY6WqTIhohP6QJKDXjfgLznS14j8QKjeQZLV6E8Gi5
01LhYRnE0Xs0rgb/KrcHhj5R3I0Jh8HBxJ3j2y3ZjT0uWNkS9Feiq9sEhIjo
K6Ulct37kZVRtgD+pC9fv7m6PMNQAyJYAcv+/BnJ1sUSHFq3iGgo2Ug6xbh9
WocQi/I6Jjom/0BNLUNZ4UiF0+ITMQoAtxhSqx7pomiXfDTELv7sQ0z5EGsz
xMTfjZ8XvwbOilU8Ak8EiL5m0UpmhaGemNbkUme2xukQdHhyXDMVdlMV/59N
6ECfUVLEjP7C0IuG3t56Tb1hng86G+HEMq4Jjxy64OPK+F0K4GnsKIXHdAnP
n/gnw9tJnKhnQfChULFhFhCkPCAnRDSi4CwxmgO/miyhc5RtYIdSZC0p0Rpm
7CtRR5UPG0ZR5Eh7E8qDyxDBbeB0TYPWonwLOJv/gddPYuAFOcq6ZXIjjjfy
gVUfeM1xHPGMIqwwvkSEGQRMRVvrTzSRdjvEJG68gxpwgj3gBP7LxHiYTeB5
4HJ1TkqRRgHvVeiQdWE3IJSXuasfwULauHL9+dFHTkNwHnD/KWGKcpJk+AYh
YRhnkIRxj1aXuwQlLsO+q3RcTbyINUajLjypTKr1gLkrcS+V7VBcNmEFXrCC
zYNQPpAM0/Ei8yYLPx1CdGeSZkU/gCPuOJekVsHixWdb6pAlPj8yQYIvJSZu
lsejW+fKHSaDGQc3xS5zClCe0ggMZRNRkNbK2W2GqZG+L9Y52IabziWSEo/T
3oO2JolNuS/lT4JVcxwrwowiAQb3acLavYnvx7pLuUkqYFf7rYHYhLISERyK
YwSNeM2xZ6Tt5aw7cDZGOCmkmqAbo4D+AWiU1QIKSsDzUF0oNFOuGdtAqzWL
Qp8NzfqjQnUwUCe2jSGl9/Lm5uri9JpUQmMKMvYesmZWGHh2JCtTQo/N2lRx
HgyC52VeLJ/HCSEZsGPxp5pFGeDxaiXeJFiA9IBpcbIT8klNdpP4/MTsnF6y
c8rbOUm8YinFd1EatugWrVwqXRXpNbbjoLsi3/ZhWLF0DiiidCZ+UrNpcFZv
vCdGiMgGB4dsu5gpwRrVpUeTOKkLlJEuxSxYuxoNbaNCXAiHzW93R6gm+Z4S
q+gfCIEFUk6DCjgfb02kFF0J9O1kXhkzSCXWcKRIzsE3HDRi50ZCOQn2kq4m
Xak158IDZI76ux946SGIcE7+luZ+VhjQm/3yo62C4cTUTtk1aDp0JNUwFAKm
iXU13VdgRgkw2CWsY+IndASIYhJEVagT2VNAa7yYDOvpbb0IW2+pq6FbWC6z
ZKH79qSY3t0Cic+ocGkm9Ci2AdghSfWkR1EtAqEzcGqJp4OEmTfLybAgsc+V
yb8gBQnoJemxnPIbpIWWjzvqOEGYXBU9aWCOjeQ3505oreIvIA0WbVNSEwLP
u9ndgDYQCHOBBJKEZQTB01kxryQ/Qb+TF/mht+Gx8iJBrLGySSvfbbKzDJPG
i58FYWG7LWpHWfFxxpbrq/ShDm3q8g1OAKeFcZw0SQrnz/URfXlo8paVI1yk
iXJwSHunRtH8B0QXGXBbza2aOeisJMtRt3DyyRYzPHK9gEqr7QHzIuRw0t/B
Sqtm3X3wzTlCmSjFg+WthKKiE7TyllYdKi9mCgptaWTikeW0tsiNlkraqfPs
8XiqYso1rHgT61b7qFbKgFDkluQ8FPEJI87ED+KvxL9M4QcGjvUb902aBbEo
No/aJQAppUQKWDQcFpy1Up/OaMN8rzinatA/h5WxNZ/Cf9QnZ683fTSDf9Qn
v7JB8KplWpRMOuaV7WPKIW6+Yz/sw3nzeVEOmyaBMsBIgH78EverPHmkHvLJ
YTLgahrwYWu1D8UNPkI93FCx4BN3PindvP3fWs3mka63+MR1aIjqgwabERwd
kyCT60PARYtbPA6TcEkH8dknTgVzdGxWNmI09rvbLnJu/ZDOR0MlQjsRzAVJ
pe1mj8kDOa3d8QJsAhDY02VzfW7dMcOhlD0uwRJ0WZYg05NYDEfBHlWeMyXz
LsBCzlh7/2D1GfsSmDWbG0PtqK2bA33U7LGs6AOligb64g4xEEdO2mYoEyY9
oawXJHAFAFgt2/EuE90ZShHdzaQg6oc73RYRwR+ibPRJXPg6G7aWCvA7DX1O
cQWsVSPvTAbzUSQmDIoIYPNv6JAkb+QTFB/guP0sDP91dAek41p4WyA2kODA
1YceUsyuxIxZA/hluhpagkxa3oQMajV2bbEUAdLUHPlritPOY1s4iPdGktAi
qSIxi20UA6JIRnRgamYvhtUiUqE3Ib2FRyhtzDJO+yE72BiXqrzcRXJnsFlg
kAKi53FljzZQwuJVg82AJp/cCNBEbDHrh4JvxLbC6A2Avqqfd07re3t+S89d
b0vToOnImpQSU10plAedKgoS0d///nf4atJoKTtGXaKbsUzDyckLzd3pj1xP
LEdA/9j8SQfBktudy79c6O3d9o4pkgaqXoT5YNhLVVOgE03buA8SsAsElJHs
aGtG2nw01/6zkn9g/UqJYxF3coy2WROoZSoblXYV8GgAM+MjRsYn1lwcjKfe
OVEUejUE2RVl0E+az5DlqwbAl7hd8OdL07o6js6PqCtKC59W/rnqB/oC2tnU
wHTsvHoIffcnilO95s9EWnPLQWuGhLYYODUhVcDoqM/mnkaSHOlmE9Plet5O
9WyfzT3oc2QYne1yV+Bt+sRd5F53m9Jr+4B6RQQqzXS3uWGvx0eBPGNpnHAk
PhnBIZUtwxPGIYrWO52j1OESwDmXs8iJjMjIWGJSbKoC9AMLMh1oyxapqJz9
xlRwQdZRSS6CWjCkS9Z5MkZkovxyf3vYYs2gzWdYf4KICaBAWwWWEMtNs9gT
IW4rCSLaOx9SI0Pg7mChBckmQAFCBgwWXavqCuRwLgVAhbAI2kRKZfMsF3PA
R96dgSZYE++JzTGU6fMiZeKB4YAFfHkxkrLVIjE4XyqxyLMVJsxKFbu9VsX2
rX61YoIFGgxKinelvZDsiIWPq2SE2hJtHi2N6IC+U54pb7UmHyKDeoQmr4ua
vFqvyZ+GxX88+QUNGZ9L+mWoJrc2UJNDg15JoVkzgaVC4ebmK73EfIX2TvVb
Tq1csvUV5hn4fFyNActsaqo0KSpmMJiTydPFIBWkWE9i5Sfk5ijLpr5qQOUf
/KAs7FPw6ciKRsSpi8fMtxja7SONwTpHQNPstfdQVwAOhf+Tn8KfPQ+upeCg
6lOCQFWPAirutCoAtXKXfUCqVYB0s15xjKss8hUW9rLSYTjJKk1Cr9EkzjYx
U4eEcvcXJpT/HBrplQ6Rso4lWqkeafUM9kttZvVcRao49rRE3ayhpIaiYq+a
mq3vd7mRvWt1axgBjyIN0kkwDFGM6BVfamHi7M/muLdkEmWL0Bg8prtJ+pQz
EhNlkGAAP5XRky64RK2Jgqbd2OHT0UNRlmQj+kVEiNy3elEKhA+/GgZA4LiA
KaMFbuE8X7EmRaXZqKrIagdLcEwlrlMVUiDJSlzz7dJNsZ9xF03eSYr7oJ7Q
iYZe9nSeW2rMCukRnAUQ+Ap0OZkEFJfKgNIc9ri5kZgYfO6w64JjV0g0V9yJ
mUAfFSly6U+m0k9WVtz26MieRBqsbL8k4gCrcUmhgkI5RrLqIwsEeFGquFcg
0tp31IpIBG0iEc45KMCWlUXPQ5DAbCOaTPHHMDDXE1fUhJRUEnclzoBEbIqS
iti+jdWxkzu2trCEQ3VjhyqdFCIIGkHZw0LOq6s/qujtcFgsmQYggAlKzo3Y
X7g+quESXmzY7ufPQLhaDf0nE9DlDHUlazCjFamkinDPyQnjeT4z9QaUalf2
12ofoctCfDLcmdUaVXVfrkhY+FIZsUSIyhjwfDwfe35bQ+3UbmOltFaKBlOb
Sfkc3LSCYAjztBOW2tIwo71GpZxTWxKZ5uyMPJfSZ2F8pwrCEyt5Zq3swN58
9hyIFWCZj6OVMooJAVF+CEiYI+CCsiUYmim/RDebfDzW/W+p6nyAyCLu2Ior
BBMr6d0GlVB8KrVvZB154GWoB3VZqrLAVakybrEYruaYdv6CA4PIBIdyqKvq
2b2P7W4Zju4C4m3h9ZDLI49HAYWTy0x909H0PoJzy/HFpnDPRURxR9j1dOYV
yMsL5cNqgXzDPji/8qrUf00H87ysvItvM8oSIsoGw3xm+9x6Cz2mKLIF0y+T
mJDrXYLPHg/pzV3CualIFhFolEXIamBC6ogEwSvKkMNOTPEqmwXQKJVNy111
MUVR4rY6BKYYoPX77t4mk9BAFZFKNRWWMKNuieRK6eViJPyy0Pd9MuqfrohU
NVV/Cqeb4xvoDSZ/bRit7eLBveBjV23OBrl7sexObTIyUBiU5NeOochJW63B
lBiuCRKiIE15gnhvmi2JK5encU2TYK8CU/qPHMT8UylqnAKslGK3/Qv97vry
+4u3ndMr/UmfvsEmp1j3Cf568/by+9PuBZmnP57oJ7fJXd1AvU6R4WyqLEEo
nBWaJhkVufza057bJKBnT2ki8nDipVBwCHY0Fod37ykvhFuGrvWgGggLmkFp
HeVyKE1xKM2x2abCiUnLMEtwsVRmxaFyavG4V4IzrrFncisUX3URGb89fWzj
zF0gvxkIuIje7gRB/Zjs8bmxg2zRBPbRWafLH4YYqI9CMyyYV8Tzs1ofYVLu
qfkyuAoHn1Iqc8T3SpDgTUGrXlbF5a0DL9cNSnKJDaIhJ3ZP2EQVuPYbulhm
huqBsK8LaYpXZ82r08Lqj+PpaBz2Y5Up04FUgxMmaU+OKFVSPEd4F48EJvOx
Od4/gmN0HwWYpno2aTX3Tq8tumwQoFaZgxKcuXBoclwFDiVThPV7qfIKj6b2
k1ObR/um/Mypz+FHXlt84VZC7jF75E/dc1PWzfidvjMB2FWx6O47cWXz9tud
V9tJI26UIbPjkL3ylCrbT5NdushcbQH6N0vCFwshpbNyAH2jGCHowq+yspFi
uVHJYlV3iSFqCc4gwqoSBtrY5MAigsYxUkWLlhGaMxo3jEvds7f5OyL9crUx
F/IZ2qyRckZVXellXfmybwgvO2URTyQCugRv0oRcfoha0bzKzi62p5VTJaQ5
/09CmvPNkObJk2VpV4H8gq6WUkZTWOu0UnbRIrs8JkmrYqR/VHyRbI/7DOU+
qkqySnwhI6JQveCYsE8Ra6RSoeg4oNNtKdn21WWvR4pQJo3sHxKhDGv2RajS
Lv2qRagvkQTUclFALxUFVEEUKCnCVRKBlfAk/S7fWivjVTsglsp4+lFCnss9
LAp5qlLI05sKeWqtkFcYPBDyVJWQJ3xPt5jznb3uAHiZOJaEKdJBSsKUEPgK
OcrMdgM5yhuyLETJCLgDhnB3KZfMviLZx55VOOdAwV9dXl+c65c/BJ8/ThZa
2k+vFso0fBb0Y2QjVTx+RjYyO9I+2YBkiixQIrhqsz3wCzs4zDFX3FMtbL6z
IdwsNyParEaj4Ym6uBUi7iL0Tt9ddfWH1vHREQVOYVuCfNdRDIvV5v6t2f3S
s0sR8fdxoNKxKcjBxEX7ie0qgKEy+1vyk5XlUs9dWC0zFN2oK9yWVsJc5uos
HyQWLoPjuFyyXCJVRsaZHFqYXFphKV5i3YIK56Knev7JMNIaDrlMVKxYvVo+
gK7qvigMbrRT55vt1JMnOIFAhEMnsIQLmWtRqq6+YLLwRemxUrb0a6bHApFJ
B+xSEvJgeDx5x35mVurRenE8uuX40phBV+LTno1bniubti1ErsxWOARrhb3L
G1+VxochQRKhgkbFKbgCVZ4C2qtQrZfMY9W6lSt4JYZtf41WbbHCyQppE7Hs
Rw/P3W79FMiPKGubGv7wyXJJ0XVQFg3du4ZFZXOvSyahbnzfaXUSu1jmi4ff
RzHygj1OqpOqIF2BM+6rhBfbbl2NPqk+yyK9VweAmSte6RW+UZSlSSqMSbCl
8crGagp4DzUxRZqYzZMV90N/4YUNXcpNYkUAWlw14HNVK4KA+uJClIwmyFQ8
1vRJ6VxzjqhKxZTGdcC86mmupLlv4Vh+GCqkC3/3lFMJQ1wu91cW5Ny5LG0B
GbnciS5wAO/DZQKcj7tG27Qd+hYbl3KuSjvSswN5X7DXxe+fs0D6cYEQl3Zs
yW7lytgZqscryyEdr/ZGleggk9vYmBUu2oHJO6jJ8tGCr32Uj/JHQ0TqGegN
IHK+DCLn6yEiBG/5pVVC8uVGLGtNwmnLbVh5gbc/4kiJo9a/pNdcJwJYBDJc
eOWm3A4dXBPn6YhO3D3Gen3hMbz69ubtZfe715xDgauhk/cvybB85tCMAacT
j96/vEEccLbimvqs/wT96M4P193TP1Mf3ofQHTz48c3p21NQGH/s/vDmwnTx
008K3XVlWHy0czuxbzvx7PMqMmE/acCI2x+D73aKJMO15ZkU2n/8ve33806J
jtxg9OM8y2MXimhiToLE3vmEr1sbWn7ojdFzl3bHUS4s0dv2TK49Fa6A9dqM
ddGt2S9Ja9RGT3KzfNItHTOxKMjHizzg2yC9CuW+NGuCkfyggxXyalgbVZVr
o+rTsCsmELZIGk5NsvWUNRTSx1Iz0PlxvZiSxrI5Bpd/FYOJiK4vfUNVVkQR
lKLDVBuJLrQErZfCnII2yUT1OnOiWnyPbJWXyVgvV8h6bhWBaAcAteVBWMLz
9qws6FmCs+GcigxcSQHlAKrBPKv6XXlCl/irzPfaW48ctU2dPyRgeX4O5WIx
8ExwckWoYvrxKjb2iZC2v/AKcoXqrrtGGlFrFOc524upl/jnmbIVt1O5sFlv
U32t8JrsLTfifEJhFzjw1o7EiVTNlqyJVOhHArie40leN8MmrcgzvFLfhfAS
TWkq9sYRPpFNQ1Dkyt8+nU2q4UkRp8UJcrUoc0VimPZuWpbycgPpwM2cDFB4
RRpnDhUDEOmscwuyHE2zFGtwlSwdcu1yCJGp3F55OzP1ZjAHHtvQnRlU7RHD
tdH8ySnJpCUbTRxe0e3ODvCqDPhIl9AAENRPvq3erYrvVDTCq5AXNbylaSrO
HbrlbIJUr21CrWlRYW/D5EPCgX6z1N8jxfjF2GlWOKvspY/5hnwvk5ccVpOy
Ani5Gt7LKGXSU/agketHWchuMAzLXEElVh2e36JxyCCQ2iwrpToBpLxxNT8q
yjYsFUzA1PXIHDuugV25d7TqjfzFJYaotpqtFvyv1WzyP/D/W0Y2RGyUL+0Z
gz3Amn9y/XzZrelV0zJYZCmDlpDUYjy4V1OLmlVW4wBC7PuEmUGo5i5FQB/o
g1jvD/VgyQ0Z9idwoha/jpd9LZhEBqqtFgVbb9HXR62Vw9vYWS8OV6LaVRvG
tndqVGHkiS7tzZb+BsZvbaHRGucO/2vy0OZJGyczaFqmVu2cbphMq2X+5khV
e/JLRRUriR4b+pHC1QnJuOQCSGS2uMJoEUaXSpqcCw9Hhx4fXbrix914VaLm
yM/f5dFd7MtIClhkPCGiHZjQWPQDJoSlkkc4aWZcMPI4RQNLP77Fei1cllYY
YPFkVal2m56sJF+GuLxlKweKqher3WLF8IIXnmVc29Rcj9YT2bNjRM8eLtyb
DGDOoT6ymCNRwIGIjpG4SwUlFLjlPg9TY8KWw6B82lenVx30j97HTtLAvAGg
7ogq0qr79t2FRPnYVlivjiTzlSj91YaXVs2fX73aDBUkgFrwgPv0dh5oRku/
emUgLQnUAaQPjDL0pTUxG1XfGyUlqODI/gZrpeeTg9TOxzC6umtC180dBy+M
HftCvvKcWjdZ2UtYuBVvwyBSr+zCj04TbbH/u4WifaPRqIVvr/nttQj4LuxB
iq1IvR7ueRPrdesp4AWOEzy9fsoV741Ju2ZrRQfXuBhLkr9FEj5vLgO2ndO0
uVuSbjh4x6rk3h4TCgaqeRa7EG/WOOWSWim3DV0s4Jl/raIfCW+KXZI7M8n8
2PEJSQOgFwTR8JR8QETVlsimu4pYhZa0PrlgHs1xEvWew3RyQgPiFNbpWZHA
iaozW9grAOCdxkon0YZYmaCYFRyVAP3W9VIsDeKfD69ZTdfrfIKU1nG5zzBW
smLQknl5HYaxs3Xg+5kJ5SoG73nhAMvwjdIYQtc/fvNff2z+159cFHHVzHtf
YD4eoG9jorwJiNJK9+0a8SNYboCISooni+3L1C1bdu0jI3yQfVwk9mVndlU8
JwN9t9lTib8Qf6YUyDEoAd+LkFRLPqrauS8wRFfAlhIf3GVrPjM6NMzIXRKy
kWEOmiv/8he8g4gyPBhwl8H9M6eSF6P3zW2UhULndHmRCK6mU2LNNlUGxQS6
dgZBgMJtlo6C22dOJ8EayhZBZSSGx1sEi7AxvFZ8DhwXfsw0qn18tP/5M+aC
DmCOk2RQH4M0ihGVeINbDdixizav28C58LE0dp7ffDUPtfMLEymi/dDS51Cg
zBN/IRvZMh3bvw1IoIYYZDRmL51QUGG1Ll9MbdKPKJCq1hVzEFwWo8J6vbuI
dWoLNmzW+r2II41BOt5E69aidauS1l2pZBYVa7VMsdZlxbp1oFstfbinD/b1
4S7+stvSe03680gftPTBUB/CnwN80o71wa4+uMWHoYYN3YCOvOzCyVUKMrx9
/OhK7cK8D1fp1AR4UqR/T//1twAHhRk39wtDm+c4B/P7y/WTWaeErwj4XqaA
b6SAbIRtIPT8QxttVmdvrvVZxpFlGSbGYTnDMCG9rrHxv8qBANYtCbwmDJju
zGKtzeScWhI+ju4myQwYQqNyCr6jxth1vVp2hRhyzzW0KgWO7zWrHonE8EG2
mM7wGs4psDYjchuTBgUMznO0rXjRI4QAcR4ykJbuve2cWkeI1F7ARzbZQ+5U
4PkdNVuHqF2tAUSkx3i3xF1cHyZ3gCpYaUr844N0PpnZZM0n+7r35uXFGxfD
4Lw7MNbROk3OIMuPHz1pqrVNAGntoAbkPb/m59c7+nMYe2TCSAzPkk5/OS2u
WoljdY3n6nXDkyz2IHMUVC6pajWuPCBKeE2OfhAKp8qamXdGPD8NehNDK1VP
Yl0rnG8cgVXABRrOzs5cKxvsnImeRV3HHXn9obXd3KnpD+3tFv6zu93eMWpK
QWT+0GK/SRju5/mBzC0gK0OL57m40sKeZ6kpJSohusraCJtWSi8FJD8igLgc
PCxmhzXuwzKRL/mkSMkXdPErx/LF8E9zqeJJWjRHdWFNWeXVlNXlus3Y5/KK
C13P++bsnMGdvFTQhWsBK0WXFBvTSej12JYCHJjyfY/hdRNy14RxrXiBrl8D
iSt072IZaFIDbEwY1nz0Odr6uo7QQ2h0x0KLbWTVTarfiA2wRnBFg8NXrsFR
uUEbjeuY/4YtYEcqW/Aw2KIedGIHObKzgAbHFV28ekUT8asuXlRCGjUqOXhC
VEQo/2XFiydP+M52n50fG3ZOF4EUjZHBFbDFZgGbsR56L0QGr0HiW3WVhDQl
lI4vxqNh5Ve+hkbkYa+5v7+O+eCsAj5CExeY06IfofNUgzceT/0MlmqNIDIA
cgoo1mIKbj/xJX8uTYD/LnW6Gcea76anWRmb8z7gqcJ/0GO13j20dG3PjU1B
rViRY009GphNFOVQr7CgQtMgWUUobFF6rLiw91GXCCd+N6rqGmG6hyy8R5ik
zmmcAZnDBNUgjDCaz+7xw4UOEj04mlaG8dg/2yIqFloRpSSpOWl4+ancfW4W
h1/YAhlOGPZS50zlooIpo3AXEOzU0mn5hezGcTQhqtRfBPGUygAiQaGHypos
gRPZh/MpFttCZkBR7IDlZhOLtf/oZnMc0lynKnefSvOGOl02kDM7D+MRAiP2
Rk5G0IREdK5iZcUtNw8s4j/DQIgxFVdN5Y6SytESNOunWXWJHRtq2vCurJKD
EmHx2UgKs3pXqq45Ep5Hx17jY3IgMEpsZdZcLfjMYj7Hl20Wi/2oWiClRQTE
mEFT9+Q6ocxlulEm0wikQsUYUvACCXoFFP1pfvTdSD+5zWiRemL/RM+SC02+
1C88anQJ7N3/ixWZyx14zL+tXnldQoCWrZ9fb5ZyUdtc/VGBfrJK27lco+3w
htjid5ifXU4EwS3ZMhXqt8w9zHS4RyOFR86dg+eOy1GLQm+uMB0HRDti4VEQ
SS/ySXIpCr5R0FryRyiPpkydckWWSh44ut+RvXDkOhukGZOioeTOqyBFgpVE
qkfFrj3SFhvhxV00zQFfrEvFHwXiYbIFRwKwd4GDctmiCAL/GOEtFfz8Pgs1
7SSeNBBtXOidjEJzpQRfUwygxPxQBySNFVu87Zzq82gWYVmpOZLrGigEg8ZJ
eCCTPAX9EpgOcsJ6Px0uUM882mvqVmt3f+8YjuJH3dLt8BEJOduXcvGovWWA
FRYOyvQrELoaW7gPy9IkJJ55AFs8qpEf9R56lgeNHcWqzZ707+UGLe+Q/W4J
XnvFTBX1opvq5vrTa25UbU+tujVnowr48CFD8HO5z8vOjYAetneIolM4ogN9
+PGndx29fXrdAbpXPdXynsmrJVix/MPW59UfkvGKPmzr/ao1DkHVGMxS9F/F
2YcE+f42+mqbO2ZE/PCo9GnFh3XHSX2ljnTo9UhgJavGF6gfLiq1ZplBNQWf
ANHy7mQr0orS/XC2MqxcKFJaiAuDdQXmve+33UR8ztJ+2mPTgJgglG+CYISH
Tf6ttwz9jfetxBsb+8UcP1TWaYimlLq96KruGUzqZDCp80zzwX08jlVQqjef
xVNtamR6g1OkMxD1Vs2bBcoPI9yXeGireWI6BjSFP3ePaxiySjQIANInkioF
qzEInG8x9yOXtrsSyD2fcFWEFI3DOdX+Debijyo716yZMNn283CKumqKSqbI
jKZqoXTnJvQ4GFAtYazxogw3APrn6XpWhG03dioh1/aBpmh9fSwTidVxAEJL
MYRuQDYlol3wq6ke2m4UWJEJK00ontp4Dk2Hu+YoKHcURFOx2qtBqPCqtDUm
t+JVaSq4Kk1SvcLLoCjAUe5UUNWXpsnBo6k99a4W8y5Tw0LT7Aj1FGDbkGKM
i3UwaKqq6la32X3pfg4vV8OfAQbmoeFG4UUoehvNX8IGd0piQthhVciHodwq
pNwwYJlmwshEFVpADNogeO/Bf1SvHfX0tseMJcnBHwQ5xgt9gJ/CbIGS7B0V
vqEoi6MDjS9k1wJLh/Ab20kbezk8LPZiBxgu6f/2UDWHPdHG4dgMbSFgh8c+
iIwd5wBDRtuRpilq6kg3v5an8cmT4AKh0FzTsuaaoAD2JoEh4uHdpuB1TDcS
6rUjZpGgw180SqNirr6BMo9GNiDORDaucXeJ6291x0rca5rdaznRJHQJ0jWu
hVdSF1dem8oFhXjJTUb1r7zhariu2+CV9e4d+RUK1yjzPmb8yFdLfcyTv6EJ
H/9pNRr4T/vzTui7o70vpJcFfS1Xa7E/VmhpgKcmbIr+bBdVUpoLxwBECZlS
TIGBYDieOTbe8asOBHXEUVVThH1mEjbNZU2fBgo7PbWib8ZsE4lmlxeuTq0a
cunUzbmhVEzsqZQhXIHfBtcYxSsS7qmZCmcQlqD0Oi1n6tExK0Fs+4iyZ63r
+Qw9z9blUYx9pO01tjrsL8gSNxlslB1jJYWvHcAUFlKgS15N9JLPAYHQE2uX
mzaLYUwbh0ttdCdNOXSpir5uFMRURZd7TdDEdvXevjo41EfHOurrAZCv296v
K5oJUy2OtJmrDudaoZwW0oT2yG2yooOViT50tY73Ux2Y1GT7IvT8DfaNv8e3
lNbDlzy4od1Dbw7/GcFGvwBWmKijlRti1vIGgznRnlIVldpqGwGk0GwjGURN
zUd+2KG9rM5LKfVjTQWbzEae1vRLUav/Yh9GNd2Xh3+zD1kto4fH9HA7n0aD
eEc/1dt6B3a8puu6oZ/pExAt/83ET6yTZqoX7kWeVkSdYkTuCDE0rk+jPKeS
asuCS71CvsxqPV/tMLgzBINU/eab56AX1hDICnaPQnGhiBa/gkhVD502j1f9
ZQn96njVR8SqlrBKLoXrwjaodzmchI0yRMvOavUY6h5c3rIuVnVXN/t63wth
bDf1Pv2OT9r4564XgloIUeU0zn6VkZJ/VkeprhtXqV2YX5HLLIlORSBriksV
SFO46S6GpIbjmOcHFQP+s+JOV2GONphj40432jSzlrcXV6fdy+8v6jeX5wU+
sCt8IGhSCFGhCyYIf37RwAHbLSbyV9t3Tdo2gAAgw9Syv1BS+BKzFoN5exWw
jTkNU/y8qkNnodPfhQmUXP1KvZvQjc24OWUvIoc0RFXj431J6cyz9rILPH2Y
0L1tdO8cWalv5yN2LJFZSe71QrtUxLazMjz4CjfLaAUO9iYnr/wVu7PyDUHk
jNXsK6RMQ1ADi0haZZ1WVmMuQ2k7D65BoDiVzzv26jq6j2qxhMUpf94uKHKt
o7qMyebQfPyK7mjRsz13p0gsnquTHZ0FNzF7fU1rDoetdA+buDU0WFLIabni
Wimvzfes6sCzqh7nWQ0noao9q35CoRRtqEbj8DgbNOacJbzmfL2Ls1bhsvTr
p1gJtIz8fvXBsisM/k/qb9EIrX/UE7qcdi5ziarQJRrIKg29pgoBy00VODUx
VTMqXnm+LFXpy9JlX1ZhXZ6HejN3gG/IV+vdAbraHaCWuAP0Ju4ApwJLjvpj
3QFq3VTXuQMCJZzcAbrCHaCFEVVUWFxGkwmphAmRz+y5xt4XoZ3HuA2xKihK
mfB4tDb+skRi+VB91LvtPZA+dskLzj3n8uwFHCOy6f83NPi32vvWwg9q67Y1
7ke5AlHydqj3j2vQD0CyuSveOPqjvdbgb+FpDBdDzUGb1CmX+ODjfL7sUH2p
rd+a6ELxytZlc/VRS9GY2TDOyFY9GskdbbY0gaLSBBQA16juyMawucscgKL+
BxLxqI9/8b6bu8EUEVjO68W63DAS0a7VamZgf6woIqB//Gir731yUf5EaT7/
tKbEwPJvrz//VChAYA+lCQswE/tPq0HgR5GurD5A1DTIBi8GoK6KLvBnpEzh
9EJhTS/QsaqWwapIqtW1DGzhBM0jra5l0DPb19N/nUcjcTLy/ef+De6uRnZY
k9TKOQgTvGjUFDIzNTbESGCDVdnyLpjiD0ppFOWRXTZLpCtH5u1gqSMvZcEI
ofGcwEbKCI3mfZGBuvdeFQAEVWBbiLOkFJ1rck6UB0osp1JeYhjPbro37CgZ
j+MhxvHRlhu6SGDgcWtLS06oipITXuzv8pITqqLkhPZLTgThuF6OFaxoCOLc
kiSrEp1jGD2kXlhNmGEl/VX4S2ZRNtPdZEzXSwCbo983KgdRYKg96ko8S9BR
r6Yqyz4UPiM5uYeDVlVy2KTM/YYF1Owpq4pBKkRmU4YUsR5840rRugwo5V25
a+8yrsBanwAQZAzaKou2uFW/NddXVZ7Gqs4AuapOubucw+rBdlHKagChyBIV
PFwoZkvlg6GLzgpvzt54xuX1mgDdgHB76ok1n5Unh9E6WJIoWhgy6M1TVc7z
iy5OkMIQqohIYY2yFQBQZQDoDQCg1m6MXrYxynNF2hN+86ogce0XJS68XndD
oQsDIZQpCJUOQOHMbDaFyZnwXQjlITz3QZWNf2PDvu15dXAALp/usaoSkuoI
4YKcBO0fcy2VmJU3DiBQywMItHW928lUePoRkp6z3+MCG7v60Qc+zl249yUf
m3CzKoeoSBwioyb2V4qXKUYCvD2/7gjgK3gaQgJL8RksM2XHVAHLaEZvRbcO
bpa/BgTqybaUVF/XC6uDAS55Mwu5IyDD0qGqM3O/KrPyQWGPvjmeIb9yTSvq
93z5JM+/3iQtsjC2XJiig3khakTwRSQxYxDzrdmIjqokHof4Xa7ARWNp2n9d
OIBw+F6f/hmPnrZNrb1VEq1IonsAGQmEQSJwFQX3ZbKc+EB58lax8+emQh6K
OmpUJBcSp0PlmE0B9zym+8XxkEpMKid9KnyA2ZXB1XJYDG3GjXFzUIpH3iJf
hge/oU9ZoMBVKl8I9g2VAudpluYudia8cIALX4ZXtBVGLcwUAUJCPXxKGecA
h7wUoiNRbsL5ugWOd+A4XrfM6eaTVQYGJkJsYBDUdL0IP/YrMfUuOh1jib2K
+vGoJ2jb3F2bQYwz/+cbEGaOJ3b/nzIbXBdZ8OPNBioogfgos4Ep0/xrMxug
bVcquGxuMVg76BKLgfYtBuoLLAb/+RUhq9TzRgUhWEMEPIHHUAKPARWaixTC
1CCXN/VpChNd+Cms5qM39Ca8jsB+RjcturtVzDdn4WN3C4rcvA0jAZa/1zC3
N/z3a/zTb+eGAOTApCTYINu9e1S8d+SfruDPaua0EeX3appYjV79Ehr9776y
Tu/dRPt4rbFYwO4x0/2/WqGvqqoZKPWca3b5i0OicPn3qj2yeUdZbC61I6G5
aGoFjod682ihonxgglypJd/aprcHsHxzq+rNdaf79t1Z9+KcqnObQbGSgC0D
Fd2ZGWNkAt3UtNPQLxe6MAAcoXF0h3Ks+E/Qm8hlhApZPH51e749hxPWIuN6
8RvbjfKuUyckIseidBV8kMWRXC4VFJ6yW0T5xxgh5AhFnmZephqbP41qiTQd
pTS+kgqYZR7Ph2mdxFNTrckQEuhGbyeTOhWW2eEr0vQoTd9rdEeyaMffk88Z
47I68M02CFUtTsD98ScDtHyH3n+0MZ39NAWVZqLzB4xUGeoXsNR5/Ny+f7hP
YHrb8nrHPnc94I/7+hZYufc5/uBJ2P6AFxbC++Zz+Oc3L/QVAX7bTkvXMUsv
+eabneDbcBj8AdKx/ZsrEMS799HkJrvAE7ENx9R29WPy005Nh0++af20s7NT
6qvce7iYEBT+Dy4nxvV4o1a39BoEzdEDu/YTmDd+lJTbfVbVf/FvIEDjP0Uw
9RezGHFhMjitaffHyyJSPHumByPMwvfOMh/lCR1d/BQ3AtP3fIhEmJiGvWMR
6H/Rf/c+D9r1pd3LFe1wn6E/QJV+cxnaZfFsnk1w2H+FVs89IATDUczBC/06
mWwbtIM5ApK4v17uMAa6DwOsRdSEMbCj5/qbb5KdwkRwsrRu2OTfyNIADUu7
JhM2Tf/VtKyaud8WB4bm0jP9JftMos6fWFmS5ez05Fumc+4KHQoizyK8tQJh
UWg3juC/8B+UZW3VNaRBDzYvV4SQt8VPK+MoHfnpaQzSlgIvMxc50vs7CCJT
TJShNK8UL+DhDukeNArcS8axudtUGAYr6RS6hrcjRJO7OejkORFDfVbTf4g+
RDzG2ZOGvoKnD0nOF7v1/qUHu4wDADLT09PrcyDD1zfdixOMOFmkc7JVIFOy
ElCveIwwx2o+EUsTi+fmyOKUQusVKaei+XOIiJ+FLPoZVfne5svKSY8io+eO
DQfbmKvCYq6SyXsKy5AIKZJIhwkoiRmJAKYMn9iKPJMbL4X4jURG32JmM9vE
jKGDKnGqV3K7LBlxtx0Pr+mZTfuGkaCrCK1Ip6ORA5G9Oos4MNITcx+gZ22L
x7QELieGJZVIYAsCjjmWmd8mEy95ho3KBTBHpHpJNq2ZCiXtk/oM340WdqMq
tqh4f5eDgdy0YTt194MFyqPkRKKAQS3KC+JkR28Rbh6jRUO/kste8BTdTVJz
uXwJMwYkICDg+BoYjNOhik+4OJJnzF1gOaWsJ7bolhjO+ijHmKu78rm9SYbw
LdTqi6eeUZCtYyWX0KFnIKv0Bi2zkYmlXm3uD+qWXUGUGiu1sbwcj+oEk8aG
HRUqztqiGWEVIgqjRKsKbqrYKBEZsniQTBMGp31VTJJda8v7ItfULPBKdX8l
DqnuZr6o7i/ihuqWPVDdf9T5tNpjtMwVpfwLcKo8Ufby8++RB57yxUimMq5E
lNKyWCsLyW/ohFo2QzQGKa3dHnjuCDs8IsLpZEiz+FV6pqy15Qv9UZur70xg
fbW5QkkexT8nA1sx23qkwlDiK78RWZKiLMkFMA+px7tDEMm9hjxbvsVRX6V3
YoucRixk5feohmaF2z3MfY7K5fCyLjucj8cLAxR2emVGu6WL0MW0eo+luihh
A8jWyGQBdwZyu2c4UxKlRvEtcZWMLmqcA3UcocVWFjcgUJK8IVdj8pDm7jW/
Q3OpBi6+oIDb9rwkMSNP04SvWHejNX5Rr1r3qzvUupv60rr/HDda9/EetO5B
qzIl1pbdtw02K8jRbRy0gqta8IEcUFekw10zJ4YZymtUQYYsILIk3mzF+SCa
xlteJU0GEgx8n9xyXKP7FqP2MwCYJMUMF0AR+DyasP9CC8BJ/45Y25FRuHK+
0c0mO/whmkagG8XkAVIUKyaZKV6nsOQr+G2y6p4Z5d8zo6vumancgojoDGVL
Eb+hcYjhmpnpZdAw2bdG/0iz/KmK7rJYxGa+WtrUIeM4HaC3ONuK+amPH68v
O91jKiNyGky0ovpsqdaK2rTWShEAFXnJ1TfaYGXbiiTlQnIxS5ulvGSvmXH8
+bfNmcClazgOLHlIDLk/XZipq6ULmghewg5Hb+j0b/gIDeW9d91XR95XfOAz
Mg+vED3tUIFkOTtohXnO7pT/GjKciSR8yWU8VR6C9ZfxqECgWZ3c7E1towzn
EsZvDUb/6//PFV0QDvQk39Lbr5DX3dPR2vLuYt/aKac+q/Wpz9WFLdT61Oe1
1/TslVOLV/0Eqc/wN97mMtCDtmThtpt418vhvj5o040vx/qwRX/iW4WjYar0
igFXp0o/brTdPd3a526XZEvTtlG2NOdMuw2k9Og9zJ0JxzTPWyaFeg9v4V0x
C5u16figI9O9QVt0O0JBPP7JzyL7DYe4sSoaYPnwaDBALrX9dMfwTrzE3fW0
+mbTr5WvXXUOnsbBObDZ2oRnj9o/UXLedc8oWj2UVOyNAvK6dKnA1iAl+w35
jkAlQ7tLhNX6xyBSpJn6Frjf5AHzF7EgKgfEb3/7urtj6pyfen1LJp9h4GTb
TQfSHW7bAC2azmoGUhhxEDJX4D3zwoFhP9PbWxQGSC6H4ZACgrwqt8PId5Qk
PaMMpSoqQefDVOb/4YfXr8/P7+/H4794v39zf/90PH7qPamXnuT5X4K/yt/k
ufnK5feS17v3ww+2BDOH5fmhmKw53Xk3qS/Qo7HdpGKRx8c71MXr17YLoHlw
zLebdA9Lq83vz8/t+2G0MG93W/z2/t6+RfCZztu7/Ho8tqFEdjOkyb6Mn+eu
iWxSsclfesXIGG/XYXTYv5rqfbOmFWj9nMc/oQ8o47lXX/MRAGyUeJ/Jol3l
66ifpyMkDWHRqCXYJUD5gs8FepuUkwmPYmCzQ+wgwWQc2v3kRR1fONEruOUQ
zwVFaXj363wwqS7TOEvSIRVBXZFPs1qakmkHstR8NqCdEEnK0KBfgxz167zP
UKQnrD0b+3MI83vFa8K3Goz46jaQ2Wc0RylQa7DIXF/FVgI2pjivTNUyqdJL
nAGAEeA7BQ7G+3lP93EjIGCsB0why4BS0Y3y+iHDLyf4WO2d7O2f7DX1tDFu
6DcR6eb6PFqMqCIcIQPA6jUQpoOabh0ft0w2PBZS78fufmwbkWauZwnDkIpM
Jq8pXwQUIr913GruNw9aB3v7e81687DZ3FLmYXsXH/5ly0oaubXdWXdPdU3Q
PBQ3jUSIBUGxpO9uS+829e4+/fdA77b17q4GmQqf7OHD/Uhh61arqnWL/uu1
bp/Tq0P675fdILNJFvK3rHglf4uHZbGhbe+IKTQTmuHnKMBRikAAHQLnGpor
zBGH8KaQ8uehhKCXSwi3eJxRJ8czJXynofXyPlFdkH6BGA8nhIBiXaPIFkWT
HaJzGU8HGVpkGsX2mPpnWuOgatmgdE0amcaL+Dq7z+LYSiCtBnTmLRT9ndHi
OQU3VbxwNkPP+Gi8CF5rhDWci+coqKld7Ar+8jtCio4W6Whg60fx+SahabOJ
E2OsGQbHApqV1miidq8YaPwSNzF0UEj6vubrp3jxJZmuukt+ubZLAweZckVP
zOfXddRYycY1ip2085HcZkOGje8TquUgkr5h9uFTxkRzRwYakzOuke4IYcBd
UCDEykkgKq5sR5KhyM56RWMlYmLN2n/FLJPHeOkXWryWTBy5ImxC7MV++ghL
AEX1y+IaIhfCmjxHvH81esjowdf3VCFOjevLG04wSMfjiBrP8fqMWTo1N26b
PUPhaMmsY5RWacLzKbC8Opq0QRKfoaT5F3JTi3DpHZ1VXbGxmCrObHQyvRxZ
I1579V3F4YhefWbGJuo0dDkQYZvFd2h2cxhLOI7nezRyl67TsSVsLBEsoI8S
VRpDJxjSgoY2oYQwygPIDfcoeiRU2x8oYWWW0ZAkcfbOtJt7x4RAIQVhfyWz
eXOPpDLXi0f9FO+V9d1UfA6k0jupQGSPoWCboVXfQoXMmguWcChfqv5qEnFh
6EAyvnPvfAm5yHZ/pZJykZj9PyIzF3HFl53n+ZyOIgfx/iNS9JUjAweOrbUP
G7tWgebzc6ynYxSPD/Q1HAo62G0QVRsizOLvrRZIrvj/8LUVXWG5rjjbo+XW
I92iMo0ojB6R3NkyUilLr/7vh3gV9e7uVxJDLcgqr55dJnQBWmwdw0+rvQv/
2z/ePwap3qflQlX8c4+QmqRUEKNu7luKf54mcq8cUrXGGtAGQXO/QmDKfJq3
NBn7v5bRSOwv+/Sc/guqiTUfGg9LQRVoOQui88EQncyBp6bZLC+FWQX+vFwK
Dg5SNC1yRS852MByRsOnOSmU+Gm+yDGG5bnmWoCAErsH7WMp/s9pTKusKoXp
GRZAHJjuG0dXJ4YWBKFVj7B/mAEKJpDbo9Cf5IHy10DeYTr1I0tE/5n+o2Am
BbODjzOSgf7um/P9/TP45/T84Bz+Odt/uae3/5hmaIjeusew2rs43aqZ+7z0
Fg4i703U7daOX1kOQEKTsB5GCXXgymRrznwlOW0O0LEBXR/v6+OBjiPd39cR
gHWgjw90f0/O1+nE3uvsHS/OxyVTC0cSco3AyDVOb4tlLCUS1RUwY1pZHcJF
qv4p7gPA1vZROSgHGpQqZq7u3Lv0VwK09Nl3N5dST8cvJwAr/bLqAhvFg/kR
YGEAGhzp6hfl8j9hEFkteELf4iKCNtRH+brNwpDU6vT6B09o9QBaVfCW48Q0
XYzmIg4aSr7jskcM6NAiIwSYYq5GcJgmBLkTFdScAEnq1RxjATRe5pgb/YtH
w+wzsofx7ateLzkKOTT7cgELwVuQwEjboQJzFStQM7QtkA7MhJjQK0vTWaPQ
a1jZyUa4qnCdfn2MYlTiikhHwzLWxUKaVc0n6KWjgA9WdM2thX5dYvIL8GNg
jKhdZJxNYOiwixxBKDRWDm+W3/2ClaulsZhm3StjNb1cZZujTGFazu1Ayrpd
e7l6DcjbctPzAO8WgX0n0HEKKZBQatRYMY9CXS9VgeJhFUu6RboXnE2zmslQ
Be9orF4gOlR9Fx5Lt/b+oqqOaQVYQxzy4sE8QIoLFb8G+jxHrYGS4pldFtqh
wjHEi17GJL1iXmPQSFbEYqWNPVjPX6KS01p2nlJUcT5Mdmoor70nBd/knfTT
2Qx+nU8FkrTNpjavCRpxRcl5paaRb/qXxTjGi4SkcAtE4WcbyUY5f8n9fKp6
JwhJ7OOF3nrX2VrfQ5rdgXzxN+KJ5kORXfSN926Drtw08ByYzvy67cwkqC7u
KP4Qj7wCy5Qyg6R9BeVQkoLEpW1vxQpzj+mCE1PYAbVlIWVypoRnLKccPqYW
j4tFzj4nc5A2gFlIOZnKvGSq4gHhL7ej0q0OVvLgxIkQx3OS6Fx8sDeWOdDe
LmPUf3EDTfi/2wXOACiME17M613GHdYTjAKJoFzZHLn/R/0fGOBbT/K0Phgk
sxneqzvMt/d39B4XFHdouayHcJwD/KyEmZt9CyorFzEfP+qzXZPMx0F9vcKS
JKvBPU1m8/rM3dmcDVBkjyOxU2oAAYfjBPgkNS7ICVGJaVJgseI6HMoVQi0m
yUKSJrHnEk0sClXNlDKM6xIlNo5n96m9yegAiwDv79MNQAfLD3YVZVHh19Hq
D4ubWPh6d4OxPXrihEyvPIYocwwHcbo91DGvjW21bB4jm35EsesHnIxYvsi9
oV9ivMoR7fUhS4oS09SsbSkxwSDQXSwRJQ3ykcOwrgOyrVR/ZMuqVIbmMf0J
o928NZHRjlZUXfF8RW4HYpt/nxue/QxGHBKvwwBoL1vqhG/FxArV+0C+j/A/
vf39wg2Uz/Ue3emq0PHdJHfHbgHfOUmlEuF9CikYX33rR15TuUkA9NIZHFQ2
RXi8J6SNSLe/EcbZH+Kh+HVrb33bpWxzb18fHumDlj4YYqwbRrntY9zb3i1e
UXJwSK9iCn2L4Hf85HAP/zy4hedKbjnZfNIBy9UbXC7zqGNVFzeNd7qUnC4+
WMW9xNgIV9+8ximO7FRqEhLtNledvC1j4C7hCGa6cjpZ4TxSd4WzuOURAj+T
ZdUB1JUHkKO3qgxKJpSMYnGqvZklAbni1Hj6/dLjUxRf5Bw5tcJxDV3mGsHK
PIMZXqMXHCMdHKPdJtqDNvmpFkVDvmNuH5KDqbD7VgHPNxFPk5mcs5AxSfdw
culKPD5KOER7zcyXSq/FIfpmBX0a4mucJa+UX+tg1SHScIjUBofIlflMrBF1
/elpVZ0eFIsDo+4vdn6WVaUM7bGBhtgVfdg9YQYUFPaCk7bCFuedtRXWi/C0
cebZVzlrLUEwPnSIYOaYtHRrKG9a/QC74c2eedP+ikgp6Watw3UoSXRdrUNJ
tgRZhHTkXHFNho3xMXAyKIeP+XqEDDwPqoCQlRVR5aYq9F+sI86eFMpJq3Tf
FWqlJmaMlVqq0kdo6uyFVXZJe6tM0Y5oqjqldNeWf2QCRcFHw6LkVCL5e21C
qZahc4yG/Kg19PBPHu19dWoo2PeLEsQQBb8CTdwAB38horgpEcOEPLW0mLAj
ij3vo4J9voRvxTpfNjbGN5tVIHMluoldiSigszEt015DXvAiUFpto9WaQMg8
PMnF0lxDdpdMJ6qcSUkL9qdjVYvy4OsNcV+gWtifQMcwZ9dbY3vJGn3AlWFu
dfUA5CX1pbzYoqhlfzZTX/5ExsDkFuNsZ1hHE7UFtm+h2juYSf4/12+TCCzn
xjFeK87CSN/Dl668m2/CevGuUyvu54uqjao5WLzw1sazvRkMolwC5Gp8T1Hq
PaJKSFSmhkqzDjBBPhpkKdYn0k+/earzBagVP+PiePrXlK9L1WTyWSy1B8gQ
OqbY30K9ui9a0DerFtQ1SfVMQ73wJGaVUW59rkSpA4MIrgj93BIzHclFXkUf
wTRKMrwsbKjnU1vXFtcI5KRmHUY2ix7haJtwdZEoN5mXOTIK0R4tyaIiSg1H
iZqrKFFZmdGhPsPf7rY2IRve84E7hb/sGd/gZAfTaPa/4Bh26ZqdKBnWpHYh
SekYF8mcgyz+g1lJ6PDEFLaOM14TCj9wmQjEYfas1ryKSMwaudOCYTRT6zoy
0baVHWCz3D80XwUlvs5e/EpQTlIGgTLXKkgzO42pOAMR5Tty51fRp2rK881G
ZMvJoBVRzSQuAalxMlSBNDHdQLGvj+0FUbDYNJcXRXQNfJJCl24xn8iPYOva
cicRXZQItAo9O+Rcp/qpJrwTxF2sPe2VwzM1WJFM+sETxtmIBcNU9CHFkGLE
aPRoc5bdNE6n7JG4i81NeEQSUw5SwJIm4iSbLD+SMEeyZGV4MyNxUSlrUowi
wpZAW6ksDld9pUBRk/0XUVwGBw/bcB9oZmueNPTlMCa6DciCq+fkpdTmvjDz
26bofy6skFKKE3oAd4AooEGPOGafw+DhU4y/i7VZuA84LhXIhb+CZBqSZ6PJ
gpYxwhDwbCGro9kuVOSth68SJC7bpwCDdJBENuWL1FlX4oXJEDP2h2iBNSJm
HlUEKM9Hs4bmipK8Hgr+NTHwGy/IX8PgPh68Z6zmyDWpd2K3DSfk3aVh5h4t
RwkRM2r2imSsQMxVwfqcgUMFXoAJI05L5lSMbBz+oMpFFoCUIf369Cynq1GH
psoBLYmTJYoaeE1nWCxTEmPx7bJ51hRF+lCtSVvtTUoESsKAVNaRneXeolkE
J/ZmYo4x5pNTcR0Xo2TDB0QTogIzfHcp8yYsNI/i5yzYbqndE+W2Ov1oIU1r
eGQmiPkJFlfGgw5EYjgfSZUl9naHOTbuwjKA3igdvMdzQRuENasvry+xRFJH
X75+c3V5dtnV3dNvO+j+7EntFdApP6BezlVrWDFlGmI1PEcZ6XYBqkuIdnih
cyZ1slQYgMPtPAcNEgFTqKWGxQ3JkTZlKiujNfQNQNCEzBrdvx/e4xeXq/lj
HXcpvMiOWGpmQieN1mmWhMXktLmXfLT4Dai7wFDwGnIu3ukFMZqaid74hDC2
XKqJIYs3q+xJhc0wBCVL4hmlEtkKqoBxn67kD134+fQmSyn6yvxNMy22Kv18
Up/qS36KL5Y2rPxYfTqDOdwA1e108LqRjx9v3lxcw+91WG4dVvv5Mw5+9gTe
vQRWPljoM5DqRzG1fXl21vnu9O2bsDEWjl3S/A+n35+Gjd8ipfmk6Z+zbDEF
tMSmb991umdvf3jTvQmafzwx4ctGQLgsbxZuFJXfY97YwIBm9URfnl6fYtB6
DtvNbMvkwZvSQCb+nlpKzheaUOwtCaXP7YtB8ILvwE7ywTwv3GVLIsI4HqeY
n1eYOtdYh4fpwsS4ykFFMsyEmW7eABEDySnVRhrGclqR1lHcH4oPuj9HCUlj
NPstGgvRODhB8k5ZdNmHhMxdHAEJlDudZ/Ag/vk+gn2wZTVdcTCupvYzBU2n
XA8rl2C/cNF0vw4HIsJcaBVyyYpZSz+2wOKQKiw7S5PHZcWSZ0nLiil17HIi
UXxcaqxytqyhMNCktBadT7uASWxj8oJKsRQklxv5ZQGHGAQsZ+e7pXQNIBAY
9UaTlC9qqIIAIwJxNiaTM1obkELywHRF5oyyt6k0LlYlHSA9ngK9AVKKZMbo
RyBUcMYf+cEJBkRjBQQ1P0usoTsYsygjoUhp7R/YBilfTHlFD1E2sevNsvmU
xHRcAIOKZKttySbakV5IlaJVfZBCdXkym4dR1lUTRI4xR0uBJet5jnFYGMU/
HCZm5+ipcLyJb1QwqEEVk/NYYIjHGFfIhpNonsemhwSD/3inqBRb7sk7xG3d
tLlYXNGcKXmCQxcCKmzYCYMFaXbi+sylU8a2sEC1iHcLUT6w0A9BnmIR55P3
k/SBYvmzIesJlKks1o50eo/23QHfj2AK4LopYj4Jbco5bFr9TfIBjtp/mSeD
9zllgeX3xDXheMEZpWykhj5PKWElpXhpJgwPaZbPGN+8FbG4yvKgvgcRWJ+9
eYen4hkaY4BcZVjQEfkZE6AMxJmB6B0sb1mplLSpWiHe1mQ2sPmHWSeSaIkG
tZQQj79NJqiiB3KcTA02xBpEjNv53/6mZ3LGEdXYSbGwd97oD/MRait9AM0s
kRLsJFLq21H0gHQG2CEIroP3SPBPB7hVo3h4RzX1gO+wRyMevtiimxm2RJyI
5rN7gCgJsO/16RCO9kS/ikAJGNWA9WUj/Sc4YRHeT3sOMkw80t9jCZgYplrT
F6ME9vCKsqdfY9X1zuwP6b0p8NehSkbzbMKOFHFIYjB8/JBLobsctRU89bdw
hHDyIlyKwITJyAuUZ+B4Ex/ymF1D/R9+l3mKAFkBAA==

-->

</rfc>
