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


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

]>


<rfc ipr="trust200902" docName="draft-davis-uuidrev-uuid-long-00" category="std" consensus="true" submissionType="IETF" updates="9562" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="UUID Long">Longer Universally Unique IDentifiers (UUIDs)</title>

    <author initials="K. R." surname="Davis" fullname="Kyzer R. Davis">
      <organization>Cisco Systems</organization>
      <address>
        <email>kydavis@cisco.com</email> <email>kyzer.davis@outlook.com</email>
      </address>
    </author>

    <date />

    <area>ART</area>
    <workgroup>uuidrev</workgroup>
    <keyword>uuid</keyword>

    <abstract>


<?line 101?>

<t>This document extends Universally Unique Identifiers (UUIDs) beyond 128 bits to facilitate enhanced collision resistance and proper room for embedding additional data within a given UUID algorithm.</t>

<t>These longer variable-length UUIDs ("UUID Long") leverage a previously unused variant bit "F" and feature a new sub-typing mechanism created to ensure there is enough space to define many future UUID algorithms within this new variant of UUIDs.</t>

<t>This document updates RFC9562.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://github.com/kyzer-davis/uuid-long/blob/main/draft-davis-uuidrev-uuid-long.md"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-davis-uuidrev-uuid-long/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Revise Universally Unique Identifier Definitions (uuidrev) Working Group mailing list (<eref target="mailto:uuidrev@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/uuidrev/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/uuidrev/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/kyzer-davis/uuid-long"/>.</t>
    </note>


  </front>

  <middle>


<?line 109?>

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

<t>There are a few main driving factors behind extending UUID beyond 128 bits covered by the next sections.</t>

<section anchor="entropy"><name>The Need for Increased Entropy</name>

<t>While existing UUID formats provide sufficient entropy for most use cases;
there exist scenarios where even more entropy is required to further reduce collision probabilities or guessability.</t>

<t>Further, while creating UUIDv7 during the draft phases of RFC9562, a common discussion point surrounded the number of bits allocated to entropy vs the number of bits allocated to the embedded timestamp.
The 128 bit limits on UUID created a situation where the community had to balance timestamp granularity vs entropy.
This resulted in "sliding" bits one way or other trying to find a happy medium.
While in the end a fine balance was achieved; the entire problem could have been avoided if there were more bits available to the UUID format.</t>

<t>With the additional length added by UUID Long; an application can generate a UUID with certainty that it is truly "unique across space and time".</t>

</section>
<section anchor="data"><name>Requirements for Additional Embedded Data</name>

<t>Some implementations require more than 128 bits to properly embed all of the application specific data they require for a given UUID algorithm.
Some examples include database metadata like entity types, checksum values, shard/partition identifiers (see <xref target="OrderlyID"/>), and even node identifiers for distributed UUID generation.</t>

<t>UUID Long provides ample bit space for an algorithm to properly embed all of the items required for the application logic to function.</t>

</section>
<section anchor="versions"><name>A better UUID sub-typing system</name>

<t>128 bit UUIDs within the "OSF DCE / IETF" variant space are limited to 16 versions.
This version limit artificially inhibits innovation of new UUID algorithms (a problem partly solved by UUIDv8).</t>

<t>This drawback of the "OSF DCE / IETF" variant space was observed while working on <xref target="RFC9562"/>, in particular to future name-based UUID layouts that replace "UUIDv3" and "UUIDv5".
With the number of hashing algorithms available and the possibility that at any point one may be deprecated; there was little chance of getting consensus on leveraging one of the few remaining versions for such an algorithm.</t>

<t>With UUID Long, as per section <xref target="subtypes"/>, there is ample room for future UUID Long Algorithms.</t>

</section>
<section anchor="fixed-length"><name>Beyond Fixed-Length</name>

<t>With a fixed-length UUID, there is no room to grow as future protocols change and severely limits the ability to innovate in the space.</t>

<t>A point of contention that has come up many times across the community is that 128 bits is not enough for modern protocols and applications.
Common alternate unique identifier lengths are 160 bits, 192 bits and 256 bits.</t>

<t>UUID Long provides these fixed length values and the flexibility to accommodate future needs via the variable-length design.</t>

<t>Some example items that may change over time are, but not limited to, hashing algorithms, signature algorithms, and post-quantum computing related algorithms.
Any of these could exceed a limit if UUID Long does not select a large enough maximum value.</t>

<t>See <xref target="security"/> for more considerations around generating and parsing UUID Long values.</t>

</section>
</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<section anchor="notation"><name>Notational Conventions</name>

<t>Throughout this document "UUID Long" generally references any variable length UUID longer than 128 bits while "UUID Short" references fixed-length 128-bit UUIDs in the prose of this document.</t>

<t>Field and Bit Layout in this document use a custom format borrowed from <xref target="RFC9000"/> rather than those featured in <xref target="RFC9562"/>.
The purpose of this format is to summarize, not define, protocol elements.
Prose defines the complete semantics and details of structures.</t>

<t>Layout items are named and then followed by a list of fields surrounded by a pair of matching braces.
Each field in this list is separated by commas.</t>

<t>Individual fields include length information, plus indications about fixed value, optionality, or repetitions.
Individual fields use the following notational conventions, with all lengths in bits:</t>

<figure><artwork><![CDATA[
x (A):
: Indicates that x is A bits long

x (L) = C:
: Indicates that x has a fixed value of C; the length of x is described by
  L, which can use any of the length forms above

x (..):
: Indicates that x has a variable length with no fixed upper limit

x (A..B):
: Indicates that x can be any length from A to B; A can be omitted to indicate
  a minimum of zero bits, and B can be omitted to indicate no set upper limit
]]></artwork></figure>

<t>This document uses network byte order (that is, big endian) values.
Fields are placed starting from the high-order bits of each byte.</t>

<t>By convention, individual fields reference a complex field by using the name of the complex field.</t>

<t><xref target="fig-ex-format"/> provides an example:</t>

<figure title="Example Format" anchor="fig-ex-format"><artwork><![CDATA[
Example Structure {
  One-bit Field (1),
  7-bit Field with Fixed Value (7) = 61,
  Arbitrary-Length Field (..),
  Variable-Length Field (8..24),
  Field With Minimum Length (16..),
  Field With Maximum Length (..128),
}
]]></artwork></figure>

</section>
</section>
<section anchor="format"><name>UUID Long Format</name>

<t>At the core UUID Long features the same base characteristics as <xref section="4" sectionFormat="comma" target="RFC9562"/> featured in UUID Short.
UUID Long may be represented in all of the same ways as you would expect with a UUID (e.g text, integer, binary, UUID URN, etc.)</t>

<t>The UUID Long Data Block starts at bit 129 separated by the dash character "-" in the textual representation of UUID Long.
This separation allows at-a-glance readability around the variable-length UUID Long Data.</t>

<t>The generalized layout of UUID Long is <xref target="ex-uuid-long"/>.</t>

<figure title="Example UUID Long Bit and Field Layout" anchor="ex-uuid-long"><artwork><![CDATA[
UUID Long Structure {
  UUID Short Part A (64),
  UUID Variant (4) = 0xF,
  UUID Short Part B (60),
  UUID Long Data (32..3968),
}
]]></artwork></figure>

<t>Further, the base UUID Short string format with hex and dashes is also found in the string format of UUID Long.
Including this in the base syntax ensures backwards compatibility as per <xref target="compatibility"/>.
The UUID Long string representation is defined by <xref target="ulLayout"/> and <xref target="ulDescription"/>.</t>

<figure title="UUID Long Field Layout in Hex" anchor="ulLayout"><artwork><![CDATA[
xxxxxxxx-xxxx-xxxx-Fxxx-xxxxxxxxxxxx-yy..zz
]]></artwork></figure>

<texttable title="UUID Long String Layout Descriptors" anchor="ulDescription">
      <ttcol align='left'>ID</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Bits</ttcol>
      <c>x</c>
      <c>Short UUID Bits</c>
      <c>124</c>
      <c>F</c>
      <c>Frozen Variant byte (for backwards compatibility). See <xref target="variant"/></c>
      <c>4</c>
      <c>yy..zz</c>
      <c>Variable length UUID Long Data with length described by LLLL. Minimum one byte, maximum 496 bytes</c>
      <c>32..3968</c>
</texttable>

<t>A properly constructed UUID Long value will be, at a minimum, 160 bits or 20 octets.
The maximum value for a UUID Long is computed as UUID Short Length (128) + Maximum UUID Long Data Length (3,968) which is 4,096 bits (512 octets).
Note that these calculations do not take into account the UUID Long Encoding Block (4 bytes or 32 bits) described in <xref target="subtypes"/> which is placed at the start of the variable-length UUID Long data.</t>

<t>While it is theoretically possible to extend UUID Long beyond the maximum total length of 4,096 bits; this value was chosen to be sufficiently large to allow for any type of data that needs to be implemented.
If the time comes when UUID Long needs to be extended beyond 4,096 bits; this specification can easily be updated to allow for larger values due to the nature of the variable-length design of UUID Long.</t>

<t>This would be accomplished by updating the UUID Encoding Block definition (which already supports describing UUID Longs beyond 4096 bits via the two byte field) and updating the maximum length of the UUID Long Data field in the layout definitions above.</t>

<section anchor="variant"><name>Variant Field</name>

<t>This section updates <xref section="4.1" sectionFormat="comma" target="RFC9562"/> to split the unused final variant of "111x" into two variants as described by the <xref target="variantUpdate"/> table.</t>

<t>Splitting the final variant space ensures that the "E" variant may be used by future UUID Short definitions while the "F" variant is used to signal a UUID Long Variant and maximum value for UUID Short as per <xref section="5.10" sectionFormat="comma" target="RFC9562"/>.</t>

<t>These "F"rozen variant bits are set to all 1's (b1111).</t>

<texttable title="UUID Variant Updates" anchor="variantUpdate">
      <ttcol align='left'>Msb0</ttcol>
      <ttcol align='left'>Msb1</ttcol>
      <ttcol align='left'>Msb2</ttcol>
      <ttcol align='left'>Msb3</ttcol>
      <ttcol align='left'>Variant</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>0</c>
      <c>E</c>
      <c>Reserved for future definition.</c>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>1</c>
      <c>F</c>
      <c>The variant used by UUID Long in this document. Also includes Max UUID as per <xref section="5.10" sectionFormat="comma" target="RFC9562"/>.</c>
</texttable>

<t>UUID Long algorithms featuring the frozen Variant F <bcp14>MUST</bcp14> use the sub-typing logic and encoding block described in <xref target="subtypes"/>.</t>

</section>
<section anchor="subtypes"><name>Sub-Typing Logic and Encoding Block</name>

<t>UUID Long does not re-use the "version" nomenclature (or bit positions unless otherwise noted) from <xref target="RFC9562"/>.
This serves to help implementations easily distinguish 128 bit or 128+ bit UUIDs in text and provide an opportunity for defining a better sub-typing system within this new variant space.</t>

<t>UUID Long instead moves the sub-typing logic to a new 4 byte UUID Long Encoding Block placed at the start of the encoded UUID Long algorithm and prefixed after the UUID sub-variant algorithm is computed and the underlying UUID Long value is created.</t>

<t>The first 2 bytes of the UUID Long Encoding Block feature a sub-typing system with two levels of hierarchy.
The first is a "Sub-Variant" abbreviated "sv" which indicates the grouping of UUID Long algorithm types.
The second level of UUID Long sub-typing is defined as simply the "algorithm" which can be abbreviated "a".
The Sub-Variant plus Algorithm (SV+A) serve as the identity behind a particular UUID Long value.</t>

<t>With this in mind "Sub-Variant 1, Algorithm 4" can be expressed as "sv1a4" or "UUIDsv1a4" throughout this document.  Note that "UUIDv4" or "UUID Version 4" is usually used to reference a UUID algorithm as specified by <xref section="5.4" sectionFormat="comma" target="RFC9562"/> and does not represent UUID Long algorithms in this document.</t>

<t>The final 2 bytes of the UUID Long Encoding Block include a length descriptor, expressed in octets (bytes), for the variable-length UUID Long data which can be used by applications in order to understand where a UUID Long value ends.
The value stored in this field represents the number of octets of UUID Long data following the UUID Short portion, not a bit count or character count.
The length descriptor <bcp14>MUST NOT</bcp14> take into account the UUID Long Encoding Block itself and only describe the octet length of the variable-length UUID Long data.</t>

<t>The full 4 byte UUID Encoding block can be observed in <xref target="ex-ul-block"/> or <xref target="ex-ul-block-layout"/> and described succinctly in <xref target="ex-ul-desc-layout"/>.</t>

<figure title="Example UUID Long Encoding Block Bit and Field Layout" anchor="ex-ul-block"><artwork><![CDATA[
UUID Long Encoding Block {
  Sub-Variant Encoding (8),
  Algorithm Encoding (8),
  UUID Long Data Length Descriptor (16)
}
]]></artwork></figure>

<figure title="UUID Long Encoding Block and UUID Long Field Layout in Hex" anchor="ex-ul-block-layout"><artwork><![CDATA[
SVAALLLL-xxxxxxxx-xxxx-xxxx-Fxxx-xxxxxxxxxxxx-xx..zz
]]></artwork></figure>

<texttable title="UUID Long String Layout Descriptors" anchor="ex-ul-desc-layout">
      <ttcol align='left'>ID</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Bits</ttcol>
      <c>SV</c>
      <c>One Byte Sub-Variant with 256 possible values</c>
      <c>8</c>
      <c>AA</c>
      <c>One Byte Algorithm with 256 possible values</c>
      <c>8</c>
      <c>LLLL</c>
      <c>Two Byte length descriptor in octets with a max value of 496 describing the UUID Long data</c>
      <c>16</c>
</texttable>

</section>
<section anchor="subvariants"><name>Sub-Variants</name>

<t>UUID Long defines four starting sub-variant groupings as defined by <xref target="subVariant"/>.</t>

<texttable title="UUID Long Sub-Variants" anchor="subVariant">
      <ttcol align='left'>Sub-Variant ID</ttcol>
      <ttcol align='left'>Description</ttcol>
      <c>sv0</c>
      <c>Experimental/Custom Algorithms</c>
      <c>sv1</c>
      <c>Random Based Algorithms</c>
      <c>sv2</c>
      <c>Time Based Algorithms</c>
      <c>sv3</c>
      <c>Hash-based Algorithms</c>
      <c>sv4-sv255</c>
      <c>Reserved for future algorithm groupings as required</c>
</texttable>

<t>Future sub-variants in the space (sv4-sv255) can be allocated where a grouping of algorithms is required; but if a current sub-variant is applicable for a new algorithm, the new algorithm should be grouped under a given sub-variant.</t>

<t>The four starting sub-variant groupings mirror the four generic types of UUID algorithms observed in <xref target="RFC9562"/>.</t>

</section>
<section anchor="encoding"><name>Encoding</name>

<t>The default, widely implemented, "hex and dash" text presentation format of 128 bit UUID short values is already inefficient at conveying the underlying bits of UUID.
This problem is only exacerbated by creating 128+ bit UUIDs.</t>

<t>Implementations generating or parsing UUID Long values <bcp14>MUST</bcp14> utilize at least one method defined in <xref target="ALT_UUID_ENCODING"/> to create a more efficient UUID Long value.
The "extended hex and dash" format <bcp14>MAY</bcp14> be utilized for UUID Long though it is discouraged.
The usage of this format throughout this document is for illustrative purposes only.</t>

<t>For example the minimum and maximum UUID Long values using those found in <xref target="ALT_UUID_ENCODING"/> are found in the table <xref target="lengthTable"/> found by computing the maximum character length of an all 1s value at each bit length.
At Base32 and above the number of characters used by the minimum length of UUID Long is still less than the 128 bit hex and dash format of UUID Short without the UUID Long Encoding Block.</t>

<t>Applications <bcp14>MUST</bcp14> ensure that UUID Long values leverage natural boundaries and pad the least significant, right-most bits where required to achieve a proper value for encoding as various BaseXX Alphabets in <xref target="ALT_UUID_ENCODING"/>.</t>

<texttable title="Alt UUID Encoding Length Comparison" anchor="lengthTable">
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>Variant</ttcol>
      <ttcol align='left'>Min UUID Long (160 bits)</ttcol>
      <ttcol align='left'>Max UUID Long (4096 bits)</ttcol>
      <c>Base16</c>
      <c>THIS DRAFT</c>
      <c>8 + 45 (53)</c>
      <c>8 + 1029 (1037)</c>
      <c>Base16</c>
      <c><xref section="8" sectionFormat="comma" target="RFC4648"/></c>
      <c>8 + 40 (48)</c>
      <c>8 + 1024 (1032)</c>
      <c>Base32</c>
      <c><xref section="6" sectionFormat="comma" target="RFC4648"/></c>
      <c>7 + 32 (39)</c>
      <c>7 + 820 (827)</c>
      <c>Base32</c>
      <c><xref section="7" sectionFormat="comma" target="RFC4648"/></c>
      <c>7 + 32 (39)</c>
      <c>7 + 820 (827)</c>
      <c>Base32</c>
      <c><xref target="Base32human"/></c>
      <c>7 + 32 (39)</c>
      <c>7 + 820 (827)</c>
      <c>Base36</c>
      <c>---</c>
      <c>7 + 31 (38)</c>
      <c>7 + 793 (800)</c>
      <c>Base52</c>
      <c>---</c>
      <c>6 + 29 (35)</c>
      <c>6 + 719 (725)</c>
      <c>Base58</c>
      <c><xref target="Base58btc"/></c>
      <c>6 + 28 (34)</c>
      <c>6 + 700 (706)</c>
      <c>Base62</c>
      <c><xref target="Base62ieee"/></c>
      <c>6 + 27 (33)</c>
      <c>6 + 688 (694)</c>
      <c>Base62</c>
      <c><xref target="Base62sort"/></c>
      <c>6 + 27 (33)</c>
      <c>6 + 688 (694)</c>
      <c>Base64</c>
      <c><xref section="4" sectionFormat="comma" target="RFC4648"/></c>
      <c>6 + 27 (33)</c>
      <c>6 + 683 (689)</c>
      <c>Base64</c>
      <c><xref section="5" sectionFormat="comma" target="RFC4648"/></c>
      <c>6 + 27 (33)</c>
      <c>6 + 683 (689)</c>
      <c>Base64</c>
      <c><xref target="Base64sort"/></c>
      <c>6 + 27 (33)</c>
      <c>6 + 683 (689)</c>
      <c>Base85</c>
      <c><xref target="Z85"/></c>
      <c>5 + 25 (30)</c>
      <c>5 + 640 (645)</c>
</texttable>

</section>
</section>
<section anchor="fixed-length-sizes"><name>Fixed-Length 160/192/256 bit UUID Long</name>

<t>Although UUID Long is variable length and features a very large top end; implementations may end up generating fixed-length UUID Long Values as described in this section.
See <xref target="security"/> for security discussion about this topic.</t>

<t>A common UUID length requested by the community is 160, 192 and 256 bit UUID values.
With UUID Long generating these values is a trivial task.</t>

<t>We can easily calculate the new bits by using the following logic (for completeness up to 2048 has been illustrated.)
Once calculated these can be filled with the appropriate application specific data.
Apply the Variant bits as per <xref target="variant"/> and the appropriate sub-variant algorithm encoding as per <xref target="subtypes"/> and then build the UUID Long Encoding Block and you now have a fixed-length UUID Long value of the required length.</t>

<figure><artwork><![CDATA[
160 - UUID Short Length (128) = 32 bits of additional UUID Long data
192 - UUID Short Length (128) = 64 bits of additional UUID Long data
256 - UUID Short Length (128) = 128 bits of additional UUID Long data
512 - UUID Short Length (128) = 384 bits of additional UUID Long data
1024 - UUID Short Length (128) = 896 bits of additional UUID Long data
2048 - UUID Short Length (128) = 1920 bits of additional UUID Long data
]]></artwork></figure>

</section>
<section anchor="algos"><name>UUID Long Algorithms</name>

<t>As mentioned in <xref target="subtypes"/>, UUID Long Algorithms are grouped at the Sub-Variant level.</t>

<t>UUID Long first maps the <xref target="RFC9562"/> versions to algorithms in the appropriate sub-variant algorithm space.
The sub-variant algorithm identifier has been 'smeared' for ease of understanding when referencing the old values.
For example: "UUIDv4 == UUIDsv1a4" and "UUIDv7 == UUIDsv2a7" where the final number in each abbreviation matches.</t>

<t>The first 16 sub-variant algorithm values (a0-a15) in each sub-variant space are reserved for matching the appropriate <xref target="RFC9562"/> versions.
This ensures that a future IETF spec can define both a UUID Short Version and UUID Long sub-variant algorithm that line up nicely to each other.
With 256 possible sub-variant algorithms in each of the 256 sub-variant spaces; 16 reserved sub-variant algorithm identifiers should be no problem.</t>

<t>When the time comes that all 16 <xref target="RFC9562"/> versions have been allocated to their appropriate UUID Long SV+A IDs, or are no longer in need of the mapping space; outstanding sub-variant algorithm identifiers <bcp14>MAY</bcp14> be used by future UUID Long specifications.</t>

<t>Other UUID sub-types that exist in other variant spaces <bcp14>MAY</bcp14> leverage unused sub-variant algorithm identifiers, starting at a16, for UUID Long versions of the existing algorithms.</t>

<t>Generally speaking for sub-variant algorithms based on the RFC9562 versions; there are two main areas that need to be described:</t>

<t><list style="numbers" spacing="compact" type="1">
  <t>How to leverage the new UUID Long bits.</t>
  <t>Define the RFC9562 version bit handling.</t>
</list></t>

<t>The following sections illustrate the current sub-variant algorithm mappings for UUID Long along with the methods for generating a UUID Long value for a given sub-variant algorithm.</t>

<t>For all algorithms the following two statements apply, even if they are based on an RFC9562-based algorithm.</t>

<t><list style="symbols" spacing="compact">
  <t>The Variant bits are always overwritten to "F" as per <xref target="variant"/>.</t>
  <t>The UUID Long Encoding Block is encoded with the sub-variant id, algorithm id and long data length descriptor as per <xref target="ex-ul-block"/>.</t>
</list></t>

<t>TODO: where to slot UUIDv2</t>

<section anchor="sv0-section"><name>Sub-Variant 0 (Experimental/Custom)</name>

<t>Algorithm Identifiers in this sub-variant space <bcp14>SHOULD</bcp14> be used for custom, experimental or vendor-specific use cases.
UUIDv8 has been mapped to UUIDsv0a8 in this document and is the only current algorithm in this space defined by <xref target="sv0"/>.</t>

<t>Vendors are encouraged to use this space for testing and experimental algorithms before finalization into another sub-variant algorithm identifier.
At which point the Algorithm Identifier in this sub-variant can be released for continued use.</t>

<texttable title="Sub-Variant 0 Algorithms" anchor="sv0">
      <ttcol align='left'>SV ID</ttcol>
      <ttcol align='left'>Algorithm ID</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>9562 Version (if applicable)</ttcol>
      <ttcol align='left'>Algorithm Definition Link</ttcol>
      <c>sv0</c>
      <c>a8</c>
      <c>Custom</c>
      <c>UUIDv8</c>
      <c><xref target="sv0a8-section"/></c>
</texttable>

<section anchor="sv0a8-section"><name>sv0a8</name>

<t>sv0a8 is based on UUIDv8 from <xref section="5.8" sectionFormat="comma" target="RFC9562"/> with the following deltas:</t>

<t><list style="symbols" spacing="compact">
  <t>UUID Long Data can be leveraged as a new "custom_d" field of arbitrary size within the UUID Long data as shown in <xref target="sv0a8"/>.
The length of this new data is calculated and inserted into the UUID Long Encoding Block.</t>
  <t>The version behavior does not need to remain the same as <xref section="4.2" sectionFormat="comma" target="RFC9562"/> and can be set to whatever an implementation desires.</t>
</list></t>

<figure title="Example sv0a8 Bit and Field Layout" anchor="sv0a8"><artwork><![CDATA[
UUIDsv0a8 Structure {
  custom_a (48),
  9562 Version (4),
  custom_b (12),
  UUID Variant (4) = 0xF,
  custom_c (60),
  custom_d (8..3936),
}
]]></artwork></figure>

<t>Note that where possible, for experimental use cases, implementations are encouraged to apply for a sub-variant algorithm for their UUID Long Algorithm.</t>

<t>TODO: Link to process section if this is finalized.</t>

</section>
</section>
<section anchor="sv1-section"><name>Sub-Variant 1 (Random)</name>

<t>Algorithm Identifiers in this sub-variant space <bcp14>MUST</bcp14> be related to random, pseudorandom, or other similar methods of generating UUID Long values.</t>

<t>UUIDv4 has been mapped to UUIDsv1a4 in this document and is the only current algorithm in this space defined by <xref target="sv1"/>.</t>

<texttable title="Sub-Variant 1 Algorithms" anchor="sv1">
      <ttcol align='left'>SV ID</ttcol>
      <ttcol align='left'>Algorithm ID</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>9562 Version (if applicable)</ttcol>
      <ttcol align='left'>Algorithm Definition Link</ttcol>
      <c>sv1</c>
      <c>a4</c>
      <c>Random</c>
      <c>UUIDv4</c>
      <c><xref target="sv1a4-section"/></c>
</texttable>

<section anchor="sv1a4-section"><name>sv1a4</name>

<t>sv1a4 is based on UUIDv4 from <xref section="5.4" sectionFormat="comma" target="RFC9562"/> with the following deltas:</t>

<t><list style="symbols" spacing="compact">
  <t>UUID Long Data can be leveraged as a new "random_d" field of arbitrary size within the UUID Long data as shown in <xref target="sv1a4"/>. The length of this new data is calculated and inserted into the UUID Long Encoding Block.</t>
  <t>The version behavior does not need to remain the same as <xref section="4.2" sectionFormat="comma" target="RFC9562"/> and these 4 version bits <bcp14>MAY</bcp14> also be randomized.</t>
</list></t>

<figure title="Example sv1a4 Bit and Field Layout" anchor="sv1a4"><artwork><![CDATA[
UUIDsv1a4 Structure {
  random_a (48),
  9562 Version (4),
  random_b (12),
  UUID Variant (4) = 0xF,
  random_c (60),
  random_d (8..3936),
}
]]></artwork></figure>

<t>Examples of UUIDsv1a4 can be seen in <xref target="sv1a4-value"/>.</t>

</section>
</section>
<section anchor="sv2-section"><name>Sub-Variant 2 (Time)</name>

<t>Algorithm Identifiers in this sub-variant space <bcp14>MUST</bcp14> be related to UUIDs which feature timestamps.</t>

<t>UUIDv1, UUIDv6 and UUIDv7 have been mapped to UUIDsv2a1, UUIDsv2a6, UUIDsv2a7 where required as per <xref target="sv2"/>.</t>

<texttable title="Sub-Variant 2 Algorithms" anchor="sv2">
      <ttcol align='left'>SV ID</ttcol>
      <ttcol align='left'>Algorithm ID</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>9562 Version (if applicable)</ttcol>
      <ttcol align='left'>Algorithm Definition Link</ttcol>
      <c>sv2</c>
      <c>a1</c>
      <c>Gregorian Time-based</c>
      <c>UUIDv1</c>
      <c><xref target="sv2a1-section"/></c>
      <c>sv2</c>
      <c>a6</c>
      <c>Reordered Gregorian Time-based</c>
      <c>UUIDv6</c>
      <c><xref target="sv2a6-section"/></c>
      <c>sv2</c>
      <c>a7</c>
      <c>Unix Time-based (MS)</c>
      <c>UUIDv7</c>
      <c><xref target="sv2a7-section"/></c>
</texttable>

<t>TODO: Discuss if we want sv2a16 as Unix Time-based (Nanosecond time resolution)... this timestamp resolution was a big ask from the community.</t>

<t>TODO: Reserve an sv2a17 for custom epoch time, also a big item that came from the community.</t>

<section anchor="sv2a1-section"><name>sv2a1</name>

<t>sv2a1 is based on UUIDv1 from <xref section="5.1" sectionFormat="comma" target="RFC9562"/> with the following deltas:</t>

<t><list style="symbols" spacing="compact">
  <t>UUID Long Data can be leveraged as an "extended_node" field within the UUID Long data as shown in <xref target="sv2a1"/>.
The length of this new data is calculated and inserted into the UUID Long Encoding Block.</t>
  <t>The <spanx style="verb">node</spanx> value <bcp14>MAY</bcp14> feature IEEE 802 MAC address and random data of arbitrary size or be fully randomized using portions of the original <spanx style="verb">node</spanx> bits and variable-length UUID Long data.</t>
  <t>The version bits <bcp14>MAY</bcp14> also be randomized since this does not affect the sortability of this algorithm.</t>
  <t>The <spanx style="verb">clock_seq</spanx> value is reduced by 2 bits to accommodate the new variant bits as per <xref target="variant"/>.</t>
</list></t>

<figure title="Example sv2a1 Bit and Field Layout" anchor="sv2a1"><artwork><![CDATA[
UUIDsv2a1 Structure {
  time_low (32),
  time_mid (16),
  9562 Version (4),
  time_high (12),
  UUID Variant (4) = 0xF,
  clock_seq (12),
  node (48),
  extended_node (8..3936),
}
]]></artwork></figure>

</section>
<section anchor="sv2a6-section"><name>sv2a6</name>

<t>sv2a6 is based on UUIDv6 from <xref section="5.6" sectionFormat="comma" target="RFC9562"/> with the following deltas:</t>

<t><list style="symbols" spacing="compact">
  <t>UUID Long Data can be leveraged as an "extended_node" field within the UUID Long data as shown in <xref target="sv2a6"/>.
The length of this new data is calculated and inserted into the UUID Long Encoding Block.</t>
  <t>The <spanx style="verb">node</spanx> value <bcp14>MAY</bcp14> feature IEEE 802 MAC address and random data of arbitrary size or be fully randomized using portions of the original <spanx style="verb">node</spanx> bits and variable-length UUID Long data.</t>
  <t>The <spanx style="verb">version</spanx> behavior <bcp14>MUST</bcp14> remain the same as <xref section="4.2" sectionFormat="comma" target="RFC9562"/> to ensure proper sortability, which is a key feature of this UUID's algorithm.</t>
  <t>The <spanx style="verb">clock_seq</spanx> value is reduced by 2 bits to accommodate the new variant bits as per <xref target="variant"/>.</t>
</list></t>

<figure title="Example sv2a6 Bit and Field Layout" anchor="sv2a6"><artwork><![CDATA[
UUIDsv2a6 Structure {
  time_high (32),
  time_mid (16),
  9562 Version (4) = 0x6,
  time_low (12),
  UUID Variant (4) = 0xF,
  clock_seq (12),
  node (48),
  extended_node (8..3936),
}
]]></artwork></figure>

</section>
<section anchor="sv2a7-section"><name>sv2a7</name>
<t>sv2a7 is based on UUIDv7 <xref section="5.7" sectionFormat="comma" target="RFC9562"/> with the following deltas:</t>

<t><list style="symbols" spacing="compact">
  <t>UUID Long Data can be leveraged as a "rand_c" field within the UUID Long data as shown in <xref target="sv2a7"/>.
The length of this new data is calculated and inserted into the UUID Long Encoding Block.</t>
  <t>The version behavior <bcp14>MUST</bcp14> remain the same as <xref section="4.2" sectionFormat="comma" target="RFC9562"/> to ensure proper sortability, which is a key feature of this UUID's algorithm.</t>
</list></t>

<figure title="Example sv2a7 Bit and Field Layout" anchor="sv2a7"><artwork><![CDATA[
UUIDsv2a7 Structure {
  unix_ts_ms (48),
  9562 Version (4) = 0x7,
  rand_a (12),
  UUID Variant (4) = 0xF,
  rand_b (60),
  rand_c (8..3936),
}
]]></artwork></figure>

<t>An Example of UUIDsv2a7 can be seen in <xref target="sv2a7-value"/>.</t>

</section>
</section>
<section anchor="sv3-section"><name>Sub-Variant 3 (Hashing)</name>

<t>Algorithm Identifiers in this sub-variant space <bcp14>MUST</bcp14> be related to hash-based UUIDs computed using "names" and "namespaces" as defined by <xref section="6.5" sectionFormat="comma" target="RFC9562"/>.
UUIDv5 has been mapped to UUIDsv3a5 while new hashing protocols utilize algorithms a16 through a27.</t>

<texttable title="Sub-Variant 3 Algorithms" anchor="sv3">
      <ttcol align='left'>SV ID</ttcol>
      <ttcol align='left'>Algorithm ID</ttcol>
      <ttcol align='left'>Name</ttcol>
      <ttcol align='left'>9562 Version (if applicable)</ttcol>
      <ttcol align='left'>Algorithm Definition Link</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>sv3</c>
      <c>a5</c>
      <c>SHA-1</c>
      <c>UUIDv5</c>
      <c><xref target="sv3a5-section"/></c>
      <c><xref target="FIPS180-4"/></c>
      <c>sv3</c>
      <c>a16</c>
      <c>SHA-224</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS180-4"/></c>
      <c>sv3</c>
      <c>a17</c>
      <c>SHA-256</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS180-4"/></c>
      <c>sv3</c>
      <c>a18</c>
      <c>SHA-384</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS180-4"/></c>
      <c>sv3</c>
      <c>a19</c>
      <c>SHA-512</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS180-4"/></c>
      <c>sv3</c>
      <c>a20</c>
      <c>SHA-512/224</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS180-4"/></c>
      <c>sv3</c>
      <c>a21</c>
      <c>SHA-512/256</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS180-4"/></c>
      <c>sv3</c>
      <c>a22</c>
      <c>SHA3-224</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS202"/></c>
      <c>sv3</c>
      <c>a23</c>
      <c>SHA3-256</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS202"/></c>
      <c>sv3</c>
      <c>a24</c>
      <c>SHA3-384</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS202"/></c>
      <c>sv3</c>
      <c>a25</c>
      <c>SHA3-512</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS202"/></c>
      <c>sv3</c>
      <c>a26</c>
      <c>SHAKE128</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS202"/></c>
      <c>sv3</c>
      <c>a27</c>
      <c>SHAKE256</c>
      <c>&#160;</c>
      <c><xref target="nghb-section"/></c>
      <c><xref target="FIPS202"/></c>
</texttable>

<t>Note that UUIDv3 has not been mapped to UUIDsv3a3 because the current MD5-based algorithm from <xref section="5.3" sectionFormat="comma" target="RFC9562"/> does not have any requirements for bits past 128.
Thus there is no need for a UUID Long equivalent of this algorithm.</t>

<section anchor="sv3a5-section"><name>sv3a5</name>

<t>sv3a5 is based on UUIDv5 from <xref section="5.5" sectionFormat="comma" target="RFC9562"/> with the following deltas:</t>

<t><list style="symbols" spacing="compact">
  <t>The original algorithm requires that parts of the SHA-1 hash be truncated to fit the 128 bit layout; however, with UUID Long these extra bits can be embedded into the UUID Long Data as "sha1_discard" seen in <xref target="sv3a5"/>.
The length of this discarded data is calculated and inserted into the UUID Long Encoding Block.</t>
  <t>The version <bcp14>MUST NOT</bcp14> remain the same as <xref section="4.2" sectionFormat="comma" target="RFC9562"/>.
As a result, the bits that would have been overwritten to a hard coded "5" are now left as the original portions of the hash.</t>
</list></t>

<figure title="Example sv3a5 Bit and Field Layout" anchor="sv3a5"><artwork><![CDATA[
UUIDsv3a5 Structure {
  sha1_high (48),
  9562 Version (4),
  sha1_mid (12),
  UUID Variant (4) = 0xF,
  sha1_low (60),
  sha1_discard (8..3936),
}
]]></artwork></figure>

<t>An Example of UUIDsv3a5 can be seen in <xref target="sv3a5-value"/>.</t>

</section>
<section anchor="nghb-section"><name>sv3a16 - sv3a27</name>

<t>sv3a16 - sv3a27 describe Name-Based UUID generation using new hashing algorithms.
From an operational standpoint the same fields are described for all of these algorithms.
This is shown in <xref target="ulhb"/>.</t>

<t>The algorithm and creation of these UUID Long values is the same as <xref section="5.5" sectionFormat="comma" target="RFC9562"/> with the following deltas:</t>

<t><list style="symbols" spacing="compact">
  <t>The desired hash algorithm is used in place of SHA-1.</t>
  <t>The 9562 Version is not used and those 4 bits retain their value from the hash.</t>
  <t>The bits beyond 128 are placed in "hash_low" with the length calculated and inserted into the UUID Long Encoding Block.</t>
</list></t>

<figure title="Example UUID Long Hash-Based Bit and Field Layout" anchor="ulhb"><artwork><![CDATA[
UUID Long Hash-Based Structure {
  hash_high (64),
  UUID Variant (4) = 0xF,
  hash_middle (60),
  hash_low (8..3936),
}
]]></artwork></figure>

<t>Example of UUIDsv3a17, using SHA-256, can be seen in <xref target="sv3a17-value"/>.</t>

</section>
</section>
</section>
<section anchor="compatibility"><name>Compatibility with 128 Bit UUIDs</name>

<t>UUID Long values are prefixed with a 32-bit UUID Long Encoding Block followed by the UUID value itself.
The UUID portion (bits 33 through 160 at minimum) is structured identically to a UUID Short in the first 128 bits.
However, because UUID Long uses the "F" variant (b1111), many existing UUID parsers and database UUID types will reject the UUID portion during variant validation.</t>

<t>To derive a compatible 128-bit UUID from a UUID Long value, an implementation <bcp14>MUST</bcp14> first strip the 32-bit encoding block prefix to isolate the 128-bit UUID Short portion.
Stripping the prefix alone does NOT produce a value that is generally accepted as a valid <xref target="RFC9562"/> UUID because the F variant may not be recognized by existing parsers.</t>

<t>Implementations that need a valid 128-bit UUID <bcp14>SHOULD</bcp14> then actively transform the isolated value by overwriting the variant bits to produce a valid "OSF DCE / IETF" variant (b10xx) UUID.
For example, an implementation could clear the two most significant variant bits to produce a valid RFC 9562 variant before passing the value to downstream systems.
Implementations <bcp14>MUST</bcp14> document any such transformation and be aware that the resulting 128-bit value will differ from the original UUID Long's UUID Short portion.</t>

<t>Note that the version bit-space is not a requirement in UUID Long thus some UUID long algorithms may have varying data at this position.
The bits still exist, so for systems that do not read the variant bit first, they may see inconsistent results if trying to read only the version or version and then variant.</t>

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

<t>UUID Long shares many of the same security considerations as <xref target="RFC9562"/>.
The main security consideration with UUID Long is the maximum length of data and possible buffer overflows which lead to other vulnerabilities.
Implementations that only expect 128 bit UUIDs <bcp14>MUST NOT</bcp14> read beyond 128 bits.</t>

<section anchor="parsing"><name>Parsing and Length Validation</name>

<t>Implementations that parse UUID Long values <bcp14>MUST</bcp14> validate the UUID Long Data Length Descriptor field before allocating memory or reading data.
Specifically, a parser <bcp14>MUST</bcp14>:</t>

<t><list style="symbols">
  <t>Verify that the length descriptor does not exceed an implementation-defined maximum.</t>
  <t>Verify that the length descriptor does not exceed the number of remaining input bytes.</t>
  <t>Reject any UUID Long value where either check fails.</t>
</list></t>

<t>General-purpose UUID libraries that do not have application-specific requirements <bcp14>SHOULD</bcp14> default to a maximum UUID Long Data length of 128 bytes (1024 bits).
This default <bcp14>SHOULD</bcp14> be configurable to allow applications with different requirements to adjust the limit as needed.</t>

</section>
<section anchor="generation-limits"><name>Generation Limits</name>

<t>An implementation may choose to put limits on the length of UUID Long values that are generated to protect from using UUID Long as a conveyance mechanism to retrieve buffer overflowed data exploited by other means.
For example, an implementation may choose to generate UUID Long values of a maximum length of 1024 bits and no more.
Thus limiting the potential for side-channel exploits that may try to take advantage of the variable-length properties of UUID Long.</t>

</section>
<section anchor="data-integrity"><name>Data Integrity</name>

<t>By default the UUID Long value (and UUID Short) do not feature any hash/signature method.
An attacker could modify the UUID Long Data Length Descriptor bits and include new data in an attempt to force some buffer overflow condition or append data that was not part of the original algorithm.
An algorithm <bcp14>MAY</bcp14> choose to create a hash/digital signature on the final UUID Long value and provide this hash to a peer in order to provide some level of data integrity.</t>

<t>Further, where possible introspection into the UUID is discouraged as per <xref section="6.12" sectionFormat="comma" target="RFC9562"/>.</t>

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

<t>TODO: IANA when things are finalized.
Things like add sub-variant algorithms to sub-types section of UUID registry.
https://www.iana.org/assignments/uuid/uuid.xhtml#uuid-subtypes</t>

</section>


  </middle>

  <back>


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

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



<reference anchor="RFC9562">
  <front>
    <title>Universally Unique IDentifiers (UUIDs)</title>
    <author fullname="K. Davis" initials="K." surname="Davis"/>
    <author fullname="B. Peabody" initials="B." surname="Peabody"/>
    <author fullname="P. Leach" initials="P." surname="Leach"/>
    <date month="May" year="2024"/>
    <abstract>
      <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
      <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9562"/>
  <seriesInfo name="DOI" value="10.17487/RFC9562"/>
</reference>


<reference anchor="ALT_UUID_ENCODING" target="https://datatracker.ietf.org/doc/draft-davis-uuidrev-alt-uuid-encoding-methods/">
  <front>
    <title>Alternate UUID Encoding Methods</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC9000">
  <front>
    <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
    <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
    <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
    <date month="May" year="2021"/>
    <abstract>
      <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9000"/>
  <seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>

<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference>


<reference anchor="FIPS180-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf">
  <front>
    <title>Secure Hash Standard</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
  <seriesInfo name="FIPS" value="PUB 180-4"/>
</reference>
<reference anchor="FIPS202" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf">
  <front>
    <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
  <seriesInfo name="FIPS" value="PUB 202"/>
</reference>
<reference anchor="OrderlyID" target="https://piljoong.dev/posts/distributed-id-generation-complicated/">
  <front>
    <title>Distributed ID Formats Are Architectural Commitments, Not Just Data Types</title>
    <author initials="" surname="piljoong" fullname="piljoong">
      <organization></organization>
    </author>
    <date year="2025" month="December"/>
  </front>
</reference>
<reference anchor="Z85" target="https://rfc.zeromq.org/spec/32/">
  <front>
    <title>32/Z85</title>
    <author >
      <organization>iMatix Corporation</organization>
    </author>
    <date year="2013"/>
  </front>
</reference>
<reference anchor="Base58btc" target="https://github.com/bitcoin/bitcoin/blob/master/src/base58.cpp">
  <front>
    <title>Bitcoin Base58 Implementation</title>
    <author >
      <organization>Bitcoin</organization>
    </author>
    <date year="2008" month="November"/>
  </front>
  <seriesInfo name="commit" value="fae71d3"/>
</reference>
<reference anchor="Base64sort" target="https://datatracker.ietf.org/doc/draft-brown-davis-base64-sort/">
  <front>
    <title>A Sortable Base64 Alphabet</title>
    <author initials="K." surname="Davis" fullname="Kyzer Davis">
      <organization></organization>
    </author>
    <date year="2025" month="December"/>
  </front>
</reference>
<reference anchor="Base62ieee" target="https://ieeexplore.ieee.org/document/4737287">
  <front>
    <title>A secure, lossless, and compressed Base62 encoding</title>
    <author >
      <organization>IEEE</organization>
    </author>
    <date year="2008" month="November"/>
  </front>
</reference>
<reference anchor="Base62sort" target="https://onlinelibrary.wiley.com/doi/abs/10.1002/spe.408">
  <front>
    <title>A base62 transformation format of ISO 10646 for multilingual identifiers</title>
    <author initials="P.-C." surname="Wu" fullname="Pei-Chi Wu">
      <organization></organization>
    </author>
    <date year="2001" month="August"/>
  </front>
</reference>
<reference anchor="Base32human" target="https://datatracker.ietf.org/doc/draft-crockford-davis-base32-for-humans/">
  <front>
    <title>Base32 for Humans</title>
    <author initials="D." surname="Crockford" fullname="Douglas Crockford">
      <organization></organization>
    </author>
    <author initials="K." surname="Davis" fullname="Kyzer Davis">
      <organization></organization>
    </author>
    <date year="2026" month="April"/>
  </front>
</reference>


    </references>

</references>


<?line 721?>

<section anchor="changelog"><name>Changelog</name>

<dl>
  <dt>draft-00:</dt>
  <dd>
    <t><list style="symbols">
      <t>Initial Release</t>
    </list></t>
  </dd>
</dl>

</section>
<section anchor="test-vectors"><name>Test Vectors</name>

<t>Due to the variable length nature of the UUID Long Data field there could be an infinite number of test vectors.
The sections below attempt to summarize the key points of the sub-variant algorithms as described by the body of this document.</t>

<t>TODO: Add other test vectors as things are finalized.</t>

<section anchor="sv1a4-value"><name>Example sv1a4 values</name>

<t>The table, <xref target="random"/>, details varying levels of random bits, as well as commonly requested UUID Long lengths (160/192/256) in an attempt to illustrate the difference between UUID length and Embedded Data Length.
This is all compared to UUIDv4 as seen in the first row of the table.</t>

<t>For example, one can generate a fixed 256 bit UUID Long value with random data and this UUID Long value will contain 252 bits of random after applying the 0xF variant and 0x010400 encoding block for sv1a4 with 32 bits of long data bringing the total length of the UUID Long to 288 bits.</t>

<t>256 bit length with 252 bits of random data is far larger than UUIDv4's 122 bits of random data.</t>

<t>However, if further guarantees are required around randomness and size of the outputs are not a problem, then generating a 512 bit UUID which features 508 bits of random data can also solve an applications needs.</t>

<texttable title="UUID Random Example" anchor="random">
      <ttcol align='left'>DOC</ttcol>
      <ttcol align='left'>Type</ttcol>
      <ttcol align='left'>UUID Length (with encoding block)</ttcol>
      <ttcol align='left'>Variant</ttcol>
      <ttcol align='left'>Sub-Type</ttcol>
      <ttcol align='left'>Total Random</ttcol>
      <ttcol align='left'>Long Data</ttcol>
      <ttcol align='left'>Example</ttcol>
      <c>RFC9562</c>
      <c>UUIDv4</c>
      <c>128</c>
      <c>2</c>
      <c>4</c>
      <c>122</c>
      <c>n/a</c>
      <c>73e94fe0-e951-4153-aaf3-50e4e6089d9d</c>
      <c>DRAFT</c>
      <c>sv1a4</c>
      <c>160 (192)</c>
      <c>4</c>
      <c>32</c>
      <c>156</c>
      <c>32  (x0020)</c>
      <c>01040020-3ed8afd7-4a31-e2c5-f9c2-63e65cee20ee-0bb665e0</c>
      <c>DRAFT</c>
      <c>sv1a4</c>
      <c>192 (224)</c>
      <c>4</c>
      <c>32</c>
      <c>188</c>
      <c>64  (x0040)</c>
      <c>01040040-2f70cb74-91e5-f901-fe27-9d9d9704a625-aea06e67af31c3ef</c>
      <c>DRAFT</c>
      <c>sv1a4</c>
      <c>256 (288)</c>
      <c>4</c>
      <c>32</c>
      <c>252</c>
      <c>128 (x0080)</c>
      <c>01040080-35225f5c-78a0-50ba-f1c0-4ea2d181b096-7560113a765de7610e33d2aa69142289</c>
      <c>DRAFT</c>
      <c>sv1a4</c>
      <c>512 (544)</c>
      <c>4</c>
      <c>32</c>
      <c>508</c>
      <c>384 (x0180)</c>
      <c>01040180-2e675f90-fc04-b5ae-f687-4eb094c7c24e-649756dcee4b980e674f9ff0bed1c0a996b1b9fae89ea0107bc703e8cb64ccb58d7e8ad573747beb32f6c73d91b4d2ca</c>
</texttable>

</section>
<section anchor="sv2a7-value"><name>Example sv2a7 Value</name>

<t>This example UUIDsv2a7 test vector utilizes a well-known Unix epoch timestamp with millisecond precision to fill the first 48 bits.</t>

<t>rand_a, rand_b, rand_c are filled with 64 bits of random data.</t>

<t>The timestamp is Tuesday, February 22, 2022 2:22:22.00 PM GMT-05:00 represented as 0x017F22E279B0 or 1645557742000</t>

<figure><artwork><![CDATA[
UUIDsv2a7 Test Vector {
  UUID Long Encoding Block (32) = 0x02070040,
  unix_ts_ms (48) = 0x017F22E279B0,
  9562 Version (4) = 0x7,
  rand_a (12) = 0xFE6,
  UUID Variant (4) = 0xF,
  rand_b (60) = 0x76E2B86F151FB04,
  rand_c (64) = 0xE6B4400B21E888CD,
}
]]></artwork></figure>

<figure><artwork><![CDATA[
02070040-017F22E2-79B0-7FE6-F76E-2B86F151FB04-E6B4400B21E888CD
]]></artwork></figure>

</section>
<section anchor="sv3a5-value"><name>Example sv3a5 Value</name>

<figure><artwork><![CDATA[
Namespace (DNS):  6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name:             www.example.com
----------------------------------------------------------
SHA-1: 2ed6657de927468b55e12665a8aea6a22dee3e35
]]></artwork></figure>

<figure><artwork><![CDATA[
A:          2ed6657d-e927-468b-55e1-2665a8aea6a2-2dee3e35
B:          xxxxxxxx-xxxx-xxxx-Fxxx-xxxxxxxxxxxx
C:          2ed6657d-e927-468b-f5e1-2665a8aea6a2
D:                                              -2dee3e35
E:          2ed6657d-e927-468b-f5e1-2665a8aea6a2-2dee3e35
F: 03050020-2ed6657d-e927-468b-f5e1-2665a8aea6a2-2dee3e35
]]></artwork></figure>

<t><list style="symbols" spacing="compact">
  <t>Line A details the full SHA-1 as a hexadecimal value with the dashes inserted.</t>
  <t>Line B details the F variant hexadecimal positions, which must be overwritten.</t>
  <t>Line C details the final value after the variant has been overwritten.</t>
  <t>Line D details the leftover values from the original SHA-1 computation (Note that these have a length of 32 bits)</t>
  <t>Line E details the leftover values appended to form the full UUID Long of form sv3a5 without the encoding block.</t>
  <t>Line F details the full UUID Long of form sv3a5 with the encoding block prefixed.</t>
</list></t>

</section>
<section anchor="sv3a17-value"><name>Example sv3a17 Value</name>

<figure><artwork><![CDATA[
Namespace (DNS): 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Name:            www.example.com
----------------------------------------------------------------
SHA-256: 5c146b143c524afd938a375d0df1fbf6fe12a66b645f72f6158759387e51f3c8
]]></artwork></figure>

<figure><artwork><![CDATA[
A:          5c146b14-3c52-4afd-938a-375d0df1fbf6-fe12a66b645f72f6158759387e51f3c8
B:          xxxxxxxx-xxxx-xxxx-Fxxx-xxxxxxxxxxxx
C:          5c146b14-3c52-4afd-f38a-375d0df1fbf6
D:                                              -fe12a66b645f72f6158759387e51f3c8
E:          5c146b14-3c52-4afd-f38a-375d0df1fbf6-fe12a66b645f72f6158759387e51f3c8
F: 03110080-5c146b14-3c52-4afd-f38a-375d0df1fbf6-fe12a66b645f72f6158759387e51f3c8
]]></artwork></figure>

<t><list style="symbols" spacing="compact">
  <t>Line A details the full SHA-256 as a hexadecimal value with the dashes inserted.</t>
  <t>Line B details the F variant hexadecimal positions, which must be overwritten.</t>
  <t>Line C details the final value after the variant has been overwritten.</t>
  <t>Line D details the leftover values from the original SHA-256 computation (Note that these have a length of 128 bits)</t>
  <t>Line E details the leftover values appended to form the full UUID Long of form sv3a17 without the encoding block.</t>
  <t>Line F details the full UUID Long of form sv3a17 with the encoding block prefixed.</t>
</list></t>

</section>
<section anchor="further-encoding"><name>Further Encoding Examples</name>

<t>The following test vectors illustrate the minimum (160-bit) UUID Long values encoded as all 0s and all 1s across the various BaseXX alphabets from <xref target="lengthTable"/>.</t>

<t>The encoding block for these examples uses sv0a0 (SV=<spanx style="verb">0x00</spanx>, AA=<spanx style="verb">0x00</spanx>) with LLLL value <spanx style="verb">0x0004</spanx> (4 bytes of long data).</t>

<t>All 0s values have the F variant set at the appropriate position; all 1s values are entirely <spanx style="verb">0xFF</spanx>.</t>

<section anchor="min-all-0s"><name>Minimum UUID Long (160 bits) All 0s</name>

<texttable title="160-bit All 0s Boundary Encoding" anchor="min-all-0s-table">
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>Variant</ttcol>
      <ttcol align='left'>Value</ttcol>
      <c>Base16</c>
      <c>THIS DRAFT</c>
      <c>00000004-00000000-0000-0000-f000-000000000000-00000000</c>
      <c>Base16</c>
      <c><xref section="8" sectionFormat="comma" target="RFC4648"/></c>
      <c>000000040000000000000000f00000000000000000000000</c>
      <c>Base32</c>
      <c><xref section="6" sectionFormat="comma" target="RFC4648"/></c>
      <c>AAAAAAEAAAAAAAAAAAAB4AAAAAAAAAAAAAAAAAA</c>
      <c>Base32</c>
      <c><xref section="7" sectionFormat="comma" target="RFC4648"/></c>
      <c>00000040000000000001S000000000000000000</c>
      <c>Base32</c>
      <c><xref target="Base32human"/></c>
      <c>00000040000000000001W000000000000000000</c>
      <c>Base36</c>
      <c>---</c>
      <c>0000004000000000000778rxuo7mqegxp0fcao</c>
      <c>Base52</c>
      <c>---</c>
      <c>AAAAAEAAAAAAAAAAAAZzXatxaqveqUnXJFs</c>
      <c>Base58</c>
      <c><xref target="Base58btc"/></c>
      <c>111115111111111115XgaZChk8x2RpiFTD</c>
      <c>Base62</c>
      <c><xref target="Base62ieee"/></c>
      <c>00000400000000001YbB1W92hKBNBJ9iy</c>
      <c>Base62</c>
      <c><xref target="Base62sort"/></c>
      <c>00000400000000001YbB1W92hKBNBJ9iy</c>
      <c>Base64</c>
      <c><xref section="4" sectionFormat="comma" target="RFC4648"/></c>
      <c>AAAAAEAAAAAAAAAAA8AAAAAAAAAAAAAAA</c>
      <c>Base64</c>
      <c><xref section="5" sectionFormat="comma" target="RFC4648"/></c>
      <c>AAAAAEAAAAAAAAAAA8AAAAAAAAAAAAAAA</c>
      <c>Base64</c>
      <c><xref target="Base64sort"/></c>
      <c>-----3-----------w---------------</c>
      <c>Base85</c>
      <c><xref target="Z85"/></c>
      <c>000040000000000&amp;ntjHu1d=1an-h*</c>
</texttable>

</section>
<section anchor="min-all-1s"><name>Minimum UUID Long (160 bits) All 1s</name>

<texttable title="160-bit All 1s Boundary Encoding" anchor="min-all-1s-table">
      <ttcol align='left'>Encoding</ttcol>
      <ttcol align='left'>Variant</ttcol>
      <ttcol align='left'>Value</ttcol>
      <c>Base16</c>
      <c>THIS DRAFT</c>
      <c>00000004-ffffffff-ffff-ffff-ffff-ffffffffffff-ffffffff</c>
      <c>Base16</c>
      <c><xref section="8" sectionFormat="comma" target="RFC4648"/></c>
      <c>00000004ffffffffffffffffffffffffffffffffffffffff</c>
      <c>Base32</c>
      <c><xref section="6" sectionFormat="comma" target="RFC4648"/></c>
      <c>AAAAAAE77777777777777777777777777777777</c>
      <c>Base32</c>
      <c><xref section="7" sectionFormat="comma" target="RFC4648"/></c>
      <c>0000004VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV</c>
      <c>Base32</c>
      <c><xref target="Base32human"/></c>
      <c>0000004ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ</c>
      <c>Base36</c>
      <c>---</c>
      <c>0000004twj4yidkw7a8pn4g709kzmfoaol3x8f</c>
      <c>Base52</c>
      <c>---</c>
      <c>AAAAAEBQBgmlPXkFMhxLjXnmwANGzikNDAP</c>
      <c>Base58</c>
      <c><xref target="Base58btc"/></c>
      <c>1111154ZrjxJnU1LA5xSyrWMNuXTvSYKwt</c>
      <c>Base62</c>
      <c><xref target="Base62ieee"/></c>
      <c>000004aWgEPTl1tmebfsQzFP4bxwgy80V</c>
      <c>Base62</c>
      <c><xref target="Base62sort"/></c>
      <c>000004aWgEPTl1tmebfsQzFP4bxwgy80V</c>
      <c>Base64</c>
      <c><xref section="4" sectionFormat="comma" target="RFC4648"/></c>
      <c>AAAAAEP//////////////////////////</c>
      <c>Base64</c>
      <c><xref section="5" sectionFormat="comma" target="RFC4648"/></c>
      <c>AAAAAEP__<strong>__</strong><strong>__</strong><strong>__</strong><strong>__</strong></c>
      <c>Base64</c>
      <c><xref target="Base64sort"/></c>
      <c>-----3Ezzzzzzzzzzzzzzzzzzzzzzzzzz</c>
      <c>Base85</c>
      <c><xref target="Z85"/></c>
      <c>00004&amp;j{+1Vmjq.eU!hqMq17MmuaY0</c>
</texttable>

</section>
</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+19aXPbSJLod/6KWjpiW5omKAA8pd7eXcqS2p7xNZbsPl68
6AaBooQ2CbABUIdlz295v+X9spdHXSBBHe7unX0Ry3BYJI6srKysvCory/O8
VpVWc3kg2i/y7FwW4l2WXsqijObzG/z+20qK50cyq9JZCpfFzrt3z4/K3XYr
mk4LeQnv4QWBL7dbcVTJ87y4ORBllbRWywR+lwfiq/3BMPyq1UryOIsW0FZS
RLPKS6LLtPRWqzQBQPTXmwMYz/db5Wq6SMsyzbPqZgkvPD8+O2khtANxezQ5
O/7civOslFm5AvBVsZItwKTXigoZHYjJ27PW1fmBUJBbH+TNVV4kfKF1KbOV
PGgJcV7kqyXg/1YCGrKx34nutziSszRLK0AISKAAAxGEYPza3+fFhzQ7F98h
ULy+iNI5XFeP/mcqq1k3L87xVlTEFwfioqqW5cHeHj6IV6D1rn5qDy/sTYv8
qpR7CsQeopxWF6vpgfhw81EWTL89Qze4P0d6VxY2P9+N88Ve4yt703k+RQyy
vTuHpLtIWq1oVV3kxUHLEzyIf0OI4m1XHOFL0LqkPsMXITxAkWD9Z5yWcY4Y
mOvwVpfv5atqnucf1F3o94F4io+L05uykouy1cryYhFVQBoE+/bkKTLSgf4C
lyYvzn5G/vv5+NXT10fPX33HzVdRcS4dOgDnRFURxR+gaUNj4MbGXkfzinsu
szhPYFC9hYSeJ+Uew+bpMplXssiA3oL4/1g9K17ys61Wms3Wkfd9/0B/4Uv9
YX98oL/ApZPnb06Dse/1m/uRXc6Xq2nZzdKy6p7nl3v4Ba/s4Yt7r56fnnXx
W5dgdJfJzEX5VMarQopnUXkhTqsoS6Iioft6ZHmEaBzaryJk9mgunmclvL+C
juYz81op4K84k/FFls/z85s2vcsTdLI6X5WVCP1gQFdLWaSyRHJwC9zLA/Hm
3aEgPFW/Qz/8nb0GCOt9bp8+m3g9gze0KovFqqLOeYdRKROmB3bn+LqS8NR0
Lr3XK2igEierLKY53/4n0wl6BtdeF4ks5jfPj5rptEznv+Y4WxOQFsu8rMq9
BChVpFPAKvGAo89lJgvuO8y55TxFgZ3U+Lp9ZF8BwS9OiIlLMQHOmaCYqmRc
rQro8NN8sUirBYjIsiNe5ZX4K3bnCKaaOAOh2EgzlhwaUYcYRzKWiynIE+gp
kuOn8aC5k8Us7oIEyRe/0SQulzLe64W1LsBPeH3biKUvgQDXgH2xzJkWDhow
GD34iYwxGE+ruBkHR6xO0yrOQXyavyxQQXwVe2UR700JUjdeLl0MD/lp1Y54
DkMhkZAWnQbE1Us1bP2xFwRbuCem8TkQs0iOgkR3a9gv86L6IjGJ+ihTwnJK
oDyEVReL4hQu4RxSrYGgXF5EU1lt5QbWI1qJ2L6FAy8INdZhKqVsxhrvXC/n
eYH6U0qN9AoJutcf9UbheFRHsSRB2BHzvCznsgT2xVmKM6KAX8D33KTQCmDb
iDw/Pj5uHA5+fzuh82yeZnKeTououOlepXN5Q9yU5OleBHIt8LuB74fI3d2+
P65jP2XkYKCyUqmYPBP8DWXP89PXIvCH/SFeE4vVvEqhtfMVTNnUGDTl1uF4
I1Pv6UUqvl/VuxZ4hAh2rRderBZR9kVMFBd5/AEQSxxG6oUeXPEIaF3LcmvU
kWd0dyvaR/nqfB6V4qmG/zAeG3p+v9XyPE8A3RHtqtU6u0hLoTlISNIK5d32
obGLxVTe5MBMQTgWIBNKUeUwAWMYgQptBZldRFkskdnm8xTtWwEsBxIXrxIX
Lot8CagWeb6gbqNUTMiyiOCP0jVIY3EFUghkSARWIdi0bIZEczC/4fqii92Q
YNbO2aq/jIqUNNtcZufVBT0NSDvG+66YS+hgdA54ABZgFOerEvq6ylY4JQgA
kAM6JdonbcJ1JqMKLYpIZPJKgM3ugTWMqC5A4UWgpRciBoscNQmQAa11eLi6
kPA/UFhmMGQXolxG0HW4n6CJLcFwzm7EbEWA630qdZcrHCBsUiMFXE8d6q4P
nnJBtMXY5aFepEkyl63WE1DaVZEnK1LyRDHsDfVoBuDRMAZfJb3EPsEoVjkM
9FQCColiC7xBSK4Pe5wDLaHf0xvsMCB7XaHYIWMCsHjyREBj4pWER3CUn2dI
KKTzMWK0vBG3TyR/+9xqfX8BEgJaBD4xDc6UXgZ+uYRpDdSfzdI4JY5VIGj6
gxkgYABFDNDLb1pMfQIlylhmQMAc6MpXkY0WOX5TEICUhfxtlRY8grNVge/D
NSCZdHgYkJhGU2Ry0EEgG8X5CgQpX7mB7p7wix1oCHtCTKF7cjkSyarAX0go
EhICNEaJgGZ64EBCkz6DtsCkiVclNwvqELqxKsDpyhLEEUm9IjsC3qWBgPma
x5YFuV+X5b2P4n2ee/g7XYBfFS2WXeQRPcpini7wvVxNPs3rkSjBEGSxzJRF
YIj+ClzIG3ERUQvTaE6z3gAHjzTKVuAM4kOXpca2yzwNcgJEOYAHnmyX8xR5
r82I5zBtrqIbJHxOA1QVN0RQGDLk1QiaXEK3FzJJVyAamJ9oIuFY4wM09TRG
VyBHIzD1gCGSb9RDFTABjTNYKtCX1TwBoJfwjgSmiS7zFOmUztT0vsL/iJWY
spfo5KJRoCjrsDCwx/cwremyI+KUnIqI/jCLjKD6BkSPgO6Q8YokjuG3Mmxx
4tKDKChELMESAQ7BKQiqEQYMyFgVKxBq7RVL8AjUUVkqGYQiDQejzRP0LXM+
Gbg0lyYWu2PNGWTu3j5BgQwT9TRfAF1r1pyZQUwOwCSrKQeW94ASMRvyIPIj
EcPpI5q5oGhilvxw98aARcy26QDCR15HiFEJAx7PVyAqEAaqXeCHKiKA8/QD
jzHSCm33jogvZPyhXC1Axs5XeKG8AH9mbxkVFRHBtSXETimluL01/snnz7ts
U5FIyXJo1H0cUXY8E0bb+iZAfjPaWr4BD2EnaNrxaFG/M9vbu4mZYjzBCjN8
eZ3G4J8BgUnMsdfHbAAGl6wqDIwhTo6SKylIAYOPZgGONDCAlgysXo26kqL9
+vREHD09FnsUy2ob1aVYDwaSpAkLn2AoNFA1+9VPfkjgIKC0J2MkzS5S4qY0
y/JL7gv0GvXjuv7cicwUxoGEl8t8fmkn2OV416jQIrqaghWnCXhPB1Bk5FNw
QhAaS/krFRIDdG5vlRz//LmDcoe4KEZRx/QmZY+WGpmDiiHm0U2+wkmCk7eQ
yzm2QwbLZY/tD/4xgPlqJIgV6aBCLshsst23YoimOjwOXnKZspridvAf2B+s
WXIyR26AAcA4AZOIlMM3WsRBj+G9CvUZGXXYKFjCpNhMdBJ7r+wqpoXUBEUD
o8CQWYY39HATZ5ar+KLG21pGmmkBswtUP3RU2RRAYeBMmrpIYmNj8aQxxqRr
VtHsmhjiMLMfshlzkl7LxHvBIvj2yYx+skT+rFBBlWGvEkin3SznRmF0z8Fr
RGxV28B/VQ6WQ0lUO+ehKJFCEthRaVSamnpYcs3YRmURywHCEz1OMyR4hQIm
z3gcYfRR40qwANmiJC2r5X1dH6eKx4xYpg5U2kBlMwokW+Ygj1g7wgPI95TN
k8jEBZWKsYJP6bSSZnsw9Kmxjgj2Q6UlAWY4GNKPZhlYkUlPhNcKksWzYejZ
HGw7S7koJqsJjWAzzcDmBHmSkhrZ8AuglfQcJZ+rOpT0JCLhfFAjhyYu0RU7
1BEgy4lsVo51GiYhKBJoQPkNzlXyfcBY9X5bgVRZLcgdX9FkAs5gu8ph1gkM
KU8ktG3JHJHXsSTri2VkOnP4PMklj2kp5zBj8CF0W/UQL6LrdKF1HXae1BmF
CYCQnz8rHigkTWwYikLp9ogsT6O7sKfYjwgmszbUqX0eJZxj4mmeXTKn8qg5
KwvkgYgPoNxxvaIU7ZfvTs/aHf4rXr2m72+P//7u+dvjI/x++mzy4oX50lJP
nD57/e7Fkf1m33z6+uXL41dH/DJcFbVLrfbLyY9tHor26zdnz1+/mrxoC+1w
GacK2RftV5yPwOwgGGl0yhYwTww6nW3Uw6dv/u//CfpAx38B4R8GwT7QkX+M
g1EffoBtnHFreQZzn3+ibdOCmSVBN6B3Cyo8jpbgPc9LEnrlRX6VCZQzQM2/
/C+kzP8+EP82jZdB/9/VBexw7aKmWe0i0WzzysbLTMSGSw3NGGrWrq9Ruo7v
5Mfab0135+K//QdGi4QXjP/j31skpl/llQ47u+x0+yRTNz4jKxXI26BC14bP
8fkV46IVUcgZ0BTUWEkKUMsF4ch3HUuo27Cs7Bno6UVeVG0XVk1JwDuetY6U
MAfhViql6GCJTmMqYVYjexzCOy/IGthkRvRtwTdclRXrOAyCTXPwCK/QzCvg
Ihsfvu8Dy8EkvdA9qC6wYRXDIJZ1zBR29JarYulip+CnZLmDcbwAKn0E0YeS
hcMXHaMjhGQvAGb9G+oiP2CUD8hVEMolWAAwejHLggQM8nROji9YxysMtJPU
0J0nMRwpWynRQh+Df+C6XrEdh/KvJJ04QwKWrn9Mt5dRSgYS9CQm4TwtQJ1C
M8fg8/FLhswECv6WEmQaCWEAgSolQrSeZ0kKigkji6ot7WKoATdrYDnM7OV8
hQ8kWmWChsdOsTYjAdkR+ZLZGqRuB91ZMPsk+xvQ3mZzOPik9aj/2JfMzozY
zowOO4QoTLQOhh4i+x60Wv/4xz9a12JnsnvQOhDPGT+ptN01dn7CjE5rrPjk
i13xrXja+DSaHZHbJST0U/ahFU3gAkG1wnJ60xLiBQVHYADQnSWmNhpOv4m0
JKpdSsKj221GmZFYn8FEgSxXyK2WaD2SpiRYk273sBka4jNldDQeOKsmOAUO
v4G/6oEcQCn3RQ2yxLVusQDthroV+oLrNsrooWl9x6uIaSmrGp44UOvxPQwT
ZbJCXwPoiItv6IOKHfb4oaFpeo4hDnBVdo0WPmHuwYlEXgUYoBV6JBjlw74h
zS/S8wuPgXGMZSYkzg9sBFj/8Mbhrw6hXWdNIwM5cgWz/VrNLZhBq1LHu3Ai
62GuPQZt3N7O0nNPXns8iUB8WWc407aZYuBjZamdarEhbnHBMJMkcFmU7gS7
Hbg4ci4RU5C1L94Tu+6MkLmHAT44KeBBXKHQnoACA3yHt99r07F+d9zthn16
gC+Qt/BSMYF6dCcYKiDuM8oI0890u6Av4KHP1MHbA/GkRg5eIvi2rXvOC5Xt
z2hjWcOLr6IPwzQEp6FSxK45QkoNsHQucVAoQgKWLq4JyAJDryikS6skOrig
Th4HGjOuHrG6sOtY8cqTLNCTBOdQhfKcGAU1exXdUDMg8MEKZLt2iSYrSzCG
vSO7wD7yuuqQCXaOodVpmsFQdfiBd29fdYSs4u4u25QWCwpYHc5z8OyJ6Ut0
eZEhgnC/LuYpHItr44YIou21tdrG1pHdTXdM4MG0pUIXCmhKzhGIaWzRi7xz
jjUWMkq0q6es6Sa/pN4BXt3Q1guo4ERFC2rto5S9vQWGMXksqNeJm+wz9Qlj
R068AeKAdNsZMjPTnfcq5rHTx1niX590Gt45hHd8+46l+k4v7HZ7+8M6U7v4
rfO0BYAmUESeOc4XtgeQ101kHYlGLOuggxE25G2eA8RAFyBfyNKAgZXk6YJh
DUqBCK/d69pr9RF9TgqepVdqbDhquLwBJrhWyzylwODRFaVAoFyD8deDzIGL
29vaZW1x2R4rLNb4ixQn2lHEore3qznTAmYgdgsvHJFiJUPCjPe1+nj2vxP9
zdy7uel2P340A6NBq0H5yhEqziAgCZ7J669gLD5hvgR9PgkHCfEnfz4hc5T8
FXC4NpeZCQht88SfhkMQ9oXB4cRcPinyj2Cg6olDKnoHvekt7LHbFex8q/Ai
jOvDceibr4ADjyZeft/ky9hpSfPChj+MUSZewKdrVBeG7hD9jokW9PeHdKV0
cdBzHJFgLnJZYYOVTpnLFS/pR/OiRIaa2IA2xh1IUunoqA0rQAdAh0wBMQxe
anurYyJMaEeHvsjh3arkWVaLd6gVhJrY5OALefWuQDHqGxSz+Npo7DWC6qd6
HZR1yqwFoP2Ov8/RLbEzCEKF0W63Be6sZHNTxXOiOQaH2UtIcnKvqugDxRs4
prXKKruORC2bBDzWbTt9NTTQtx7H13ZFLT7hRkwtjsoeZFRYQ2r1vF0lJayS
1LIa+4cXEgwMsBnIueYwMy9/8cKx87ZaOq6ccanAi5k7DoOl3Dcsd9XAY5AT
vdhMxWPsIjDGUinChQRDravWS3h9B2GqlSToKUcEVURHL15JsECfc8cpxIfB
VFoozhzU3Te5XzhzuD8bOOs1LLtqJ6MynZNRxOv0SR1b6kChI5zJyqweqvDh
lnHhEOaa3mJThA0q9GZizn8DJcgGObavbfJ6QifzU2KidGKHmSWao+lyAzRf
LnO0oxR31QJ/paGGYX0deQWfhcUhmfu7pL5qaGhmsGxQbVpyjrsutQ2UOLnK
5C1ybF/LYNZet0+0hG1pM42NWZ0y0WTndgOYKxj6ANLxDFHZIdAgMKyTjtEO
guC6zRMWe6pukWlbE7IIxEj7d9Q2toEDioFYbMhQpN4KLzxpc0OLD9E+tmtT
yuQmFKf1rBIWaC6pOJBFIJzlrbTk17HXGLie10SlpikO3qZQdRoyVs8GUQfd
wCc7hfN1oG1WmU7CDbuq6A7z/BDBVyBCp0DiANfrPomX5dQX9CfgPyH/6Wnt
B3DqNglqSPjg4+pPwPrL5z/HRqG9lWpVz1lAsmTrboek/lhb4ExPVnbc68v6
G5G9rpigZaoiSiUqG7WeeR8pleat8VRN82qS8C1StRYPZ72QfTrDfXVT5kRQ
qFmHoJyFYV5IpuVvLUSmSohs0T88QU8BxBmDeGFArMmh2yfmLRdps75RSE9j
1FZrim24AQSN5yw1d3KKaKBOUoy/yjAJklNHrnArBACSIJGc6KmJiZKgAHYg
qX8h58uNdAcl1BNOVlqBiDX5MtAyfP1a1GPAmBqlMt8okwkUQ04ilVfnKFmA
+A0HRy/Gb67Db8sN04uFLqfBCxFM2PxSO/zrg4fzjKCwGbHdzrjDXqDBr5lr
NleB+ys5FhfNKllY4Y7IaOTtGzWjTJkLGNQF47BhqYke53Qk5SvP0gKTzbVV
tK5M1rplM/uaCU0yHde1OVh9kYIfXsQXN12nLfQtRRuZWk2ZtuA9Qymp+nZ5
2dZ2lxNzlLwvhxbLZ420I+7nhkBnoXIlROqPO2g7LiOuHyG/stppG5htJ/aK
1oGLZtTmtpyOcCjbrJ2LndP3X092eWJgG5Rwkqh8GpUvGLlJD2ujZVOg2KVe
4Asu5UTQcZrrtzWi8lpnLEOrQNAggnswX2g1Rv2stqwDdYWwdjdnUjgvi/cq
4QSukQpckSGrVaEb3awnmRCN2dLTPnqDnO4rf92RW8rNbxryclM5aKZGhfxQ
ptaLE1Hd20N3q+OQEtpizwRULMLd7Zh0obtdgDoTaQ3nZgkQbIopAw1p9mLm
b6KyBKONWYyJx8x9/LsEVKVdnWHjz5BuPalR9aI2LwhPu1xi6MVWCkpdimfj
kEQkp9nXgv7bKCBdYrQ2CCn0+utjHTawcuR8ZleDta6kt6gna4bwve4YMcgK
rCVXhh/XNbJegNCZS6SXMSI39+gBYNO8qF/y5m7Ayar0chXHwGEVZWSZV/C+
eWMj+Liu3FuiJmbM7Z0xxROtCFi/0+yB23ACRtx314KOqj/bY45r2G0LQSLM
0/eTCYZLvAcF2q6va4G2TeJuxknWcIlqHvR/63jc6Xt9+XUmxSFyojvGpE0x
68fECJS/+ztxGJuvgMNksoGD5aU/B4MNHJA9+PIZ2A6Ew6b0sLJXLXeAU2UX
UjHg5njZdXlCkm0Th2BocLC85szKR4bklJn+XruzZI9r57Zukqvl/lm+Kuz6
omvcaUNHOcVOVBueeq/jn+TguRwDDWz6cuUlOoDH1+AZpWSMz/eeck6ETfFT
D6KL9hYmENzjDZAbT6D3eIZBny330a3EXZMqW3Pjft8DGINBs+9oLYVa/01q
Lo+TpUDDADkD8BWtgRBgh7RmYYJjBDsGpV1j4plcf617XbPTtTwsat9Qils6
o3yTopC098AOJ9q7rOtxDnFQFV0IA6yjtoI4lzCdSYWkqH1cmUezwGR0Ow1o
lfYAflqkRaFMFnqcFsrQrUHT2RgETi/rCtDx+JDhjezFPSn89TPjAkwbreYV
plckmL7pRA87ou2uNbXZz6ut5dgFJjdtGkkCpoiSQbRAxYE2mB5mi0tU8fL7
jZYDjiukl+sRmHJZddJzWrJxIa+BLYqpSWjR+1Hq3ilmuKw5t06iH9B3W56f
igzgvruPEnGdg1Os0olpe7iZ7UTujU3sHGRj/w1lIG3JMX3fcB5wJNom/Fqn
uqLxy8mPZJMySomNThEcQAmzIDlyjftrgGeic3QdEfSqxD1haylQ27wKwY+I
dA4uUlXQ9nedRsXEx8wu3NemzA2KdKolFjeKtkFTnTNBSVt6ubKZeFEh6yua
vCH19pYVzhn+oqROfIQTmlSqqRt3tQavNTwjXrAPdAQeKMFZIak2T7uYYKC2
LVKSMAZg1wxzA7k0XoJLBttcbU2mrFLKX6L85Yg7pieOO+jrC7ds2qM+5dHa
buJhSrXrrRAbm2170QbrlXbLIIXkwRebIk0j3IqsMmETlcGEEwADqLQCkIHI
KNLzi8qj/WkqjxDlsLvdTG1Bou2ItCnSRlZNYC0qyRHIwR9Hov/wg9lvXG7l
D9Kopuc2QrphO7xM3cWOHb2gtou3dDSSb5nw/i6pQESFDA/Qo8+en4qjt5OT
sw3j6GvRH4idQW930276WgR+uA9N+r2Re3sNOIlqLB1hfesxMLYC7gNe423A
+wQ8bAIOnLsF+JCAjwACPLPT298AjrfGITQ8Dkf1m/cDH/2BwJ1dynYF+fcC
Z5rjBtKGjwIeAPBNmuOt0X4PgPt+M/BBeDfwIUBAhugNNoDjrVEA90bhYAvw
sUMWqmvgLqsr4GMA3m8G7gNZRv6wGfjQpTnv03egK+AjAL7J53hrOIaGh/v9
BwHHHfV/IPC+2MKKfWLFe4HDgA7H+48FPvgDgduKDo8jy13AxwMF/KfxYDP9
4pMYIHAQXD1/AzjeGqLcGfY3WBGtekf/arN+Mq/WIjMqePEU00KKtMwz8rvq
e5JAFO8F++Ge2i7jiOL6biWvBHMH/TJoho2cmkpdz5F1NrVTCq0s7DL6EqNx
32wsd+ASo6SlW9c43NgbpZcLebNOWV8Kqpz1127z5hP9093+zPnT9DKgl8a0
I0rtkuZ8fW4fdaosnay+2tYnICXvQXK2H/HrOl22vvXM7SanazimuqhwtzzY
AVVUojnxvXQX+nVehzSOEGn+WkKsjU3ySgwlC+l0+QyNH6A0GAeh3x9TpjNt
QDbmJhitu63XGJg2jSUmq4Q8vxk8K1Xmq9oCCtZFkZKtvW3LbZcMI6be+9rC
rF6MtPlKenXGBdy8puNaMQzFSUkxyf3TVTpP7g6e4rOYMJrlV7wru2F3nhtX
ViFUY2xp05VCcmjmeFuzfr7V6TRkDtsd0fVATAsZ6i4gIMHuB4LceBcQswfl
TiiYanRnf8YPwYVMprvAjHWCx91dQra9s0/7of8AOJQL7yY6O0GY2yfIYiT1
QD5xivrmmnOn+WX0nXQoQq1qusEnWmqrrabyYt8iWpYql8NED+ymVkpbqC/m
PGR+qKXbs4ttDzh7K40o+KpcSOhE8hU7ChFv37GLLThrKI1Jr2FpyZPPE7tD
wHqoB3pxTHz7rXDW1ewG5JG9E0ajtlPzgdenlOOXZuwrmtVFlDK0CUeWtUVa
MO6bu6sE7U7ke1EAClZDdJ+2+8kLN/hmNvusU75pvFTUpJZaE+n4He7+JuFI
AlUVbZnmNjmd2VqvH9Yj9c39ogZojxvI9iyNMZSEmXLYN8pKUDqoFqRuBFUa
migRh69skKf8Bmls6HMfb5VOlC7LdTCJEv5ktp4hx8TCGMGweS44VTPW6o2k
RW1knIDn+68nAtiLtkTR9q9c78WD7mISnu4uTENeqsdufiNw/7zm+ft7qYNE
DdlSPHhuAh+y7GvaTGeSFji6SATgAjMYzadH6tSnhkzkQGWQ3YtexwY9kcLB
sLMWxTIU1vkXul6Ou2+49Z3Z8QjdiT6oRPdt3MQB7pxHWQ2maUhXAqD9sFc5
lwvCEqSlzatUyZHG3DtooSGMdICWv21T7nNMy2hBVzwD9V3lljTaSnJyRWlr
eNjlXcOyCS2OB8GgY9EvEzPWRpWuQeRYTGwSNgS07TAotirXKB7RngVjSaky
mfSQuyN6w/xwS5Y0NqhihDiNnMGom4dI8RKLanGBFjTdbjpccITL0NzQwJgR
BGGlKKWWLdzWtoyJRzlrdYOPljBolw7uf78qcOsa5d9SVawNc7CrgGxf+C5N
ppChZG1ZIenUJgRJ1LlZ8dpcQzM41NaxkRNeH70+0NoJiDfP2dC/DNfXtQS4
cA1rSbu43HXpe4qJyK3SiLm10IxLs6GX1MZpLWXItifQlIBh2kM5BwOZ5IVn
zHBTxIr3VF061j+yJ0811sJ+NG7YtY7hYGYiWgPQHO/QVqNNqNYX5C45R/M9
IcVcgKPGcXLK5qCsO/M2ZYzI0pQEqPXOFTByhtF9MhTSj2qPCyVNZCw675OL
FG/mxBMuhoEdbBqWxlFRPlEh51x9jJ0teCNb4VJUKXn18T0vOjpg8ecr3K/2
SZDw0ep+B5fHzCrYbu0lW+lAvEizD866JYzXJ6HWKz8JNbyfmO7R2PDbZ704
CC+p8EGdaa0dy2u1TwQzA7GtA6jVUkziSHjVaj3p0c1ZwsiqmaFWDiVyDs7u
drnurSdnKJprKU+5W7xS2Oa58HPSVqk96ALoTZgCQxluSaG1pW9TG4HtfOyf
3lTlJs6o7Eh6BZMErZdMEyQDm4h3JrqVuhrXCliuGa0jwbBJMVdTp3Rp9cdF
buwOxy17KLuhcnoVfVS68xVoUqQUyu967IUS/Xl/vM6q4VGtb+lTNI0oGI65
MnV+5d196qEpumH3bPdTj8Zml58eNNr62tvvDWvb+xiltRwbvrgtocam5bGs
1iYvGzw1SWKEYmcjMLUpokhFKuXbLFZUnltaNPmGRoPQ5OVqWzEGZPTOgVTx
F2WmZbwvs7uhWgKxw9kHrE2C36FNaH2KxZc2owsC3RHLUq5AUqtfpjBemS6w
2roxVahkk7FU1pe3lJ8Lrt9WVQOu4B+uagKd9PFnil3MAgHcTSqIErt9JXah
Xw1iN2gSu0Gj2EXC0Pg6gFDsEsHWxW7/DrHb//PFLrPJHyN2oX+4BeH/P7HL
QdK+60awp0YbhHGWEZXUpLYSFwe0LnEVOe+WuOqhh0hc9aiVuHq8tklcRGlD
4uLFbRL3WJdI1IVk6WmjiKQ7uh7JBnfPhkY6FDuYNcVyLfxj5Rpvl2A7Tyfn
m8KhRlAFHNS7HJqwy+XICTisC68wUi/g16H9OlpfjLfx6cvwv0I4YQJahBLq
uwLPEwHSUD6actyUqAqUqIJe1ESVATCk3UuUbw1v3QVqaEANm0GN8MksvXbf
3Xl5uqsBjAyAUYPYDJvEZrgmNlm3HvHyDurSK9zgiTyBPRzSTtx1DF6Bl6D2
QFAICqyhfL7C1ne73a5aGjLlZe1drvBKtVGi8oMtemIWhoyuVxl8aH0RHiPH
ZxNymQM7YgMdlhIMEssUsf0SIzc0QmclAQB5skRBTUng9Q0lEdyhJII/U0lk
NrvqZ6xlqtXEw5UC9Oe/whb/BbH7RQVZUHRrSYGF6sXYD+HiU1xUwJ0O1AZL
UsZgU+vhTjHOob9xpL9arFN7BUy4DVj5nMLdCgtT0vC+RP01hbZd7QBSVC+Z
bS2l7qLZDKujkJqjkwe4yoSmrxPkUTSKkWI/l/K3X+xWKS5oTQZYaCrzurUT
dSSuvimzIdjjKEZk4rpixJnyM+5u3umxzqMLizSh9PxtmpIewnJED3FOdOfM
s1R8VyviGhtv056I94b2xIvbtKeey0M1l4drc3m4OZeHd8zl4X/3uTz8n7l8
91z+RU3mX6x5SibNY0xSe2CASv5zZnfH1muIqFympo0eCUTrq3/y5B82TX6e
xg+d/TSvh52a5PgvEgHDJhEwvFcEjISSAdYMavH1DREwap79oz/V3SNX7+f4
S2b96J8STftnz5saS4/WWBqMueufq/JnrCy+xdUjvhxppw19wge5e+gXOs4e
+n7bOHXUxKmjrZw6yYR+0Dh7+HyDs4dcvNXZ64mdZ1zcmP293h/r713Y7TXs
+pnN3yyx21g4sFRZCPSdllbbG1uJNthk2B1gf2gODrYHtnrRQFXEQAbXdZxt
AWyzu8FJHQEvRe0LEFE4+lPdRHBM9A5kuycJUMayV88mXmBSElU/2T2DTrnu
GVwzB+4Zf48ABUMFKFRlrT7ZJMfb2+z8YurAuRPQSAMaDH8foLEChOlKvwvQ
vgKEeVG/B1DoW0B7SKcvBhS4gAbDLwcUMqCeHrYHAQr9kNJcXUA9A4iH7YsB
9TUgNWxfDGigAalh+2JAirP/dozZc78H0EgD+jIasfzuNYVGemuhEbsgQrO5
R1ILnb8tkqsHN+JI10HR0feXR4P1lf87vJAeoGmcTM6pzMyhK/ZMGLIFl7i5
BciJ9sGqVFkhfApCpk94crMgEAgoFplVTX6qMqZQAJNicWQW+lN4fcOYGtzR
k8GXWlRnridgaaZooJJcllRDVPkNLHpRWaA6A1shM/lNM1UwypydRBr5GwFG
FppoqkKzuycNw9FgrRaROlFLlbzQJ+802FRHynJrlxdR8DNmSkdF0q7pdKDe
FjtOPS6TP96aMzURHmHIdTF5M1KnPqnynqk+DeVq7fyltUwUPO+pwDPmsDft
QVvljF1Bl2eVLlBiRnbd+cPhqxl+yHF1w4/oy77MHSF+eor9m/tsPnqU/Btl
9bkjuM32Q7w2bD+8+BjbD59vsP1w1rm2H8/IAPOR8QsIv9snNRnHU9N9wFSw
QGNHnTVLFLAnHSljzrWw3GS1E5zTVA5JPQ+jRfl8NtOD2Ghm61nbfQUzlUBl
TslwIZ+pdVrHx1nNL6a6DtlapSLeH8vVfRnWxkbAtLyPq3+nIOLF/oSFS60s
0koVbeEDgvDwXZRCeg7WGFMd7EJv8JpXTmteNLMKLL6fqfVvlahmqoHTnGCI
vGfBnvfnlBHHo9nwUWTltu2rkjS/Q56s1Q2hzffMUfWJSY3zxLy3bjE9y0ch
mmmnkW+ecsgi28uFOEjds87mzr5g1FGzQFnJnebpGNR8Md4dZGoKE6VxLA5N
ZbHbJ/X6wm7Kuj4zh5xkVYRL1ZvoheaEiubCWM5JC2bIVCiJKtg4ZYyVYBU7
xDG9nnGOcIcFHqXD+313eXOvGsZE5XZx4VAS5k5WtVIeKk9cbX/otp5pJart
Hos/VcjHd9yihqp2YIePRqofLImb2tFd5e3E6qQ4usP5vVRttpC/6qh7ravq
JEfdDhAmTfSZbmd4xGeRXuqK+Dg2c1k7FIQn3EbCaKch+Yd0KtMBK0UvCRc1
emtl93iM6XSBMjfbj2rt1sofdVtYAoQTqfFJ9T5mu0q2CVGXL+ngUEknLeDw
qxMHnCNVojiWy0qHnogWtZRwatm1VE9qhSvZwAVSx/l5RsHaqTNWapgaahTY
3GPdaL2rnIJJW4tAwsJ4IJ/pw4QJD0UmfYQFNKsNDE2SWiiUU4EsMdJk+2lx
wHn+9fUuoVLbZtE0xnyuUzzHs4AozR6TrPP6RvJ7UQF6sxIwD3LKJRjtpe3O
nKvLJqAOgZ1ktFDV7vDYkTX6Euc5uT43fF7b2nnMOH2wzshVpDfP844rNOdU
qQkaE6eEc5LOZrKwSsdYaGY6fFU2smu9gLK7lOZxgEnpvcj1X8xBBcrcBsel
xDO/6Np8rf4a8iOZm0BEKrLBQVK1+1CXkmTZRwPBxQqIWzuCCswXmqKMqCrr
jKU91jmKpzUfBUUt4+mSaUZHb5V4ypsiI62S26NOCRTlW7lEoExiuxWF2N4W
VHmC5glvrHxaP9kLXC+9A9NVHXgKpixZbrrHNpj9mesHhJVi41Qh8gGaX1j3
gpRZtVkKmOnPZ6bxfpjpirgHZ+qMTlngWO9c8mmzaiPGao7SSR/Vu8ncNDaq
RgodO1E/0dLxZKJErB16zEHSN6ooCiKn9ra9N2oAyKqKpnzeIrhIrm3al9Sw
Uieyye3bLHmmTlvh2a722iBiC7nIixs+XShKNDOD0NfbW+a4kSBSEpZaPkAr
FIzIdHZjp9lm5r2JF+ij6NYlmqdDs2pAu18EtqoVE7FnSKbZcsUl9ksE/JZ1
NHLq+gYMdd5zSjxBJ72KGR48ZffHeProKxYHdFJ9Kutzl6MidsuszdWvhUmU
wlG1gtik2azycuRsZtAVgaiq4w7tvKTaGspv0ZDsZgKYQ7P0fFXoI4a5hnit
8iJNLJawLEEcDPGN5NdVqQaAj1gtSYfqDNbvrM/2gs+ovH1i/TiPz61kF3NN
ifGBiTnSErXTyj022hnvWrUXxfS8l6yQ5njjRCm4CgeW9MRqrQARmRpcGomO
V7EnsZOEBLsGK6qsyQod84ApP89TtVGcBcZCRll5r6Ku99EcxrzRIVyWbhBm
ZoRJaGQ5VTxSwTQilrHEcjrkE09ZQn0CYtPD7mVyrnF3TqkEzUAb67AOZZRc
gsA3dYw2q0fyYhkfX14vHA+DT7z5HA/aIYnNxz17qb7wmY6DMvx9sdFxsWN2
QZLm3tUzyJTZzW7I9dqzZ2NyhjIedAlqtoriD1x4c45lixMWGA+QgYaouvap
Xa2kHVEAWi6WNCmBorFkE2CNPZCfeB8y7T9cLqVyDVQwSgVjl07t482wIffE
+O2Y0WA5xpS6IiIk8C4mt1ti5Nrtqe+EVjWYnNrRZI5QiIDEzFLyvhdTc1U/
R900ZYMVQdRw1s+rdxPw8ZkiRyln9+mYYaiXzrqjSvmwG6jSauL55NVk0/AA
2yQyCYH0yBVvNOVaeXa7EFfooqt0gneUbNlHqc4r1Fs0dcK+5vRCnuNp3NDz
i6palgd7e1dXV11Eo5sX53toKJ9nJCr38Kgi+q97fVEt5k/o6CK9qRy0pOfR
yS7kotMpsfMca3LE+vtnDPOA3AXeep69ncXwOymiWeX5Pp4+9xeYZilN8Le8
JQnPuxRnssQNxTEWYQRguK/Ku+Sf8P6RPRhivZ5H/aCItdnC9gEH62NzMAQO
K601ujoWWxSqRVN5modrKknV2HlkjoWkNnGVnaJ1Jry6ZYCazkWY5onNZHNL
HxNnTGC0WUi76HF4t4lTqJRfLR1aSWWdps/xFQ4AUsW0DrAv5wphuQB9OKV2
AWz5b5V5pE72A10rceNmqWqRzG+cCiR2DPRBjDtOLZfdTbG0tk9Va/AYI9/V
lZT1UidUMV+vEDgy0UY86UBZKi1j14wu+5TvoeJNNsCCJ1erUdMHUtQUIcYD
MFhlFJ4++nGzLI1287Aci5OnxS6JyrzYONMHd+KhrxAObMkN9TbXjKcdPVo5
+tc2foBw/Ws/8Pu+vx4OIdVJ40/oOOU87K7SKYZxNOD102jqcwlrsYyNA6B7
7h462YC+XmKZReaYF6ppx6MBbm4QNr4DLZhYFzh/M5bT4nwVwUOVVEE9m7fO
B8oxgEwnynE+nFJUq2q5Utt62UVW2/s77CrW9jHj0qsZ1loufikG/rixkzGV
DAQPuMznnEddM0vpBB3KlDh6/VStnp7hCT0mecEUCCFa1scSkyTs+R7q/AhM
rDijITNbe6zQI7BaCuBqrt49bvb/iE9CrQwrdELzzZ6vRePjPJPtRe7PUU/u
92fS9+T+IPD6waDnRdGs5w182ZdDf7yf7CfUui6M90lxJFfs9UEo7Dul6WzL
eL6WxWEwdBvFOzvXvh9iXapPgpk/9L2eTMbRLBl5/agXeDKMB95sPw69YU8O
B+BQhb6Unj+dDocD6W/Haj8UO2HYvx+r8djFCkt1IVZ9F6u+74WzkR9PR31v
P5CIkB94MxmOPCTN/sjvR8Nw4EUy8odyOALaBXFPzrZih9NuB6bhvdiFg9q4
4UgjdmMXuzHQbBCGg9kg9kbjyIdhm0beLIh9ry+jMAnGwdTfH3qjwdAPgl40
Gg4SORoGvuz1kjCKhvtBPwzH+1uxxXm0M+jfT0ucVO4Ij/uIbeBii2kgIZBo
ACT0ZrHf96aDSHqz4RgGXAKe/XgUh33pDfv7gHACA96f7o99eKU/25/NfFAW
0LNof384Dab7s0iO94HqgT+axiO/J8fxdNiP4+lgnIzkOEoGo96oP5rKaS+c
DeNRL9kPpv0kjCOV0qDmvloloQmspqGadZwuKerZanz4qk6dtIoYiwM4Cy0q
382qe52GhV4fal3vQ4YLerRRxO7O4O0fJD8WoFdStWVkWYC7TpExWp8HhWNV
X99IdM7b66i0vI7Ox2PjwpbScgo61eU1WRMGCejQGZgCSXTTESdyWqwwQTkE
6zj0QaKEByH+64LSevNSfPfyzPMHB/DDPTMVNDVqttFJGB6Ho/1Dn46VGfYH
g8Fo1A99319PWnTMR3vIZ+OhcVgPE9fHQGyMcJZ2NpMc+b7T/IOzHnnl7Xj4
4OxHhjI8Dg/Hw5NgEJwc+n03I3Ko3jseHvZh2h6GwfF4PH56pJfs6D/dFU/j
7CHS3ggQ8U4AuOdC99ZBqTpTLrvigrllV7tOzs290qmIYufo1enugRDDaTSa
jgMfJFuUeEGQBN7Yn/bB4IfJOkv6PT8e02sHwv2gB6JYvwv2GnoWX/hp0Xrw
gQhlAiJ+lMj9cNQfjqeDgQxCuBKNQcwOozBMpOzJ3sDSbuKgpN/28HUP3/cQ
gOdC8AyIQ+fNhxyJ0Hp6d1Oz9aZaR3Vy3fuxuB0/sin75smB8Hv+gLTq494k
km5d33+BpWwmxsEgKYQHd3A6EYW0LoAXEhBXCzoAztjS5BKoo2zVcnpXAzys
AbS2sQvKHIKlU6MXGAXEE0FsRo0B+LSOoTqMjkIQ5gQn04jOq20CdFQDhEk5
+JR2xzbXf5gOnAHMAbed9SMzVdU/a6TrQy91m8d3tslBHZWppZcBaQyssASg
dEvlBjv1pOtGqenmyeaI3gWtAZRZnl/3XjEfoCaFgtHdYujLpNAfJ4QcUQS2
2oEYxEEfDI5+Lx6EfbBO93vjqDcaJH4yC2bT2XAGsikaDsH2GMxGYGkEg/Fo
AA+N5CCY9QDXRiGloXoI1kO4HgL2XMjevaB/l/BqQGG2jsLjhde9OB8/EoX7
IZKwCwIyh/8YiF8uBNG8/x8xqCnxOEGoVyf/JEkIcuiPFIUK3P2yUIWorQlr
ahjcPlFhEW/ttA6ndpobMFyLsOlTCDAuhxkKu5vLOLpeWcThNJ/DKupghCgu
8rI0XOBU5o9MZX6VrFw7jkG5Cg3BKp0KrPpHGU1YQcfHg/e+/QXMcf+XjphM
1NddpiCdN8R8Sdf9/i/OqdBOsAuPUJ1wN1T/iIfqswWrEakFWrdGo54439SO
hdDFd6q0wOQaaP7k5BeVRqqPE7dEdc4VUGjcPoFB8ACi55efH3pYAWvDh54+
4PMHFSB/PPvfTH+r3cPPg88f0OD9tc9s/cI64PvOHpjQ53jifA77k43Pg48b
aMAzOH0IfltOGGiC9/1d8O45VKAB3mg0Lq5X+Wjxmzy/XvqzOMoffIzAJvV+
+vhDVF1Hv13K395lP/z1pHzwqQGYQgh+o/0MfjiPfnp68WF8Hb5dpidnRw8+
I2C9k8GP08Pg+/3w4m+Hrw7/up/ePPhAgEdAuqf6/wapxtt47L5S/18AaUtd
fzIie45BebVmYD64iP8amf41q359tgqSb4Mo8y7+omJZVgp5lVuzX2kGLa4O
+cyXGyOmdBWoe2Vd4Mq64E+XdTP18Rr+q93Dz6Nl3eyBn8fKutE9n8fKuvf3
fB4r63665/NYWVdd/dq/SZMPV6NovMz65yN//8PHxSyP8nnvejx7pKw7/Pvh
+WL+5ocPJy8vrl/8+kO2uJq8+u5j+uHV0eTNI2Vd/6fi1+u/Zu+CF5PB9elN
8f3LV6sfzi5Pf/zbVfVIWRd9f3785mweVAs5nZV//3jypj+9vjq/GfvvHynr
HgTpQbLuzd7WzyNl3Zuft34eKeuOP279PE7W/euvt18H7xe//taV7/7l4reX
vwWjl4tV9KO/JuuCO2Rd0Czr/h/vV+48Ra8AAA==

-->

</rfc>

