<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-asdf-sdf-protocol-mapping-12" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="sdf-protocol-mapping">SDF Protocol Mapping</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-asdf-sdf-protocol-mapping-12"/>
    <author initials="R." surname="Mohan" fullname="Rohit Mohan">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>rohitmo@cisco.com</email>
      </address>
    </author>
    <author initials="B." surname="Brinckman" fullname="Bart Brinckman">
      <organization>Cisco Systems</organization>
      <address>
        <postal>
          <street>170 West Tasman Drive</street>
          <city>San Jose</city>
          <code>95134</code>
          <country>USA</country>
        </postal>
        <email>bbrinckm@cisco.com</email>
      </address>
    </author>
    <author initials="L." surname="Corneo" fullname="Lorenzo Corneo">
      <organization>Ericsson</organization>
      <address>
        <postal>
          <street>Hirsalantie 11</street>
          <city>Jorvas</city>
          <code>1296</code>
          <country>Finland</country>
        </postal>
        <email>lorenzo.corneo@ericsson.com</email>
      </address>
    </author>
    <date year="2026" month="September" day="15"/>
    <area>Applications and Real-Time</area>
    <workgroup>A Semantic Definition Format for Data and Interactions of Things</workgroup>
    <keyword>IoT</keyword>
    <abstract>
      <?line 76?>

<t>This document defines protocol mapping extensions for the Semantic Definition
Format (SDF) to enable mapping of protocol-agnostic SDF affordances to
protocol-specific operations. The protocol mapping mechanism allows SDF models
to specify how properties, actions, and events should be accessed using a
specific protocol. This document defines protocol mappings for Bluetooth Low
Energy and Zigbee, and the mechanism can be extended to other protocols such as
HTTP and CoAP. This document also describes a method to extend SCIM with an SDF
model mapping.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol-mapping/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        A Semantic Definition Format for Data and Interactions of Things Working Group mailing list (<eref target="mailto:asdf@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/asdf/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/asdf/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-asdf/sdf-protocol-mapping"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The Semantic Definition Format (SDF) <xref target="RFC9880"/> provides a protocol-agnostic way
to describe IoT devices and their capabilities through properties, actions, and
events (collectively called affordances). A device described by an SDF model, however, is
accessed over a specific communication protocol. To interact with such a device
based on its SDF model, there needs to be a mechanism to map the
protocol-agnostic SDF definitions to the protocol-specific operations that
access the device. Moreover, such a mechanism
needs to be extensible for enabling implementers to provide novel SDF protocol
mappings to expand the SDF ecosystem. SDF protocol mappings may target a variety
of protocols spanning from non-IP protocols commonly used in IoT environments,
such as <xref target="BLE53"/> and <xref target="Zigbee30"/>, to IP-based protocols such as HTTP
<xref target="RFC9110"/> and CoAP <xref target="RFC7252"/>. This document provides the required
mechanism by defining:</t>
      <ul spacing="normal">
        <li>
          <t>The <tt>sdfProtocolMap</tt> quality, which allows SDF models to include
protocol-specific mapping information attached to the protocol-agnostic
definitions, see <xref target="sdf-pm"/>. An <tt>sdfProtocolMap</tt> <bcp14>MAY</bcp14> be applied to an SDF
affordance, be it an <tt>sdfProperty</tt>, <tt>sdfEvent</tt> or <tt>sdfAction</tt>. The mapping
enables use cases such as application gateways or multi-protocol gateways that
translate between different IoT protocols, automated generation of
protocol-specific implementations from SDF models, and interoperability across
heterogeneous device ecosystems.</t>
        </li>
        <li>
          <t>Two SDF protocol mappings for Bluetooth and Zigbee protocols, see <xref target="ble-pm"/>
and <xref target="zigbee-pm"/> respectively.</t>
        </li>
        <li>
          <t>An SDF model extension for SCIM. While SDF provides a way to describe a class
of devices, SCIM describes a device instance. The SDF model extension for SCIM
enables the inclusion of SDF models for the class of devices a device belongs
to in the SCIM object, see <xref target="scim-sdf-extension"/>.</t>
        </li>
        <li>
          <t>An IANA registry for defining additional SDF protocol mappings (in addition to
the BLE and Zigbee provided in this document), see <xref target="iana-prot-map"/>.</t>
        </li>
      </ul>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The syntax extensions to <xref target="RFC9880"/> are shown in the Concise Data Definition
Language (CDDL) <xref target="RFC8610"/>, which describes their JSON representation.</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 BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="sdf-pm">
      <name>SDF Protocol Mapping Structure</name>
      <t>This section defines the structure of an <tt>sdfProtocolMap</tt>. Because each protocol
has its own addressing model, a single SDF affordance requires a distinct
mapping per protocol. For example, BLE addresses a property as a service
characteristic, while Zigbee addresses it as an attribute in a cluster of an
endpoint.</t>
      <t>The value of the <tt>sdfProtocolMap</tt> quality is a JSON object nested inside an SDF
affordance definition (<tt>sdfProperty</tt>, <tt>sdfAction</tt>, or <tt>sdfEvent</tt>).
Protocol-specific attributes are embedded within this object, keyed by a
protocol name registered in the IANA "SDF Protocol Mapping" registry
(<xref target="iana-prot-map"/>), e.g., "ble" or "zigbee".</t>
      <figure anchor="protmap">
        <name>SDF Protocol Mapping Structure</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="240" width="400" viewBox="0 0 400 240" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,48 L 24,64" fill="none" stroke="black"/>
              <path d="M 104,80 L 104,224" fill="none" stroke="black"/>
              <path d="M 176,112 L 176,128" fill="none" stroke="black"/>
              <path d="M 176,176 L 176,192" fill="none" stroke="black"/>
              <path d="M 24,64 L 72,64" fill="none" stroke="black"/>
              <path d="M 104,96 L 152,96" fill="none" stroke="black"/>
              <path d="M 176,128 L 200,128" fill="none" stroke="black"/>
              <path d="M 104,160 L 152,160" fill="none" stroke="black"/>
              <path d="M 176,192 L 200,192" fill="none" stroke="black"/>
              <path d="M 104,224 L 152,224" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="208,192 196,186.4 196,197.6" fill="black" transform="rotate(0,200,192)"/>
              <polygon class="arrowhead" points="208,128 196,122.4 196,133.6" fill="black" transform="rotate(0,200,128)"/>
              <polygon class="arrowhead" points="160,224 148,218.4 148,229.6" fill="black" transform="rotate(0,152,224)"/>
              <polygon class="arrowhead" points="160,160 148,154.4 148,165.6" fill="black" transform="rotate(0,152,160)"/>
              <polygon class="arrowhead" points="160,96 148,90.4 148,101.6" fill="black" transform="rotate(0,152,96)"/>
              <polygon class="arrowhead" points="80,64 68,58.4 68,69.6" fill="black" transform="rotate(0,72,64)"/>
              <g class="text">
                <text x="48" y="36">sdfProperty</text>
                <text x="104" y="36">/</text>
                <text x="152" y="36">sdfAction</text>
                <text x="200" y="36">/</text>
                <text x="244" y="36">sdfEvent</text>
                <text x="140" y="68">sdfProtocolMap</text>
                <text x="176" y="100">ble</text>
                <text x="260" y="132">BLE-specific</text>
                <text x="344" y="132">mapping</text>
                <text x="188" y="164">zigbee</text>
                <text x="272" y="196">Zigbee-specific</text>
                <text x="368" y="196">mapping</text>
                <text x="176" y="228">...</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
sdfProperty / sdfAction / sdfEvent
  |
  +-----> sdfProtocolMap
            |
            +-----> ble
            |        |
            |        +--> BLE-specific mapping
            |
            +-----> zigbee
            |        |
            |        +--> Zigbee-specific mapping
            |
            +-----> ...
]]></artwork>
        </artset>
      </figure>
      <section anchor="sdf-extension-points">
        <name>SDF Extension Points</name>
        <t>The <tt>sdfProtocolMap</tt> quality is introduced into SDF affordance definitions
through the extension points defined in the formal syntax of <xref section="A" sectionFormat="of" target="RFC9880"/>. For each affordance type, an <tt>sdfProtocolMap</tt> entry is added
via the corresponding CDDL group socket. The contents of the
<tt>sdfProtocolMap</tt> object are in turn extensible through a
protocol-mapping-specific group socket.</t>
        <t>A protocol <bcp14>MAY</bcp14> choose to extend only the affordance types that are applicable to
it. For example, the BLE protocol mapping defines extensions for properties and
events but not for actions.</t>
        <section anchor="property-extension">
          <name>Property Extension</name>
          <t>The <tt>$$SDF-EXTENSION-PROPERTY</tt> group socket in the <tt>propertyqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfProperty</tt> definitions:</t>
          <figure anchor="sdf-prop-ext">
            <name>SDF Property Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-PROPERTY //= (
  sdfProtocolMap: {
    * $$SDF-PROPERTY-PROTOCOL-MAP
  }
)

property-protocol-map<name, props, read-props, write-props> = (
  name => props /
    {
      read: read-props,
      write: write-props
    }
)
]]></sourcecode>
          </figure>
          <t>The <tt>property-protocol-map</tt> generic (<xref target="sdf-prop-ext"/>) captures the common
structure of property protocol mappings. The <tt>name</tt> parameter is the protocol
name and <tt>props</tt> is the protocol-specific map of attributes. A protocol can
provide either:</t>
          <ul spacing="normal">
            <li>
              <t>A single mapping that applies to both read and write operations, or</t>
            </li>
            <li>
              <t>Separate <tt>read</tt> and <tt>write</tt> mappings when the protocol uses different
attributes for each direction.</t>
            </li>
          </ul>
          <t>To keep these two forms unambiguous, the protocol-specific attribute map
(the <tt>props</tt> type) <bcp14>MUST NOT</bcp14> define members named <tt>read</tt> or <tt>write</tt>.</t>
          <t>To extend <tt>$$SDF-PROPERTY-PROTOCOL-MAP</tt> for a new protocol (e.g.,
"new-protocol"), implementers <bcp14>MUST</bcp14> use the <tt>property-protocol-map</tt> generic with
the protocol name and a map type defining the protocol-specific attributes.</t>
          <t>It is to be noted that the protocol <tt>name</tt> (e.g., "new-protocol") <bcp14>MUST</bcp14> be
registered in the IANA registry defined in <xref target="iana-prot-map"/>.</t>
          <t>For a fictitious "new-protocol" that uses the same attributes for both read
and write operations, the generic invocation could be defined as:</t>
          <figure anchor="prop-ext-example">
            <name>Example Property Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"new-protocol", new-protocol-property, new-\
                            protocol-property, new-protocol-property>
)

new-protocol-property = {
  attributeA: text,
  attributeB: uint
}
]]></sourcecode>
          </figure>
          <t>An SDF model using a single mapping for both read and write operations
could look like:</t>
          <figure anchor="prop-ext-json-example">
            <name>Example Property Protocol Map with a Single Mapping</name>
            <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "new-protocol": {
          "attributeA": "temperature-service",
          "attributeB": 1
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
          <t>An SDF model using separate read and write mappings could look like:</t>
          <figure anchor="prop-ext-rw-json-example">
            <name>Example Property Protocol Map with Separate Read and Write Mappings</name>
            <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "new-protocol": {
          "read": {
            "attributeA": "temperature-read-service",
            "attributeB": 1
          },
          "write": {
            "attributeA": "temperature-write-service",
            "attributeB": 2
          }
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
          <t>When a protocol instead uses different attributes for read and write
operations, the <tt>read-props</tt> and <tt>write-props</tt> type parameters can be
given distinct types:</t>
          <figure anchor="prop-ext-rw-types-example">
            <name>Example Property Protocol Map Extension with Distinct Read and Write Attribute Types</name>
            <sourcecode type="cddl"><![CDATA[=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"new-protocol", new-protocol-property, new-\
                 protocol-property-read, new-protocol-property-write>
)

new-protocol-property-read = {
  attributeA: text
}

new-protocol-property-write = {
  attributeA: text,
  attributeB: uint
}
]]></sourcecode>
          </figure>
          <t>An SDF model using this extension could look like:</t>
          <figure anchor="prop-ext-rw-types-json-example">
            <name>Example Property Protocol Map with Distinct Read and Write Attributes</name>
            <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "new-protocol": {
          "read": {
            "attributeA": "temperature-read-service"
          },
          "write": {
            "attributeA": "temperature-write-service",
            "attributeB": 2
          }
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="action-extension">
          <name>Action Extension</name>
          <t>The <tt>$$SDF-EXTENSION-ACTION</tt> group socket in the <tt>actionqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfAction</tt> definitions:</t>
          <figure anchor="sdf-action-ext">
            <name>SDF Action Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-ACTION //= (
  sdfProtocolMap: {
    * $$SDF-ACTION-PROTOCOL-MAP
  }
)
]]></sourcecode>
          </figure>
          <t>Actions use a simpler structure than properties, as they do not require the
read/write distinction. To extend <tt>$$SDF-ACTION-PROTOCOL-MAP</tt> for a new
protocol, implementers <bcp14>MUST</bcp14> add a group entry that maps the protocol name to the
protocol-specific attributes. For example, an extension for a fictitious
"new-protocol" could be defined as:</t>
          <figure anchor="action-ext-example">
            <name>Example Action Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[$$SDF-ACTION-PROTOCOL-MAP //= (
  "new-protocol": new-protocol-action
)

new-protocol-action = {
  commandID: uint
}
]]></sourcecode>
          </figure>
          <t>An SDF model using this extension could look like:</t>
          <figure anchor="action-ext-json-example">
            <name>Example Action Protocol Map in JSON</name>
            <sourcecode type="json"><![CDATA[{
  "sdfAction": {
    "reset": {
      "sdfProtocolMap": {
        "new-protocol": {
          "commandID": 42
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
        <section anchor="event-extension">
          <name>Event Extension</name>
          <t>The <tt>$$SDF-EXTENSION-EVENT</tt> group socket in the <tt>eventqualities</tt>
rule of <xref section="A" sectionFormat="of" target="RFC9880"/> is used to add protocol mapping to
<tt>sdfEvent</tt> definitions:</t>
          <figure anchor="sdf-event-ext">
            <name>SDF Event Extension Point for Protocol Mapping</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EXTENSION-EVENT //= (
  sdfProtocolMap: {
    * $$SDF-EVENT-PROTOCOL-MAP
  }
)
]]></sourcecode>
          </figure>
          <t>Events follow the same simple pattern as actions. To extend
<tt>$$SDF-EVENT-PROTOCOL-MAP</tt> for a new protocol, implementers add a group entry
that maps the protocol name to the protocol-specific attributes. For example, an
extension for a fictitious "new-protocol" could be defined as:</t>
          <figure anchor="event-ext-example">
            <name>Example Event Protocol Map Extension</name>
            <sourcecode type="cddl"><![CDATA[$$SDF-EVENT-PROTOCOL-MAP //= (
  "new-protocol": new-protocol-event
)

new-protocol-event = {
  eventID: uint
}
]]></sourcecode>
          </figure>
          <t>An SDF model using this extension could look like:</t>
          <figure anchor="event-ext-json-example">
            <name>Example Event Protocol Map in JSON</name>
            <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "alert": {
      "sdfProtocolMap": {
        "new-protocol": {
          "eventID": 3
        }
      }
    }
  }
}
]]></sourcecode>
          </figure>
        </section>
      </section>
      <section anchor="reuse">
        <name>Reusing Protocol Mappings</name>
        <t>Affordances often share most of their protocol mapping, e.g. when several Zigbee
attributes are reached through the same endpoint and application profile. The
<tt>sdfRef</tt> quality (<xref section="4.4" sectionFormat="of" target="RFC9880"/>) can then be used to base one affordance
definition on another and patch only the differing protocol attributes; a <tt>null</tt>
value removes an inherited one. A definition (e.g., <tt>sdfProperty</tt>) intended only for
such reuse can be placed at the top level of the SDF model (<xref section="3.4" sectionFormat="of" target="RFC9880"/>),
where it does not declare an affordance of any <tt>sdfObject</tt>.</t>
        <t>For example, with two Zigbee attributes on the same endpoint and profile:</t>
        <figure anchor="reuse-json-example">
          <name>Reusing a Protocol Mapping via sdfRef</name>
          <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "zigbeeTemperatureAttributeBase": {
      "type": "number",
      "unit": "Cel",
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "profileID": 260,
          "clusterID": 1026,
          "attributeID": 0,
          "attributeType": 41
        }
      }
    }
  },
  "sdfObject": {
    "sensor": {
      "sdfProperty": {
        "temperature": {
          "sdfRef": "#/sdfProperty/zigbeeTemperatureAttributeBase"
        },
        "humidity": {
          "sdfRef": "#/sdfProperty/zigbeeTemperatureAttributeBase",
          "unit": "%RH",
          "minimum": 0,
          "sdfProtocolMap": {
            "zigbee": {
              "clusterID": 1029,
              "attributeType": 33
            }
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </figure>
        <t><tt>humidity</tt> adds a <tt>minimum</tt> of its own and restates only the two Zigbee attributes
that differ, <tt>clusterID</tt> and <tt>attributeType</tt>; <tt>endpointID</tt>, <tt>profileID</tt>, and
<tt>attributeID</tt> come from the base. Adding <tt>"profileID": null</tt> there would drop the
profile instead of inheriting it.</t>
        <t>The CDDL here describes resolved models (<xref section="4.4.1" sectionFormat="of" target="RFC9880"/>) and does not admit
<tt>sdfRef</tt> inside the protocol-specific attribute maps. A definition supplying only the
differing attributes therefore conforms to this specification only once <tt>sdfRef</tt> has
been resolved. The referenced definition remains part of the resolved model, so it has
to carry a complete and valid protocol mapping.</t>
      </section>
    </section>
    <section anchor="registered-protocol-mappings">
      <name>Registered Protocol Mappings</name>
      <t>This section defines the protocol mappings registered by this document.</t>
      <section anchor="ble-pm">
        <name>BLE</name>
        <t>The BLE protocol mapping allows SDF models to specify how properties and events
should be accessed using Bluetooth Low Energy (BLE) protocol <xref target="BLE53"/>. The
mapping includes details such as service IDs and characteristic IDs that are
used to access the corresponding SDF affordances.</t>
        <section anchor="properties">
          <name>Properties</name>
          <t>For <tt>sdfProperty</tt>, the BLE protocol mapping structure is defined as follows:</t>
          <figure anchor="blemap1">
            <name>CDDL definition for BLE Protocol Mapping for sdfProperty</name>
            <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"ble", ble-property, ble-property, ble-\
                                                            property>
)

ble-property = {
  serviceID: text,
  characteristicID: text
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>serviceID</tt> is the BLE service ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>characteristicID</tt> is the BLE characteristic ID that corresponds to the SDF property.</t>
            </li>
          </ul>
          <t>For example, a BLE protocol mapping for a temperature property:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
          "characteristicID": "00002a1c-0000-1000-8000-00805f9b34fb"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>For a temperature property that has different mappings for read and write operations,
here is an example of the BLE protocol mapping:</t>
          <sourcecode type="json"><![CDATA[=============== NOTE: '\' line wrapping per RFC 8792 ================

{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "ble": {
          "read": {
            "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
            "characteristicID": "00002a1c-0000-1000-8000-\
                                                        00805f9b34fb"
          },
          "write": {
            "serviceID": "00001809-0000-1000-8000-00805f9b34fb",
            "characteristicID": "00002a51-0000-1000-8000-\
                                                        00805f9b34fb"
          }
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events">
          <name>Events</name>
          <t>For <tt>sdfEvent</tt>s, the BLE protocol mapping structure is similar to
<tt>sdfProperties</tt>, but it <bcp14>MUST</bcp14> additionally include at least the <tt>type</tt> of
the event.</t>
          <figure anchor="blemap2">
            <name>BLE Protocol Mapping for sdfEvents</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-EVENT-PROTOCOL-MAP //= (
  ble: ble-event-map
)

ble-event-map = {
  type: "gatt",
  serviceID: text,
  characteristicID: text
} / { type: "advertisements" } / { type: "connection_events" }
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>type</tt> specifies the type of BLE event, such as "gatt" for GATT events,
"advertisements" for advertisement events, or "connection_events" for
connection-related events.</t>
            </li>
            <li>
              <t><tt>serviceID</tt> and <tt>characteristicID</tt> identify the GATT service and
characteristic. They <bcp14>MUST</bcp14> be present when <tt>type</tt> is <tt>"gatt"</tt>, and <bcp14>MUST</bcp14> be
absent when <tt>type</tt> is <tt>"advertisements"</tt> or <tt>"connection_events"</tt>.</t>
            </li>
          </ul>
          <t>For example, a BLE event mapping for a heart rate measurement event:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "heartRate": {
      "sdfProtocolMap": {
        "ble": {
          "type": "gatt",
          "serviceID": "0000180d-0000-1000-8000-00805f9b34fb",
          "characteristicID": "00002a37-0000-1000-8000-00805f9b34fb"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>Here is an example of an <tt>isPresent</tt> event using BLE advertisements:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "isPresent": {
      "sdfProtocolMap": {
        "ble": {
          "type": "advertisements"
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
      <section anchor="zigbee-pm">
        <name>Zigbee</name>
        <t>The Zigbee protocol mapping allows SDF models to specify how properties,
actions, and events should be accessed using the Zigbee protocol <xref target="Zigbee30"/>.
The mapping includes details such as cluster IDs and attribute IDs that are used
to access the corresponding SDF affordances.</t>
        <section anchor="properties-1">
          <name>Properties</name>
          <t>An <tt>sdfProperty</tt> is mapped to a Zigbee cluster attribute. The Zigbee property
protocol mapping structure is defined as follows:</t>
          <figure anchor="zigmap1">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfProperty</name>
            <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"zigbee", zigbee-property, zigbee-property, \
                                                     zigbee-property>
)

zigbee-property = {
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>attributeID</tt> is the Zigbee attribute ID that corresponds to the SDF property.</t>
            </li>
            <li>
              <t><tt>attributeType</tt> is the Zigbee data type of the attribute, as defined by the Zigbee Cluster Library <xref target="ZCL7"/>.</t>
            </li>
            <li>
              <t><tt>profileID</tt> is the Zigbee application profile ID (optional). If not provided, it defaults to the Home Automation profile (0x0104), which is the default application profile defined in <xref target="Zigbee30"/>.</t>
            </li>
            <li>
              <t><tt>manufacturerCode</tt> is the Zigbee manufacturer code of the attribute (optional).</t>
            </li>
          </ul>
          <t>For example, a Zigbee protocol mapping for a temperature property may look as
follows:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfProperty": {
    "temperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "endpointID": 1,
          "clusterID": 1026,
          "attributeID": 0,
          "attributeType": 41,
          "profileID": 260
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="events-1">
          <name>Events</name>
          <t>An <tt>sdfEvent</tt> is mapped to a Zigbee cluster event such as attribute reporting,
a device-initiated write to an attribute on the gateway, or a cluster command.
The Zigbee event protocol mapping structure is defined as follows. The
<tt>"attribute_reporting"</tt> and <tt>"write_event"</tt> variants reuse the
<tt>zigbee-property</tt> definition from <xref target="zigmap1"/> to identify the underlying
Zigbee attribute:</t>
          <figure anchor="zigmap-event">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfEvents</name>
            <sourcecode type="cddl"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-EVENT-PROTOCOL-MAP //= (
  zigbee: zigbee-event-map
)

zigbee-event-map = zigbee-attribute-reporting / zigbee-write-event \
             / zigbee-connection-event / zigbee-cluster-command-event

zigbee-attribute-reporting = {
  type: "attribute_reporting",
  ~zigbee-property,
  ? minReportingInterval: uint,
  ? maxReportingInterval: uint,
  ? reportableChange: number,
}

zigbee-write-event = {
  type: "write_event",
  ~zigbee-property,
}

zigbee-connection-event = {
  type: "connection_events",
}

zigbee-cluster-command-event = {
  type: "cluster_command",
  endpointID: uint,
  clusterID: uint,
  commandID: uint,
  direction: "client_to_server" / "server_to_client",
  ? profileID: uint,
  ? manufacturerCode: uint,
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>type</tt> is the type of Zigbee event. It <bcp14>MUST</bcp14> be one of:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>"attribute_reporting"</tt>: the event is triggered by Zigbee attribute
reporting.</t>
                </li>
                <li>
                  <t><tt>"write_event"</tt>: the event is triggered by the device writing to an
attribute on the gateway.</t>
                </li>
                <li>
                  <t><tt>"connection_events"</tt>: the event is triggered when a Zigbee end device
joins or leaves the Zigbee network.</t>
                </li>
                <li>
                  <t><tt>"cluster_command"</tt>: the event is triggered by a ZCL cluster-specific
command.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>endpointID</tt>, <tt>clusterID</tt>, <tt>attributeID</tt>, <tt>attributeType</tt>, <tt>profileID</tt>, and
<tt>manufacturerCode</tt> have the same meaning as described for <tt>sdfProperty</tt> in
<xref target="zigmap1"/>. These fields are present when <tt>type</tt> is <tt>"attribute_reporting"</tt>
or <tt>"write_event"</tt>, and <bcp14>MUST</bcp14> be absent when <tt>type</tt> is <tt>"connection_events"</tt>.</t>
            </li>
            <li>
              <t>For <tt>"cluster_command"</tt>, <tt>endpointID</tt> identifies the originating Zigbee end
device's source endpoint, <tt>clusterID</tt> identifies the cluster, and <tt>commandID</tt>
identifies the cluster-specific command. <tt>direction</tt> identifies the ZCL
command direction and <bcp14>MUST</bcp14> be present. It cannot be inferred from the
coordinator role: the gateway can be either the ZCL client or the ZCL server.
<tt>profileID</tt> and <tt>manufacturerCode</tt> have the same meaning as in <xref target="zigmap1"/>.</t>
            </li>
            <li>
              <t><tt>minReportingInterval</tt> is the minimum reporting interval in seconds
(optional). It is the minimum time between issued attribute reports and
only applies when <tt>type</tt> is <tt>"attribute_reporting"</tt>.</t>
            </li>
            <li>
              <t><tt>maxReportingInterval</tt> is the maximum reporting interval in seconds
(optional). It is the maximum time between issued attribute reports and
only applies when <tt>type</tt> is <tt>"attribute_reporting"</tt>.</t>
            </li>
            <li>
              <t><tt>reportableChange</tt> is the minimum change to the attribute value that triggers
a report (optional). It only applies when <tt>type</tt> is <tt>"attribute_reporting"</tt>
and to attributes whose <tt>attributeType</tt> is one of the "analog" data types
defined by the Zigbee Cluster Library <xref target="ZCL7"/> (e.g., unsigned
and signed integers, floating point numbers), as opposed to "discrete" data types
(e.g., booleans, enumerations, bitmaps), for which reporting a minimum
change is not meaningful. The value is interpreted in the same Zigbee data
type as the reported attribute's <tt>attributeType</tt>.</t>
            </li>
          </ul>
          <t>For example, a Zigbee event mapping for a temperature change report:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "temperatureChange": {
      "sdfProtocolMap": {
        "zigbee": {
          "type": "attribute_reporting",
          "profileID": 260,
          "endpointID": 1,
          "clusterID": 1026,
          "attributeID": 0,
          "attributeType": 41,
          "minReportingInterval": 10,
          "maxReportingInterval": 300,
          "reportableChange": 50
        }
      }
    }
  }
}
]]></sourcecode>
          <t>For example, a Zigbee switch sends an On command from its On/Off cluster client
to the gateway's On/Off cluster server:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "on": {
      "sdfProtocolMap": {
        "zigbee": {
          "type": "cluster_command",
          "profileID": 260,
          "endpointID": 1,
          "clusterID": 6,
          "commandID": 1,
          "direction": "client_to_server"
        }
      }
    }
  }
}
]]></sourcecode>
          <t>Here is an example of an <tt>isPresent</tt> event using Zigbee connection events:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfEvent": {
    "isPresent": {
      "sdfProtocolMap": {
        "zigbee": {
          "type": "connection_events"
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
        <section anchor="actions">
          <name>Actions</name>
          <t>An <tt>sdfAction</tt> is mapped to a Zigbee cluster command. The Zigbee protocol
mapping structure for actions is defined as follows:</t>
          <figure anchor="zigmap2">
            <name>CDDL definition for Zigbee Protocol Mapping for sdfAction</name>
            <sourcecode type="cddl"><![CDATA[
$$SDF-ACTION-PROTOCOL-MAP //= (
  zigbee: zigbee-action-map
)

zigbee-action-map = {
  endpointID: uint,
  clusterID: uint,
  commandID: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}
]]></sourcecode>
          </figure>
          <t>Where:</t>
          <ul spacing="normal">
            <li>
              <t><tt>endpointID</tt> is the Zigbee endpoint ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>clusterID</tt> is the Zigbee cluster ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>commandID</tt> is the Zigbee command ID that corresponds to the SDF action.</t>
            </li>
            <li>
              <t><tt>profileID</tt> has the same meaning and default as described for <tt>sdfProperty</tt> in
<xref target="zigmap1"/> (optional).</t>
            </li>
            <li>
              <t><tt>manufacturerCode</tt> is the Zigbee manufacturer code of the command (optional).</t>
            </li>
          </ul>
          <t>For example, a Zigbee protocol mapping to set a temperature:</t>
          <sourcecode type="json"><![CDATA[{
  "sdfAction": {
    "setTemperature": {
      "sdfProtocolMap": {
        "zigbee": {
          "profileID": 260,
          "endpointID": 1,
          "clusterID": 1026,
          "commandID": 0
        }
      }
    }
  }
}
]]></sourcecode>
        </section>
      </section>
    </section>
    <section anchor="scim-sdf-extension">
      <name>SCIM SDF Extension</name>
      <t>While SDF provides a way to describe a device class and SCIM defines a device
instance, a method is needed to associate a mapping between an instance of a
device and its associated SDF models. To accomplish so, this document defines
a SCIM extension that <bcp14>MAY</bcp14> be used in conjunction with
<xref target="RFC9944"/> in <xref target="scim-sdf-extension-schema"/>. Implementation
of this SCIM extension is <bcp14>OPTIONAL</bcp14> and independent of the protocol mapping
functionality defined in the rest of this document. The SCIM schema attributes
used here are described in Section 7 of <xref target="RFC7643"/>.</t>
      <figure anchor="scim-sdf-extension-schema">
        <name>SCIM SDF Extension Schema</name>
        <sourcecode type="json"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

{
    "id": "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device",
    "name": "SDFExtension",
    "description": "Device extension schema for SDF.",
    "attributes": [
        {
            "name": "sdf",
            "type": "string",
            "description": "SDF models supported by the device.",
            "multiValued": true,
            "required": true,
            "caseExact": true,
            "mutability": "readWrite",
            "returned": "default",
            "uniqueness": "none"
        }
    ],
    "meta": {
        "resourceType": "Schema",
        "location": "/v2/Schemas/urn:ietf:params:scim:schemas:\
                                            extension:sdf:2.0:Device"
    }
}
]]></sourcecode>
      </figure>
      <t>Here is an example SCIM device schema extension with SDF models:</t>
      <sourcecode type="json"><![CDATA[{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:Device",
        "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device"
    ],
    "id": "e9e30dba-f08f-4109-8486-d5c6a3316111",
    "displayName": "Heart Monitor",
    "active": true,
    "urn:ietf:params:scim:schemas:extension:sdf:2.0:Device": {
        "sdf": [
            "https://example.com/thermometer#/sdfThing/thermometer",
            "https://example.com/heartrate#/sdfObject/healthsensor"
        ]
    }
}
]]></sourcecode>
      <t>An SDF model <bcp14>MUST</bcp14> be referenced with the <tt>sdf</tt> keyword inside the SCIM device
schema as described in <xref target="RFC9944"/>.</t>
    </section>
    <section removeInRFC="true" anchor="implementation-status">
      <name>Implementation Status</name>
      <t>This section records the status of known implementations of the
protocol defined by this specification at the time of posting of
this Internet-Draft, and is based on a proposal described in
<xref target="RFC7942"/>.  The description of implementations in this section is
intended to assist the IETF in its decision processes in
progressing drafts to RFCs.  Please note that the listing of any
individual implementation here does not imply endorsement by the
IETF.  Furthermore, no effort has been spent to verify the
information presented here that was supplied by IETF contributors.
This is not intended as, and must not be construed to be, a
catalog of available implementations or their features.  Readers
are advised to note that other implementations may exist.</t>
      <t>According to <xref target="RFC7942"/>, "this will allow reviewers and working
groups to assign due consideration to documents that have the
benefit of running code, which may serve as evidence of valuable
experimentation and feedback that have made the implemented
protocols more mature.  It is up to the individual working groups
to use this information as they see fit".</t>
      <section anchor="tiedie-iot">
        <name>TieDie IoT</name>
        <t>Organization: Cisco Systems, North Carolina State University</t>
        <t>Description: Open-source implementation of a gateway and SDKs that implement the SDF Protocol Mapping for BLE.</t>
        <t>Level of maturity: Open-source prototype</t>
        <t>Coverage: All SDF Protocol Mappings for BLE</t>
        <t>Version compatibility: draft-11</t>
        <t>Licensing: Apache License, Version 2.0</t>
        <t>URL: <eref target="https://github.com/iot-onboarding/tiedie"/></t>
      </section>
      <section anchor="cisco-sensor-connect-for-iot-services">
        <name>Cisco Sensor Connect for IoT Services</name>
        <t>Organization: Cisco Systems</t>
        <t>Description: Commercial solution that delivers advanced BLE capabilities over Cisco Wireless infrastructure.</t>
        <t>Level of maturity: Production</t>
        <t>Coverage: All SDF Protocol Mappings for BLE and Zigbee</t>
        <t>Version compatibility: draft-11</t>
        <t>Licensing: Proprietary</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The security considerations of <xref target="RFC9880"/> apply to this document as well.</t>
      <t>Each protocol mapped using this mechanism has its own security model.
The protocol mapping mechanism defined in this document does not provide
additional security beyond what is offered by the underlying protocols.
Implementations <bcp14>MUST</bcp14> ensure that appropriate protocol-level security
mechanisms are employed when accessing affordances through the mapped
protocol operations.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This section provides guidance to the Internet Assigned Numbers Authority
(IANA) regarding registration of values related to this document,
in accordance with <xref target="RFC8126"/>.</t>
      <section anchor="iana-prot-map">
        <name>Protocol Mapping</name>
        <t>IANA is requested to create a new registry called "SDF Protocol Mapping" in
the "Semantic Definition Format (SDF)" registry group <xref target="IANA.sdf"/>, with the following template:</t>
        <ul spacing="normal">
          <li>
            <t>Protocol map name, as per <tt>sdfProtocolMap</tt></t>
          </li>
          <li>
            <t>Protocol name</t>
          </li>
          <li>
            <t>Description</t>
          </li>
          <li>
            <t>Reference of the specification describing the protocol mapping.</t>
          </li>
        </ul>
        <t>The registration policy for this registry is "Specification Required" as
defined in Section 4.6 of <xref target="RFC8126"/>. Protocol names used as keys in the
<tt>sdfProtocolMap</tt> object (e.g., "ble", "zigbee") are registered in this
registry.</t>
        <t>The specification describing a new SDF protocol mapping is expected to
include:</t>
        <ul spacing="normal">
          <li>
            <t>A CDDL definition that extends at least one of the group sockets
defined in this document:
<tt>$$SDF-PROPERTY-PROTOCOL-MAP</tt> (<xref target="property-extension"/>),
<tt>$$SDF-ACTION-PROTOCOL-MAP</tt> (<xref target="action-extension"/>), or
<tt>$$SDF-EVENT-PROTOCOL-MAP</tt> (<xref target="event-extension"/>).
Property mappings use the <tt>property-protocol-map</tt> generic
(<xref target="property-extension"/>) to ensure a consistent structure.</t>
          </li>
          <li>
            <t>A description of the protocol-specific attributes introduced by the
CDDL extension, including their semantics and how they relate to the
underlying protocol operations.</t>
          </li>
        </ul>
        <t>The designated expert(s) verify that the specification meets the above
requirements, and that the protocol map name is appropriately named and
unlikely to cause confusion.</t>
        <t>The registrant of an existing entry may request updates to that entry, subject to the same expert review.
They should verify that updates preserve backward compatibility with deployed implementations, or if breaking changes are necessary, consider whether a new registry entry is more appropriate.</t>
        <t>The following protocol mappings are described in this document:</t>
        <table anchor="protmap-reg">
          <name>Protocol Mapping Registry</name>
          <thead>
            <tr>
              <th align="left">Protocol Map Name</th>
              <th align="left">Protocol Name</th>
              <th align="left">Description</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ble</td>
              <td align="left">Bluetooth Low Energy (BLE)</td>
              <td align="left">Protocol mapping for BLE devices</td>
              <td align="left">This document, <xref target="ble-pm"/></td>
            </tr>
            <tr>
              <td align="left">zigbee</td>
              <td align="left">Zigbee</td>
              <td align="left">Protocol mapping for Zigbee devices</td>
              <td align="left">This document, <xref target="zigbee-pm"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="scim-device-schema-sdf-extension">
        <name>SCIM Device Schema SDF Extension</name>
        <t>IANA is requested to create the following extension in the "SCIM
Server-Related Schema URIs" registry, within the "System for Cross-domain
Identity Management (SCIM) Schema URIs" registry group <xref target="IANA.scim"/>, as
described in <xref target="scim-sdf-extension"/>:</t>
        <table anchor="iana-scim">
          <name>SCIM Device Schema SDF Extension</name>
          <thead>
            <tr>
              <th align="left">URN</th>
              <th align="left">Description</th>
              <th align="left">Resource Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">urn:ietf:params:scim: schemas:extension: sdf:2.0:Device</td>
              <td align="left">SDF Extension</td>
              <td align="left">Device</td>
              <td align="left">This document, <xref target="scim-sdf-extension"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative 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="RFC9880">
          <front>
            <title>Semantic Definition Format (SDF) for Data and Interactions of Things</title>
            <author fullname="M. Koster" initials="M." role="editor" surname="Koster"/>
            <author fullname="C. Bormann" initials="C." role="editor" surname="Bormann"/>
            <author fullname="A. Keränen" initials="A." surname="Keränen"/>
            <date month="January" year="2026"/>
            <abstract>
              <t>The Semantic Definition Format (SDF) is a format for domain experts to use in the creation and maintenance of data and interaction models that describe Things, i.e., physical objects that are available for interaction over a network. An SDF specification describes definitions of SDF Objects/SDF Things and their associated interactions (Events, Actions, and Properties), as well as the Data types for the information exchanged in those interactions. Tools convert this format to database formats and other serializations as needed.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9880"/>
          <seriesInfo name="DOI" value="10.17487/RFC9880"/>
        </reference>
        <reference anchor="RFC9944">
          <front>
            <title>Device Schema Extensions to the System for Cross-Domain Identity Management (SCIM) Model</title>
            <author fullname="M. Shahzad" initials="M." surname="Shahzad"/>
            <author fullname="H. Iqbal" initials="H." surname="Iqbal"/>
            <author fullname="E. Lear" initials="E." surname="Lear"/>
            <date month="May" year="2026"/>
            <abstract>
              <t>The initial core schema for the System for Cross-domain Identity Management (SCIM) was designed for provisioning users. This memo specifies schema extensions that enable provisioning of devices using various underlying bootstrapping systems such as Wi-Fi Easy Connect, FIDO device onboarding vouchers, Bluetooth Low Energy (BLE) passcodes, and MAC Authenticated Bypass (MAB).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9944"/>
          <seriesInfo name="DOI" value="10.17487/RFC9944"/>
        </reference>
        <reference anchor="BLE53" target="https://www.bluetooth.com/specifications/specs/core-specification-5-3/">
          <front>
            <title>Bluetooth Core Specification Version 5.3</title>
            <author>
              <organization>Bluetooth SIG</organization>
            </author>
            <date year="2021" month="July" day="13"/>
          </front>
        </reference>
        <reference anchor="Zigbee30" target="https://csa-iot.org/wp-content/uploads/2024/07/docs-05-3474-23-csg-zigbee-specificationR23.1.pdf">
          <front>
            <title>Zigbee Specification</title>
            <author>
              <organization>Connectivity Standards Alliance</organization>
            </author>
            <date year="2024" month="July"/>
          </front>
          <seriesInfo name="CSA" value="Document 05-3474-23 (Revision R23.1)"/>
        </reference>
        <reference anchor="ZCL7" target="https://csa-iot.org/wp-content/uploads/2022/01/07-5123-07-zigbeeclusterlibrary_revision_7-1.pdf">
          <front>
            <title>Zigbee Cluster Library Specification</title>
            <author>
              <organization>Connectivity Standards Alliance</organization>
            </author>
            <date year="2018" month="February"/>
          </front>
          <seriesInfo name="CSA" value="Document 07-5123 (Revision 7)"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7643">
          <front>
            <title>System for Cross-domain Identity Management: Core Schema</title>
            <author fullname="P. Hunt" initials="P." role="editor" surname="Hunt"/>
            <author fullname="K. Grizzle" initials="K." surname="Grizzle"/>
            <author fullname="E. Wahlstroem" initials="E." surname="Wahlstroem"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="September" year="2015"/>
            <abstract>
              <t>The System for Cross-domain Identity Management (SCIM) specifications are designed to make identity management in cloud-based applications and services easier. The specification suite builds upon experience with existing schemas and deployments, placing specific emphasis on simplicity of development and integration, while applying existing authentication, authorization, and privacy models. Its intent is to reduce the cost and complexity of user management operations by providing a common user schema and extension model as well as binding documents to provide patterns for exchanging this schema using HTTP.</t>
              <t>This document provides a platform-neutral schema and extension model for representing users and groups and other resource types in JSON format. This schema is intended for exchange and use with cloud service providers.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7643"/>
          <seriesInfo name="DOI" value="10.17487/RFC7643"/>
        </reference>
        <reference anchor="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>
        <reference anchor="IANA.sdf" target="https://www.iana.org/assignments/sdf">
          <front>
            <title>Semantic Definition Format (SDF)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="IANA.scim" target="https://www.iana.org/assignments/scim">
          <front>
            <title>System for Cross-domain Identity Management (SCIM) Schema URIs</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC7252">
          <front>
            <title>The Constrained Application Protocol (CoAP)</title>
            <author fullname="Z. Shelby" initials="Z." surname="Shelby"/>
            <author fullname="K. Hartke" initials="K." surname="Hartke"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2014"/>
            <abstract>
              <t>The Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use with constrained nodes and constrained (e.g., low-power, lossy) networks. The nodes often have 8-bit microcontrollers with small amounts of ROM and RAM, while constrained networks such as IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs) often have high packet error rates and a typical throughput of 10s of kbit/s. The protocol is designed for machine- to-machine (M2M) applications such as smart energy and building automation.</t>
              <t>CoAP provides a request/response interaction model between application endpoints, supports built-in discovery of services and resources, and includes key concepts of the Web such as URIs and Internet media types. CoAP is designed to easily interface with HTTP for integration with the Web while meeting specialized requirements such as multicast support, very low overhead, and simplicity for constrained environments.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7252"/>
          <seriesInfo name="DOI" value="10.17487/RFC7252"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
      </references>
    </references>
    <?line 1097?>

<section anchor="cddl-definition">
      <name>CDDL Definition</name>
      <t>This appendix contains the combined CDDL definitions for the SDF protocol mappings.</t>
      <figure anchor="sdf-protocol-map-cddl">
        <name>CDDL for SDF protocol mappings</name>
        <sourcecode type="cddl" name="sdf-protocol-map.cddl" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

$$SDF-EXTENSION-PROPERTY //= (
  sdfProtocolMap: {
    * $$SDF-PROPERTY-PROTOCOL-MAP
  }
)

property-protocol-map<name, props, read-props, write-props> = (
  name => props /
    {
      read: read-props,
      write: write-props
    }
)

$$SDF-EXTENSION-ACTION //= (
  sdfProtocolMap: {
    * $$SDF-ACTION-PROTOCOL-MAP
  }
)

$$SDF-EXTENSION-EVENT //= (
  sdfProtocolMap: {
    * $$SDF-EVENT-PROTOCOL-MAP
  }
)

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"ble", ble-property, ble-property, ble-\
                                                            property>
)

ble-property = {
  serviceID: text,
  characteristicID: text
}

$$SDF-EVENT-PROTOCOL-MAP //= (
  ble: ble-event-map
)

ble-event-map = {
  type: "gatt",
  serviceID: text,
  characteristicID: text
} / { type: "advertisements" } / { type: "connection_events" }

$$SDF-PROPERTY-PROTOCOL-MAP //= (
  property-protocol-map<"zigbee", zigbee-property, zigbee-property, \
                                                     zigbee-property>
)

zigbee-property = {
  endpointID: uint,
  clusterID: uint,
  attributeID: uint,
  attributeType: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}

$$SDF-EVENT-PROTOCOL-MAP //= (
  zigbee: zigbee-event-map
)

zigbee-event-map = zigbee-attribute-reporting / zigbee-write-event \
             / zigbee-connection-event / zigbee-cluster-command-event

zigbee-attribute-reporting = {
  type: "attribute_reporting",
  ~zigbee-property,
  ? minReportingInterval: uint,
  ? maxReportingInterval: uint,
  ? reportableChange: number,
}

zigbee-write-event = {
  type: "write_event",
  ~zigbee-property,
}

zigbee-connection-event = {
  type: "connection_events",
}

zigbee-cluster-command-event = {
  type: "cluster_command",
  endpointID: uint,
  clusterID: uint,
  commandID: uint,
  direction: "client_to_server" / "server_to_client",
  ? profileID: uint,
  ? manufacturerCode: uint,
}

$$SDF-ACTION-PROTOCOL-MAP //= (
  zigbee: zigbee-action-map
)

zigbee-action-map = {
  endpointID: uint,
  clusterID: uint,
  commandID: uint,
  ? profileID: uint,
  ? manufacturerCode: uint,
}

]]></sourcecode>
      </figure>
    </section>
    <section anchor="openapi-definition">
      <name>OpenAPI Definition</name>
      <t>The following non-normative model is provided for convenience of the implementer.</t>
      <figure anchor="protocolmapmodel">
        <name>OpenAPI model</name>
        <sourcecode type="yaml" name="ProtocolMap.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping
  description: |-
    SDF Protocol Mapping. When adding a
    new protocol mapping please add a reference to the protocol map
    for all the schemas in this file.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol Map for a property
    ProtocolMap-Property:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-BLE.yaml#/components/schemas/\
                                             ProtocolMap-BLE-Propmap'
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/\
                                          ProtocolMap-Zigbee-Propmap'

## Protocol Map for an event
    ProtocolMap-Event:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-BLE.yaml#/components/schemas/\
                                               ProtocolMap-BLE-Event'
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/\
                                            ProtocolMap-Zigbee-Event'

## Protocol Map for an action
    ProtocolMap-Action:
      type: object
      properties:
        sdfProtocolMap:
          oneOf:  
            - $ref: './ProtocolMap-Zigbee.yaml#/components/schemas/\
                                           ProtocolMap-Zigbee-Action'
 
]]></sourcecode>
      </figure>
      <section anchor="protocol-map-for-ble">
        <name>Protocol map for BLE</name>
        <figure anchor="protocolmapble">
          <name>OpenAPI model for BLE</name>
          <sourcecode type="yaml" name="ProtocolMap-BLE.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping for BLE
  description: |-
    SDF Protocol Mapping for BLE devices.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol Mapping for BLE Property
    ProtocolMap-BLE-Propmap:
      required:
        - ble
      type: object
      properties:
        ble:
          oneOf:
            - $ref: '#/components/schemas/BLE-Property'
            - type: object
              required:
                - read
                - write
              properties:
                read:
                  $ref: '#/components/schemas/BLE-Property'
                write:
                  $ref: '#/components/schemas/BLE-Property'

## Reusable BLE property object
    BLE-Property:
      required:
        - serviceID
        - characteristicID
      type: object
      properties:
        serviceID:
          type: string
          format: uuid
          example: 00001809-0000-1000-8000-00805f9b34fb
        characteristicID:
          type: string
          format: uuid
          example: 00002a1c-0000-1000-8000-00805f9b34fb

## Defines different types of BLE events
    ProtocolMap-BLE-Event:
      required:
        - ble
      type: object
      properties:
        ble:
          oneOf:
            - type: object
              required:
                - type
                - serviceID
                - characteristicID
              properties:
                type:
                  type: string
                  example: gatt
                  enum:
                    - gatt
                serviceID:
                  type: string
                  example: 00001809-0000-1000-8000-00805f9b34fb
                characteristicID:
                  type: string
                  example: 00002a1c-0000-1000-8000-00805f9b34fb
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  example: advertisements
                  enum:
                    - advertisements
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  example: connection_events
                  enum:
                    - connection_events
]]></sourcecode>
        </figure>
      </section>
      <section anchor="protocol-map-for-zigbee">
        <name>Protocol map for Zigbee</name>
        <figure anchor="protocolmapzigbee">
          <name>OpenAPI model for Zigbee</name>
          <sourcecode type="yaml" name="ProtocolMap-Zigbee.yaml" markers="true"><![CDATA[
=============== NOTE: '\' line wrapping per RFC 8792 ================

openapi: 3.0.3
info:
  title: SDF Protocol Mapping for Zigbee
  description: |-
    SDF Protocol Mapping for Zigbee devices.
  version: 0.10.0
externalDocs:
  description: SDF Protocol Mapping IETF draft
  url: https://datatracker.ietf.org/doc/draft-ietf-asdf-sdf-protocol\
                                                            -mapping/

paths: {}

components:
  schemas:
## Protocol mapping for Zigbee property
    ProtocolMap-Zigbee-Propmap:
      required:
        - zigbee
      type: object
      properties:
        zigbee:
          oneOf:
            - $ref: '#/components/schemas/Zigbee-Property'
            - type: object
              required:
                - read
                - write
              properties:
                read:
                  $ref: '#/components/schemas/Zigbee-Property'
                write:
                  $ref: '#/components/schemas/Zigbee-Property'

## Reusable Zigbee property object
    Zigbee-Property:
      required:
        - endpointID
        - clusterID
        - attributeID
        - attributeType
      type: object
      properties:
        endpointID:
          type: integer
          format: int32
          example: 1
        clusterID:
          type: integer
          format: int32
          example: 6
        attributeID:
          type: integer
          format: int32
          example: 16
        attributeType:
          type: integer
          format: int32
          example: 32
        profileID:
          type: integer
          format: int32
          example: 260
        manufacturerCode:
          type: integer
          format: int32
          example: 4174

    ProtocolMap-Zigbee-Event:
      required:
        - zigbee
      type: object
      properties:
        zigbee:
          oneOf:
            - type: object
              required:
                - type
                - endpointID
                - clusterID
                - attributeID
                - attributeType
              properties:
                type:
                  type: string
                  example: attribute_reporting
                  enum:
                    - attribute_reporting
                endpointID:
                  type: integer
                  format: int32
                  example: 1
                clusterID:
                  type: integer
                  format: int32
                  example: 6
                attributeID:
                  type: integer
                  format: int32
                  example: 16
                attributeType:
                  type: integer
                  format: int32
                  example: 41
                profileID:
                  type: integer
                  format: int32
                  example: 260
                manufacturerCode:
                  type: integer
                  format: int32
                minReportingInterval:
                  type: integer
                  format: int32
                  example: 10
                maxReportingInterval:
                  type: integer
                  format: int32
                  example: 300
                reportableChange:
                  type: number
                  example: 50
            - type: object
              required:
                - type
                - endpointID
                - clusterID
                - attributeID
                - attributeType
              properties:
                type:
                  type: string
                  example: write_event
                  enum:
                    - write_event
                endpointID:
                  type: integer
                  format: int32
                  example: 1
                clusterID:
                  type: integer
                  format: int32
                  example: 6
                attributeID:
                  type: integer
                  format: int32
                  example: 16
                attributeType:
                  type: integer
                  format: int32
                  example: 41
                profileID:
                  type: integer
                  format: int32
                  example: 260
                manufacturerCode:
                  type: integer
                  format: int32
            - type: object
              required:
                - type
              properties:
                type:
                  type: string
                  example: connection_events
                  enum:
                    - connection_events
            - type: object
              required:
                - type
                - endpointID
                - clusterID
                - commandID
                - direction
              properties:
                type:
                  type: string
                  example: cluster_command
                  enum:
                    - cluster_command
                endpointID:
                  type: integer
                  format: int32
                  example: 1
                clusterID:
                  type: integer
                  format: int32
                  example: 6
                commandID:
                  type: integer
                  format: int32
                  example: 1
                direction:
                  type: string
                  example: client_to_server
                  enum:
                    - client_to_server
                    - server_to_client
                profileID:
                  type: integer
                  format: int32
                  example: 260
                manufacturerCode:
                  type: integer
                  format: int32
                  example: 4174

## Protocol mapping for Zigbee action
    ProtocolMap-Zigbee-Action:
      required:
        - zigbee
      type: object
      properties:
        zigbee:
          required:
            - endpointID
            - clusterID
            - commandID
          type: object
          properties:
            endpointID:
              type: integer
              format: int32
              example: 1
            clusterID:
              type: integer
              format: int32
              example: 6
            commandID:
              type: integer
              format: int32
              example: 0
            profileID:
              type: integer
              format: int32
              example: 260
            manufacturerCode:
              type: integer
              format: int32
              example: 4174
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>This document relies on SDF models described in <xref target="RFC9880"/>, as such, we are grateful to the authors of this document for putting their time and effort into defining SDF in depth, allowing us to make use of it.
The authors are grateful to Carsten Bormann, Jan Romann, Ari Keränen, and Eliot Lear
for their reviews and contributions to this document,
in particular Jan Romann for his help with the CDDL definitions (<xref target="sdf-protocol-map-cddl"/>)
and Eliot Lear for his contributions to <xref target="scim-sdf-extension"/>.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+192XbjyJHoO74iL8v3tDRDUqKk2jiubqsklVueWjSS2j32
jE8zRSYpuECABkCpZFX5W+bhfsmdH5tYcgVAitra0+7WOXYXAWRmZGTsGRnZ
6XSiMi4T1Retk/034ijPymyYJeKdnM3idNKK5NlZri7gdTEad2b6dWdqXg9l
qSZZftUXRTmKolE2TOUUehvlclx2YlWOOxJbNrXu9LaiYn42jYsiztLyagbt
Dg9O30TpfHqm8n40gs770TBLC5UW86IvynyuIgBmO5K5kgDU7myWxAADtC+E
TEfiWMmkcxpPVSu6zPKPkzybz/A7caKmMi3jodhX4ziNsYV4k+VTWYpxlot9
WUrq4DAtVS6H3GM2FqfnAGnRij6qK+hw1I9ERxxmp9GFSucAnBAPN4QQjIPW
9wA5PBK/xa7x+VTGCTxHTP4GcdrN8gk+n8Tl+fwM3hCiLyeE643mlYrkvDzP
cpoAr9Fxdh6X4l12LlPoS0CffbEXF8NMnFwVpZoW+LQoc6XKvug93xTfq6IU
p7KAaYr9PL5Q+MEwG0FfL5/2tnfoZ1wCMZzAF7/LCv3BPC2RQr472cXfimeT
4+jT7DdDHLE7zKaRg+y1zEvxOo/T4cfp3wU4IHoavBG6t1mu0r9mYi/LU5VZ
6A7yeFgUWeoD9m2cFzJBqlCi13MQbW7tbG06iH6X5ReyCOB5E6fQbuTBlPCw
AAwO+xulh2PgUqIzmDWS5PGbvRfPept9MRyNEv798sUL+A2UoX++3NmBn8N4
2hmpi3iocPDXbw+ebmN7IEQtE14nc1VmWXmOk1XiZKaG8VgznPi9ypFxxdPu
dotaWQqjP0KK6+Dk8Lf0gphabG1u9Tqbzzu9bR5P5hPE13lZzor+xsbl5WX3
zDTFGW4U/tAF/Sw2ABWqE7zpPO1sb0CXf4wnZ0ptb4bT4afhNBaCvpelqQIu
vYAlEiclLIbMR4XYTZJYpkMVTmYHJkNPClgXVcTpODOd7Z3s9sV+NpxPVVqK
TQBw5/lOZ2tbrB0D6gmDx1vb3d56IyaGhezEWYkcv3E564AwLKGbjfksyeSo
2MChNzafb4DgLTqu786wmHT+SrMN8UMjdWdEB3/ce/u8ET97yRxYLBdv47Nc
5lePgK/ei87m1mr4et552guQ9fyuiNra2Oxt6P6Q9hg/Q55swnP9IdfD/AC0
SXiKut1uFHU6HSHPgK1BbkcRSOxCjAyIIxT3qhBG5gotc4X6BCAUJOZRAZTn
qklHRFpHrIECXhdlJlQqzxJlewENYaW5nKRZgc1RWcsx9DpC3BbQLLIfmQUX
2Qz0DPFLF5SMqgM4VUMQ/nExFTJJssuCup2ChEqKCADhjq7EeXaJbaE3kGNF
W2jd1SZtpkATloUozrN5MhJnCt4CQIUaiXmBY8jIwmPGR2hWQSCjzYmQt9ll
dJCqfHJFIzO1MhSIWzebIUh4gITwPwJIYC7QHijajADwzofnAmTut6enR9TD
XrZ7VAVMJkUG0BXDPD4D+CQMAWRP/XHf4mTv8J24BDUMfSD2IsKemYAmnGkM
clhF0RNU/Xk2mhP+kIwaCUIEBHF9jcbTly8I+0U8IjDq9HApr3DFDKxooggt
2Q1+4hzwMpNncRLjMsIjMC8m5wtXNtIruwYDJcTYKrmCLuDHyKe99a7Y1WPZ
8YEQrjRGmJ7aSETQYd4WcRFZEsngCczHUghI+uk8NQrGo5dMxNpqYmzz8ulh
ozNJnaUiLgt/TFxzJVKlRsghRJwelcATWCf8KGpmsJFdEmpeeizUxGTwgSz1
3Ohjhq4LJlauMpq7BtvCEPmwaXGBvI90T2IAOSiezhKF9Aj6Fj/VhCBS6DMh
QA1UkWUcotCZ4Qz8Rg2zgiynbtDE8dpUXmmhChBeSBDL5VXkCR/gGegwRYjG
eTaF4dPO4ZH3GhcvS4FG5rgacUpEqNKLOM9SBL9oR5rrgKjJ2ACqRhCvr426
/vKljaAfHnV4SWv8KpBfo+vrb9CI6fU2dQ/IvIKfPt96uvXlS5WTLfMgOnL1
l3mcq1HkaAHIlVc7nfSBaUlcDoDvjEME/tBA/GUugXeu2uLyPEZoqjITQQez
MZmPUNvVScWIXdR2ZK4BxcqylMNzllEBgRlKhJ48OgQSAgV9fU02/hTnuZvW
AX23+wcidvSOuGstnYTHuG38BBwAaTtAMXA1aNPPA2T+AWh2+rVLcmHAakRP
AzpjTVXggoNgKJRbJukcMzEBpQ/yqcDOpvOkjK134l4R64BSz2VaJPAQYCsv
lUrFKB6PgYlhCZGaLD200QLJAIcwvYlKNQuCrmxEvOUgzahEv27dWIWQgCFu
JhEJ8muYZwUaxucK3+Aw2bwwos7yU9ElgrnMFvBVqMOc4vInw4sKuKRFxWUi
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
kw2v/cYNi+MAdjNrnc+n8SiuDH73MQKcmaX+v8ffhi+mwHfT+bSG5CVksJgU
mtb1Zbv6QXX9treDL75ETf9eXTeQTGjUC0bcy3oOByYwaDyDzB+YpRig1YLp
RwONpwFyvs3QApYFc7yUzNRaKjbyPNs6LDBBuFkc6VhfgJLBv4DxankKk5Ys
Gw34WMPAY48B+jOK84FxeJToIFJHlIExCDiQpLE+UXBJqn8EtGS8PfzMxjJx
liykKdvbJGxRRge1dwmXgIEsuQDBq/NhQwXU7fkqCCdrJascTePSKTCdzrXC
RmhRURnFHLTjFR000osQOdXkyV2a+RhPAQ6zlPdgyczEJL7gWCB1k6Gct9Cd
yyI6w2xuM13eCYf+MNqLescDKMfzjmmBAVtjI1TQ1AZvBdUMdgswDGUOXrnE
pQR6LXkHFNRmXHdEKO/22O1N1myXJWmJte18Pzft7CpMRKXME0pquX6i07qZ
CBrzXBpPEjSfvvLOXEULz1wFR6aEPjK1BkOvu7HtEQw2hdzZBDq/gKlQpYy9
gxc6CigO9xmGMLWRHpt8n8j6gu4sTJjcVDm+FubpwCzZHKikHy5ME3LBo7jw
fBLtpQW+yavwD3f/D/riq//8SlAe62XuZX4ev9kTL56/3BKVRq+i+2wNYPZh
WxBN2I2A+q//rMj92/0FO8R+59qD0muJPpQJ8ofLad44LYFUDPD3jDogYeZx
LZ1ygMWpKQd84RsHvAeUK8pFGVhIbJYLduJojWnKEY89iKWz9anPLvZUnUDQ
YY1YV+w3tEplM/mxu+zZObaDe200LLMlkYiqho7BJFoqm/DXe7H5soP/6PTw
/17g/21uvth8On55tr0zPgtNmSr6TC9bsjdc2sutjYwvJr2jCWO8LpjJ7fYC
g5M0i/OSIvY+Co6osu2i1UfTsv2Ya9O8nXO/FXuQNVtxh+gRIX3aWxnSu1Ca
DZB6KoWjkMWqCqWIpzE4sZWsTIyKtinnFGto6I0CfZQI7B+tRtGfTpQs2Kse
oC+JRjBlbZES794mbnaGh/RRnHMEB7PatHy3D7SA14VEJmC/0VLcQuCLDXFt
2svRBU61oDBk0RLBy6E+75+lP7A9Au8r2mLLaItlmoGXp6IXGFPasNQGGG3j
A0djZzRi2xonPFPq8be7p6faQCLvtToHktb+M/MxHQlomBTGS3Dfw7zo5Cqh
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
vwAA

-->

</rfc>
