<?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.22 (Ruby 3.3.4) -->
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-cbor-edn-literals-15" category="std" consensus="true" submissionType="IETF" updates="8610, 8949" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title>CBOR Extended Diagnostic Notation (EDN)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-literals-15"/>
    <author initials="C." surname="Bormann" fullname="Carsten Bormann">
      <organization>Universität Bremen TZI</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Bremen</city>
          <code>D-28359</code>
          <country>Germany</country>
        </postal>
        <phone>+49-421-218-63921</phone>
        <email>cabo@tzi.org</email>
      </address>
    </author>
    <date year="2025" month="January" day="08"/>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 114?>

<t>This document formalizes and consolidates the definition of the Extended
Diagnostic Notation (EDN) of the Concise Binary Object Representation
(CBOR), addressing implementer experience.</t>
      <t>Replacing EDN's previous informal descriptions, it updates
RFC 8949, obsoleting its Section 8, and RFC 8610, obsoleting its
Appendix G.</t>
      <t>It also specifies and uses registry-based extension points, using one
to support text representations of epoch-based dates/times and of IP
addresses and prefixes.</t>
      <t><cref anchor="status">(This cref will be removed by the RFC editor:)<br/>
The present revision (–15) addresses the first half of the WGLC
comments, except for the issues around the specific way how to best
achieve pluggable ABNF grammars for application-extensions.
It is intended for use as a reference document for the mid-WGLC
CBOR WG interim meeting on 2025-01-08.</cref></t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cbor-wg.github.io/edn-literal/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-cbor-edn-literals/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        cbor Working Group mailing list (<eref target="mailto:cbor@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cbor/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cbor/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cbor-wg/edn-literal"/>.</t>
    </note>
  </front>
  <middle>
    <?line 138?>

<section anchor="intro">
      <name>Introduction</name>
      <t>The Concise Binary Object Representation (CBOR) (RFC8949) <xref target="STD94"/>
    is a data format whose design goals include the possibility of
    extremely small code size, fairly small message size, and
    extensibility without the need for version negotiation.
In addition to the binary interchange format, the original CBOR specification
    described a text-based "diagnostic notation" (<xref section="6" sectionFormat="of" target="RFC7049"/>, now Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>), in
    order to be able to converse about CBOR data items without having
    to resort to binary data.
<xref section="G" sectionFormat="of" target="RFC8610"/> extended this into what is also known as
Extended Diagnostic Notation (EDN).</t>
      <t>Diagnostic notation syntax is based on JSON, with extensions
for representing CBOR constructs such as binary data and tags.</t>
      <t>Standardizing EDN in addition to the actual binary interchange format CBOR does
not serve to create a competing interchange format, but enables the use of
a shared diagnostic notation in tools for and in documents about CBOR.
Still, between tools for CBOR development and diagnosis, document
generation systems, continuous integration (CI)
environments, configuration files, and user interfaces for viewing and
editing for all these, EDN is often "interchanged" and therefore
merits a specification that facilitates interoperability within this
domain as well as reliable translation to and from CBOR.
EDN is not designed or intended for general-purpose use in protocol
elements exchanged between systems engaged in processes outside those
listed here.</t>
      <t>​This document consolidates and formalizes the definition of EDN,
providing a formal grammar (see <xref target="grammar"/> and <xref target="app-grammars"/>), and
incorporating small changes based on implementation experience.
It updates <xref target="RFC8949"/>, obsoleting Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
<xref target="RFC8610"/>, obsoleting <xref section="G" sectionFormat="of" target="RFC8610"/>.
It is intended to serve as a single reference target that can be used
in specifications that use EDN.</t>
      <t>It also specifies two registry-based extension points for the
diagnostic notation:
one for additional encoding indicators, and
one for adding application-oriented literal forms.
It uses these registries to add encoding indicators for a more
complete coverage of encoding variation,
and to add two application-oriented literal forms that enhance EDN with text
representations of epoch-based date/times and of IP addresses
and prefixes <xref target="RFC9164"/>.</t>
      <t>In addition, this document registers a media type identifier
and a content-format for CBOR diagnostic notation.  This does not
elevate its status as an interchange format, but recognizes that
interaction between tools is often smoother if media types can be used.</t>
      <aside>
        <t>Examples in RFCs often do not use media type identifiers, but
special sourcecode type names that are allocated
in <eref target="https://www.rfc-editor.org/materials/sourcecode-types.txt">https://www.rfc-editor.org/materials/sourcecode-types.txt</eref>.
At the time of writing, this resource lists four sourcecode type
names that can be used in RFCs for including CBOR data items and
CBOR-related languages:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cbor</tt> (which is actually not useful, as CBOR is a binary format
and cannot be used in textual examples in an RFC),</t>
          </li>
          <li>
            <t><tt>cbor-diag</tt> (which is another name for EDN, as defined in the
present document),</t>
          </li>
          <li>
            <t><tt>cbor-pretty</tt> (which is a possibly annotated and pretty-printed
hexdump of an encoded CBOR data item, along the lines of the
grammar of <xref target="h-grammar"/>, as used for instance for some of the examples
in <xref section="A.3" sectionFormat="of" target="RFC9290"/>), and</t>
          </li>
          <li>
            <t><tt>cddl</tt> (which is used for the Concise Data Definition Language,
CDDL, see <xref target="terminology"/> below).</t>
          </li>
        </ul>
      </aside>
      <t>Note that EDN is not meant to be the only text-based representation of
CBOR data items.
For instance, <xref target="YAML"/> <xref target="RFC9512"/> is able to represent most CBOR
data items, possibly requiring use of YAML's extension points.
YAML does not provide certain features that can be useful with tools
and documents needing text-based representations of CBOR data items
(such as embedded CBOR or encoding indicators),
but it does provide a host of other features that EDN does not provide
such as anchor/alias data sharing, at a cost of higher implementation
and learning complexity.</t>
      <section anchor="structure-of-this-document">
        <name>Structure of This Document</name>
        <t><xref target="diagnostic-notation"/> of this document has been built from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/>.
The latter provided a number of useful extensions to the
diagnostic notation originally defined in <xref section="6" sectionFormat="of" target="RFC7049"/>.
Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> and <xref section="G" sectionFormat="of" target="RFC8610"/> have
collectively been called "Extended Diagnostic Notation" (EDN), giving
the present document its name.
<!--
Similarly, this notation could be extended in a separate document to
provide documentation for NaN payloads, which are not covered in this document.
-->
        </t>
        <t>After introductory material, <xref target="app-lit"/>
introduces the concept of application-oriented extension literals and
defines the "dt" and "ip" extensions.
<xref target="stand-in"/> defines mechanisms
for dealing with unknown application-oriented literals and
deliberately elided information.
<xref target="grammars"/> gives the formal syntax of EDN in ABNF, with
explanations for some features of and additions to this syntax, as an
overall grammar (<xref target="grammar"/>) and specific grammars for the content of
app-string and byte-string literals (<xref target="app-grammars"/>).
This is followed by the conventional sections
for
<xref format="title" target="sec-iana"/> (<xref format="counter" target="sec-iana"/>),
<xref format="title" target="seccons"/> (<xref format="counter" target="seccons"/>),
and References (<xref format="counter" target="sec-normative-references"/>, <xref format="counter" target="sec-informative-references"/>).
An informational comparison of EDN with CDDL follows in
<xref target="edn-and-cddl"/>, and some implementation considerations for integrating
specific ABNF grammars into the overall ABNF grammar in <xref target="squash"/>.</t>
      </section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> defines the original CBOR diagnostic notation,
and <xref section="G" sectionFormat="of" target="RFC8610"/> supplies a number of extensions to the
diagnostic notation that result in the Extended Diagnostic Notation
(EDN).
The diagnostic notation extensions include popular features such as
embedded CBOR (encoded CBOR data items in byte strings) and comments.
A simple diagnostic notation extension that enables representing CBOR
sequences was added in <xref section="4.2" sectionFormat="of" target="RFC8742"/>.
As diagnostic notation is not used in the kind of interchange
situations where backward compatibility would pose a significant
obstacle, there is little point in not using these extensions; as at
least some elements of the extended form are now near-universally
used, the terms "diagnostic notation" and "EDN" have become
synonyms in the context of CBOR.</t>
        <t>Therefore, when we refer to "<em>diagnostic notation</em>", we mean to
include the original notation from Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> as well as the
extensions from <xref section="G" sectionFormat="of" target="RFC8610"/>, <xref section="4.2" sectionFormat="of" target="RFC8742"/>, and the
present document.
However, we stick to the abbreviation "<em>EDN</em>" as it has become quite
popular and is more sharply distinguishable from other meanings than
"DN" would be.</t>
        <t>In a similar vein, the term "ABNF" in this document refers to the
language defined in <xref target="STD68"/> as extended in <xref target="RFC7405"/>, where the
"characters" of Section <xref target="RFC5234" section="2.3" sectionFormat="bare"/> of RFC 5234 <xref target="STD68"/> are Unicode scalar values.</t>
        <t>The term "CDDL" (Concise Data Definition Language) refers to the data
definition language defined in
<xref target="RFC8610"/> and its registered extensions (such as those in <xref target="RFC9165"/>), as
well as <xref target="I-D.ietf-cbor-update-8610-grammar"/>.
Additional information about the relationship between the two
languages EDN and CDDL is captured in <xref target="edn-and-cddl"/>.</t>
        <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 <xref target="BCP14"/> (<xref target="RFC2119"/>) (<xref target="RFC8174"/>) when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="non-objectives-of-this-document">
        <name>(Non-)Objectives of this Document</name>
        <t>Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> states the objective of defining a
common human-readable diagnostic notation with CBOR.
In particular, it states:</t>
        <blockquote>
          <t>All actual interchange always happens in the binary format.</t>
        </blockquote>
        <t>One important application of EDN is the notation of CBOR data for
humans: in specifications, on whiteboards, and for entering test data.
A number of features, such as comments inside prefixed string literals, are mainly
useful for people-to-people communication via EDN.
Programs also often output EDN for diagnostic purposes, such as in
error messages or to enable comparison (including generation of diffs
via tools) with test data.</t>
        <t>For comparison with test data, it is often useful if different
implementations generate the same (or similar) output for the same
CBOR data items.
This is comparable to the objectives of deterministic serialization
for CBOR data items themselves (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).
However, there are even more representation variants in EDN than in
binary CBOR, and there is little point in specifically endorsing a
single variant as "deterministic" when other variants may be more
useful for human understanding, e.g., the <tt>&lt;&lt; &gt;&gt;</tt> notation as
opposed to <tt>h''</tt>; an EDN generator may have quite a few options
that control what presentation variant is most desirable for the
application that it is being used for.</t>
        <t>Because of this, a deterministic representation is not defined for
EDN, and there is no expectation for "roundtripping" from EDN to
CBOR and back, i.e., for an ability
to convert EDN to binary CBOR and back to EDN while achieving exactly
the same result as the original input EDN — the original EDN possibly
was created by humans or by a different EDN generator.</t>
        <t>However, there is a certain expectation that EDN generators can be
configured to some basic output format, which:</t>
        <ul spacing="normal">
          <li>
            <t>looks like JSON where that is possible;</t>
          </li>
          <li>
            <t>inserts encoding indicators only where the binary form differs from
preferred encoding;</t>
          </li>
          <li>
            <t>uses hexadecimal representation (<tt>h''</tt>) for byte strings, not
<tt>b64''</tt> or embedded CBOR (<tt>&lt;&lt;&gt;&gt;</tt>);</t>
          </li>
          <li>
            <t>does not generate elaborate blank space (newlines, indentation) for
pretty-printing, but does use common blank spaces such as after <tt>,</tt>
and <tt>:</tt>.</t>
          </li>
        </ul>
        <t>Additional features such as consistently selecting the unescaped or an
escaped (ASCII equivalent) forms of characters in strings, ensuring
deterministic map ordering (Section <xref target="RFC8949" section="4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) on output,
or even deviating from the basic
configuration in some systematic way, can further assist in comparing
test data.
Information obtained from a CDDL model can help in choosing
application-oriented literals or specific string representations such
as embedded CBOR or <tt>b64''</tt> in the appropriate places.</t>
      </section>
    </section>
    <section anchor="diagnostic-notation">
      <name>Overview over CBOR Extended Diagnostic Notation (EDN)</name>
      <t>CBOR is a binary interchange format.  To facilitate documentation and
debugging, and in particular to facilitate communication between
entities cooperating in debugging, this document defines a simple
human-readable diagnostic notation.  All actual interchange always
happens in the binary format.</t>
      <t>Note that diagnostic notation truly was designed as a diagnostic
format; it originally was not meant to be parsed.
Therefore, no formal definition (as in ABNF) was given in the original
documents.
Recognizing that formal grammars can aid interoperation of tools and
usability of documents that employ EDN, <xref target="grammars"/> now provides ABNF
definitions.</t>
      <t>EDN is a true superset of JSON as it is defined in <xref target="STD90"/> in
conjunction with <xref target="RFC7493"/> (that is, any interoperable <xref target="RFC7493"/> JSON
text also is an EDN text), extending it both to cover the greater
expressiveness of CBOR and to increase its usability.</t>
      <t>EDN borrows the JSON syntax for numbers (integer and
floating-point, <xref target="numbers"/>), certain simple values (<xref target="simple-values"/>),
UTF-8 <xref target="STD63"/> text
strings, arrays, and maps (maps are called objects in JSON; the
diagnostic notation extends JSON here by allowing any data item in the
map key position).</t>
      <t>As EDN is used for truly diagnostic purposes, its implementations <bcp14>MAY</bcp14>
support generation and possibly ingestion of EDN for CBOR data items
that are well-formed but not valid.
It is <bcp14>RECOMMENDED</bcp14> that an implementation enables such usage only
explicitly by an API flag.
Validity of CBOR data items is discussed in Section <xref target="RFC8949" section="5.3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with basic validity discussed in Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, and
tag validity discussed in Section <xref target="RFC8949" section="5.3.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.
Tag validity is more likely a subject for individual
application-oriented extensions, while the two cases of basic validity
(for text strings and for maps) are addressed in Sections
<xref format="counter" target="text-validity"/> and <xref format="counter" target="map-validity"/> under the heading
of <em>validity</em>.</t>
      <t>The rest of this section provides an overview over specific features
of EDN, starting with certain common syntactical features and then
going through kinds of CBOR data items roughly in the order of CBOR major
types.
Any additional detailed syntax discussion needed has been deferred to
<xref target="grammar"/>.</t>
      <section anchor="comments">
        <name>Comments</name>
        <t>For presentation to humans, EDN text may benefit from comments.
JSON famously does not provide for comments, and the original
diagnostic notation in <xref section="6" sectionFormat="of" target="RFC7049"/> inherited this property.</t>
        <t>EDN now provides two comment syntaxes, which can be used where the
syntax allows blank space (outside of constructs such as numbers,
string literals, etc.):</t>
        <ul spacing="normal">
          <li>
            <t>inline comments, delimited by slashes ("<tt>/</tt>"):  </t>
            <t>
In a position that allows blank space, any text within and including
a pair of slashes is considered blank space (and thus effectively a
comment).</t>
          </li>
          <li>
            <t>end-of-line comments, delimited by "<tt>#</tt>" and an end of line (LINE
FEED, U+000A):  </t>
            <t>
In a position that allows blank space, any text within and including
a pair of a "<tt>#</tt>" and the end of the line is considered blank space
(and thus effectively a comment).</t>
          </li>
        </ul>
        <t>Comments can be used to annotate a CBOR structure as in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
/grasp-message/ [/M_DISCOVERY/ 1, /session-id/ 10584416,
                 /objective/ [/objective-name/ "opsonize",
                              /D, N, S/ 7, /loop-count/ 105]]
]]></sourcecode>
        <t>or, combining the use of inline and end-of-line comments:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{
 /kty/ 1 : 4, # Symmetric
 /alg/ 3 : 5, # HMAC 256-256
  /k/ -1 : h'6684523ab17337f173500e5728c628547cb37df
             e68449c65f885d1b73b49eae1'
}
]]></sourcecode>
      </section>
      <section anchor="encoding-indicators">
        <name>Encoding Indicators</name>
        <t>Sometimes it is useful to indicate in the diagnostic notation which of
several alternative representations were actually used; for example, a
data item written &gt;1.5&lt; by a diagnostic decoder might have been
encoded as a half-, single-, or double-precision float.</t>
        <t>The convention for encoding indicators is that anything starting with
an underscore and all immediately following characters that are alphanumeric or
underscore is an encoding indicator, and can be ignored by anyone not
interested in this information.  For example, <tt>_</tt> or <tt>_3</tt>.
Encoding indicators are always
optional.</t>
        <t>(In the following, an abbreviation of the form <tt>ai=</tt>nn gives nn as
the numeric value of the field <em>additional information</em>, the low-order 5
bits of the initial byte: see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.)</t>
        <t>An underscore followed by a decimal digit <tt>n</tt> indicates that the
preceding item (or, for arrays and maps, the item starting with the
preceding bracket or brace) was encoded with an additional information
value of <tt>ai=</tt>24+<tt>n</tt>.  For example, <tt>1.5_1</tt> is a half-precision floating-point
number, while <tt>1.5_3</tt> is encoded as double precision.
<!--
This encoding
indicator is not shown in {{examples}}.
 -->
        </t>
        <t>The encoding indicator <tt>_</tt> is an abbreviation of what would in full
form be <tt>_7</tt>, which is not used.
Therefore, an underscore <tt>_</tt> on its own stands for indefinite length
encoding (<tt>ai=31</tt>).
(Note that this encoding indicator is only available behind the opening
brace/bracket for <tt>map</tt> and <tt>array</tt> (<xref target="ei-container"/>): strings have a special syntax
<tt>streamstring</tt> for indefinite length encoding except for the special
cases ''_ and ""_ (<xref target="ei-string"/>).)</t>
        <t>The encoding indicators <tt>_0</tt> to <tt>_3</tt> can be used to indicate <tt>ai=24</tt>
to <tt>ai=27</tt>, respectively; they therefore stand for 1, 2, 4, and 8
bytes of additional information (ai) following the initial byte in the
head of the data item.
(The abbreviation of <tt>_7</tt> into <tt>_</tt> was discussed above.
<tt>_4</tt> to <tt>_6</tt> are not currently used in CBOR, but will be available if
and when CBOR is extended to make use of <tt>ai=28</tt> to <tt>ai=30</tt>.)</t>
        <t>Surprisingly, Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> does not address <tt>ai=0</tt> to
<tt>ai=23</tt> — the assumption seems to have been that preferred serialization
(Section <xref target="RFC8949" section="4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>) will be used when converting CBOR
diagnostic notation to an encoded CBOR data item, so leaving out the
encoding indicator for a data item with a preferred serialization
will implicitly use <tt>ai=0</tt> to <tt>ai=23</tt> if that is possible.
The present specification allows making this explicit:</t>
        <t><tt>_i</tt> ("immediate") stands for encoding with <tt>ai=0</tt> to <tt>ai=23</tt>.</t>
        <t>While no pressing use for further values for encoding indicators
comes to mind, this is an extension point for EDN; <xref target="reg-ei"/> defines
a registry for additional values.</t>
        <t>Encoding Indicators are discussed in further detail in <xref target="ei-string"/> for
indefinite length strings and in <xref target="ei-container"/> for arrays and maps.</t>
      </section>
      <section anchor="numbers">
        <name>Numbers</name>
        <!--
## Hexadecimal, Octal, and Binary Numbers {#hexadecimal-octal-and-binary-numbers}
 -->

<t>In addition to JSON's decimal number literals, EDN provides hexadecimal, octal,
and binary number literals in the usual C-language notation (octal with 0o
prefix present only).</t>
        <t>The following are equivalent:</t>
        <sourcecode type="cbor-diag"><![CDATA[
   4711
   0x1267
   0o11147
   0b1001001100111
]]></sourcecode>
        <t>As are:</t>
        <sourcecode type="cbor-diag"><![CDATA[
   1.5
   0x1.8p0
   0x18p-4
]]></sourcecode>
        <t>Numbers composed only of digits (of the respective base) are
interpreted as CBOR integers (major type 0/1, or where the number
cannot be represented in this way, major type 6 with tag 2/3).
A leading "<tt>+</tt>" sign is a no-op, and a leading "<tt>-</tt>" sign inverts the
sign of the number.
So <tt>0</tt>, <tt>000</tt>, <tt>+0</tt> all represent the same integer zero, as does <tt>-0</tt>.
Similarly,
<tt>1</tt>, <tt>001</tt>, <tt>+1</tt> and <tt>+0001</tt> all stand for the same integer one, and
<tt>-1</tt> and <tt>-0001</tt> both designate the same integer minus one.</t>
        <t>Using a decimal point (<tt>.</tt>) and/or an exponent (<tt>e</tt> for decimal, <tt>p</tt>
for hexadecimal) turns the number into a floating point number (major
type 7) instead, irrespective of whether it is an integral number
mathematically.
Note that, in floating point numbers, <tt>0.0</tt> is not the same number as
<tt>-0.0</tt>, even if they are mathematically equal.</t>
        <t>The non-finite floating-point numbers <tt>Infinity</tt>, <tt>-Infinity</tt>, and <tt>NaN</tt> are
written exactly as in this sentence (this is also a way they can be
written in JavaScript, although JSON does not allow them).</t>
        <t>See <xref target="decnumber"/> for additional details of the EDN number syntax.</t>
        <t>(Note that literals for further number formats, e.g., for representing
rational numbers as fractions, or for NaNs with non-zero payloads, can
be added as application-oriented literals.
Background information beyond that in <xref target="STD94"/> about the representation
of numbers in CBOR can be found in the informational document
<xref target="I-D.bormann-cbor-numbers"/>.)</t>
      </section>
      <section anchor="strings">
        <name>Strings</name>
        <t>CBOR distinguishes two kinds of strings: text strings (the bytes in
the string constitute UTF-8 <xref target="STD63"/> text, major type 3), and byte strings
(CBOR does not further characterize the bytes that constitute the
string, major type 2).</t>
        <t>EDN notates text strings in a form compatible to that of notating text
strings in JSON (i.e., as a double-quoted string literal), with a
number of usability extensions.
In JSON, no control characters are allowed to occur
directly in text string literals; if needed, they can be specified using
escapes such as <tt>\t</tt> or <tt>\r</tt>.
In EDN, string literals additionally can contain newlines (LINEFEED
U+000A), which are copied into the resulting string like other
characters in the string literal.
To deal with variability in platform presentation of newlines, any
carriage return characters (U+000D) that may be present in the EDN
string literal are not copied into the resulting string (see <xref target="cr"/>).
No other control characters can occur directly in a string literal,
and the handling of escaped characters (<tt>\r</tt> etc.) is as in JSON.</t>
        <t>JSON's escape scheme for characters that are not on Unicode's basic
multilingual plane (BMP) is cumbersome (see Section <xref target="RFC8259" section="7" sectionFormat="bare"/> of RFC 8259 <xref target="STD90"/>).
EDN keeps it, but also adds the syntax <tt>\u{NNN}</tt> where NNN is the
Unicode scalar value as a hexadecimal number.
This means the following are equivalent (the first <tt>o</tt> is escaped as
<tt>\u{6f}</tt> for no particular reason):</t>
        <sourcecode type="cbor-diag"><![CDATA[
"D\u{6f}mino's \u{1F073} + \u{2318}"   # \u{}-escape 3 chars
"Domino's \uD83C\uDC73 + \u2318"       # escape JSON-like
"Domino's 🁳 + ⌘"                       # unescaped
]]></sourcecode>
        <t>EDN adds a number of ways to notate byte strings, some of which
provide detailed access to the bits within those bytes (see
<xref target="encoded-byte-strings"/>).
However, quite often, byte strings carry bytes that can be meaningfully
notated as UTF-8 text.
Analogously to text string literals delimited by double quotes, EDN
allows the use of single quotes (without a prefix) to express byte
string literals with UTF-8 text; for instance, the following are
equivalent:</t>
        <artwork><![CDATA[
'hello world'
h'68656c6c6f20776f726c64'
]]></artwork>
        <t>The escaping rules of JSON strings are applied equivalently for
text-based byte string literals, e.g., <tt>\\</tt> stands for a single
backslash and <tt>\'</tt> stands for a single quote.
(See <xref target="concat"/> for details.)</t>
        <section anchor="prefixed-lit">
          <name>Prefixed String Literals</name>
          <t>Single-quoted string literals can be prefixed by a sequence of ASCII
letters and digits, starting with a letter, and using either lower
case or upper case throughout.
&gt;false&lt;, &gt;true&lt;, &gt;null&lt;, and &gt;undefined&lt; cannot be used as such
prefixes.
This means that the text string value (the "content") of the single-quoted string
literal is not used directly as a byte string, but is further
processed in a way that is defined by the meaning given to the prefix.
Depending on the prefix, the result of that processing can, but need
not be, a byte string value.</t>
          <t>Prefixed string literals (which are always single-quoted after the
prefix) are used both for base-encoded byte string literals (see <xref target="encoded-byte-strings"/>) and for
application-oriented extension literals (see <xref target="app-lit"/>, called app-string).
(Additional base-encoded string literals can be defined as
application-oriented extension literals by registering their prefixes;
there is no fundamental difference between the two predefined
base-encoded string literal prefixes (<tt>h</tt>, <tt>b64</tt>) and any such potential
future extension literal prefixes.)</t>
        </section>
        <section anchor="ei-string">
          <name>Encoding Indicators of Strings</name>
          <t>The detailed chunk structure of byte and text strings encoded with
indefinite length can be
notated in the form (_ h'0123', h'4567') and (_ "foo", "bar").
However, for an indefinite-length string with no chunks inside, (_ )
would be ambiguous as to whether a byte string (encoded 0x5fff) or a text string
(encoded 0x7fff) is meant and is therefore not used.
The basic forms <tt>''_</tt> and <tt>""_</tt> can be used instead and are reserved for
the case of no chunks only --- not as short forms for the (permitted,
but not really useful) encodings with only empty chunks, which
need to be notated as (_ ''), (_ ""), etc.,
to preserve the chunk structure.</t>
        </section>
        <section anchor="encoded-byte-strings">
          <name>Base-Encoded Byte String Literals</name>
          <t>Besides the unprefixed byte string literals that are analogous to JSON text
string literals, EDN provides base-encoded byte string literals.
These are notated as prefixed string literals that carry one of the base encodings <xref target="RFC4648"/>, without
padding, i.e., the base encoding is
enclosed in a single-quoted string literal, prefixed by &gt;h&lt; for base16 or
&gt;b64&lt; for base64 or base64url (the actual encodings of the latter do
not overlap, so the string remains unambiguous).
For example, the byte string consisting of the four bytes <tt>12 34 56 78</tt>
(given in hexadecimal here) could be written <tt>h'12345678'</tt> or <tt>b64'EjRWeA'</tt>.</t>
          <t>(Note that Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> also mentions &gt;b32&lt; for
base32 and &gt;h32&lt; for base32hex.
This has not been implemented widely
and therefore is not directly included in this specification.
These and further byte string formats now can easily be added back as
application-oriented extension literals.)</t>
          <t>Examples often benefit from some blank space (spaces, line breaks) in
byte strings.  In EDN, blank space is ignored in prefixed byte strings; for
instance, the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   h'48656c6c6f20776f726c64'
   h'48 65 6c 6c 6f 20 77 6f 72 6c 64'
   h'4 86 56c 6c6f
     20776 f726c64'
]]></sourcecode>
          <t>Note that the internal syntax of prefixed single-quote literals such
as h'' and b64'' can allow comments as blank space (see <xref target="comments"/>).
Since slash characters are allowed in b64'', only inline comments are
available in b64 string literals.</t>
          <sourcecode type="cbor-diag"><![CDATA[
   h'68656c6c6f20776f726c64'
   h'68 65 6c /doubled l!/ 6c 6f # hello
     20 /space/
     77 6f 72 6c 64' /world/
]]></sourcecode>
        </section>
        <section anchor="embedded-cbor-and-cbor-sequences-in-byte-strings">
          <name>Embedded CBOR and CBOR Sequences in Byte Strings</name>
          <t>Where a byte string is to carry an embedded CBOR-encoded item, or more
generally a sequence of zero or more such items, the diagnostic
notation for these zero or more CBOR data items, separated by commas,
can be enclosed in <tt>&lt;&lt;</tt> and <tt>&gt;&gt;</tt> to notate the byte string
resulting from encoding the data items and concatenating the result.
For
instance, each pair of columns in the following are equivalent:</t>
          <sourcecode type="cbor-diag"><![CDATA[
   <<1>>              h'01'
   <<1, 2>>           h'0102'
   <<"hello", null>>  h'65 68656c6c6f f6'
   <<>>               h''
]]></sourcecode>
        </section>
        <section anchor="text-validity">
          <name>Validity of Text Strings</name>
          <t>To be valid CBOR, Section <xref target="RFC8949" section="5.3.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/> requires that text
strings are byte sequences in UTF-8 <xref target="STD63"/> form.
EDN provides several ways to construct such byte strings (see <xref target="concat"/>
for details).
These mechanisms might operate on subsequences that do not themselves
constitute UTF-8, e.g., by building larger sequences out of
concatenating the subsequences; for validity of a text string
resulting from these mechanisms it is only of importance that the
result is UTF-8.
Both double-quoted and single-quoted string literals have been defined
such that they lead to byte sequences that are UTF-8: the source
language of EDN is UTF-8, and all escaping mechanisms lead only to
adding further UTF-8 characters.
Only prefixed string literals can generate non-UTF-8 byte sequences.</t>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, EDN
implementations <bcp14>MAY</bcp14> support generation and possibly ingestion of EDN
for CBOR data items that are well-formed but not valid; when this is
enabled, such implementations <bcp14>MAY</bcp14> relax the requirement on text
strings to be valid UTF-8.</t>
          <t>Note that neither CBOR about its text strings nor EDN about its source
language make any requirements except for conformance to <xref target="STD63"/>.
No additional Unicode processing or validation such as normalization
or checking whether a scalar value is actually assigned is foreseen by
EDN, particularly not any processing that is dependent on a specific
Unicode version.
Such processing, if offered, <bcp14>MUST NOT</bcp14> get in the way of processing the
data item represented in EDN (i.e., it may be appropriate to issue
warnings but not to error out or generate output that does not match
the input at the UTF-8 level).</t>
          <!--
## Concatenated Strings {#concatenated-strings}

While the ability to include whitespace enables line-breaking of
encoded byte strings, a mechanism is needed to be able to include
text strings as well as byte strings in direct UTF-8 representation
into line-based documents (such as RFCs and source code).

We extend the diagnostic notation by allowing multiple text strings or
multiple byte strings to be notated separated by whitespace; these
are then concatenated into a single text or byte string, respectively.
Text strings and byte strings do not mix within such a
concatenation, except that byte string notation can be used inside a
sequence of concatenated text string notation to encode characters
that may be better represented in an encoded way.  The following four
values are equivalent:


~~~~
   "Hello world"
   "Hello " "world"
   "Hello" h'20' "world"
   "" h'48656c6c6f20776f726c64' ""
~~~~

Similarly, the following byte string values are equivalent:


~~~~
   'Hello world'
   'Hello ' 'world'
   'Hello ' h'776f726c64'
   'Hello' h'20' 'world'
   '' h'48656c6c6f20776f726c64' '' b64''
   h'4 86 56c 6c6f' h' 20776 f726c64'
~~~~

(Note that the approach of separating by whitespace, while familiar
from the C language, requires some attention — a single comma makes a
big difference here.)

-->

</section>
      </section>
      <section anchor="arrays-and-maps">
        <name>Arrays and Maps</name>
        <t>EDN borrows the JSON syntax for arrays and maps.
(Maps are called objects in JSON.)</t>
        <t>For maps, EDN extends the JSON syntax by allowing any data item in the
map key position (before the colon).</t>
        <t>JSON requires the use of a comma as a separator character between
the elements of an array as well as between the members (key/value
pairs) of a map.
(These commas also were required in the original diagnostic
notation defined in <xref target="STD94"/> and <xref target="RFC8610"/>.)
The separator commas are now optional in the places where EDN syntax
allows commas.
(Stylistically, leaving out the commas is more idiomatic when they
occur at line breaks.)</t>
        <t>In addition, EDN also allows, but does not require, a trailing comma before the closing bracket/brace,
enabling an easier to maintain "terminator" style of their use.</t>
        <t>In summary, the following eight examples are all equivalent:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 3]
[1, 2, 3,]
[1  2  3]
[1  2  3,]
[1  2, 3]
[1  2, 3,]
[1, 2  3]
[1, 2  3,]
]]></sourcecode>
        <t>as are</t>
        <sourcecode type="cbor-diag"><![CDATA[
{1: "n", "x": "a"}
{1: "n", "x": "a",}
{1: "n"  "x": "a"}
# etc.
]]></sourcecode>
        <aside>
          <t>CDDL's comma separators in the equivalent contexts (CDDL groups) are
  entirely optional
  (and actually are terminators, which together with their optionality
  allows them to be used like separators as well, or even not at all).
  In summary, comma use is now aligned between EDN and CDDL, in a
  fully backwards compatible way.</t>
        </aside>
        <section anchor="ei-container">
          <name>Encoding Indicators of Arrays and Maps</name>
          <t>A single underscore can be written after the opening brace of a map or
the opening bracket of an array to indicate that the data item was
represented in indefinite-length format.  For example, <tt>[_ 1, 2]</tt>
contains an indicator that an indefinite-length representation was
used to represent the data item <tt>[1, 2]</tt>.</t>
          <t>At the same position, encoding indicators for specifying the size of
the array or map head for definite-length format can be used instead,
specifically <tt>_i</tt> or <tt>_0</tt> to <tt>_3</tt>.  For example <tt>[_0 false, true]</tt> can be
used to specify the encoding of the array <tt>[false, true]</tt> as <tt>98 02 f4 f5</tt>.</t>
        </section>
        <section anchor="map-validity">
          <name>Validity of Maps</name>
          <t>As discussed at the start of <xref target="diagnostic-notation"/>, EDN implementations <bcp14>MAY</bcp14> support
generation and possibly ingestion of EDN for CBOR data items that are
well-formed but not valid.</t>
          <t>For maps, this is relevant for map keys that occur more than once, as in:</t>
          <sourcecode type="cbor-diag"><![CDATA[
{1: "to", 1: "fro"}
]]></sourcecode>
        </section>
      </section>
      <section anchor="tags">
        <name>Tags</name>
        <t>A tag is
written as a decimal unsigned integer for the tag number, followed by the tag content
in parentheses; for instance, a date in the format specified by RFC 3339
(ISO 8601) could be
notated as:</t>
        <t indent="5">0("2013-03-21T20:04:00Z")</t>
        <t>or the equivalent epoch-based time as the following:</t>
        <t indent="5">1(1363896240)</t>
        <t>The tag number can be followed by an encoding indicator giving the
encoding of the tag head.  For example:</t>
        <t indent="5">1_1(1363896240)</t>
        <t>(assuming preferred encoding for the tag content) is encoded as</t>
        <sourcecode type="cbor-pretty"><![CDATA[
d9 0001        # tag(1)
   1a 514b67b0 # unsigned(1363896240)
]]></sourcecode>
      </section>
      <section anchor="simple-values">
        <name>Simple values</name>
        <t>EDN uses JSON syntax for the simple values True (&gt;<tt>true</tt>&lt;), False
(&gt;<tt>false</tt>&lt;), and Null (&gt;<tt>null</tt>&lt;).
Undefined is written &gt;<tt>undefined</tt>&lt; as in JavaScript.</t>
        <t>These and all other simple values can be given as "simple()" with the
appropriate integer in the parentheses.  For example, &gt;<tt>simple(42)</tt>&lt;
indicates major type 7, value 42, and &gt;<tt>simple(0x14)</tt>&lt; indicates
&gt;<tt>false</tt>&lt;, as does &gt;<tt>simple(20)</tt>&lt; or &gt;<tt>simple(0b10100)</tt>&lt;.</t>
      </section>
    </section>
    <section anchor="app-lit">
      <name>Application-Oriented Extension Literals</name>
      <t>This document extends the syntax used in diagnostic notation for byte
string literals to also be available for application-oriented extensions.</t>
      <t>As per Section <xref target="RFC8949" section="8" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>, the diagnostic notation can notate byte
strings in a number of <xref target="RFC4648"/> base encodings, where the encoded text
is enclosed in single quotes, prefixed by an identifier (»h« for
base16, »b32« for base32, »h32« for base32hex, »b64« for base64 or
base64url).</t>
      <t>This syntax can be thought to establish a name space, with the names
"h", "b32", "h32", and "b64" taken, but other names being unallocated.
The present specification defines additional names for this namespace,
which we call <em>application-extension identifiers</em>.
For the quoted string, the same rules apply as for byte strings.
In particular, the escaping rules that were adapted from JSON strings
are applied
equivalently for application-oriented extensions, e.g., within the
quoted string <tt>\\</tt> stands
for a single backslash and <tt>\'</tt> stands for a single quote.</t>
      <t>An application-extension identifier is a name consisting of a
lower-case ASCII letter (a-z) and zero or more additional ASCII
characters that are either lower-case letters or digits (a-z0-9).</t>
      <t>Application-extension identifiers are registered in a registry
(<xref target="appext-iana"/>).</t>
      <t>Prefixing a single-quoted string, an application-extension identifier
is used to build an application-oriented extension literal, which
stands for a CBOR data item the value of which is derived from the
text given in the single-quoted string using a procedure defined in
the specification for an application-extension identifier.</t>
      <t>An application-extension (such as <tt>dt</tt>) <bcp14>MAY</bcp14> also define the meaning of
a variant prefix built out of the application-extension identifier by
replacing each lower-case character by its upper-case counterpart (such
as <tt>DT</tt>), for building an application-oriented extension literal using
that all-uppercase variant as the prefix of a single-quoted string.</t>
      <t>As a convention for such definitions, using the all-uppercase variant
implies making use of a tag appropriate for this application-oriented
extension (such as tag number 1 for <tt>DT</tt>).</t>
      <t>Examples for application-oriented extensions to CBOR diagnostic
notation can be found in the following sections.</t>
      <section anchor="dt">
        <name>The "dt" Extension</name>
        <t>The application-extension identifier "dt" is used to notate a
date/time literal that can be used as an Epoch-Based Date/Time as per
Section <xref target="RFC8949" section="3.4.2" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The text of the literal is a Standard Date/Time String as per
Section <xref target="RFC8949" section="3.4.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>.</t>
        <t>The value of the literal is a number representing the result of a
conversion of the given Standard Date/Time String to an Epoch-Based
Date/Time.
If fractional seconds are given in the text (production
<tt>time-secfrac</tt> in <xref target="abnf-grammar-dt"/>), the value is a
floating-point number; the value is an integer number otherwise.
In the all-upper-case variant of the app-prefix, the value is enclosed
in a tag number 1.</t>
        <t>Each row of <xref target="tab-equiv-dt"/> shows an example of "dt" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-dt">
          <name>dt and DT literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">dt literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>-14159024</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.0Z'</tt></td>
              <td align="left">
                <tt>-14159024.0</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>dt'1969-07-21T02:56:16.5Z'</tt></td>
              <td align="left">
                <tt>-14159023.5</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>DT'1969-07-21T02:56:16Z'</tt></td>
              <td align="left">
                <tt>1(-14159024)</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="dt-grammar"/> for an ABNF definition for the content of <tt>dt</tt> literals.</t>
      </section>
      <section anchor="ip">
        <name>The "ip" Extension</name>
        <t>The application-extension identifier "ip" is used to notate an IP
address literal that can be used as an IP address as per <xref section="3" sectionFormat="of" target="RFC9164"/>.</t>
        <t>The text of the literal is an IPv4address or IPv6address as per
<xref section="3.2.2" sectionFormat="of" target="RFC3986"/>.</t>
        <t>With the lower-case app-string prefix <tt>ip</tt>, the value of the literal is a
byte string representing the binary IP address.
With the upper-case app-string prefix <tt>IP</tt>, the literal is such a byte string
tagged with tag number 54, if an IPv6address is used, or tag number
52, if an IPv4address is used.</t>
        <t>As an additional case, the upper-case app-string prefix <tt>IP''</tt> can be used
with an IP address prefix such as <tt>2001:db8::/56</tt> or <tt>192.0.2.0/24</tt>, with the equivalent tag as its value.
(Note that <xref target="RFC9164"/> representations of address prefixes need to
implement the truncation of the address byte string as described in
<xref section="4.2" sectionFormat="of" target="RFC9164"/>; see example below.)
For completeness, the lower-case variant <tt>ip'2001:db8::/56'</tt> or  <tt>ip'192.0.2.0/24'</tt> stands for
an unwrapped <tt>[56,h'20010db8']</tt> or <tt>[24,h'c00002']</tt>; however, in this case the information
on whether an address is IPv4 or IPv6 often needs to come from the context.</t>
        <t>Note that there is no direct representation of the "Interface format"
defined in <xref section="3.1.3" sectionFormat="of" target="RFC9164"/>, an address combined with an
optional prefix length and an optional zone identifier.
This can be represented as in <tt>52([ip'192.0.2.42',24])</tt>, if needed.</t>
        <t>Each row of <xref target="tab-equiv-ip"/> shows an example of "ip" notation and
equivalent notation not using an application-extension identifier.</t>
        <table anchor="tab-equiv-ip">
          <name>ip and IP literals vs. plain EDN</name>
          <thead>
            <tr>
              <th align="left">ip literal</th>
              <th align="left">plain EDN</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>ip'192.0.2.42'</tt></td>
              <td align="left">
                <tt>h'c000022a'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.42'</tt></td>
              <td align="left">
                <tt>52(h'c000022a')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'192.0.2.0/24'</tt></td>
              <td align="left">
                <tt>52([24,h'c00002'])</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>ip'2001:db8::42'</tt></td>
              <td align="left">
                <tt>h'20010db8000000000000000000000042'</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::42'</tt></td>
              <td align="left">
                <tt>54(h'20010db8000000000000000000000042')</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>IP'2001:db8::/64'</tt></td>
              <td align="left">
                <tt>54([64,h'20010db8'])</tt></td>
            </tr>
          </tbody>
        </table>
        <t>See <xref target="ip-grammar"/> for an ABNF definition for the content of <tt>ip</tt> literals.</t>
      </section>
    </section>
    <section anchor="stand-in">
      <name>Stand-in Representations in Binary CBOR</name>
      <t>In some cases, an EDN consumer cannot construct actual CBOR items that
represent the CBOR data intended for eventual interchange.
This document defines stand-in representation for two such cases:</t>
      <ul spacing="normal">
        <li>
          <t>The EDN consumer does not know (or does not implement) an
application-extension identifier used in the EDN document
(<xref target="unknown"/>) but wants to preserve the information for a later
processor.</t>
        </li>
        <li>
          <t>The generator of some EDN intended for human consumption (such as in
a specification document) may not want to include parts of the final
data item, destructively replacing complete subtrees or possibly
just parts of a lengthy string by <em>elisions</em> (<xref target="elision"/>).</t>
        </li>
      </ul>
      <t>Implementation note:
Typically, the ultimate applications will fail if they encounter tags
unknown to them, which the ones defined in this section likely are.
Where chains of tools are involved in processing EDN, it may be useful
to fail earlier than at the ultimate receiver in the chain unless
specific processing options (e.g., command line flags) are given that
indicate which of these stand-ins are expected at this stage in the
chain.</t>
      <section anchor="unknown">
        <name>Handling unknown application-extension identifiers</name>
        <t>When ingesting CBOR diagnostic notation, any
application-oriented extension literals are usually decoded and
transformed into the corresponding data item during ingestion.
If an application-extension is not known or not implemented by the
ingesting process, this is usually an error and processing has to
stop.</t>
        <t>However, in certain cases, it can be desirable to exceptionally carry an
uninterpreted application-oriented extension literal in an ingested
data item, allowing to postpone its decoding to a specific later
stage of ingestion.</t>
        <t>This specification defines a CBOR Tag for this purpose:
The Diagnostic Notation Unresolved Application-Extension Tag, tag
number CPA999 (<xref target="iana-standin"/>).
The content of this tag is an array of two text strings: The
application-extension identifier, and the (escape-processed) content
of the single-quoted string.
<!--
For example, `dt'1969-07-21T02:56:16Z'` can be provisionally represented as
`/CPA/ 999(["dt", "1969-07-21T02:56:16Z"])`.
 -->
For example, <tt>cri'https://example.com'</tt> can be provisionally represented as
<tt>/CPA/ 999(["cri", "https://example.com"])</tt>.</t>
        <t>If a stage of ingestion is not prepared to handle the Unresolved
Application-Extension Tag, this is an error and processing has to
stop, as if this stage had been ingesting an unknown or unimplemented
application-extension literal itself.</t>
        <t><cref anchor="cpa">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
      </section>
      <section anchor="elision">
        <name>Handling information deliberately elided from an EDN document</name>
        <t>When using EDN for exposition in a document or on a whiteboard, it is
often useful to be able to leave out parts of an EDN document that are
not of interest at that point of the exposition.</t>
        <t>To facilitate this, this specification
supports the use of an <em>ellipsis</em> (notated as three or more dots
in a row, as in <tt>...</tt>) to indicate parts of an EDN document that have
been elided (and therefore cannot be reconstructed).</t>
        <t>Upon ingesting EDN as a representation of a CBOR data item for further
processing, the occurrence of an ellipsis usually is an error and
processing has to stop.</t>
        <t>However, it is useful to be able to process EDN documents with
ellipses in the automation scripts for the documents using them.
This specification defines a CBOR Tag that can be used in the ingestion
for this purpose:
The Diagnostic Notation Ellipsis Tag, tag number CPA888 (<xref target="iana-standin"/>).
The content of this tag either is</t>
        <ol spacing="normal" type="1"><li>
            <t>null (indicating a data item entirely replaced by an ellipsis), or it is</t>
          </li>
          <li>
            <t>an array, the elements of which are alternating between fragments
of a string and the actual elisions, represented as ellipses
carrying a null as content.</t>
          </li>
        </ol>
        <t>Elisions can stand in for entire subtrees, e.g. in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, ..., 3]
{ "a": 1,
  "b": ...,
  ...: ...
}
]]></sourcecode>
        <t>A single ellipsis (or key/value pair of ellipses) can imply eliding
multiple elements in an array (members in a map); if more detailed
control is required, a data definition language such as CDDL can be
employed.
(Note that the stand-in form defined here does not allow multiple
key/value pairs with an ellipsis as a key: the CBOR data item would
not be valid.)</t>
        <t>Subtree elisions can be represented in a CBOR data item by using
<tt>/CPA/888(null)</tt> as the stand-in:</t>
        <sourcecode type="cbor-diag"><![CDATA[
[1, 2, 888(null), 3]
{ "a": 1,
  "b": 888(null),
  888(null): 888(null)
}
]]></sourcecode>
        <t>Elisions also can be used as part of a (text or byte) string:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": "Herewith I buy" + ... + "gned: Alice & Bob",
  "bytes_in_IRI": 'https://a.example/' + ... + '&q=Übergrößenträger',
  "signature": h'4711...0815',
}
]]></sourcecode>
        <t>The example "contract" combines string concatenation via the <tt>+</tt>
operator (<xref target="grammar"/>) with
ellipses; while the example
"signature" uses special syntax that allows the use of ellipses
between the bytes notated <em>inside</em> <tt>h''</tt> literals.</t>
        <t>String elisions can be represented in a CBOR data item by a stand-in
that wraps an array of string fragments alternating with ellipsis
indicators:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "contract": /CPA/888(["Herewith I buy", 888(null),
                        "gned: Alice & Bob"]),
  "bytes_in_IRI": 888(['https://a.example/', 888(null),
                       '&q=Übergrößenträger']),
  "signature": 888([h'4711', 888(null), h'0815']),
}
]]></sourcecode>
        <t>Note that the use of elisions is different from "commenting out" EDN
text, e.g.:</t>
        <sourcecode type="cbor-diag"><![CDATA[
{ "signature": h'4711/.../0815',
  # ...: ...
}
]]></sourcecode>
        <t>The consumer of this EDN will ignore the comments and therefore will
have no idea after ingestion that some information has been elided;
validation steps may then simply fail instead of being informed about
the elisions.</t>
      </section>
    </section>
    <section anchor="grammars">
      <name>ABNF Definitions</name>
      <t>This section collects grammars in ABNF form (<xref target="STD68"/> as extended in
<xref target="RFC7405"/>) that serve to define the syntax of EDN and some
application-oriented literals.</t>
      <t>Implementation note: The ABNF definitions in this section are
intended to be useful in a Parsing Expression Grammar (PEG) parser
interpretation (see <xref section="A" sectionFormat="of" target="RFC8610"/> for an introduction into PEG).
<xref target="squash"/> briefly discusses implementation considerations for when it is
desired to integrate some specific ABNF grammars into overall ABNF grammar.</t>
      <section anchor="grammar">
        <name>Overall ABNF Definition for Extended Diagnostic Notation</name>
        <t>This subsection provides an overall ABNF definition for the syntax of
CBOR extended diagnostic notation.</t>
        <aside>
          <t>This ABNF definition treats all single-quoted strings the same,
whether they are unprefixed and constitute byte string literals, or
prefixed and their content subject to further processing.
The text string value of the single-quoted strings that goes into that
further processing is described using separate ABNF definitions in
<xref target="app-grammars"/>; as a convention, the grammar for the content of an
app-string<tt> with  prefix, say, </tt>p<tt>, is described by an ABNF definition
with the rule name </tt>app-string-p`.</t>
          <t>As an implementation note, some implementations may want to integrate
the parsing and processing of app-string content with the overall
grammar.
Such an integrated syntax is not provided with this specification, but
it can be derived from the overall ABNF definition and the
prefix-specific app-string ABNF definitions by performing an automated
transformation; see <xref target="squash"/>.</t>
        </aside>
        <t>For simplicity, the internal parsing for the built-in EDN prefixes is
specified in the same way.
ABNF definitions for <tt>h''</tt> and <tt>b64''</tt> are provided in <xref target="h-grammar"/> and
<xref target="b64-grammar"/>.
However, the prefixes <tt>b32''</tt> and <tt>h32''</tt> are not in wide use and an
ABNF definition in this document could therefore not be based on
implementation experience.</t>
        <figure anchor="abnf-grammar">
          <name>Overall ABNF Definition of CBOR EDN</name>
          <sourcecode type="abnf" name="cbor-edn.abnf"><![CDATA[
seq             = S [item *(MSC item) SOC]
one-item        = S item S
item            = map / array / tagged
                / number / simple
                / string / streamstring

string1         = (tstr / bstr) spec
string1e        = string1 / ellipsis
ellipsis        = 3*"." ; "..." or more dots
string          = string1e *(S "+" S string1e)

number          = (hexfloat / hexint / octint / binint
                   / decnumber / nonfin) spec
sign            = "+" / "-"
decnumber       = [sign] (1*DIGIT ["." *DIGIT] / "." 1*DIGIT)
                         ["e" [sign] 1*DIGIT]
hexfloat        = [sign] "0x" (1*HEXDIG ["." *HEXDIG] / "." 1*HEXDIG)
                         "p" [sign] 1*DIGIT
hexint          = [sign] "0x" 1*HEXDIG
octint          = [sign] "0o" 1*ODIGIT
binint          = [sign] "0b" 1*BDIGIT
nonfin          = %s"Infinity"
                / %s"-Infinity"
                / %s"NaN"
simple          = %s"false"
                / %s"true"
                / %s"null"
                / %s"undefined"
                / %s"simple(" S item S ")"
uint            = "0" / DIGIT1 *DIGIT
tagged          = uint spec "(" S item S ")"

app-prefix      = lcalpha *lcalnum ; including h and b64
                / ucalpha *ucalnum ; tagged variant, if defined
app-string      = app-prefix sqstr
sqstr           = SQUOTE *single-quoted SQUOTE
bstr            = app-string / sqstr / embedded
                  ; app-string could be any type
tstr            = DQUOTE *double-quoted DQUOTE
embedded        = "<<" seq ">>"

array           = "[" (specms S item *(MSC item) SOC / spec S) "]"
map             = "{" (specms S keyp *(MSC keyp) SOC / spec S) "}"
keyp            = item S ":" S item

; We allow %x09 HT in prose, but not in strings
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-D7FF / %xE000-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
; optional space
S               = *blank *(comment *blank)
; mandatory space
MS              = (blank/comment) S
; mandatory comma and/or space
MSC             = ("," S) / (MS ["," S])
; optional comma and/or space
SOC             = S ["," S]

; check semantically that strings are either all text or all bytes
; note that there must be at least one string to distinguish
streamstring    = "(_" MS string *(MSC string) SOC ")"
spec            = ["_" *wordchar]
specms          = ["_" *wordchar MS]

double-quoted   = unescaped
                / SQUOTE
                / "\" DQUOTE
                / "\" escapable

single-quoted   = unescaped
                / DQUOTE
                / "\" SQUOTE
                / "\" escapable

escapable       = %s"b" ; BS backspace U+0008
                / %s"f" ; FF form feed U+000C
                / %s"n" ; LF line feed U+000A
                / %s"r" ; CR carriage return U+000D
                / %s"t" ; HT horizontal tab U+0009
                / "/"   ; / slash (solidus) U+002F (JSON!)
                / "\"   ; \ backslash (reverse solidus) U+005C
                / (%s"u" hexchar) ;  uXXXX      U+XXXX

hexchar         = "{" (1*"0" [ hexscalar ] / hexscalar) "}"
                / non-surrogate
                / (high-surrogate "\" %s"u" low-surrogate)
non-surrogate   = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG)
                / ("D" ODIGIT 2HEXDIG )
high-surrogate  = "D" ("8"/"9"/"A"/"B") 2HEXDIG
low-surrogate   = "D" ("C"/"D"/"E"/"F") 2HEXDIG
hexscalar       = "10" 4HEXDIG / HEXDIG1 4HEXDIG
                / non-surrogate / 1*3HEXDIG

; Note that no other C0 characters are allowed, including %x09 HT
unescaped       = %x0A ; new line
                / %x0D ; carriage return -- ignored on input
                / %x20-21
                     ; omit 0x22 "
                / %x23-26
                     ; omit 0x27 '
                / %x28-5B
                     ; omit 0x5C \
                / %x5D-D7FF ; skip surrogate code points
                / %xE000-10FFFF

DQUOTE          = %x22    ; " double quote
SQUOTE          = "'"     ; ' single quote
DIGIT           = %x30-39 ; 0-9
DIGIT1          = %x31-39 ; 1-9
ODIGIT          = %x30-37 ; 0-7
BDIGIT          = %x30-31 ; 0-1
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
HEXDIG1         = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F"
; Note: double-quoted strings as in "A" are case-insensitive in ABNF
lcalpha         = %x61-7A ; a-z
lcalnum         = lcalpha / DIGIT
ucalpha         = %x41-5A ; A-Z
ucalnum         = ucalpha / DIGIT
wordchar        = "_" / lcalnum / ucalpha ; [_a-z0-9A-Z]
]]></sourcecode>
        </figure>
        <t>While an ABNF grammar defines the set of character strings that are
considered to be valid EDN by this ABNF, the mapping of these
character strings into the generic data model of CBOR is not always
obvious.</t>
        <t>The following additional items should help in the interpretation:</t>
        <ol spacing="normal" type="1"><li>
            <t>As mentioned in the terminology (<xref target="terminology"/>), the ABNF terminal
  values in this document define Unicode scalar values (characters)
  rather than their UTF-8 encoding.  For example, the Unicode PLACE OF
  INTEREST SIGN (U+2318) would be defined in ABNF as %x2318.</t>
          </li>
          <li anchor="cr">
            <t>Unicode CARRIAGE RETURN (U+000D, often seen escaped as "\r" in many
  programming languages) that exist in the input (unescaped) are
  ignored as if they were not in the input wherever they appear.
  This is most important when they are found in (text or byte) string
  contexts (see the "unescaped" ABNF rule).
  On some platforms, a carriage return is always added in front of a
  LINE FEED (U+000A, also often seen escaped as "\n" in many
  programming languages), but on other platforms, carriage returns are
  not used at line breaks.
  The intent behind ignoring unescaped carriage returns is to ensure
  that input generated or processed on either of these kinds of
  platforms will generate the same bytes in the CBOR data items
  created from that input.
  (Platforms that use just a CARRIAGE RETURN to signify an end of line
  are no longer relevant and the files they produce are out of scope
  for this document.)
  If a carriage return is needed in the CBOR data item, it can be
  added explicitly using the escaped form <tt>\r</tt>.</t>
          </li>
          <li anchor="decnumber">
            <t><tt>decnumber</tt> stands for an integer in the usual decimal notation, unless at
  least one of the optional parts starting with "." and "e" are
  present, in which case it stands for a floating point value in the
  usual decimal notation.  Note that the grammar now allows <tt>3.</tt> for
  <tt>3.0</tt> and <tt>.3</tt> for <tt>0.3</tt> (also for hexadecimal floating point
  below); implementers are advised that some platform numeric parsers
  accept only a subset of the floating point syntax in this document
  and may require some preprocessing to use here.</t>
          </li>
          <li>
            <t><tt>hexint</tt>, <tt>octint</tt>, and <tt>binint</tt> stand for an integer in the usual base 16/hexadecimal
  ("0x"), base 8/octal ("0o"), or base 2/binary ("0b") notation.
  <tt>hexfloat</tt> stands
  for a floating point number in the usual hexadecimal notation (which
  uses a mantissa in hexadecimal and an exponent in decimal notation,
  see Section 5.12.3 of <xref target="IEEE754"/>, Section 6.4.4.3 of <xref target="C"/>, or Section
  5.13.4 of <xref target="Cplusplus"/>; floating-suffix/floating-point-suffix from
  the latter two is not used here).</t>
          </li>
          <li>
            <t>For <tt>hexint</tt>, <tt>octint</tt>, <tt>binint</tt>, and when <tt>decnumber</tt> stands for an integer, the
  corresponding CBOR data item is represented using major type 0 or 1
  if possible, or using tag 2 or 3 if not.
  In the latter case, this specification does not define any encoding
  indicators that apply.
  If fine control over encoding is desired, this can be expressed by
  being explicit about the representation as a tag:
  E.g., <tt>987654321098765432310</tt>, which is equivalent to <tt>2(h'35 8a 75
  04 38 f3 80 f5 f6')</tt> in its preferred serialization, might be
  written as <tt>2_3(h'00 00 00 35 8a 75 04 38 f3 80 f5 f6'_1)</tt> if
  leading zeros need to be added during serialization to obtain
  specific sizes for tag head, byte string head, and the overall byte
  string.  </t>
            <t>
When <tt>decnumber</tt> stands for a floating point value, and for
<tt>hexfloat</tt> and <tt>nonfin</tt>, a floating point data item with major
type 7 is used in preferred serialization (unless modified by an
encoding indicator, which then needs to be <tt>_1</tt>, <tt>_2</tt>, or <tt>_3</tt>).
For this, the number range needs to fit into an <xref target="IEEE754"/> binary64 (or the size
corresponding to the encoding indicator), and the precision will be
adjusted to binary64 before further applying preferred serialization
(or to the size corresponding to the encoding indicator).
Tag 4/5 representations are not generated in these cases.
Future app-prefixes could be defined to allow more control for
obtaining a tag 4/5 representation directly from a hex or decimal
floating point literal.</t>
          </li>
          <li anchor="spec">
            <t><tt>spec</tt> stands for an encoding indicator.
  See <xref target="encoding-indicators"/> for details.</t>
          </li>
          <li anchor="concat">
            <t>Extended diagnostic notation allows a (text or byte) string to be
  built up from multiple (text or byte) string literals, separated by
  a <tt>+</tt> operator; these are then concatenated into a single string.  </t>
            <t><tt>string</tt>, <tt>string1e</tt>, <tt>string1</tt>, and <tt>ellipsis</tt> realize: (1) the
representation of strings in this form split up into multiple
chunks, and (2) the use of ellipses to represent elisions
(<xref target="elision"/>).  </t>
            <t>
Note that the syntax defined here for concatenation of components
uses an explicit <tt>+</tt> operator between the components to be
concatenated (<xref section="G.4" sectionFormat="of" target="RFC8610"/> used simple juxtaposition,
which was not widely implemented and got in the way of making the use
of commas optional in other places via the rule <tt>OC</tt>).  </t>
            <t>
Text strings and byte strings do not mix within such a
concatenation, except that byte string literal notation can be used
inside a sequence of concatenated text string notation literals, to
encode characters that may be better represented in an encoded way.
The following four text string values (adapted from <xref section="G.4" sectionFormat="of" target="RFC8610"/> by updating to explicit <tt>+</tt> operators) are equivalent:  </t>
            <artwork><![CDATA[
"Hello world"
"Hello " + "world"
"Hello" + h'20' + "world"
"" + h'48656c6c6f20776f726c64' + ""
]]></artwork>
            <t>
Similarly, the following byte string values are equivalent:  </t>
            <artwork><![CDATA[
'Hello world'
'Hello ' + 'world'
'Hello ' + h'776f726c64'
'Hello' + h'20' + 'world'
'' + h'48656c6c6f20776f726c64' + '' + b64''
h'4 86 56c 6c6f' + h' 20776 f726c64'
]]></artwork>
            <t>
The semantic processing of these constructs is governed by the
following rules:  </t>
            <ul spacing="normal">
              <li>
                <t>A single <tt>...</tt> is a general ellipsis, which by itself can stand
for any data item.
Multiple adjacent concatenated ellipses are equivalent to a single
ellipsis.</t>
              </li>
              <li>
                <t>An ellipsis can be concatenated (on one or both sides) with string
chunks (<tt>string1</tt>); the result is a CBOR tag number CPA888 that contains an
array with joined together spans of such chunks plus the ellipses
represented by <tt>888(null)</tt>.</t>
              </li>
              <li>
                <t>If there is no ellipsis in the concatenated list, the result of
processing the list will always be a single item.</t>
              </li>
              <li>
                <t>The bytes in the concatenated sequence of string chunks are simply
joined together, proceeding from left to right.
If the left hand side of a concatenation is a text string, the
joining operation results in a text string, and that
result needs to be valid UTF-8 except for implementations that
support and are enabled for generation/ingestion of EDN for CBOR
data items that are well-formed but not valid.
If the left hand side is a byte string, the right hand side also
needs to be a byte string.</t>
              </li>
              <li>
                <t>Some of the strings may be app-strings.
If the result type of the app-string is an actual (text or byte)
string, joining of those string chunks occurs as with chunks
directly notated as string literals; otherwise the occurrence of more than
one app-string or an app-string together with a directly notated
string cannot be processed.</t>
              </li>
            </ul>
          </li>
        </ol>
      </section>
      <section anchor="app-grammars">
        <name>ABNF Definitions for app-string Content</name>
        <t>This subsection provides ABNF definitions for the content of
application-oriented extension literals defined in <xref target="STD94"/> and in this
specification.
These grammars describe the <em>decoded</em> content of the <tt>sqstr</tt> components that
combine with the application-extension identifiers used as prefixes to form
application-oriented extension literals.
Each of these may integrate ABNF rules defined in <xref target="abnf-grammar"/>,
which are not always repeated here.</t>
        <t><xref target="tab-prefixes"/> summarizes the app-prefix values defined in this document.</t>
        <table anchor="tab-prefixes">
          <name>App-prefix Values Defined in this Document</name>
          <thead>
            <tr>
              <th align="left">app-prefix</th>
              <th align="left">content of single-quoted string</th>
              <th align="left">result type</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">hexadecimal form of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">H</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">base64 forms (classic or base64url) of binary data</td>
              <td align="left">byte string</td>
            </tr>
            <tr>
              <td align="left">B64</td>
              <td align="left">(not used)</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">RFC 3339 date/time</td>
              <td align="left">number (int or float)</td>
            </tr>
            <tr>
              <td align="left">DT</td>
              <td align="left">"</td>
              <td align="left">Tag 1 on the above</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP address or prefix</td>
              <td align="left">byte string, <br/>array of length and byte string</td>
            </tr>
            <tr>
              <td align="left">IP</td>
              <td align="left">"</td>
              <td align="left">Tag 54 (IPv6) or 52 (IPv4) on the above</td>
            </tr>
          </tbody>
        </table>
        <section anchor="h-grammar">
          <name>h: ABNF Definition of Hexadecimal representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in hex,
such as <tt>h''</tt>, <tt>h'0815'</tt>, or <tt>h'/head/ 63 /contents/ 66 6f 6f'</tt>
(another representation of <tt>&lt;&lt; "foo" &gt;&gt;</tt>), is described by the ABNF in <xref target="abnf-grammar-h"/>.
This syntax accommodates both lower case and upper case hex digits, as
well as blank space (including comments) around each hex digit.</t>
          <figure anchor="abnf-grammar-h">
            <name>ABNF Definition of Hexadecimal Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-h.abnf"><![CDATA[
app-string-h    = S *(HEXDIG S HEXDIG S / ellipsis S)
                  ["#" *non-lf]
ellipsis        = 3*"."
HEXDIG          = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT           = %x30-39 ; 0-9
blank           = %x09 / %x0A / %x0D / %x20
non-slash       = blank / %x21-2e / %x30-10FFFF
non-lf          = %x09 / %x0D / %x20-D7FF / %xE000-10FFFF
S               = *blank *(comment *blank )
comment         = "/" *non-slash "/"
                / "#" *non-lf %x0A
]]></sourcecode>
          </figure>
        </section>
        <section anchor="b64-grammar">
          <name>b64: ABNF Definition of Base64 representation of a byte string</name>
          <t>The syntax of the content of byte strings represented in base64 is
described by the ABNF in <xref target="abnf-grammar-h"/>.</t>
          <t>This syntax allows both the classic (<xref section="4" sectionFormat="of" target="RFC4648"/>) and the
URL-safe (<xref section="5" sectionFormat="of" target="RFC4648"/>) alphabet to be used.
It accommodates, but does not require base64 padding.
Note that inclusion of classic base64 makes it impossible to have
in-line comments in b64, as "/" is valid base64-classic.</t>
          <figure anchor="abnf-grammar-b64">
            <name>ABNF definition of Base64 Representation of a Byte String</name>
            <sourcecode type="abnf" name="cbor-edn-b64.abnf"><![CDATA[
app-string-b64  = B *(4(b64dig B))
                  [b64dig B b64dig B ["=" B "=" / b64dig B ["="]] B]
                  ["#" *inon-lf]
b64dig          = ALPHA / DIGIT / "-" / "_" / "+" / "/"
B               = *iblank *(icomment *iblank)
iblank          = %x0A / %x20  ; Not HT or CR (gone)
icomment        = "#" *inon-lf %x0A
inon-lf         = %x20-D7FF / %xE000-10FFFF
ALPHA           = %x41-5a / %x61-7a
DIGIT           = %x30-39
]]></sourcecode>
          </figure>
        </section>
        <section anchor="dt-grammar">
          <name>dt: ABNF Definition of RFC 3339 Representation of a Date/Time</name>
          <t>The syntax of the content of <tt>dt</tt> literals can be described by the
ABNF for <tt>date-time</tt> from <xref target="RFC3339"/> as summarized in <xref section="3" sectionFormat="of" target="RFC9165"/>:</t>
          <figure anchor="abnf-grammar-dt">
            <name>ABNF Definition of RFC3339 Representation of a Date/Time</name>
            <sourcecode type="abnf" name="cbor-edn-dt.abnf"><![CDATA[
app-string-dt   = date-time

date-fullyear   = 4DIGIT
date-month      = 2DIGIT  ; 01-12
date-mday       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                          ; month/year
time-hour       = 2DIGIT  ; 00-23
time-minute     = 2DIGIT  ; 00-59
time-second     = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap sec
                          ; rules
time-secfrac    = "." 1*DIGIT
time-numoffset  = ("+" / "-") time-hour ":" time-minute
time-offset     = "Z" / time-numoffset

partial-time    = time-hour ":" time-minute ":" time-second
                  [time-secfrac]
full-date       = date-fullyear "-" date-month "-" date-mday
full-time       = partial-time time-offset

date-time       = full-date "T" full-time
DIGIT           =  %x30-39 ; 0-9
]]></sourcecode>
          </figure>
        </section>
        <section anchor="ip-grammar">
          <name>ip: ABNF Definition of Textual Representation of an IP Address</name>
          <t>The syntax of the content of <tt>ip</tt> literals can be described by the
ABNF for <tt>IPv4address</tt> and <tt>IPv6address</tt> in <xref section="3.2.2" sectionFormat="of" target="RFC3986"/>,
as included in slightly updated form in <xref target="abnf-grammar-ip"/>.</t>
          <figure anchor="abnf-grammar-ip">
            <name>ABNF Definition of Textual Representation of an IP Address</name>
            <sourcecode type="abnf" name="cbor-edn-ip.abnf"><![CDATA[
app-string-ip = IPaddress ["/" uint]

IPaddress     = IPv4address
              / IPv6address

; ABNF from RFC 3986, re-arranged for PEG compatibility:

IPv6address   =                            6( h16 ":" ) ls32
              /                       "::" 5( h16 ":" ) ls32
              / [ h16               ] "::" 4( h16 ":" ) ls32
              / [ h16 *1( ":" h16 ) ] "::" 3( h16 ":" ) ls32
              / [ h16 *2( ":" h16 ) ] "::" 2( h16 ":" ) ls32
              / [ h16 *3( ":" h16 ) ] "::"    h16 ":"   ls32
              / [ h16 *4( ":" h16 ) ] "::"              ls32
              / [ h16 *5( ":" h16 ) ] "::"              h16
              / [ h16 *6( ":" h16 ) ] "::"

h16           = 1*4HEXDIG
ls32          = ( h16 ":" h16 ) / IPv4address
IPv4address   = dec-octet "." dec-octet "." dec-octet "." dec-octet
dec-octet     = "25" %x30-35         ; 250-255
              / "2" %x30-34 DIGIT    ; 200-249
              / "1" 2DIGIT           ; 100-199
              / %x31-39 DIGIT        ; 10-99
              / DIGIT                ; 0-9

HEXDIG        = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
DIGIT         = %x30-39 ; 0-9
DIGIT1        = %x31-39 ; 1-9
uint          = "0" / DIGIT1 *DIGIT
]]></sourcecode>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="sec-iana">
      <name>IANA Considerations</name>
      <t><cref anchor="to-be-removed">RFC Editor: please replace RFC-XXXX with the RFC
number of this RFC, [IANA.cbor-diagnostic-notation] with a
reference to the new registry group, and remove this note.</cref></t>
      <section anchor="appext-iana">
        <name>CBOR Diagnostic Notation Application-extension Identifiers Registry</name>
        <t>IANA is requested to create an "Application-Extension Identifiers"
registry in a new "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "expert review"
(Section <xref target="RFC8126" section="4.5" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions">The experts are instructed to be frugal in the allocation of
application-extension identifiers that are suggestive of generally applicable semantics,
keeping them in reserve for application-extensions that are likely to enjoy wide
use and can make good use of their conciseness.
The expert is also instructed to direct the registrant to provide a
specification (Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>), but can make exceptions,
for instance when a specification is not available at the time of
registration but is likely forthcoming.
If the expert becomes aware of application-extension identifiers that are deployed and
in use, they may also initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Application-Extension Identifier:</dt>
          <dd>
            <t>a lower case ASCII <xref target="STD80"/> string that starts with a letter and can
contain letters and digits after that (<tt>[a-z][a-z0-9]*</tt>). No other
entry in the registry can have the same application-extension identifier.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana">
          <name>Initial Content of Application-extension Identifier Registry</name>
          <thead>
            <tr>
              <th align="left">Application-extension Identifier</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">h</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">h32</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">b64</td>
              <td align="left">Reserved</td>
              <td align="left">RFC8949</td>
            </tr>
            <tr>
              <td align="left">false</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">true</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">null</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">undefined</td>
              <td align="left">Reserved</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">dt</td>
              <td align="left">Date/Time</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">ip</td>
              <td align="left">IP Address/Prefix</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="reg-ei">
        <name>Encoding Indicators</name>
        <t>IANA is requested to create an "Encoding Indicators"
registry in the newly created "CBOR Diagnostic Notation" registry group
[IANA.cbor-diagnostic-notation], with the policy "specification required"
(Section <xref target="RFC8126" section="4.6" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>).</t>
        <t anchor="de-instructions-ei">The experts are instructed to be frugal in the allocation of
encoding indicators that are suggestive of generally applicable semantics,
keeping them in reserve for encoding indicator registrations that are likely to enjoy wide
use and can make good use of their conciseness.
If the expert becomes aware of encoding indicators that are deployed and
in use, they may also solicit a specification and initiate a registration on their own if
they deem such a registration can avert potential future collisions.</t>
        <t>Each entry in the registry must include:</t>
        <dl newline="true">
          <dt>Encoding Indicator:</dt>
          <dd>
            <t>an ASCII <xref target="STD80"/> string that starts with an underscore letter and
can contain zero or more underscores, letters and digits after that
(<tt>_[_A-Za-z0-9]*</tt>). No other entry in the registry can have the same
Encoding Indicator.</t>
          </dd>
          <dt>Description:</dt>
          <dd>
            <t>a brief description.
This description may employ an abbreviation of the form <tt>ai=</tt>nn,
where nn is the numeric value of the field <em>additional information</em>, the
low-order 5 bits of the initial byte (see Section <xref target="RFC8949" section="3" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>).</t>
          </dd>
          <dt>Change Controller:</dt>
          <dd>
            <t>(see Section <xref target="RFC8126" section="2.3" sectionFormat="bare"/> of RFC 8126 <xref target="BCP26"/>)</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>a reference document that provides a description of the
application-extension identifier</t>
          </dd>
        </dl>
        <t>The initial content of the registry is shown in <xref target="tab-iana-ei"/>; all
initial entries have the Change Controller "IETF".</t>
        <table anchor="tab-iana-ei">
          <name>Initial Content of Encoding Indicator Registry</name>
          <thead>
            <tr>
              <th align="left">Encoding Indicator</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">_</td>
              <td align="left">Indefinite Length Encoding (ai=31)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_i</td>
              <td align="left">ai=0 to ai=23</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_0</td>
              <td align="left">ai=24</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_1</td>
              <td align="left">ai=25</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_2</td>
              <td align="left">ai=26</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_3</td>
              <td align="left">ai=27</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_4</td>
              <td align="left">Reserved (for ai=28)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_5</td>
              <td align="left">Reserved (for ai=29)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_6</td>
              <td align="left">Reserved (for ai=30)</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="left">_7</td>
              <td align="left">Reserved (see _)</td>
              <td align="left">RFC8949, RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <aside>
          <t>As the "Reference" column reflects, all the encoding indicators
initially registered are already defined in Section <xref target="RFC8949" section="8.1" sectionFormat="bare"/> of RFC 8949 <xref target="STD94"/>,
with the exception of <tt>_i</tt>, which is defined in <xref target="grammar"/> of the
present document.</t>
        </aside>
      </section>
      <section anchor="media-type">
        <name>Media Type</name>
        <t>IANA is requested to add the following Media-Type to the "Media Types"
registry <xref target="IANA.media-types"/>.</t>
        <table align="left" anchor="new-media-type">
          <name>New Media Type application/cbor-diagnostic</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Template</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">cbor-diagnostic</td>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">RFC-XXXX, <xref target="media-type"/></td>
            </tr>
          </tbody>
        </table>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>cbor-diagnostic</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>binary (UTF-8)</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t><xref target="seccons"/> of RFC XXXX</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>none</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="media-type"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Tools interchanging a human-readable form of CBOR</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>The syntax and semantics of fragment identifiers is as specified for
"application/cbor".  (At publication of RFC XXXX, there is no
fragment identification syntax defined for "application/cbor".)</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t><br/>
            </t>
            <dl>
              <dt>Deprecated alias names for this type:</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>Magic number(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
              <dt>File extension(s):</dt>
              <dd>
                <t>.diag</t>
              </dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>
                <t>N/A</t>
              </dd>
            </dl>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>CBOR WG mailing list (cbor@ietf.org),
or IETF Applications and Real-Time Area (art@ietf.org)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>LIMITED USE</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>CBOR diagnostic notation represents CBOR data items, which are the
format intended for actual interchange.
The media type application/cbor-diagnostic is intended to be used
within documents about CBOR data items, in diagnostics for human
consumption, and in other representations of CBOR data items that
are necessarily text-based such as in configuration files or other
data edited by humans, often under source-code control.</t>
          </dd>
          <dt>Author/Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
          <dt>Provisional registration:</dt>
          <dd>
            <t>no</t>
          </dd>
        </dl>
      </section>
      <section anchor="content-format">
        <name>Content-Format</name>
        <t>IANA is requested to register a Content-Format number in the
<xref section="&quot;CoAP Content-Formats&quot;" relative="#content-formats" sectionFormat="bare" target="IANA.core-parameters"/>
sub-registry, within the "Constrained RESTful Environments (CoRE)
Parameters" Registry <xref target="IANA.core-parameters"/>, as follows:</t>
        <table align="left">
          <name>New Content-Format</name>
          <thead>
            <tr>
              <th align="left">Content-Type</th>
              <th align="left">Content Coding</th>
              <th align="left">ID</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">application/cbor-diagnostic</td>
              <td align="left">-</td>
              <td align="left">TBD1</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
        <t>TBD1 is to be assigned from the space 256..9999, according to the
procedure "IETF Review or IESG Approval", preferably a number less
than 1000.</t>
      </section>
      <section anchor="iana-standin">
        <name>Stand-in Tags</name>
        <t><cref anchor="cpa_1">RFC-Editor: This document uses the CPA (code point allocation)
  convention described in [I-D.bormann-cbor-draft-numbers].  For
  each usage of the term "CPA", please remove the prefix "CPA"
  from the indicated value and replace the residue with the value
  assigned by IANA; perform an analogous substitution for all other
  occurrences of the prefix "CPA" in the document.  Finally,
  please remove this note.</cref></t>
        <t>In the "CBOR Tags" registry <xref target="IANA.cbor-tags"/>, IANA is requested to assign the
tags in <xref target="tab-tag-values"/> from the "specification required" space
(suggested assignments: 888 and 999), with the present document as the
specification reference.</t>
        <table anchor="tab-tag-values">
          <name>Values for Tags</name>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">Data Item</th>
              <th align="left">Semantics</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">CPA888</td>
              <td align="left">null or array</td>
              <td align="left">Diagnostic Notation Ellipsis</td>
              <td align="left">RFC-XXXX</td>
            </tr>
            <tr>
              <td align="right">CPA999</td>
              <td align="left">array</td>
              <td align="left">Diagnostic Notation<br/>Unresolved Application-Extension</td>
              <td align="left">RFC-XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="seccons">
      <name>Security considerations</name>
      <t>The security considerations of <xref target="STD94"/> and <xref target="RFC8610"/> apply.</t>
      <t>The EDN specification provides two explicit extension points,
application-extension identifiers (<xref target="appext-iana"/>) and encoding
indicators (<xref target="reg-ei"/>).
Extensions introduced this way can have their own security
considerations (see, e.g., <xref section="5" sectionFormat="of" target="I-D.ietf-cbor-edn-e-ref"/>).
When implementing tools that support the use of EDN extensions, the
implementer needs to be careful not to inadvertently introduce a
vector for an attacker to invoke extensions not planned for by the
tool operator, who might not have considered security considerations
of specific extensions such as those posed by their use of
dereferenceable identifiers (<xref section="6" sectionFormat="of" target="I-D.bormann-t2trg-deref-id"/>).
For instance, tools might require explicitly enabling the use of each
extension that is not on an allowlist.
This task can possibly be
made less onerous by combining it with a mechanism for supplying any
parameters controlling such an extension.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <referencegroup anchor="STD94" target="https://www.rfc-editor.org/info/std94">
          <reference anchor="RFC8949" target="https://www.rfc-editor.org/info/rfc8949">
            <front>
              <title>Concise Binary Object Representation (CBOR)</title>
              <author fullname="C. Bormann" initials="C." surname="Bormann"/>
              <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
              <date month="December" year="2020"/>
              <abstract>
                <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
                <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="94"/>
            <seriesInfo name="RFC" value="8949"/>
            <seriesInfo name="DOI" value="10.17487/RFC8949"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC8742">
          <front>
            <title>Concise Binary Object Representation (CBOR) Sequences</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document describes the Concise Binary Object Representation (CBOR) Sequence format and associated media type "application/cbor-seq". A CBOR Sequence consists of any number of encoded CBOR data items, simply concatenated in sequence.</t>
              <t>Structured syntax suffixes for media types allow other media types to build on them and make it explicit that they are built on an existing media type as their foundation. This specification defines and registers "+cbor-seq" as a structured syntax suffix for CBOR Sequences.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8742"/>
          <seriesInfo name="DOI" value="10.17487/RFC8742"/>
        </reference>
        <referencegroup anchor="STD68" target="https://www.rfc-editor.org/info/std68">
          <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234">
            <front>
              <title>Augmented BNF for Syntax Specifications: ABNF</title>
              <author fullname="D. Crocker" initials="D." role="editor" surname="Crocker"/>
              <author fullname="P. Overell" initials="P." surname="Overell"/>
              <date month="January" year="2008"/>
              <abstract>
                <t>Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK]</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="68"/>
            <seriesInfo name="RFC" value="5234"/>
            <seriesInfo name="DOI" value="10.17487/RFC5234"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD63" target="https://www.rfc-editor.org/info/std63">
          <reference anchor="RFC3629" target="https://www.rfc-editor.org/info/rfc3629">
            <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>
        </referencegroup>
        <reference anchor="RFC7405">
          <front>
            <title>Case-Sensitive String Support in ABNF</title>
            <author fullname="P. Kyzivat" initials="P." surname="Kyzivat"/>
            <date month="December" year="2014"/>
            <abstract>
              <t>This document extends the base definition of ABNF (Augmented Backus-Naur Form) to include a way to specify US-ASCII string literals that are matched in a case-sensitive manner.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7405"/>
          <seriesInfo name="DOI" value="10.17487/RFC7405"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC9164">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags for IPv4 and IPv6 Addresses and Prefixes</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>This specification defines two Concise Binary Object Representation (CBOR) tags for use with IPv6 and IPv4 addresses and prefixes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9164"/>
          <seriesInfo name="DOI" value="10.17487/RFC9164"/>
        </reference>
        <reference anchor="IANA.cbor-tags" target="https://www.iana.org/assignments/cbor-tags">
          <front>
            <title>Concise Binary Object Representation (CBOR) Tags</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.media-types" target="https://www.iana.org/assignments/media-types">
          <front>
            <title>Media Types</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.core-parameters" target="https://www.iana.org/assignments/core-parameters">
          <front>
            <title>Constrained RESTful Environments (CoRE) Parameters</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <referencegroup anchor="BCP26" target="https://www.rfc-editor.org/info/bcp26">
          <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126">
            <front>
              <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
              <author fullname="M. Cotton" initials="M." surname="Cotton"/>
              <author fullname="B. Leiba" initials="B." surname="Leiba"/>
              <author fullname="T. Narten" initials="T." surname="Narten"/>
              <date month="June" year="2017"/>
              <abstract>
                <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
                <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
                <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="26"/>
            <seriesInfo name="RFC" value="8126"/>
            <seriesInfo name="DOI" value="10.17487/RFC8126"/>
          </reference>
        </referencegroup>
        <referencegroup anchor="STD80" target="https://www.rfc-editor.org/info/std80">
          <reference anchor="RFC0020" target="https://www.rfc-editor.org/info/rfc20">
            <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/RFC0020"/>
          </reference>
        </referencegroup>
        <reference anchor="IEEE754" target="https://ieeexplore.ieee.org/document/8766229">
          <front>
            <title>IEEE Standard for Floating-Point Arithmetic</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <date/>
          </front>
          <seriesInfo name="IEEE Std" value="754-2019"/>
          <seriesInfo name="DOI" value="10.1109/IEEESTD.2019.8766229"/>
        </reference>
        <reference anchor="C" target="https://www.iso.org/standard/82075.html">
          <front>
            <title>Information technology — Programming languages — C</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="9899:2024"/>
          <annotation> 
The standard is widely known as C23. Its technical content is also available via <eref target="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf">https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3220.pdf</eref>.</annotation>
          <refcontent>Edition 5</refcontent>
        </reference>
        <reference anchor="Cplusplus" target="https://www.iso.org/standard/83626.html">
          <front>
            <title>Programming languages — C++</title>
            <author>
              <organization>International Organization for Standardization</organization>
            </author>
            <date year="2024" month="October"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14882:2024"/>
          <annotation> 
The standard is widely known as C++23. Its technical content is also available via <eref target="https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf">https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4950.pdf</eref>.</annotation>
          <refcontent>Edition 7</refcontent>
        </reference>
        <referencegroup anchor="BCP14" target="https://www.rfc-editor.org/info/bcp14">
          <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/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" target="https://www.rfc-editor.org/info/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>
        </referencegroup>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC7049">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7049"/>
          <seriesInfo name="DOI" value="10.17487/RFC7049"/>
        </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="RFC9290">
          <front>
            <title>Concise Problem Details for Constrained Application Protocol (CoAP) APIs</title>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="October" year="2022"/>
            <abstract>
              <t>This document defines a concise "problem detail" as a way to carry machine-readable details of errors in a Representational State Transfer (REST) response to avoid the need to define new error response formats for REST APIs for constrained environments. The format is inspired by, but intended to be more concise than, the problem details for HTTP APIs defined in RFC 7807.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9290"/>
          <seriesInfo name="DOI" value="10.17487/RFC9290"/>
        </reference>
        <referencegroup anchor="STD90" target="https://www.rfc-editor.org/info/std90">
          <reference anchor="RFC8259" target="https://www.rfc-editor.org/info/rfc8259">
            <front>
              <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
              <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
              <date month="December" year="2017"/>
              <abstract>
                <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
                <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
              </abstract>
            </front>
            <seriesInfo name="STD" value="90"/>
            <seriesInfo name="RFC" value="8259"/>
            <seriesInfo name="DOI" value="10.17487/RFC8259"/>
          </reference>
        </referencegroup>
        <reference anchor="RFC7493">
          <front>
            <title>The I-JSON Message Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>I-JSON (short for "Internet JSON") is a restricted profile of JSON designed to maximize interoperability and increase confidence that software can process it successfully with predictable results.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7493"/>
          <seriesInfo name="DOI" value="10.17487/RFC7493"/>
        </reference>
        <reference anchor="I-D.bormann-cbor-numbers">
          <front>
            <title>On Numbers in CBOR</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="8" month="July" year="2024"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR), as defined in STD 94
   (RFC 8949), is a data representation format whose design goals
   include the possibility of extremely small code size, fairly small
   message size, and extensibility without the need for version
   negotiation.

   Among the kinds of data that a data representation format needs to be
   able to carry, numbers have a prominent role, but also have inherent
   complexity that needs attention from protocol designers and
   implementers of CBOR libraries and of the applications that use them.

   This document gives an overview over number formats available in CBOR
   and some notable CBOR tags registered, and it attempts to provide
   information about opportunities and potential pitfalls of these
   number formats.


   // This is a rather drafty initial revision, pieced together from
   // various components, so it has a higher level of redundancy than
   // ultimately desired.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-cbor-numbers-00"/>
        </reference>
        <reference anchor="RFC9165">
          <front>
            <title>Additional Control Operators for the Concise Data Definition Language (CDDL)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="December" year="2021"/>
            <abstract>
              <t>The Concise Data Definition Language (CDDL), standardized in RFC 8610, provides "control operators" as its main language extension point.</t>
              <t>The present document defines a number of control operators that were not yet ready at the time RFC 8610 was completed:.plus,.cat, and.det for the construction of constants;.abnf/.abnfb for including ABNF (RFC 5234 and RFC 7405) in CDDL specifications; and.feature for indicating the use of a non-basic feature in an instance.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9165"/>
          <seriesInfo name="DOI" value="10.17487/RFC9165"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-update-8610-grammar">
          <front>
            <title>Updates to the CDDL grammar of RFC 8610</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="24" month="June" year="2024"/>
            <abstract>
              <t>   The Concise Data Definition Language (CDDL), as defined in RFC 8610
   and RFC 9165, provides an easy and unambiguous way to express
   structures for protocol messages and data formats that are
   represented in CBOR or JSON.

   The present document updates RFC 8610 by addressing errata and making
   other small fixes for the ABNF grammar defined for CDDL there.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-update-8610-grammar-06"/>
        </reference>
        <reference anchor="I-D.ietf-cbor-edn-e-ref">
          <front>
            <title>External References to Values in CBOR Diagnostic Notation (EDN)</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <date day="29" month="December" year="2024"/>
            <abstract>
              <t>   The Concise Binary Object Representation (CBOR, RFC 8949) is a data
   format whose design goals include the possibility of extremely small
   code size, fairly small message size, and extensibility without the
   need for version negotiation.

   CBOR diagnostic notation (EDN) is widely used to represent CBOR data
   items in a way that is accessible to humans, for instance for
   examples in a specification.  At the time of writing, EDN did not
   provide mechanisms for composition of such examples from multiple
   components or sources.  This document uses EDN application extensions
   to provide two such mechanisms, both of which insert an imported data
   item into the data item being described in EDN:

   The e'' application extension provides a way to import data items,
   particularly constant values, from a CDDL model (which itself has
   ways to provide composition).

   The ref'' application extension provides a way to import data items
   that are described in EDN.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cbor-edn-e-ref-01"/>
        </reference>
        <reference anchor="I-D.bormann-t2trg-deref-id">
          <front>
            <title>The "dereferenceable identifier" pattern</title>
            <author fullname="Carsten Bormann" initials="C." surname="Bormann">
              <organization>Universität Bremen TZI</organization>
            </author>
            <author fullname="Christian Amsüss" initials="C." surname="Amsüss">
         </author>
            <date day="1" month="September" year="2024"/>
            <abstract>
              <t>   In a protocol or an application environment, it is often important to
   be able to create unambiguous identifiers for some meaning (concept
   or some entity).

   Due to the simplicity of creating URIs, these have become popular for
   this purpose.  Beyond the purpose of identifiers to be uniquely
   associated with a meaning, some of these URIs are in principle
   _dereferenceable_, so something can be placed that can be retrieved
   when encountering such a URI.


   // The present revision -04 includes a few clarifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bormann-t2trg-deref-id-04"/>
        </reference>
        <reference anchor="RFC9512">
          <front>
            <title>YAML Media Type</title>
            <author fullname="R. Polli" initials="R." surname="Polli"/>
            <author fullname="E. Wilde" initials="E." surname="Wilde"/>
            <author fullname="E. Aro" initials="E." surname="Aro"/>
            <date month="February" year="2024"/>
            <abstract>
              <t>This document registers the application/yaml media type and the +yaml structured syntax suffix with IANA. Both identify document components that are serialized according to the YAML specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9512"/>
          <seriesInfo name="DOI" value="10.17487/RFC9512"/>
        </reference>
        <reference anchor="YAML" target="https://yaml.org/spec/1.2.2/">
          <front>
            <title>YAML Ain't Markup Language (YAML™) Version 1.2</title>
            <author initials="O." surname="Ben-Kiki" fullname="Oren Ben-Kiki">
              <organization/>
            </author>
            <author initials="C." surname="Evans" fullname="Clark Evans">
              <organization/>
            </author>
            <author initials="I." surname="döt Net" fullname="Ingy döt Net">
              <organization/>
            </author>
            <date year="2021" month="October" day="01"/>
          </front>
          <refcontent>Revision 1.2.2</refcontent>
        </reference>
        <reference anchor="ABNFROB" target="https://github.com/cabo/abnftt">
          <front>
            <title>PEG-parsing using ABNF grammars (via treetop)</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 1976?>

<section anchor="edn-and-cddl">
      <name>EDN and CDDL</name>
      <t>This appendix is for information.</t>
      <t>EDN was designed as a language to provide a human-readable
representation of an instance, i.e., a single CBOR data item or CBOR
sequence.
CDDL was designed as a language to describe an (often large) set of
such instances (which itself constitutes a language), in the form of a
<em>data definition</em> or <em>grammar</em> (or sometimes called <em>schema</em>).</t>
      <t>The two languages share some similarities, not the least because they
have mutually inspired each other.
But they have very different roots:</t>
      <ul spacing="normal">
        <li>
          <t>EDN syntax is an extension to JSON syntax <xref target="STD90"/>.
(Any (interoperable) JSON text is also valid EDN.)</t>
        </li>
        <li>
          <t>CDDL syntax is inspired by ABNF's syntax <xref target="STD68"/>.</t>
        </li>
      </ul>
      <t>For engineers that are using both EDN and CDDL, it is easy to write
"CDDLisms" or "EDNisms" into their drafts that are meant to be in the
other language.
(This is one more of the many motivations to always validate formal
language instances with tools.)</t>
      <t>Important differences include:</t>
      <ul spacing="normal">
        <li>
          <t>Comment syntax.  CDDL inherits ABNF's semicolon-delimited end of
line characters, while EDN finds nothing in JSON that could be inherited here.
Inspired by JavaScript, EDN simplifies JavaScript's copy of the
original C comment syntax to be delimited by single slashes (where
line breaks are not of interest); it also adds end-of-line comments
starting with <tt>#</tt>.  </t>
          <dl spacing="compact">
            <dt>EDN:</dt>
            <dd>
              <sourcecode type="cbor-diag"><![CDATA[
{ / alg / 1: -7 / ECDSA 256 / }
,
{ 1:   # alg
    -7 # ECDSA 256
}
]]></sourcecode>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>? 1 =&gt; int / tstr,  ; algorithm identifier</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Syntax for tags.  CDDL's tag syntax is part of the system for
referring to CBOR's fundamentals (the major type 6, in this case)
and (with <xref target="I-D.ietf-cbor-update-8610-grammar"/>) allows specifying the actual tag number
separately, while EDN's tag syntax is a simple decimal number and a
pair of parentheses.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([h'', # empty encoded protected header
    {},  # empty unprotected header
    ...  # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>COSE_Sign_Tagged = #6.98(COSE_Sign)</tt></t>
            </dd>
          </dl>
        </li>
        <li>
          <t>Embedded CBOR.  EDN has a special syntax to describe the content of
byte strings that are encoded CBOR data items.  CDDL can specify
these with a control operator, which looks very different.  </t>
          <dl>
            <dt>EDN:</dt>
            <dd>
              <artwork><![CDATA[
98([<< {/alg/ 1: -7 /ECDSA 256/} >>, # == h'a10126'
    ...                              # rest elided here
   ])
]]></artwork>
            </dd>
            <dt>CDDL:</dt>
            <dd>
              <t><tt>serialized_map = bytes .cbor header_map</tt></t>
            </dd>
          </dl>
        </li>
      </ul>
    </section>
    <section anchor="squash">
      <name>Integrating Specific ABNF Grammars into the Overall Grammar</name>
      <t>This appendix is for information.</t>
      <t>It discusses an implementation strategy that integrates the parsing
and processing of certain app-string content into the overall ABNF
grammar.
Such an integrated grammar is not provided with this specification,
but it can be automatically derived from the overall ABNF definition
and the prefix-specific app-string ABNF definitions (such as those
provided in <xref target="app-grammars"/> or as later extensions).</t>
      <t>At the time of writing, one example a tool performing such a
derivation is available as open-source software <xref target="ABNFROB"/>.
As an extension to the existing tool <tt>abnftt</tt> for converting ABNF
grammars into PEG parsers, an ABNF processing tool, <tt>abnfrob</tt>, was
added that can mechanically replace each character in the supplied
grammar for an app-string definition by the ways that this character
can be represented in the overall ABNF.</t>
      <t>Such an ABNF processing tool can be used while building an EDN tool,
by converting some of the app-string grammars for integration into the
overall grammar, combining the processing into a single pass.
Other app-string grammars (including future ones still to be defined
and possibly added as a runtime extension) might be kept separate from
the overall grammar.
The latter approach can be particularly useful if the platform already
has parsers for the app-specific grammar, which is quite likely for
instance for IP addresses (<tt>ip''</tt>) and <xref target="RFC3339"/> date/time strings (<tt>dt''</tt>).</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The concept of application-oriented extensions to diagnostic notation,
as well as the definition for the "dt" extension, were inspired by the
CoRAL work by Klaus Hartke.</t>
      <t>(TBD)</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
kMl6LGUiNW1SPs6W6MQ5Uzr3aGAL9tavgSotVVG76CDGBZNjwEu+iFlnfhlk
IbInyNLa8KcVLHE7ghucFvsrdTF0f5WzmPlkKzoP9oR1uVJ9dJJEdBGAUWde
1FfDqA/cZo/gcgFraKo57V3SUHBV7yIO7RG3TI5yT4tygjWbLUadoTWNi8Rz
mWsmSqi37Chjyaekk2bvqeFOd8gR+gYfe2pc6u4MxZjVw6cm32EOaQzKTpZn
RO05lQCcHF1Qg5UCJp9SztzhvFfsHYD5himo+EMAvFHxfllICaVYbPfO97uy
CdaCWSFf6ITrBbgCPTooXLl8kZmMrwdXKIii3a4Zii0A1YtF3T9sqxmPtfoK
KjdCCid67O9vB9uEWwlbAvAYnh5sU+f0ahOWA/HX5e8H25qxowlbQStwLTA8
M166y81n6qFCDTWlOYVH5gLxpco2Aw47SbMWLM8RClxqoNkG4HO/ANZEks7q
baBeQF18Ibb+QPIcXF2dvHjx4sHeLlId2Mf73V36nz4/xhNaiD6knqj1TndX
ny7n6xz/wd7vsiXl6+k0/bJdzp6k3zJOZBTtyrUiJissps7FUunA97rMltQd
uj1wOX4mubdijLZexHJ4YcVVkJ18vTehIK4g42sPewEBlXgGjc5NeH8UxcXn
ZoA/dzhXQ1ZoyvhgtTY/yqY/vPX3VdYOVgHLoWFAn4BcuGZksewKvp5KzUvx
U4aVPyzOa9RZSAe1tRLF7YldKBgxsGOlomwtrCVRPKUQBvbpoFUeUpsXHBA7
fHjwYH9vd2fQ79lPO/3esO1zE4aZWDIzRC6FnT1zEJsHe9RLb9fsHJjpjjno
mekeahK2OEEXQhR97mTCPKmrrtXWEnxMbIKc2cPB2Q513usZ+b8dpWaMsz5G
mQpx4I1CvkqX3sUXn9Wg09L4eCEbIcITF8t6SyAHvIZBaNbodsnjR76xFNr6
YnB6WuPT+pHE9fubwLmWyki3QiJCVMS4UUyZuCrVtoFXOAgfgzl6kNzGLpuT
FratOQiw1UxmSbBy6cI5F0BNnu0gNDzI8kIbPTzr40qfDYZtSXS/M2R217xU
/kQkEptuDtkOfHuU9ZVCUIsQm2lypf1djhkQZ6g/sb6qfP1VStycbcsfFS1+
zC6Wwg0y1BF0gGtTYLFjadER603FV9TmPKrZPvTD08vcDO88Pd4gxMzsbu9t
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

-->

</rfc>
