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

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
]>

<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc strict="yes"?>
<?rfc compact="yes"?>
<?rfc toc="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-lpwan-schc-yang-data-model-09" category="std">

  <front>
    <title abbrev="LPWAN SCHC YANG module">Data Model for Static Context Header Compression (SCHC)</title>

    <author initials="A." surname="Minaburo" fullname="Ana Minaburo">
      <organization>Acklio</organization>
      <address>
        <postal>
          <street>1137A avenue des Champs Blancs</street>
          <city>35510 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>ana@ackl.io</email>
      </address>
    </author>
    <author initials="L." surname="Toutain" fullname="Laurent Toutain">
      <organization>Institut MINES TELECOM; IMT Atlantique</organization>
      <address>
        <postal>
          <street>2 rue de la Chataigneraie</street> <street>CS 17607</street>
          <city>35576 Cesson-Sevigne Cedex</city>
          <country>France</country>
        </postal>
        <email>Laurent.Toutain@imt-atlantique.fr</email>
      </address>
    </author>

    <date year="2022" month="May" day="16"/>

    
    <workgroup>lpwan Working Group</workgroup>
    

    <abstract>


<t>This document describes a YANG data model for the SCHC (Static Context Header Compression) 
compression and fragmentation rules.</t>



    </abstract>


  </front>

  <middle>


<section anchor="Introduction" title="Introduction">

<t>SCHC is a compression and fragmentation mechanism for constrained networks defined in <xref target="RFC8724"/>.
It is based on a static context shared by two entities at the boundary of the constrained network.
<xref target="RFC8724"/> provides a non formal representation of the rules used either for compression/decompression (or C/D)
or fragmentation/reassembly (or F/R). The goal of this document is to formalize the description of the rules to offer:</t>

<t><list style="symbols">
  <t>the same definition on both ends, even if the internal representation is different.</t>
  <t>an update of the other end to set up some specific values (e.g. IPv6 prefix, Destination address,…)</t>
  <t>…</t>
</list></t>

<t>This document defines a YANG module to represent both compression and fragmentation rules, which leads to common representation for values for all the rules elements.</t>

</section>
<section anchor="schc-rules" title="SCHC rules">

<t>SCHC is a compression and fragmentation mechanism for constrained networks defined in <xref target="RFC8724"/>.
It is based on a static context shared by two entities at the boundary of the constrained network.
<xref target="RFC8724"/> provides a non formal representation of the rules used either for compression/decompression (or C/D)
or fragmentation/reassembly (or F/R). The goal of this document is to formalize the description of the rules to offer:</t>

<t><list style="symbols">
  <t>the same definition on both ends, even if the internal representation is different.</t>
  <t>an update of the other end to set up some specific values (e.g. IPv6 prefix, Destination address,…)</t>
  <t>…</t>
</list></t>

<t>This document defines a YANG module to represent both compression and fragmentation rules, which leads to common representation for values for all the rules elements.</t>

<t>SCHC compression is generic, the main mechanism does not refer
to a specific protocol. Any header field is abstracted through an ID, a position, a direction, and a value that can be a numerical
value or a string. <xref target="RFC8724"/> and <xref target="RFC8824"/> specify fields for IPv6, UDP, CoAP and OSCORE.</t>

<t>SCHC fragmentation requires a set of common parameters that are included in a rule. These parameters are defined in <xref target="RFC8724"/>.</t>

<t>The YANG model allows to select the compression or the fragmentation using the feature command.</t>

<figure title="Feature for compression and fragmentation." anchor="Fig-feature"><artwork><![CDATA[
  feature compression {
    description
      "SCHC compression capabilities are taken into account";
  }

  feature fragmentation {
    description
      "SCHC fragmentation capabilities are taken into account";
  }
]]></artwork></figure>

<section anchor="comp_types" title="Compression Rules">

<t><xref target="RFC8724"/> proposes a non formal representation of the compression rule.
A compression context for a device is composed of a set of rules. Each rule contains information to
describe a specific field in the header to be compressed.</t>

<figure title="Compression Decompression Context" anchor="Fig-ctxt"><artwork><![CDATA[
  +-----------------------------------------------------------------+
  |                      Rule N                                     |
 +-----------------------------------------------------------------+|
 |                    Rule i                                       ||
+-----------------------------------------------------------------+||
|  (FID)            Rule 1                                        |||
|+-------+--+--+--+------------+-----------------+---------------+|||
||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||||
|+-------+--+--+--+------------+-----------------+---------------+|||
||Field 2|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||||
|+-------+--+--+--+------------+-----------------+---------------+|||
||...    |..|..|..|   ...      | ...             | ...           ||||
|+-------+--+--+--+------------+-----------------+---------------+||/
||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|||
|+-------+--+--+--+------------+-----------------+---------------+|/
|                                                                 |        
\-----------------------------------------------------------------/  

]]></artwork></figure>

</section>
<section anchor="identifier-generation" title="Identifier generation">

<t>Identifier used in the SCHC YANG Data Model are from the identityref statement to ensure to be globally unique and be easily augmented if needed.  The principle to define a new type based on a group of identityref is the following:</t>

<t><list style="symbols">
  <t>define a main identity ending with the keyword base-type.</t>
  <t>derive all the identities used in the Data Model from this base type.</t>
  <t>create a typedef from this base type.</t>
</list></t>

<t>The example (<xref target="Fig-identityref"/>) shows how an identityref is created for RCS algorithms used during SCHC fragmentation.</t>

<figure title="Principle to define a type based on identityref." anchor="Fig-identityref"><artwork><![CDATA[
 // -- RCS algorithm types

  identity rcs-algorithm-base-type {
    description
      "Identify which algorithm is used to compute RCS.
       The algorithm also defines the size of the RCS field.";
  }

  identity rcs-RFC8724 {
    base rcs-algorithm-base-type;
    description
      "CRC 32 defined as default RCS in RFC8724. RCS is 4 byte-long";
  }

  typedef rcs-algorithm-type {
    type identityref {
      base rcs-algorithm-base-type;
    }
    description
      "type used in rules.";
  }
]]></artwork></figure>

</section>
<section anchor="field-identifier" title="Field Identifier">

<t>In the process of compression, the headers of the original packet are first parsed to create a list of fields. This list of fields is matched against the rules to find the appropriate rule and apply compression.  <xref target="RFC8724"/>  does not state how the field ID value is constructed. 
In examples, identification is done through a string indexed by the protocol name (e.g. IPv6.version, CoAP.version,…).</t>

<t>The current YANG Data Model includes fields definitions found in <xref target="RFC8724"/>, <xref target="RFC8824"/>.</t>

<t>Using the YANG model, each field MUST be identified through a global YANG identityref.<vspace />
A YANG field ID for the protocol always derives from the fid-base-type. Then an identity 
for each protocol is specified using the naming convention fid-&lt;&lt;protocol name»-base-type. 
All possible fields for this protocol MUST derive from the protocol identity. The naming 
convention is “fid” followed by the protocol name and the field name. If a field has 
to be divided into sub-fields, the field identity serves as a base.</t>

<t>The full field-id definition is found in <xref target="annexA"/>. The example <xref target="Fig-ex-field-id"/> 
gives the first field ID definitions. A type is defined for IPv6 protocol, and each 
field is based on it. Note that the DiffServ bits derives from the Traffic Class identity.</t>

<figure title="Definition of identityref for field IDs" anchor="Fig-ex-field-id"><artwork><![CDATA[
  identity fid-base-type {
    description
      "Field ID base type for all fields";
  }

  identity fid-ipv6-base-type {
    base fid-base-type;
    description
      "Field ID base type for IPv6 headers described in RFC 8200";
  }

  identity fid-ipv6-version {
    base fid-ipv6-base-type;
    description
      "IPv6 version field from RFC8200";
  }

  identity fid-ipv6-trafficclass {
    base fid-ipv6-base-type;
    description
      "IPv6 Traffic Class field from RFC8200";
  }

  identity fid-ipv6-trafficclass-ds {
    base fid-ipv6-trafficclass;
    description
      "IPv6 Traffic Class field from RFC8200,
       DiffServ field from RFC3168";
  }
  ...
]]></artwork></figure>

<t>The type associated to this identity is fid-type (cf. <xref target="Fig-field-id-type"/>)</t>

<figure title="Type definition for field IDs" anchor="Fig-field-id-type"><artwork><![CDATA[
  typedef fid-type {
    type identityref {
      base fid-base-type;
    }
    description
      "Field ID generic type.";
  }
]]></artwork></figure>

</section>
<section anchor="field-length" title="Field length">

<t>Field length is either an integer giving the size of a field in bits or a specific function. <xref target="RFC8724"/> defines the
“var” function which allows variable length fields (whose length is expressed in bytes) and <xref target="RFC8824"/> defines the “tkl” function for managing the CoAP
Token length field.</t>

<t>The naming convention is “fl” followed by the function name.</t>

<figure title="Definition of identityref for Field Length" anchor="Fig-ex-field-length"><artwork><![CDATA[
  identity fl-base-type {
    description
      "Used to extend field length functions.";
  }

  identity fl-variable {
    base fl-base-type;
    description
      "Residue length in Byte is sent as defined
       for CoAP in RFC 8824 (cf. 5.3).";
  }

  identity fl-token-length {
    base fl-base-type;
    description
      "Residue length in Byte is sent as defined
       for CoAP in RFC 8824 (cf. 4.5).";
  }
]]></artwork></figure>

<t>The field length function can be defined as an identityref as shown in <xref target="Fig-ex-field-length"/>.</t>

<t>Therefore, the type for field length is a union between an integer giving in bits the size of the length and the identityref (cf. <xref target="Fig-ex-field-length-union"/>).</t>

<figure title="Type definition for field Length" anchor="Fig-ex-field-length-union"><artwork><![CDATA[
  typedef fl-type {
    type union {
      type int64; /* positive integer, expressing length in bits */
      type identityref { /* function */
        base fl-base-type;
      }
    }
    description
      "Field length either a positive integer expressing the size in 
       bits or a function defined through an identityref.";
  }
]]></artwork></figure>

</section>
<section anchor="field-position" title="Field position">

<t>Field position is a positive integer which gives the position of a field, the default value is 1, and incremented at each repetition. 
value 0 indicates that the position is not important and is not considered during the rule selection process.</t>

<t>Field position is a positive integer. The type is an uint8.</t>

</section>
<section anchor="direction-indicator" title="Direction Indicator">

<t>The Direction Indicator (di) is used to tell if a field appears in both direction (Bi) or only uplink (Up) or Downlink (Dw).</t>

<figure title="Definition of identityref for direction indicators" anchor="Fig-ex-field-DI"><artwork><![CDATA[
  identity di-base-type {
    description
      "Used to extend direction indicators.";
  }

  identity di-bidirectional {
    base di-base-type;
    description
      "Direction Indication of bidirectionality in
       RFC 8724 (cf. 7.1).";
  }

  identity di-up {
    base di-base-type;
    description
      "Direction Indication of uplink defined in
       RFC 8724 (cf. 7.1).";
  }

  identity di-down {
    base di-base-type;
    description
      "Direction Indication of downlink defined in
       RFC 8724 (cf. 7.1).";
  }
]]></artwork></figure>

<t><xref target="Fig-ex-field-DI"/> gives the identityref for Direction Indicators. The naming convention is “di” followed by the Direction Indicator name.</t>

<t>The type is “di-type” (cf. <xref target="Fig-field-DI-type"/>).</t>

<figure title="Type definition for direction indicators" anchor="Fig-field-DI-type"><artwork><![CDATA[
  typedef di-type {
    type identityref {
      base di-base-type;
    }
    description
      "Direction in LPWAN network, up when emitted by the device,
       down when received by the device, bi when emitted or
       received by the device.";
  }
]]></artwork></figure>

</section>
<section anchor="target_value" title="Target Value">

<t>The Target Value is a list of binary sequences of any length, aligned to the left. <xref target="Fig-ex-TV"/> shows the definition of a single element of a Target Value. In the rule, the structure will be used as a list, with position as a key. The highest position value is used to compute the size of the index sent in residue for the match-mapping CDA. The position allows to specify several values:</t>

<t><list style="symbols">
  <t>For Equal and LSB, Target Value contains a single element. Therefore, the indicia is set to 0.</t>
  <t>For match-mapping, Target Value can contain several elements. Indicia values MUST start from 0 and MUST be contiguous.</t>
</list></t>

<figure title="Definition of target value" anchor="Fig-ex-TV"><artwork><![CDATA[
  grouping tv-struct {
    description
      "Defines the target value element. Always a binary type, strings
       must be converted to binary. field-id allows the conversion
       to the appropriate type.";
    leaf value {
      type binary;
      description
        "Target Value";
    }
    leaf indicia {
      type uint16;
      description
        "Indicia gives the position in the matching-list. If only one 
         element is present, indicia is 0. Otherwise, indicia is the
         the order in the matching list, starting at 0.";
    }
  }
]]></artwork></figure>

</section>
<section anchor="matching-operator" title="Matching Operator">

<t>Matching Operator (MO) is a function applied between a field value provided by the parsed header and the target value. <xref target="RFC8724"/> defines 4 MO as listed in <xref target="Fig-ex-MO"/>.</t>

<figure title="Definition of identityref for Matching Operator " anchor="Fig-ex-MO"><artwork><![CDATA[
  identity mo-base-type {
    description
      "Used to extend Matching Operators with SID values";
  }

  identity mo-equal {
    base mo-base-type;
    description
      "Equal MO as defined in RFC 8724 (cf. 7.3)";
  }

  identity mo-ignore {
    base mo-base-type;
    description
      "Ignore MO as defined in RFC 8724 (cf. 7.3)";
  }

  identity mo-msb {
    base mo-base-type;
    description
      "MSB MO as defined in RFC 8724 (cf. 7.3)";
  }

  identity mo-match-mapping {
    base mo-base-type;
    description
      "match-mapping MO as defined in RFC 8724 (cf. 7.3)";
  }
]]></artwork></figure>

<t>The naming convention is “mo” followed by the MO name.</t>

<t>The type is “mo-type” (cf. <xref target="Fig-MO-type"/>)</t>

<figure title="Type definition for Matching Operator" anchor="Fig-MO-type"><artwork><![CDATA[
  typedef mo-type {
    type identityref {
      base mo-base-type;
    }
    description
      "Matching Operator (MO) to compare fields values with
       target values";
  }
]]></artwork></figure>

<section anchor="matching-operator-arguments" title="Matching Operator arguments">

<t>They are viewed as a list, built with a tv-struct (see chapter <xref target="target_value"/>).</t>

</section>
</section>
<section anchor="compression-decompression-actions" title="Compression Decompression Actions">

<t>Compression Decompression Action (CDA) identifies the function to use for compression or decompression. 
<xref target="RFC8724"/> defines 6 CDA.</t>

<t><xref target="Fig-CDA-type"/> shows some CDA definition, the full definition is in <xref target="annexA"/>.</t>

<figure title="Definition of identityref for  Compresion Decompression Action" anchor="Fig-ex-CDA"><artwork><![CDATA[
  identity cda-base-type {
    description
      "Compression Decompression Actions.";
  }

  identity cda-not-sent {
    base cda-base-type;
    description
      "not-sent CDA as defined in RFC 8724 (cf. 7.4).";
  }

  identity cda-value-sent {
    base cda-base-type;
    description
      "value-sent CDA as defined in RFC 8724 (cf. 7.4).";
  }

  identity cda-lsb {
    base cda-base-type;
    description
      "LSB CDA as defined in RFC 8724 (cf. 7.4).";
  }

  identity cda-mapping-sent {
    base cda-base-type;
    description
      "mapping-sent CDA as defined in RFC 8724 (cf. 7.4).";
  }

  identity cda-compute { 
    base cda-base-type;
    description
      "compute-* CDA as defined in RFC 8724 (cf. 7.4)";
  }
    ....
]]></artwork></figure>

<t>The naming convention is “cda” followed by the CDA name.</t>

<figure title="Type definition for Compresion Decompression Action" anchor="Fig-CDA-type"><artwork><![CDATA[
  typedef cda-type {
    type identityref {
      base cda-base-type;
    }
    description
      "Compression Decompression Action to compression or
       decompress a field.";
  }
]]></artwork></figure>

<section anchor="compression-decompression-action-arguments" title="Compression Decompression Action arguments">

<t>Currently no CDA requires arguments, but in the future some CDA may require one or several arguments.
They are viewed as a list, of target-value type.</t>

</section>
</section>
<section anchor="frag_types" title="Fragmentation rule">

<t>Fragmentation is optional in the data model and depends on the presence of the “fragmentation” feature.</t>

<t>Most of the fragmentation parameters are listed in Annex D of <xref target="RFC8724"/>.</t>

<t>Since fragmentation rules work for a specific direction, they MUST contain a mandatory direction indicator.
The type is the same as the one used in compression entries, but bidirectional MUST NOT be used.</t>

<section anchor="fragmentation-mode" title="Fragmentation mode">

<t><xref target="RFC8724"/> defines 3 fragmentation modes:</t>

<t><list style="symbols">
  <t>No Ack: this mode is unidirectionnal, no acknowledgment is sent back.</t>
  <t>Ack Always: each fragmentation window must be explicitly acknowledged before going to the next.</t>
  <t>Ack on Error:  A window is acknowledged only when the receiver detects some missing fragments.</t>
</list></t>

<t><xref target="Fig-frag-mode"/> shows the definition for identifiers from these three modes.</t>

<figure title="Definition of fragmentation mode identifer" anchor="Fig-frag-mode"><artwork><![CDATA[
  identity fragmentation-mode-base-type {
    description
      "fragmentation mode.";
  }

  identity fragmentation-mode-no-ack {
    base fragmentation-mode-base-type;
    description
      "No-ACK of RFC8724.";
  }

  identity fragmentation-mode-ack-always {
    base fragmentation-mode-base-type;
    description
      "ACK-Always of RFC8724.";
  }

  identity fragmentation-mode-ack-on-error {
    base fragmentation-mode-base-type;
    description
      "ACK-on-Error of RFC8724.";
  }

  typedef fragmentation-mode-type {
    type identityref {
      base fragmentation-mode-base-type;
    }
    description
      "type used in rules";
  }
]]></artwork></figure>

<t>The naming convention is “fragmentation-mode” followed by the fragmentation mode name.</t>

</section>
<section anchor="fragmentation-header" title="Fragmentation Header">

<t>A data fragment header, starting with the rule ID can be sent on the fragmentation direction. 
The SCHC header may be composed of (cf. <xref target="Fig-frag-header-8724"/>):</t>

<t><list style="symbols">
  <t>a Datagram Tag (Dtag) identifying the datagram being fragmented if the fragmentation applies concurrently on several datagrams. This field in optional and its length is defined by the rule.</t>
  <t>a Window (W) used in Ack-Always and Ack-on-Error modes. In Ack-Always, its size is 1. In Ack-on-Error, it depends on the rule. This field is not needed in No-Ack mode.</t>
  <t>a Fragment Compressed Number (FCN) indicating the fragment/tile position on the window. This field is mandatory on all modes defined in <xref target="RFC8724"/>, its size is defined by the rule.</t>
</list></t>

<figure title="Data fragment header from RFC8724" anchor="Fig-frag-header-8724"><artwork><![CDATA[
|-- SCHC Fragment Header ----|
         |-- T --|-M-|-- N --|
+-- ... -+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~
| RuleID | DTag  | W |  FCN  | Fragment Payload | padding (as needed)
+-- ... -+- ... -+---+- ... -+--------...-------+~~~~~~~~~~~~~~~~~~~~

]]></artwork></figure>

</section>
<section anchor="last-fragment-format" title="Last fragment format">

<t>The last fragment of a datagram is sent with an RCS (Reassembly Check Sequence) field to detect residual 
transmission error and possible losses in the last window. <xref target="RFC8724"/> defines a single algorithm based on Ethernet 
CRC computation. The identity of the RCS algorithm is shown in <xref target="Fig-frag-RCS"/>.</t>

<figure title="type definition for RCS" anchor="Fig-frag-RCS"><artwork><![CDATA[
  identity rcs-algorithm-base-type {
    description
      "Identify which algorithm is used to compute RCS.
       The algorithm also defines the size of the RCS field.";
  }

  identity rcs-RFC8724 {
    base rcs-algorithm-base-type;
    description
      "CRC 32 defined as default RCS in RFC8724. RCS is 4 byte-long";
  }

  typedef rcs-algorithm-type {
    type identityref {
      base rcs-algorithm-base-type;
    }
    description
      "type used in rules.";
  }
]]></artwork></figure>

<t>The naming convention is “rcs” followed by the algorithm name.</t>

<t>For Ack-on-Error mode, the All-1 fragment may just contain the RCS or can include a tile. The parameters defined in <xref target="Fig-frag-all1-data"/> allows to define the 
behavior:</t>

<t><list style="symbols">
  <t>all1-data-no: the last fragment contains no data, just the RCS</t>
  <t>all1-data-yes: the last fragment includes a single tile and the RCS</t>
  <t>all1-data-sender-choice: the last fragment may or may not contain a single tile. The receiver can detect if a tile is present.</t>
</list></t>

<figure title="type definition for RCS" anchor="Fig-frag-all1-data"><artwork><![CDATA[
  identity all1-data-base-type {
    description
      "Type to define when to send an Acknowledgment message.";
  }

  identity all1-data-no {
    base all1-data-base-type;
    description
      "All1 contains no tiles.";
  }

  identity all1-data-yes {
    base all1-data-base-type;
    description
      "All1 MUST contain a tile.";
  }

  identity all1-data-sender-choice {
    base all1-data-base-type;
    description
      "Fragmentation process chooses to send tiles or not in all1.";
  }

  typedef all1-data-type {
    type identityref {
      base all1-data-base-type;
    }
    description
      "Type used in rules.";
  }
]]></artwork></figure>

<t>The naming convention is “all1-data” followed by the behavior identifier.</t>

</section>
<section anchor="acknowledgment-behavior" title="Acknowledgment behavior">

<t>The acknowledgment fragment header goes in the opposite direction of data. The header is composed of (see <xref target="Fig-frag-ack"/>):</t>

<t><list style="symbols">
  <t>a Dtag (if present).</t>
  <t>a mandatory window as in the data fragment.</t>
  <t>a C bit giving the status of RCS validation.  In case of failure, a bitmap follows, indicating the received tile.</t>
</list></t>

<figure title="Acknowledgment fragment header for RFC8724" anchor="Fig-frag-ack"><artwork><![CDATA[
|--- SCHC ACK Header ----|
         |-- T --|-M-| 1 |
+-- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~
| RuleID |  DTag | W |C=1| padding as needed                (success)
+-- ... -+- ... -+---+---+~~~~~~~~~~~~~~~~~~

+-- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~
| RuleID |  DTag | W |C=0|Compressed Bitmap| pad. as needed (failure)
+-- ... -+- ... -+---+---+------ ... ------+~~~~~~~~~~~~~~~

]]></artwork></figure>

<t>For Ack-on-Error, SCHC defines when an acknowledgment can be sent. This can be at any time defined by the layer 2, at the end of a window (FCN All-0) 
or as a response to receiving the last fragment (FCN All-1). The following identifiers (cf. <xref target="Fig-frag-ack-behavior"/>) define the acknowledgment behavior.</t>

<figure title="bitmap generation behavior" anchor="Fig-frag-ack-behavior"><artwork><![CDATA[
  identity ack-behavior-base-type {
    description
      "Define when to send an Acknowledgment .";
  }

  identity ack-behavior-after-All0 {
    base ack-behavior-base-type;
    description
      "Fragmentation expects Ack after sending All0 fragment.";
  }

  identity ack-behavior-after-All1 {
    base ack-behavior-base-type;
    description
      "Fragmentation expects Ack after sending All1 fragment.";
  }

  identity ack-behavior-by-layer2 {
    base ack-behavior-base-type;
    description
      "Layer 2 defines when to send an Ack.";
  }

  typedef ack-behavior-type {
    type identityref {
      base ack-behavior-base-type;
    }
    description
      "Type used in rules.";
  }
]]></artwork></figure>

<t>The naming convention is “ack-behavior” followed by the algorithm name.</t>

</section>
<section anchor="fragmentation-parameters" title="Fragmentation Parameters">

<t>The state machine requires some common values to handle fragmentation:</t>

<t><list style="symbols">
  <t>retransmission-timer expresses, in seconds, the duration before sending an ack request (cf. section 8.2.2.4. of <xref target="RFC8724"/>). If specified, value must be higher or equal to 1.</t>
  <t>inactivity-timer expresses, in seconds, the duration before aborting a fragmentation session (cf. section 8.2.2.4. of <xref target="RFC8724"/>). The value 0 explicitly indicates that this timer is disabled.</t>
  <t>max-ack-requests expresses the number of attempts before aborting (cf. section 8.2.2.4. of <xref target="RFC8724"/>).</t>
  <t>maximum-packet-size rexpresses, in bytes, the larger packet size that can be reassembled.</t>
</list></t>

<t>They are defined as unsigned integers, see <xref target="annexA"/>.</t>

</section>
<section anchor="layer-2-parameters" title="Layer 2 parameters">

<t>The data model includes two parameters needed for fragmentation:</t>

<t><list style="symbols">
  <t>l2-word-size: <xref target="RFC8724"/> base fragmentation on a layer 2 word which can be of any length. The default value is 8 and correspond 
to the default value for byte aligned layer 2. A value of 1 will indicate that there is no alignment and no need for padding.</t>
  <t>maximum-packet-size: defines the maximum size of a uncompressed datagram. By default, the value is set to 1280 bytes.</t>
</list></t>

<t>They are defined as unsigned integer, see <xref target="annexA"/>.</t>

</section>
</section>
</section>
<section anchor="rule-definition" title="Rule definition">

<t>A rule is idenfied by a unique rule identifier (rule ID) comprising both a Rule ID value and a Rule ID length. 
The YANG grouping rule-id-type defines the structure used to represent a rule ID. A length of 0 is allowed to represent an implicit rule.</t>

<t>Three types of rules are defined in <xref target="RFC8724"/>:</t>

<t><list style="symbols">
  <t>Compression: a compression rule is associated with the rule ID.</t>
  <t>No compression: this identifies the default rule used to send a packet in extenso when no compression rule was found (see <xref target="RFC8724"/> section 6).</t>
  <t>Fragmentation: fragmentation parameters are associated with the rule ID. Fragmentation is optional and feature “fragmentation” should be set.</t>
</list></t>

<figure title="Definition of a SCHC Context" anchor="Fig-yang-schc"><artwork><![CDATA[
  grouping rule-id-type {
    leaf rule-id-value {
      type uint32;
      description
        "Rule ID value, this value must be unique, considering its
         length.";
    }
    leaf rule-id-length {
      type uint8 {
        range "0..32";
      }
      description
        "Rule ID length, in bits. The value 0 is for implicit rules.";
    }
    description
      "A rule ID is composed of a value and a length, expressed in 
       bits.";
  }

  // SCHC table for a specific device.

  container schc {
    list rule {
      key "rule-id-value rule-id-length";
      uses rule-id-type;
      choice nature {
        case fragmentation {
          if-feature "fragmentation";
          uses fragmentation-content;
        }
        case compression {
          if-feature "compression";
          uses compression-content;
        }
        case no-compression {
          description
            "RFC8724 requires a rule for uncompressed headers.";
        }
        description
          "A rule is for compression, for no-compression or for
           fragmentation.";
      }
      description
        "Set of rules compression, no compression or fragmentation
         rules identified by their rule-id.";
    }
    description
      "a SCHC set of rules is composed of a list of rules which are
       used for compression, no-compression or fragmentation.";
  }
}
]]></artwork></figure>

<t>To access a specific rule, the rule ID length and value are used as a key. The rule is either
a compression or a fragmentation rule.</t>

<section anchor="compression-rule" title="Compression rule">

<t>A compression rule is composed of entries describing its processing (cf. <xref target="Fig-comp-entry"/>). An entry  contains all the information defined in <xref target="Fig-ctxt"/> with the types defined above.</t>

<t>The compression rule described <xref target="Fig-ctxt"/> is defined by compression-content. It defines a list of
compression-rule-entry, indexed by their field id, position and direction. The compression-rule-entry 
element represent a line of the table <xref target="Fig-ctxt"/>. Their type reflects the identifier types defined in
<xref target="comp_types"/></t>

<t>Some checks are performed on the values:</t>

<t><list style="symbols">
  <t>target value must be present for MO different from ignore.</t>
  <t>when MSB MO is specified, the matching-operator-value must be present</t>
</list></t>

<figure title="Definition of a compression entry" anchor="Fig-comp-entry"><artwork><![CDATA[
  grouping compression-rule-entry {
    description
      "These entries defines a compression entry (i.e. a line)
       as defined in RFC 8724.

       +-------+--+--+--+------------+-----------------+---------------+
       |Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|
       +-------+--+--+--+------------+-----------------+---------------+

       An entry in a compression rule is composed of 7 elements:
       - Field ID: The header field to be compressed. The content is a
         YANG identifer.
       - Field Length : either a positive integer of a function defined
         as a YANG id.
       - Field Position: a positive (and possibly equal to 0) integer.
       - Direction Indicator: a YANG identifier giving the direction.
       - Target value: a value against which the header Field is
         compared.
       - Matching Operator: a YANG id giving the operation, parameters
         may be associated to that operator.
       - Comp./Decomp. Action: A YANG id giving the compression or
         decompression action, parameters may be associated to that
         action.
      ";
    leaf field-id {
      type schc:fid-type;
      mandatory true;
      description
        "Field ID, identify a field in the header with a YANG
         referenceid.";
    }
    leaf field-length {
      type schc:fl-type;
      mandatory true;
      description
        "Field Length, expressed in number of bits or through a function defined as a
         YANG referenceid.";
    }
    leaf field-position {
      type uint8;
      mandatory true;
      description
        "Field position in the header is an integer. Position 1 matches 
         the first occurence of a field in the header, while incremented 
         position values match subsequent occurences.
         Position 0 means that this entry matches a field irrespective 
         of its position of occurence in the header.
         Be aware that the decompressed header may have position-0 
         fields ordered differently than they appeared in the original 
         packet.";
    }
    leaf direction-indicator {
      type schc:di-type;
      mandatory true;
      description
        "Direction Indicator, a YANG referenceid to say if the packet
         is bidirectional, up or down";
    }
    list target-value {
      key "position";
      uses tv-struct;
      description
        "A list of value to compare with the header field value.
         If target value is a singleton, position must be 0.
         For use as a matching list for the mo-match-mapping matching 
         operator, positions should take consecutive values starting 
         from 1.";
    }
    leaf matching-operator {
      type schc:mo-type;
      must "../target-value or derived-from-or-self(., 'mo-ignore')" {
        error-message 
            "mo-equal, mo-msb and mo-match-mapping need target-value";
        description
          "target-value is not required for mo-ignore";
      }
      must "not (derived-from-or-self(., 'mo-msb')) or
            ../matching-operator-value" {
        error-message "mo-msb requires length value";
      }
      mandatory true;
      description
        "MO: Matching Operator";
    }
    list matching-operator-value {
      key "position";
      uses tv-struct;
      description
        "Matching Operator Arguments, based on TV structure to allow
         several arguments.
         In RFC 8724, only the MSB matching operator needs arguments (a single argument, which is the
         number of most significant bits to be matched)";
    }
    leaf comp-decomp-action {
      type schc:cda-type;
      mandatory true;
      description
        "CDA: Compression Decompression Action.";
    }
    list comp-decomp-action-value {
      key "position";
      uses tv-struct;
      description
        "CDA arguments, based on a TV structure, in order to allow for 
         several arguments. The CDAs specified in RFC 8724 require no 
         argument.";
    }
  }

  grouping compression-content {
    list entry {
      key "field-id field-position direction-indicator";
      uses compression-rule-entry;
      description
        "A compression rule is a list of rule entries, each describing
         a header field. An entry is identifed through a field-id,
         its position in the packet and its direction.";
    }
    description
      "Define a compression rule composed of a list of entries.";
  }
]]></artwork></figure>

</section>
<section anchor="fragmentation-rule" title="Fragmentation rule">

<t>A Fragmentation rule is composed of entries describing the protocol behavior. Some on them are numerical entries,
others are identifiers defined in <xref target="frag_types"/>.</t>

<t>The definition of a Fragmentation rule is divided into three sub-parts (cf. figure <xref target="Fig-frag-struct"/>):</t>

<t><list style="symbols">
  <t>parameters such as the fragmentation-mode, the l2-word-size and the direction. Since Fragmentation rules are always defined for a specific direction, the value must be either di-up or di-down (di-bidirectional is not allowed).</t>
  <t>parameters defining the Fragmentation header format (dtag-size, w-size, fcn-size and rcs-algorithm).</t>
  <t>Protocol parameters for timers (inactivity-timer, retransmission-timer). <xref target="RFC8724"/> do not specified any range for these timers. <xref target="RFC9011"/> recommends a duration of 12 hours. In fact, the value range sould be between milli-seconds for real time systems to several days. Figure <xref target="Fig-timer-duration"/> shows the two parameters defined for timers:
  <list style="symbols">
      <t>the duration of a tick is computed through this formula 2^tick-duration/10^6. When tick-duration is set to 0, the unit is the micro-second. The default value of 20 leads to a unit of about 1.05 second. A value of 32 leads to a tick duration of about 1.19 hours.</t>
      <t>the number of ticks in the predefined unit. With the default tick-duration value of 20, the timers can cover a range between 1.0 sec and 19 hours covering <xref target="RFC9011"/> recommandation.</t>
    </list></t>
  <t>Protocol behavior (maximum-packet-size, max-interleaved-frames, max-ack-requests). If these parameters are specific to a single fragmentation mode, they are grouped in a structure dedicated to that Fragmentation mode. If some parameters can be found in several modes, typically ACK-Always and ACK-on-Error, they are defined in a common part and a when statement indicates which modes are allowed.</t>
</list></t>

<figure title="Timer duration values" anchor="Fig-timer-duration"><artwork><![CDATA[
   grouping timer-duration {
    leaf ticks-duration {
      type uint8;
      default 20;
      description "duration of one tick in micro-seconds, 2^ticks-duration/10^6 = 1.048s";
    }
    leaf ticks-numbers {
      type uint16;
      description "timer duration = ticks-numbers * 2^ticks-duration / 10^6";
    }  
  }
]]></artwork></figure>

<figure title="Fragmentation Parameters" anchor="Fig-frag-struct"><artwork><![CDATA[
 grouping fragmentation-content {
    description
      "This grouping defines the fragmentation parameters for
       all the modes (No-Ack, Ack-Always and Ack-on-Error) specified in
       RFC 8724.";
    leaf fragmentation-mode {
      type schc:fragmentation-mode-type;
      mandatory true;
      description
        "which fragmentation mode is used (noAck, AckAlways,
         AckonError)";
    }
    leaf l2-word-size {
      type uint8;
      default "8";
      description
        "Size, in bits, of the layer 2 word";
    }
    leaf direction {
      type schc:di-type;
      must "derived-from-or-self(., 'di-up') or
            derived-from-or-self(., 'di-down')" {
        error-message 
            "direction for fragmentation rules are up or down.";
      }
      mandatory true;
      description
        "Should be up or down, bidirectionnal is forbiden.";
    }
    // SCHC Frag header format 
    leaf dtag-size {
      type uint8;
      default "0";
      description
        "Size, in bits, of the DTag field (T variable from RFC8724).";
    }
    leaf w-size {
      when "derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-on-error') 
            or
            derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-always') ";
      type uint8;
      description
        "Size, in bits, of the window field (M variable from RFC8724).";
    }
    leaf fcn-size {
      type uint8;
      mandatory true;
      description
        "Size, in bits, of the FCN field (N variable from RFC8724).";
    }
    leaf rcs-algorithm {
      type rcs-algorithm-type;
      default "schc:rcs-RFC8724";
      description
        "Algorithm used for RCS. The algorithm specifies the RCS size";
    }
    // SCHC fragmentation protocol parameters
    leaf maximum-packet-size {
      type uint16;
      default "1280";
      description
        "When decompression is done, packet size must not
         strictly exceed this limit, expressed in bytes.";
    }
    leaf window-size {
      type uint16;
      description
        "By default, if not specified 2^w-size - 1. Should not exceed
         this value. Possible FCN values are between 0 and 
         window-size - 1.";
    }
    leaf max-interleaved-frames {
      type uint8;
      default "1";
      description
        "Maximum of simultaneously fragmented frames. Maximum value is
        2^dtag-size. All DTAG values can be used, but at most
        max-interleaved-frames must be active at any time.";
    }
    leaf inactivity-timer {
      type uint64;
      description
        "Duration is seconds of the inactivity timer, 0 indicates 
        that the timer is disabled.";
    }
    leaf retransmission-timer {
      when "derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-on-error') 
            or
            derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-always') ";
      type uint64 {
        range "1..max";
      }
      description
        "Duration in seconds of the retransmission timer.";
    }
    leaf max-ack-requests {
      when "derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-on-error') 
            or
            derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-always') ";
      type uint8 {
        range "1..max";
      }
      description
        "The maximum number of retries for a specific SCHC ACK.";
    }
    choice mode {
      case no-ack;
      case ack-always;
      case ack-on-error {
        leaf tile-size {
          when "derived-from(../fragmentation-mode,
                             'fragmentation-mode-ack-on-error')";
          type uint8;
          description
            "Size, in bits, of tiles. If not specified or set to 0,
             tiles fill the fragment.";
        }
        leaf tile-in-All1 {
          when "derived-from(../fragmentation-mode,
                             'fragmentation-mode-ack-on-error')";
          type schc:all1-data-type;
          description
            "Defines whether the sender and receiver expect a tile in
             All-1 fragments or not, or if it is left to the sender's 
             choice.";
        }
        leaf ack-behavior {
          when "derived-from(../fragmentation-mode,
                             'fragmentation-mode-ack-on-error')";
          type schc:ack-behavior-type;
          description
            "Sender behavior to acknowledge, after All-0, All-1 or
             when the LPWAN allows it.";
        }
      }
      description
        "RFC 8724 defines 3 fragmentation modes.";
    } 
  }
]]></artwork></figure>

</section>
<section anchor="yang-tree" title="YANG Tree">

<figure anchor="Fig-model-overview"><artwork><![CDATA[
module: ietf-schc
  +--rw schc
     +--rw rule* [rule-id-value rule-id-length]
        +--rw rule-id-value                   uint32
        +--rw rule-id-length                  uint8
        +--rw (nature)?
           +--:(fragmentation) {fragmentation}?
           |  +--rw fragmentation-mode        schc:fragmentation-mode-type
           |  +--rw l2-word-size?             uint8
           |  +--rw direction                 schc:di-type
           |  +--rw dtag-size?                uint8
           |  +--rw w-size?                   uint8
           |  +--rw fcn-size                  uint8
           |  +--rw rcs-algorithm?            rcs-algorithm-type
           |  +--rw maximum-packet-size?      uint16
           |  +--rw window-size?              uint16
           |  +--rw max-interleaved-frames?   uint8
           |  +--rw inactivity-timer
           |  |  +--rw ticks-duration?   uint8
           |  |  +--rw ticks-numbers?    uint16
           |  +--rw retransmission-timer
           |  |  +--rw ticks-duration?   uint8
           |  |  +--rw ticks-numbers?    uint16
           |  +--rw max-ack-requests?         uint8
           |  +--rw (mode)?
           |     +--:(no-ack)
           |     +--:(ack-always)
           |     +--:(ack-on-error)
           |        +--rw tile-size?          uint8
           |        +--rw tile-in-All1?       schc:all1-data-type
           |        +--rw ack-behavior?       schc:ack-behavior-type
           +--:(compression) {compression}?
           |  +--rw entry* [field-id field-position direction-indicator]
           |     +--rw field-id                    schc:fid-type
           |     +--rw field-length                schc:fl-type
           |     +--rw field-position              uint8
           |     +--rw direction-indicator         schc:di-type
           |     +--rw target-value* [indicia]
           |     |  +--rw value?     binary
           |     |  +--rw indicia    uint16
           |     +--rw matching-operator           schc:mo-type
           |     +--rw matching-operator-value* [indicia]
           |     |  +--rw value?     binary
           |     |  +--rw indicia    uint16
           |     +--rw comp-decomp-action          schc:cda-type
           |     +--rw comp-decomp-action-value* [indicia]
           |        +--rw value?     binary
           |        +--rw indicia    uint16
           +--:(no-compression)

]]></artwork></figure>

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

<t>This document has no request to IANA.</t>

</section>
<section anchor="SecConsiderations" title="Security considerations">

<t>This document does not have any more Security consideration than the ones already raised in <xref target="RFC8724"/> and <xref target="RFC8824"/>.</t>

</section>
<section anchor="acknowledgements" title="Acknowledgements">

<t>The authors would like to thank Dominique Barthel, Carsten Bormann, Alexander Pelov for their careful reading and valuable inputs. A special thanks for 
Carl Moberg for his patience and wise advices when building the model.</t>

</section>
<section anchor="annexA" title="YANG Module">

<figure anchor="Fig-schc"><artwork><![CDATA[
<code begins> file ietf-schc@2022-02-15.yang
module ietf-schc {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-schc";
  prefix schc;

  organization
    "IETF IPv6 over Low Power Wide-Area Networks (lpwan) working group";
  contact
    "WG Web:   <https://datatracker.ietf.org/wg/lpwan/about/>
     WG List:  <mailto:p-wan@ietf.org>
     Editor:   Laurent Toutain
       <mailto:laurent.toutain@imt-atlantique.fr>
     Editor:   Ana Minaburo
       <mailto:ana@ackl.io>";
  description
    "
     Copyright (c) 2021 IETF Trust and the persons identified as
     authors of the code.  All rights reserved.

     Redistribution and use in source and binary forms, with or
     without modification, is permitted pursuant to, and subject to
     the license terms contained in, the Simplified BSD License set
     forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself
     for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.

     *****************************************************************

     Generic Data model for Static Context Header Compression Rule for
     SCHC, based on RFC 8724 and RFC8824. Include compression, no
     compression and fragmentation rules.

     This module is a YANG model for SCHC rules (RFC 8724 and RFC8824).
     RFC 8724 describes compression rules in a abstract way through a 
     table.

     |-----------------------------------------------------------------|
     |  (FID)            Rule 1                                        |
     |+-------+--+--+--+------------+-----------------+---------------+|
     ||Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||
     |+-------+--+--+--+------------+-----------------+---------------+|
     ||Field 2|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||
     |+-------+--+--+--+------------+-----------------+---------------+|
     ||...    |..|..|..|   ...      | ...             | ...           ||
     |+-------+--+--+--+------------+-----------------+---------------+|
     ||Field N|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act||
     +-------+--+--+--+------------+-----------------+---------------+||
     |-----------------------------------------------------------------|

     This module proposes a global data model that can be used for rule
     exchanges or modification. It proposes both the data model format
     and the global identifiers used to describe some operations in
     fields.
     This data model applies to both compression and fragmentation.";

  revision 2022-02-15 {
    description
      "Initial version from RFC XXXX ";
    reference
      "RFC XXX: Data Model for Static Context Header Compression
       (SCHC)";
  }

  feature compression {
    description
      "SCHC compression capabilities are taken into account";
  }

  feature fragmentation {
    description
      "SCHC fragmentation capabilities are taken into account";
  }

  // -------------------------
  //  Field ID type definition
  //--------------------------
  // generic value TV definition 

  identity fid-base-type {
    description
      "Field ID base type for all fields";
  }

  identity fid-ipv6-base-type {
    base fid-base-type;
    description
      "Field ID base type for IPv6 headers described in RFC 8200";
  }

  identity fid-ipv6-version {
    base fid-ipv6-base-type;
    description
      "IPv6 version field from RFC8200";
  }

  identity fid-ipv6-trafficclass {
    base fid-ipv6-base-type;
    description
      "IPv6 Traffic Class field from RFC8200";
  }

  identity fid-ipv6-trafficclass-ds {
    base fid-ipv6-trafficclass;
    description
      "IPv6 Traffic Class field from RFC8200,
       DiffServ field from RFC3168";
  }

  identity fid-ipv6-trafficclass-ecn {
    base fid-ipv6-trafficclass;
    description
      "IPv6 Traffic Class field from RFC8200,
       ECN field from RFC3168";
  }

  identity fid-ipv6-flowlabel {
    base fid-ipv6-base-type;
    description
      "IPv6 Flow Label field from RFC8200";
  }

  identity fid-ipv6-payloadlength {
    base fid-ipv6-base-type;
    description
      "IPv6 Payload Length field from RFC8200";
  }

  identity fid-ipv6-nextheader {
    base fid-ipv6-base-type;
    description
      "IPv6 Next Header field from RFC8200";
  }

  identity fid-ipv6-hoplimit {
    base fid-ipv6-base-type;
    description
      "IPv6 Next Header field from RFC8200";
  }

  identity fid-ipv6-devprefix {
    base fid-ipv6-base-type;
    description
      "corresponds to either the source address or the destination
              address prefix of RFC 8200. Depending if it is
              respectively an uplink or a downlink message.";
  }

  identity fid-ipv6-deviid {
    base fid-ipv6-base-type;
    description
      "corresponds to either the source address or the destination
       address prefix of RFC 8200. Depending if it is respectively
       an uplink or a downlink message.";
  }

  identity fid-ipv6-appprefix {
    base fid-ipv6-base-type;
    description
      "corresponds to either the source address or the destination
       address prefix of RFC 8200. Depending if it is respectively
       a downlink or an uplink message.";
  }

  identity fid-ipv6-appiid {
    base fid-ipv6-base-type;
    description
      "corresponds to either the source address or the destination
       address prefix of RFC 8200. Depending if it is respectively
       a downlink or an uplink message.";
  }

  identity fid-udp-base-type {
    base fid-base-type;
    description
      "Field ID base type for UDP headers described in RFC 768";
  }

  identity fid-udp-dev-port {
    base fid-udp-base-type;
    description
      "UDP source or destination port from RFC 768, if uplink or 
      downlink communication, respectively.";
  }

  identity fid-udp-app-port {
    base fid-udp-base-type;
    description
      "UDP destination or source port from RFC 768, if uplink or 
      downlink communication, respectively.";
  }

  identity fid-udp-length {
    base fid-udp-base-type;
    description
      "UDP length from RFC 768";
  }

  identity fid-udp-checksum {
    base fid-udp-base-type;
    description
      "UDP length from RFC 768";
  }

  identity fid-coap-base-type {
    base fid-base-type;
    description
      "Field ID base type for UDP headers described in RFC 7252";
  }

  identity fid-coap-version {
    base fid-coap-base-type;
    description
      "CoAP version from RFC 7252";
  }

  identity fid-coap-type {
    base fid-coap-base-type;
    description
      "CoAP type from RFC 7252";
  }

  identity fid-coap-tkl {
    base fid-coap-base-type;
    description
      "CoAP token length from RFC 7252";
  }

  identity fid-coap-code {
    base fid-coap-base-type;
    description
      "CoAP code from RFC 7252";
  }

  identity fid-coap-code-class {
    base fid-coap-code;
    description
      "CoAP code class from RFC 7252";
  }

  identity fid-coap-code-detail {
    base fid-coap-code;
    description
      "CoAP code detail from RFC 7252";
  }

  identity fid-coap-mid {
    base fid-coap-base-type;
    description
      "CoAP message ID from RFC 7252";
  }

  identity fid-coap-token {
    base fid-coap-base-type;
    description
      "CoAP token from RFC 7252";
  }

  identity fid-coap-option-if-match {
    base fid-coap-base-type;
    description
      "CoAP option If-Match from RFC 7252";
  }

  identity fid-coap-option-uri-host {
    base fid-coap-base-type;
    description
      "CoAP option URI-Host from RFC 7252";
  }

  identity fid-coap-option-etag {
    base fid-coap-base-type;
    description
      "CoAP option Etag from RFC 7252";
  }

  identity fid-coap-option-if-none-match {
    base fid-coap-base-type;
    description
      "CoAP option if-none-match from RFC 7252";
  }

  identity fid-coap-option-observe {
    base fid-coap-base-type;
    description
      "CoAP option Observe from RFC 7641";
  }

  identity fid-coap-option-uri-port {
    base fid-coap-base-type;
    description
      "CoAP option Uri-Port from RFC 7252";
  }

  identity fid-coap-option-location-path {
    base fid-coap-base-type;
    description
      "CoAP option Location-Path from RFC 7252";
  }

  identity fid-coap-option-uri-path {
    base fid-coap-base-type;
    description
      "CoAP option Uri-Path from RFC 7252";
  }

  identity fid-coap-option-content-format {
    base fid-coap-base-type;
    description
      "CoAP option Content Format from RFC 7252";
  }

  identity fid-coap-option-max-age {
    base fid-coap-base-type;
    description
      "CoAP option Max-Age from RFC 7252";
  }

  identity fid-coap-option-uri-query {
    base fid-coap-base-type;
    description
      "CoAP option Uri-Query from RFC 7252";
  }

  identity fid-coap-option-accept {
    base fid-coap-base-type;
    description
      "CoAP option Accept from RFC 7252";
  }

  identity fid-coap-option-location-query {
    base fid-coap-base-type;
    description
      "CoAP option Location-Query from RFC 7252";
  }

  identity fid-coap-option-block2 {
    base fid-coap-base-type;
    description
      "CoAP option Block2 from RFC 7959";
  }

  identity fid-coap-option-block1 {
    base fid-coap-base-type;
    description
      "CoAP option Block1 from RFC 7959";
  }

  identity fid-coap-option-size2 {
    base fid-coap-base-type;
    description
      "CoAP option size2 from RFC 7959";
  }

  identity fid-coap-option-proxy-uri {
    base fid-coap-base-type;
    description
      "CoAP option Proxy-Uri from RFC 7252";
  }

  identity fid-coap-option-proxy-scheme {
    base fid-coap-base-type;
    description
      "CoAP option Proxy-scheme from RFC 7252";
  }

  identity fid-coap-option-size1 {
    base fid-coap-base-type;
    description
      "CoAP option Size1 from RFC 7252";
  }

  identity fid-coap-option-no-response {
    base fid-coap-base-type;
    description
      "CoAP option No response from RFC 7967";
  }

  identity fid-coap-option-oscore-flags {
    base fid-coap-base-type;
    description
      "CoAP option oscore flags (see RFC 8824, section 6.4)";
  }

  identity fid-coap-option-oscore-piv {
    base fid-coap-base-type;
    description
      "CoAP option oscore flags (see RFC 8824, section 6.4)";
  }

  identity fid-coap-option-oscore-kid {
    base fid-coap-base-type;
    description
      "CoAP option oscore flags (see RFC 8824, section 6.4)";
  }

  identity fid-coap-option-oscore-kidctx {
    base fid-coap-base-type;
    description
      "CoAP option oscore flags (see RFC 8824, section 6.4)";
  }

  //----------------------------------
  // Field Length type definition
  //----------------------------------

  identity fl-base-type {
    description
      "Used to extend field length functions.";
  }

  identity fl-variable {
    base fl-base-type;
    description
      "Residue length in Byte is sent as defined
       for CoAP in RFC 8824 (cf. 5.3).";
  }

  identity fl-token-length {
    base fl-base-type;
    description
      "Residue length in Byte is sent as defined
       for CoAP in RFC 8824 (cf. 4.5).";
  }

  //---------------------------------
  // Direction Indicator type
  //---------------------------------

  identity di-base-type {
    description
      "Used to extend direction indicators.";
  }

  identity di-bidirectional {
    base di-base-type;
    description
      "Direction Indication of bidirectionality in
       RFC 8724 (cf. 7.1).";
  }

  identity di-up {
    base di-base-type;
    description
      "Direction Indication of uplink defined in
       RFC 8724 (cf. 7.1).";
  }

  identity di-down {
    base di-base-type;
    description
      "Direction Indication of downlink defined in
       RFC 8724 (cf. 7.1).";
  }

  //----------------------------------
  // Matching Operator type definition
  //----------------------------------

  identity mo-base-type {
    description
      "Used to extend Matching Operators with SID values";
  }

  identity mo-equal {
    base mo-base-type;
    description
      "Equal MO as defined in RFC 8724 (cf. 7.3)";
  }

  identity mo-ignore {
    base mo-base-type;
    description
      "Ignore MO as defined in RFC 8724 (cf. 7.3)";
  }

  identity mo-msb {
    base mo-base-type;
    description
      "MSB MO as defined in RFC 8724 (cf. 7.3)";
  }

  identity mo-match-mapping {
    base mo-base-type;
    description
      "match-mapping MO as defined in RFC 8724 (cf. 7.3)";
  }

  //------------------------------
  // CDA type definition
  //------------------------------

  identity cda-base-type {
    description
      "Compression Decompression Actions.";
  }

  identity cda-not-sent {
    base cda-base-type;
    description
      "not-sent CDA as defined in RFC 8724 (cf. 7.4).";
  }

  identity cda-value-sent {
    base cda-base-type;
    description
      "value-sent CDA as defined in RFC 8724 (cf. 7.4).";
  }

  identity cda-lsb {
    base cda-base-type;
    description
      "LSB CDA as defined in RFC 8724 (cf. 7.4).";
  }

  identity cda-mapping-sent {
    base cda-base-type;
    description
      "mapping-sent CDA as defined in RFC 8724 (cf. 7.4).";
  }

  identity cda-compute { 
    base cda-base-type;
    description
      "compute-length CDA as defined in RFC 8724 (cf. 7.4)";
  }

  identity cda-deviid {
    base cda-base-type;
    description
      "deviid CDA as defined in RFC 8724 (cf. 7.4)";
  }

  identity cda-appiid {
    base cda-base-type;
    description
      "appiid CDA as defined in RFC 8724 (cf. 7.4)";
  }

  // -- type definition

  typedef fid-type {
    type identityref {
      base fid-base-type;
    }
    description
      "Field ID generic type.";
  }

  typedef fl-type {
    type union {
      type int64; /* positive integer, expressing length in bits */
      type identityref { /* function */
        base fl-base-type;
      }
    }
    description
      "Field length either a positive integer expressing the size in 
       bits or a function defined through an identityref.";
  }

  typedef di-type {
    type identityref {
      base di-base-type;
    }
    description
      "Direction in LPWAN network, up when emitted by the device,
       down when received by the device, bi when emitted or
       received by the device.";
  }

  typedef mo-type {
    type identityref {
      base mo-base-type;
    }
    description
      "Matching Operator (MO) to compare fields values with
       target values";
  }

  typedef cda-type {
    type identityref {
      base cda-base-type;
    }
    description
      "Compression Decompression Action to compression or
       decompress a field.";
  }

  // -- FRAGMENTATION TYPE
  // -- fragmentation modes

  identity fragmentation-mode-base-type {
    description
      "fragmentation mode.";
  }

  identity fragmentation-mode-no-ack {
    base fragmentation-mode-base-type;
    description
      "No-ACK of RFC8724.";
  }

  identity fragmentation-mode-ack-always {
    base fragmentation-mode-base-type;
    description
      "ACK-Always of RFC8724.";
  }

  identity fragmentation-mode-ack-on-error {
    base fragmentation-mode-base-type;
    description
      "ACK-on-Error of RFC8724.";
  }

  typedef fragmentation-mode-type {
    type identityref {
      base fragmentation-mode-base-type;
    }
    description
      "type used in rules";
  }

  // -- Ack behavior 

  identity ack-behavior-base-type {
    description
      "Define when to send an Acknowledgment .";
  }

  identity ack-behavior-after-All0 {
    base ack-behavior-base-type;
    description
      "Fragmentation expects Ack after sending All0 fragment.";
  }

  identity ack-behavior-after-All1 {
    base ack-behavior-base-type;
    description
      "Fragmentation expects Ack after sending All1 fragment.";
  }

  identity ack-behavior-by-layer2 {
    base ack-behavior-base-type;
    description
      "Layer 2 defines when to send an Ack.";
  }

  typedef ack-behavior-type {
    type identityref {
      base ack-behavior-base-type;
    }
    description
      "Type used in rules.";
  }

  // -- All1 with data types

  identity all1-data-base-type {
    description
      "Type to define when to send an Acknowledgment message.";
  }

  identity all1-data-no {
    base all1-data-base-type;
    description
      "All1 contains no tiles.";
  }

  identity all1-data-yes {
    base all1-data-base-type;
    description
      "All1 MUST contain a tile.";
  }

  identity all1-data-sender-choice {
    base all1-data-base-type;
    description
      "Fragmentation process chooses to send tiles or not in all1.";
  }

  typedef all1-data-type {
    type identityref {
      base all1-data-base-type;
    }
    description
      "Type used in rules.";
  }

  // -- RCS algorithm types

  identity rcs-algorithm-base-type {
    description
      "Identify which algorithm is used to compute RCS.
       The algorithm also defines the size of the RCS field.";
  }

  identity rcs-RFC8724 {
    base rcs-algorithm-base-type;
    description
      "CRC 32 defined as default RCS in RFC8724. RCS is 4 byte-long";
  }

  typedef rcs-algorithm-type {
    type identityref {
      base rcs-algorithm-base-type;
    }
    description
      "type used in rules.";
  }

  // --------- TIMER DURATION -------------------
  
   grouping timer-duration {
    leaf ticks-duration {
      type uint8;
      default 20;
      description "duration of one tick in micro-seconds, 2^ticks-duration/10^6 = 1.048s";
    }
    leaf ticks-numbers {
      type uint16;
      description "timer duration = ticks-numbers * 2^ticks / 10^6";
    }  
  }

  // --------  RULE ENTRY DEFINITION ------------

  grouping tv-struct {
    description
      "Defines the target value element. Always a binary type, strings
       must be converted to binary. field-id allows the conversion
       to the appropriate type.";
    leaf value {
      type binary;
      description
        "Target Value";
    }
    leaf indicia {
      type uint16;
      description
        "Indicia gives the position in the matching-list. If only one 
         element is present, indicia is 0. Otherwise, indicia is the
         the order in the matching list, starting at 0.";
    }
  }

  grouping compression-rule-entry {
    description
      "These entries defines a compression entry (i.e. a line)
       as defined in RFC 8724.

       +-------+--+--+--+------------+-----------------+---------------+
       |Field 1|FL|FP|DI|Target Value|Matching Operator|Comp/Decomp Act|
       +-------+--+--+--+------------+-----------------+---------------+

       An entry in a compression rule is composed of 7 elements:
       - Field ID: The header field to be compressed. The content is a
         YANG identifer.
       - Field Length : either a positive integer of a function defined
         as a YANG id.
       - Field Position: a positive (and possibly equal to 0) integer.
       - Direction Indicator: a YANG identifier giving the direction.
       - Target value: a value against which the header Field is
         compared.
       - Matching Operator: a YANG id giving the operation, parameters
         may be associated to that operator.
       - Comp./Decomp. Action: A YANG id giving the compression or
         decompression action, parameters may be associated to that
         action.
      ";
    leaf field-id {
      type schc:fid-type;
      mandatory true;
      description
        "Field ID, identify a field in the header with a YANG
         referenceid.";
    }
    leaf field-length {
      type schc:fl-type;
      mandatory true;
      description
        "Field Length, expressed in number of bits or through a function defined as a
         YANG referenceid.";
    }
    leaf field-position {
      type uint8;
      mandatory true;
      description
        "Field position in the header is an integer. Position 1 matches 
         the first occurence of a field in the header, while incremented 
         position values match subsequent occurences.
         Position 0 means that this entry matches a field irrespective 
         of its position of occurence in the header.
         Be aware that the decompressed header may have position-0 
         fields ordered differently than they appeared in the original 
         packet.";
    }
    leaf direction-indicator {
      type schc:di-type;
      mandatory true;
      description
        "Direction Indicator, a YANG referenceid to say if the packet
         is bidirectional, up or down";
    }
    list target-value {
      key "indicia";
      uses tv-struct;
      description
        "A list of value to compare with the header field value.
         If target value is a singleton, position must be 0.
         For use as a matching list for the mo-match-mapping matching 
         operator, positions should take consecutive values starting 
         from 1.";
    }
    leaf matching-operator {
      type schc:mo-type;
      must "../target-value or derived-from-or-self(., 'mo-ignore')" {
        error-message 
            "mo-equal, mo-msb and mo-match-mapping need target-value";
        description
          "target-value is not required for mo-ignore";
      }
      must "not (derived-from-or-self(., 'mo-msb')) or
            ../matching-operator-value" {
        error-message "mo-msb requires length value";
      }
      mandatory true;
      description
        "MO: Matching Operator";
    }
    list matching-operator-value {
      key "indicia";
      uses tv-struct;
      description
        "Matching Operator Arguments, based on TV structure to allow
         several arguments.
         In RFC 8724, only the MSB matching operator needs arguments (a single argument, which is the
         number of most significant bits to be matched)";
    }
    leaf comp-decomp-action {
      type schc:cda-type;
      mandatory true;
      description
        "CDA: Compression Decompression Action.";
    }
    list comp-decomp-action-value {
      key "indicia";
      uses tv-struct;
      description
        "CDA arguments, based on a TV structure, in order to allow for 
         several arguments. The CDAs specified in RFC 8724 require no 
         argument.";
    }
  }

  grouping compression-content {
    list entry {
      key "field-id field-position direction-indicator";
      uses compression-rule-entry;
      description
        "A compression rule is a list of rule entries, each describing
         a header field. An entry is identifed through a field-id,
         its position in the packet and its direction.";
    }
    description
      "Define a compression rule composed of a list of entries.";
  }

  grouping fragmentation-content {
    description
      "This grouping defines the fragmentation parameters for
       all the modes (No-Ack, Ack-Always and Ack-on-Error) specified in
       RFC 8724.";
    leaf fragmentation-mode {
      type schc:fragmentation-mode-type;
      mandatory true;
      description
        "which fragmentation mode is used (noAck, AckAlways,
         AckonError)";
    }
    leaf l2-word-size {
      type uint8;
      default "8";
      description
        "Size, in bits, of the layer 2 word";
    }
    leaf direction {
      type schc:di-type;
      must "derived-from-or-self(., 'di-up') or
            derived-from-or-self(., 'di-down')" {
        error-message 
            "direction for fragmentation rules are up or down.";
      }
      mandatory true;
      description
        "Should be up or down, bidirectionnal is forbiden.";
    }
    // SCHC Frag header format 
    leaf dtag-size {
      type uint8;
      default "0";
      description
        "Size, in bits, of the DTag field (T variable from RFC8724).";
    }
    leaf w-size {
      when "derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-on-error') 
            or
            derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-always') ";
      type uint8;
      description
        "Size, in bits, of the window field (M variable from RFC8724).";
    }
    leaf fcn-size {
      type uint8;
      mandatory true;
      description
        "Size, in bits, of the FCN field (N variable from RFC8724).";
    }
    leaf rcs-algorithm {
      type rcs-algorithm-type;
      default "schc:rcs-RFC8724";
      description
        "Algorithm used for RCS. The algorithm specifies the RCS size";
    }
    // SCHC fragmentation protocol parameters
    leaf maximum-packet-size {
      type uint16;
      default "1280";
      description
        "When decompression is done, packet size must not
         strictly exceed this limit, expressed in bytes.";
    }
    leaf window-size {
      type uint16;
      description
        "By default, if not specified 2^w-size - 1. Should not exceed
         this value. Possible FCN values are between 0 and 
         window-size - 1.";
    }
    leaf max-interleaved-frames {
      type uint8;
      default "1";
      description
        "Maximum of simultaneously fragmented frames. Maximum value is
        2^dtag-size. All DTAG values can be used, but at most
        max-interleaved-frames must be active at any time.";
    }
    container inactivity-timer {
      uses timer-duration;
      description
        "Duration is seconds of the inactivity timer, 0 indicates 
        that the timer is disabled.";
    }
    container retransmission-timer {
      uses timer-duration;
      when "derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-on-error') 
            or
            derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-always') ";
      description
        "Duration in seconds of the retransmission timer.";
    }
    leaf max-ack-requests {
      when "derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-on-error') 
            or
            derived-from(../fragmentation-mode, 
                                'fragmentation-mode-ack-always') ";
      type uint8 {
        range "1..max";
      }
      description
        "The maximum number of retries for a specific SCHC ACK.";
    }
    choice mode {
      case no-ack;
      case ack-always;
      case ack-on-error {
        leaf tile-size {
          when "derived-from(../fragmentation-mode,
                             'fragmentation-mode-ack-on-error')";
          type uint8;
          description
            "Size, in bits, of tiles. If not specified or set to 0,
             tiles fill the fragment.";
        }
        leaf tile-in-All1 {
          when "derived-from(../fragmentation-mode,
                             'fragmentation-mode-ack-on-error')";
          type schc:all1-data-type;
          description
            "Defines whether the sender and receiver expect a tile in
             All-1 fragments or not, or if it is left to the sender's 
             choice.";
        }
        leaf ack-behavior {
          when "derived-from(../fragmentation-mode,
                             'fragmentation-mode-ack-on-error')";
          type schc:ack-behavior-type;
          description
            "Sender behavior to acknowledge, after All-0, All-1 or
             when the LPWAN allows it.";
        }
      }
      description
        "RFC 8724 defines 3 fragmentation modes.";
    } 
  }

  // Define rule ID. Rule ID is composed of a RuleID value and a 
  // Rule ID Length

  grouping rule-id-type {
    leaf rule-id-value {
      type uint32;
      description
        "Rule ID value, this value must be unique, considering its
         length.";
    }
    leaf rule-id-length {
      type uint8 {
        range "0..32";
      }
      description
        "Rule ID length, in bits. The value 0 is for implicit rules.";
    }
    description
      "A rule ID is composed of a value and a length, expressed in 
       bits.";
  }

  // SCHC table for a specific device.

  container schc {
    list rule {
      key "rule-id-value rule-id-length";
      uses rule-id-type;
      choice nature {
        case fragmentation {
          if-feature "fragmentation";
          uses fragmentation-content;
        }
        case compression {
          if-feature "compression";
          uses compression-content;
        }
        case no-compression {
          description
            "RFC8724 requires a rule for uncompressed headers.";
        }
        description
          "A rule is for compression, for no-compression or for
           fragmentation.";
      }
      description
        "Set of rules compression, no compression or fragmentation
         rules identified by their rule-id.";
    }
    description
      "a SCHC set of rules is composed of a list of rules which are
       used for compression, no-compression or fragmentation.";
  }
}
<code ends>
]]></artwork></figure>

</section>


  </middle>

  <back>

    <references title='Normative References'>





<reference  anchor="RFC8724" target='https://www.rfc-editor.org/info/rfc8724'>
<front>
<title>SCHC: Generic Framework for Static Context Header Compression and Fragmentation</title>
<author initials='A.' surname='Minaburo' fullname='A. Minaburo'><organization /></author>
<author initials='L.' surname='Toutain' fullname='L. Toutain'><organization /></author>
<author initials='C.' surname='Gomez' fullname='C. Gomez'><organization /></author>
<author initials='D.' surname='Barthel' fullname='D. Barthel'><organization /></author>
<author initials='JC.' surname='Zuniga' fullname='JC. Zuniga'><organization /></author>
<date year='2020' month='April' />
<abstract><t>This document defines the Static Context Header Compression and fragmentation (SCHC) framework, which provides both a header compression mechanism and an optional fragmentation mechanism. SCHC has been designed with Low-Power Wide Area Networks (LPWANs) in mind.</t><t>SCHC compression is based on a common static context stored both in the LPWAN device and in the network infrastructure side. This document defines a generic header compression mechanism and its application to compress IPv6/UDP headers.</t><t>This document also specifies an optional fragmentation and reassembly mechanism. It can be used to support the IPv6 MTU requirement over the LPWAN technologies. Fragmentation is needed for IPv6 datagrams that, after SCHC compression or when such compression was not possible, still exceed the Layer 2 maximum payload size.</t><t>The SCHC header compression and fragmentation mechanisms are independent of the specific LPWAN technology over which they are used. This document defines generic functionalities and offers flexibility with regard to parameter settings and mechanism choices. This document standardizes the exchange over the LPWAN between two SCHC entities. Settings and choices specific to a technology or a product are expected to be grouped into profiles, which are specified in other documents. Data models for the context and profiles are out of scope.</t></abstract>
</front>
<seriesInfo name='RFC' value='8724'/>
<seriesInfo name='DOI' value='10.17487/RFC8724'/>
</reference>



<reference  anchor="RFC8824" target='https://www.rfc-editor.org/info/rfc8824'>
<front>
<title>Static Context Header Compression (SCHC) for the Constrained Application Protocol (CoAP)</title>
<author initials='A.' surname='Minaburo' fullname='A. Minaburo'><organization /></author>
<author initials='L.' surname='Toutain' fullname='L. Toutain'><organization /></author>
<author initials='R.' surname='Andreasen' fullname='R. Andreasen'><organization /></author>
<date year='2021' month='June' />
<abstract><t>This document defines how to compress Constrained Application Protocol (CoAP) headers using the Static Context Header Compression and fragmentation (SCHC) framework. SCHC defines a header compression mechanism adapted for Constrained Devices. SCHC uses a static description of the header to reduce the header's redundancy and size. While RFC 8724 describes the SCHC compression and fragmentation framework, and its application for IPv6/UDP headers, this document applies SCHC to CoAP headers. The CoAP header structure differs from IPv6 and UDP, since CoAP uses a flexible header with a variable number of options, themselves of variable length. The CoAP message format is asymmetric: the request messages have a header format different from the format in the response messages. This specification gives guidance on applying SCHC to flexible headers and how to leverage the asymmetry for more efficient compression Rules.</t></abstract>
</front>
<seriesInfo name='RFC' value='8824'/>
<seriesInfo name='DOI' value='10.17487/RFC8824'/>
</reference>



<reference  anchor="RFC9011" target='https://www.rfc-editor.org/info/rfc9011'>
<front>
<title>Static Context Header Compression and Fragmentation (SCHC) over LoRaWAN</title>
<author initials='O.' surname='Gimenez' fullname='O. Gimenez' role='editor'><organization /></author>
<author initials='I.' surname='Petrov' fullname='I. Petrov' role='editor'><organization /></author>
<date year='2021' month='April' />
<abstract><t>The Static Context Header Compression and fragmentation (SCHC) specification (RFC 8724) describes generic header compression and fragmentation techniques for Low-Power Wide Area Network (LPWAN) technologies. SCHC is a generic mechanism designed for great flexibility so that it can be adapted for any of the LPWAN technologies.</t><t>This document defines a profile of SCHC (RFC 8724) for use in LoRaWAN networks and provides elements such as efficient parameterization and modes of operation.</t></abstract>
</front>
<seriesInfo name='RFC' value='9011'/>
<seriesInfo name='DOI' value='10.17487/RFC9011'/>
</reference>




    </references>




  </back>

<!-- ##markdown-source:
H4sIAFxegmIAA+19a3fbRpLod/6KPvIHixmSetixHWUmCS3ZGZ21bK8lJ3fO
nZ09EAlSWIMABwAla23vb9969QtoUKCkSebesSZnLJFAV3V1dXVVdT2Gw2Gv
rKJs+p9RmmfxgaqKVdxLlgX9Vlb7u7vf7e73pvkkixbw9bSIZtUwiavZMF1e
RdmwnFxMhtdRNh9OoyoaLvJpnA53v+tNoupAldW0t0wOekqV14sinpUH6uF1
XD7ED/Kiqn1SFcmksn9P8sUycj+o8on+o1clVQroHAFMdYIw1Swv1GkVVclE
HeZZFX+s1J/jaBoX8OdiWcRlmeSZ2j49/PNhvxednxfx5YF69fbX8WuFn6m/
jF//rAD9VRr3ruYHiqanfs2LD0k2Vz8X+WrZi1bVRV4c9IYqyQDz8UidJFl0
vipyQI8JNM4i98O8gKHGkw9pkvMU4xhmtLf36OlYRZdxtorVNC7V4UW0WJbq
eRplkxLnnlTXB+rRt9/u7apDQD3PhqfxZTLPYvhzGn8k8qyyqoCnXhbwUgyf
xIsoSQ9UlEU/RQBxBCAF0VcjdZavqijJDJ6volURZ5XzOaF6nJVA2lWlTo5f
vzhVZy9evTh8c/K9Oj45U+MK0KuSv69iOxX4baj2VUHzUGmEM4HxANEiSmL6
9vBU7T19svvUndbTJxtPSxAeCcI/JYtqGBmMRrOil+XFAtb/MkaslHr38vDZ
0/3H9o9nzh/f7e7tHfTor95wOFTROUwIuK3XO7tISgX8vlogeWBxJkVyDksU
MYcgl6uF4bjqImb22b6R9/qqN3E4EfacmhXRHMHAm/BJAaxXjnqEzyKZToER
ew9gRaoCuHJCj3x64P75pdcj2Alit37sRTy5iLKkXBDWkzzD6SZZPFVZXF0B
k8Oc4xl9kACYT0K8L19GveMKAZxHJXyHY8PS00wnMtPyIirgq/NrBQMpgJhU
CdKrIuKcw3pOo+Ja5TP6OwB61HPgqWWRXyZTIngG4Ga4qKkqYpycmY4MRhRT
K8QsTuCDQmZnKLEzjV26bMO3hztH/R7869Fnp4ijsowX5+k1PfRy510f9gyA
mOcAncC5bAG/V7nglvx3TMgwqyyb+MGT+WwWg9zofUMfl7ADmdwJP50BmaoL
oN20HKgYxIJKeIAESFxkzfkjLgmOiTtCwbAgqlZL4M1Yg86JHDAigi/jCr4G
mQtwy2U8SWawfpdRugLstuPRfKSO314+AdIDTh8H6igGIZAxpGg6ReoNRqNR
H+DAP80tgnxjNgiLUIRqcObZdWD+gbq6SCYXKoXNQ3SDdxb4pT97XGTBHn+N
0tShdpzGOGoJZIHdQ/uDvvi6V77ula97pX2v0O5w4QLe8xjO8WQyoFfgGHb3
xjSHAbK8AoBA2x4gEFl6AWOCtpanI9CHrtUFn4WzJE6ntAHlsAVWrC5AsZpf
4JocHw1giGVe0kLj79OkiCfyBxAh4onAO7BfJvDGeYyMD5QFHKO0x9/iJEmX
zGCp3M2CQ/Dfz+hvRvaa0WLq4MoO1PujtwM4uMdv6ZU3p4dv3r0wFKqtRPz3
FSCJC4p8A/wkq7CMCmBcYMiS0YVtDww6SVdTlhoRrQBtmzJ2n8YH26RLDzeZ
ZhxQQGAx86uSmTYFSonQsEsoCoqP86pEhZY+j6MKlCrCGaYKAP6HfkAtcr4y
o30idcnZuvS3UlsN1plEy+g8SUW4wTBV9AE3aoZcMiEVb+t7ePtLzwHlY7ke
mP9sd3Ayv08H6sHLZD7UoMma+NPDlxoTXzA2d+DoIWDee/DAMy3e0Zb69ADf
/M/qehmX8FBNWgN3d5PWLnjilN7Yp7AcKLSngUyXySTGrYXP5HT6zCxPsmKp
XkQgLvB3eht2cwkkmrHSDENWeU9ru+5Wll2bEVqyk4Gu5xbHeIq7Q0gLZP7D
8K4/f4BRPqvgD1JZvQ5/V/v53LsPVGCUICqESNIJEUDlc+8+UPncA1S2Xx4f
9RuY7HXEBFCBUTQyf3D+cwA1QTdRgVE+vyTe2Pv88tXnl28/Hx1/PouKOfDc
LyiJP59E1eQCZc2bJViDVV58xu2yc0RqBhjF1ef7x2X/nwIXOPmJ1KOR/Ad/
yGfI2OZXFf7k3nDZMXR5fQe63AcqO72W/bzBjxmh99cGxE1/dpQVWfo0mFQg
UOUocAX7kacXi4GPJ8CDB8dT1OFBRBasK5Ek7fWcj0nhFulp/UyO3yqioy9f
sA5LL1bXoFOR6UDqGYrbOCvpoCLBO0/zczj7r9UqQ98HnU/wMajlCXwYreig
QrAzMBviKcpn0s+XoBRNkiVrnKxk4FkUXyk8rlyzZY7uLjw6XIRQkUetIUe1
A3iGdHQzDKmH+nFUppGrrsDSoJc+xNdgvkwJxhChjfjlIrmMjVIqbyfaThGy
uU4+JpTYWMoMNAGbpEIs8BNAqeVBJEL8MVogCbY/fcJFdyb45UsfDDTUqOD/
UCOtTZ6BTOnMfXd4CmjP8wImuBB0pytUOlVTQcHjsSea1c6OGg791wm7Ek9O
Q75iUg7N90NDtHatSDjuWowCO3YiyLGBsFwBlQD4SN4jtrAPR2mZGxuFrC80
2EQlQZxJGRhZ3c1DWDQdQZLo3jKP79umcfjuUD3aNwpwRJZ2tEorgg78IDBG
/HepHoMtXcXDNM/mFivNBD50h4D0q7u6nwSBm5H+0oY6janZljUuV+k0UsYF
K8LmbXBf+nvSeU1rnyzZrawBucMbBhTNCUgrMUe05Bo4GlxpTN8imSdoNC+j
yYeY7ZRZUpQV2iSab/TmSpOS9Em2mNB4gRXwP8Q1WeCZgqs3Rx2z8q17mNyU
PomWqA8XCQ5NSimZeMslSDAHaZBcrgptrU6SjrRRSSYxKY7EQiRFGH0nKzQy
YfsBYWTfg92cCMUm1j+QZ7E1RcV6hHWcxh/FW8NUJZuWHOiOK2B0CfQk+qLN
aP5CJ4CInMmqIF97XfSLQVhq2lk3B5qjq6xuAQ5c+xXGfm8sOWsUDuAYAAHA
BDl5f3qGJ4OesWtwyynCr7rcBSfjmD81VNWebkOCKL2KrkuR36U9v2bJ1G4Y
sm4zV5CqHo5ECJqhgPxiawB21jYFIuOvsIyX+C7aSzD2X//41z966/DDDy68
3hhOErB/yuQ8jV3Dnk4C8yKRRc4eg7pFSJBln5bg0XMQgaG2AJktOQnbOCQS
Rmcq4kfAL2iV8QcXINx6fJ5PE/TiTdlgLVfnQ8Z84LxuKFjGBVI8QisSZ45n
C+I5W8HU6VmQMK7DLPF4Kcqy+OMYuEe5ZyEfhfHHoR4AtlpvTkvLKKBAMNzg
sOlIjUWYWp+odqQYcrD3hla9Z3xAVrBVI/U6r8StQ+d9MpudwjTVeVIFeOys
iGZomB6mEcg4s1rmhLW08rix/ex8qSdmVAXjKuOFCJx3OHSyvHzSGJ/G8AC3
HnYtcIl2Wkxri3wqh596tr+7uw4fET91bHxcW1Ei2HoIXiuiO0qdGwBXvCwT
WpU7QPeX9/Y4DKdhNNxn7obJQCtRhmH9Zx7tPXkm2JL5V1MEnO2mFYEjx8/t
697IGHoDlnT+4/4lngHk8klCmimID5J0hjK4+WHi9Nz2ZDaSna7h0heg9tq9
Y/Rn/VYXhSnA7q1qkmF68S2zah7UlDwsNYnO8HdHvDUJ8+CBYiBpnM3B/Oj1
vD+BJHL/EZGLMJ6j8QYSWA4erfJqOQ37juQQ+5WNV2yVTVi1d9UTR3XubV1G
xZZ5zujl5LGFr5IIjyjBSU6q7auLvIxdRD+Kg42wAEW37Dfc2K66vlV9SB2Y
SJtFlEVzPTdUUHpnOTpHXciipjSPXDrp0uZBZyDQqRaSvGkXwfteFEwwp/Hy
ZeYukwZRhqwNGN6Q0N3jaQch8y4uk+nKUjlTz4GwpIagjhaZg0zvbqQi3QZo
CQx058307ehRvwW9Cok8FBi/I4qPR9/2w7vLiB+B0kkE8U56RW/gZjszCkpt
2fT9jGPJ1Qxq+ASN7Yz1kgBG+sYDHs6LmJUhc0jOals6Ql8I3g3G1VUsSqe/
t/U+rpu1MobW1lwUHYlZw21I0EByjgKiM21ITsZNy0wWpln15PH3aucbufG6
jDXCA73tEWvLAoT8NzveGK5AxqEM9c1zrWynRfQNglrga4nZQNbF1VAWsNXg
reg0uGmWcK7+XPOjC7My+W8+Eiyj2lNBXzDqY0H/zVzUmB/LbasLm8ftETGQ
K212VBgLdI/1XjDyilgccqDgkhpcxMu4SsQ1xC/sormJJmlcWk3YxQ2N3mSx
zIsqQhmQTfWHaOkCAQvrgdIGt1wL4gDiEhipbtNm80Br9nhhDl88GxEZj/St
rDpmjPOCBUHgC7U9TfquD6qKQatO7OkKBn8cFSUxOF58mytftf0c3oQR8gwd
ncs0yT6o7fdL+uwI5AZ/cHTVN5dPrgieJrc4gCzwRE8gePzg4Il5GGxoR8C7
gFsFfINSwlDeqKS/6VdYrD/VYv3paC948gD01fLe0BGq2+vojZGZooC/L3Sm
etU3QahFjhwddzvwQizxkO51a8OBJmaFRH2UwM4oPfdCTeeaJk2dK7S7RP1y
9yq8S9Tdaur7R8da3w+cWvJaJ32/uYqtp8iRQz+JtpVIpgFG2VyhgyheJFVl
J8qX2ca4Ihai52CkGEhcfxB2jT8OyCN5N/zGOmtDaLTuaGljCRCN7tWa+vSg
oj//kwS8KEveEyR6tf/0PMkw9KuM/76KM5DVdMBk13ICw1mSYpys2Hiotswq
Rzk5+wUjWujyQg4jh6nBbgEmg/NA4n34MxeVkRLXMR4bfJ6x9xQvna4SkNnn
4tyONM4Dvtwx5wh98SEWt9lFMr+I0YusvzbHYv02oq6PkdeVFV10pIsqrD2Q
5FseLuDYwG1zeDRmcBYLGxIj4T1lfBkXIKM5CIrurF7CYC/+voIP8Rh9dfp8
4K+LCY+oE46AufoocUASsWpOF3W7Iw3BQ7UOIco0FIOgDcY6llElbovclSUw
U8WuhV1CW/t2cZhkvspXpXvNxDd4pAxcDnkp24/BI8eEZJ6V5TLTHrO/N9Jc
intkIH7yUu+2xQoWnDGCGYk/gl8YWdekXqEL/WBpMdHM7d4NWP+Awli3maDm
KdMMRCu2zRnCHF3yb7lCi8bU6+iNijrP3pO1o+qVCuiHcnm5kAv2Ie4ZcgCT
QoMXDmYYsy/JSU3BQAOXtXZH6g3q31dJGXtfoJ/BDMLXORieUwMt25U4CP8E
5XJ35NAgcEie/RI+Hl3u0Gp1I4Sg12t8pLZP3vRZ3hk7AO960OdvTDZRCXl9
JbTV+tb5OkoCkLS15uITdsU8VidvUDYhDXRInUzy5A2ZmA3dcZHfQndsTLlk
+XiqL6VCXmSAFJMcclQkF3qrisTSi2fmRAvW1aBH/TBQOElAhG0M9ZhfuzXY
RXm+McyT0+d3AOidFpuC9t/ujkRjN8GrnZTN5rbRPpawmrjIm2oiwApphTDh
hlZ48qbd/yvPd1IHm8RsVQdbBIOoA3z5TK5QOfpwC5mzwdnrZZDUMqF1ylsD
AdbcAlJMATgK2i7Z2X5Nd+OXSXzla0HnqwSsftrrkXPYbpcxHHAX0bICcfXp
k6cKkgJeix71g4zG7Pvs9W56RG2DDtS3F7yl758Fwq7KZkArarGxd8veC8nO
J6xgaWsH/hCGEU2TYuThU4fIcmeJl5H+HaR/+xiQupNp1EXs3kizkCWKY2d5
NSSt0hEDHsxWOWDexKmulwGPg4YwgqGVvyUCzrt3QSH1xW832KAd3wmoiM9b
ztx7+y5oaGvjk9oUBXlz+E0n+Oa+j278Ald+OEinw0BLhzZGX380wNyaZwPC
lsOhIfCRGJ0lfoByrSL/Rgkmwt/KJmP5m6e1bhi23LVcWif3OxDzQQeJ7B4K
hxzVA8p8lhNpbTKIfghPh0qr47MVWdNGaC6ia/0KmQOApTYFzQCjdSeP0ceH
khfDQY7o6W6kC6lPDzAk0eQl+E8Ax+RL8WUKtk6eKyrb03iJGVcYsMGRLmil
TIzRvuXFO27pnA6MJeqd5OzgaGai1NJerIo+xnNCHeFbbgIM5uAkCDWQDqXQ
pyTpEOaW1kkgqpCOZDNruxtDVrMpHvXXIZ/OyFOgTCpaxL/jgulgP5dNAKki
iWXhfScxAX/95ky7UkbMcv5KIMV7wcP4UT1LEZ5kd8brHDPMD/jqHz8mN0tm
gQP0ATJpNPmQ5VdpPJ1ra5MzzuBzpO03OIyY+gcSRuaBvALi5FfGzo8/ggE3
SXAH2JHJoEMHiZrn5H5gix7WsxppEDDUi6LIiwOlxnpQtA3dQchKJrceuaXY
kYdqSwVzEtVjkfDFk8YSk6fF4QmfUC2CNq8YMopRmgobXVRSHGAcM3lFT3EP
E48iBKKL1tJcuuC9cXPsLB8CWbwb5DUItB5ir/Ph+PDfcD/pANpu4AH2UGL9
7ooCwB+KG+lWaMDvMTLNvSACTxMHhlGxQeSN4bvHxNyI2gaRxM6xZ/3VmsXD
6kST4zS/x8V61aGJeSAApDm6ViyaMo1LIcBXYz5V9MvizHE8UyZdgI6s4yMd
RUBiSo4eH7SRcSDAznSKhTiJ8ICVNDWdEufeiSD9+Mkhi9o+SdOIInTncDKp
s2iuto/gD2NgXevr1al+5jx2JRAnXTTRZF8XRSVPjNqQW9+vHk4HVZvQI3Ms
04UvCD4b8qD1UFkSzhKkCfzKInX7175hIxC7evfhSGPeULwHWNThDYB9akDA
+Da/VHvmW/0Sfl9XCnRGq8WfL6g5BwWxQDEE0ozkn2JcNasY1QuefL1anMP6
bb88fN3XB7LJWZXnd6okdW/jGQU+TOpI2HOebwh4xi1ptv7Mw0SWVMfPwyEz
nJmEVP3ADKPP1jOLz53Bh5+HJ0P8/TX+jgmBlPc1/IP5d+j9Tj/wl06i+p/A
T+8zpf/BVvmsjpBf4d9fMVMKaIe/G8zeRtdpHk3ho2U0pdycbVBleGn694RL
/UattsOMoAoIARtYCQ9qbfxVhGHH+kHOVGXJlXrf0HWW2ZFarWGXTEaZItvv
bM2Cw4sYePBU7tn6wiaUeYG6hVw5wZbrVUWUlaRkoGZHewU3jwkwT+GXuNQa
M+GkGTCkwZnbJJtwY6KgX6B/P4sr1cMUGLY5JXfozLlQdnNxvByfWigVkR4e
sq4WT4n5ml70/1t6UX3bIf6y3aqAOQxfr1cCAMnmqW9XUg57vOZsHCXsAhyn
6XDPblE8i/8L7QZtfeklR88kBetRKgy6UBOpi+Cah56oNpMEUb5HZcewuoO5
+JUEKgTQO48vossk53Ii5nHQqg/sljU4mmtfMJXwsQFjLJj6I1yD7RUYwmT0
mL1Ox5S+rmoMA4IKpePkIk8mcWhApFvOqozEeont6gzP1DImEpJTRBkFWhEG
9mYxYNNYfDqIAvKuWDKziYYVKDB9i5QE18ZcwIkezYPWjrsc7qYOYNOuy8Oz
3rrhZIMuYG/p7gSu5kSgFVgL0Fvk24L2VWqd4QdjUkUJvQA0fWQYihYkZWcv
YNhYwJ2lViuurRLrbK3E8sWVGf1OQsuM0hRdWhA4Rr82Vmocq59kQDWXSV1r
mef2/M+XpI3GjjMJg9YAHQmJ4VdqRTronsiVaZMPjiVSoQUCu1j2bn9EH1t9
VpwnUem57TSWXO1IHWIUrpfiAFy0YjMcJPBllCZT0TVQzZ/gcqMFGSXpCgNd
MOqjWkRLIWo5qOvkJsyKpVHPqByg7IqGjN6HDsqx2lOtinFQ63T1X1aASf89
/NOeVXSNnqtqP9vlaoLbqFX/DYNc8zRrx/xhUFFuxXf3s2MAPSd60wxGDvrb
siTr8L0Zg0YRHGE7vfXG61medqLV0+sqwIDXW2t5V5IBWttHjl0vxpqu51RR
0FuVLOK67ZVG1wB+f6CrpaG8I81fNgGai6R27PYVFi0jTzkQdJlnpdTYQjbV
TOufs+blPallZqoceG7Cuv8AHVNaYGD5AEf3iMJiJXT16Y7S5Qg+6nT0Bg8l
F1I0A90K7P101zuUgsh0PJfij0tyz6KVT8MTckhFAmMEU2fU9n4b1Pa6o3Z+
PSRO3L8DZq+Ylf1d4q9k6NR2gXQ/uNegdsuzuyk7DAQtROTEsEVRzAa44Qh3
xupggDSdjW+N0dCTJEmuFLCIMLwjtpd0dIMg1dok2gRW4AKO1rTmvaPDuIhd
b8AQBZRJfqGiAujMg8notO3pysybbkM0s7EsJDQwPpYESinqwrPRPvwPrE//
3qtPYYMmSX4gEXL6GoZCbQtU+jiWDGaxRyd/kkUw7iUwxeboRue5BAvWPJml
Lg/ZDXFcAJ3g4twXNXJd8IqNcKRqjSVm9k1R2VlEH4m/hF42JZIdCBl7CvEY
qKp4sYQH6hPohiiDSharxZArYQzJN1H4JKMUzIEcHwWmB0nZjJILW9q6hKZG
JhdHM7e4juthlZUc0S05NzAw64JOlAx7wVhYLB3OPvNvaI3ZiVVFHbNZ9IZZ
vYQncXS6P8SSPDTRA89h1bzA4KpAcgIrquTDniCZrherzqveyId6RmbwJC/4
TJ5S9YNm5hQii3Q2Ae8CFUsNSIXHGaiJFJSu2chkTBUxO535ZToGESh8gKSg
sUUrpB0SWPIDz0ElDzhJwavMlr0zPseRen6tp8HsYWYtYeF7+892mX1G3bgh
xAxc6c1aRXijQjclkvJNJTRAVEa6MBR/aYtRbcu9Sp/vrBO6PaW8q4jHNhVU
uN6m/kyvqy1AacLLcUSTo+359kz+gHYQ2hqnkb7gwUWVGw2g7i7dAovI91/I
MPeNpIdcMyAV8Z6WAhpMkcM15TOJ5534joNaHWBNSCedvn4dNeLL9ok7iJNv
b8LvNEPTa3r2fLZrgZFkHDhc5nz4Z3kTmatIl+4QI9HuUC3PnvSJj70j8GB9
lMW6+dXOUjcshGpgSn3MerRHeZGv0ikr9FU4C8FjE9ZPKPBefx4I6sfw+0f7
a8PvPZ4d8Fr4hyNvhIFJkiSFviqt+Sms3UwJ0Jh5OdwOas/MR0qBZjAHsuyO
Ro/2t/z82hsw19k9kuDrH5gJF6/xOL/0UQ05qcztaaMeqLu3NWSvxoBGkHCx
GujODlt1FWXc14NsOKkKnxOvGOrWk4uJXmdMcOIYJBn+A4i/LX/lfWobGq7w
oHd5R38hzrSMGdKuxKR5dNkvQaWfDVuY+HvnKYLqX4NTvdWssk998UE26+Q2
ATrPNME5X94ILMuHbfBCzMYMJ7cnTsViWhNcTO9Mk8ozo60Q+PDwW/YYqkUa
D+iDGr45ORFc9Pxqed120KlT29YHmdUDCv3xLWB+1ymOxWZGUmiWu3GvRbwv
3Dq7zV2nM/wkTo1v0AqTuUMHRINuAZo1ifSlJwaZMhYZtWKh3RcMCxGEnSKW
Z1QjmYMszZ62aYCFJ6hIdogUKdyMQJP4pxmBKwb0ovpS1O0JPs1VIx4eP+/V
ih7rsV3ySsCdLpQk8l07yI0BwD4bfHGIb1yTcTLmeL1rZa8QTClKpzBy4/IJ
C4XCIWyOT9ZBjDJ3nl+aslwN9G1BJ28sP9QgIAzABnTLxwtPuR1FhsS0NKFB
rXZdYoqvg/VocyXdlHdevfBwqqcT1FwVLkVzWi5v+WBwZ0TjAVw6L4t4lpLz
pbrw9FGfcEnW+/TJqZ6N7U3ISMcLe1ZelnGB68J35kbP5jBIL3NRn/8aXcr9
eGMbAXC8AedBoVpHSpjkGrkV6XTpe0niyyU5ZBiE0tOb0VF8Wijafr1GMYiW
q/WC14NMr9V2MgI243Xoa2ESjk8f9fT3d67kqwe6c+3n+8NIj2S2M93L3SQ4
npqE2wM9wFDp6lQH7o2NCRCp1TznDUO7kwwHe7A4NRVneNFUG5/LkqiDNWVV
uLpIrWSKBRCZFhJwSNWHfysb/MAdeNuJXLm2nqLdvin5YYcJlBo4sPDM7nVu
lKwYsaOcOfvxwCqfUhSUj8HKUvmlRGvZSUpKmDvBBls5eLn48D6lg9Rxm5iR
JTKwXjktqpTe4A5MZNyRcO5I8gAO1DgENpzH4GYykNyd1DFrR8hZco++bkK0
Sa32bBTUAQ5mNbXZ3hxin7e1tpXeCqZe6rVbEs1ZOEl9Q3I4qlVMcnYS15Uo
B+OQZcVYp3dD+lXItLGuQl2TyJZCbdQmiprbucuMzNHatBZvPZl6Qrm9RrY1
rkZmz6s9Kb9bOunlFDdJNTzzyWRV6MSN4HJSW5k09soW2ZH8cg5S6hdLlnLZ
CgdAObJvGeR21SKOMtfpywJbo2wwIh8hSpRLN00es6RQt3NKMNkJebNwgD+H
bXVFTUF0VSW7G21COW7Ai+jSRpQOdx3AkpRK2fXo9tNaRIraVZRxcgmXMrJl
y01pZYd85PwJsI+Rn0OTfxLYF1Kj5RasFJDoAy05HcYmPxVQQmKYGV2LPpZt
dVNaqIQL5pLmV5k/J9ROvdwkz/TXNPbNfJM7u3YmY2NOSdKTTR02+rh3bnNt
ADuJY7+KARcl4GiqiqSy5i6t3O06L+NtNybU0vnr1VewFUrqaefmMYeR5ZSx
0ErtRMPWNeStiicrYn/ZaSZG3uFKVGH3AtzUUFcDvCQJ3oaXcLJbo9GOt2qU
J4zld6dDBDYExbeM09n2aKAemjICD/tbjguCwmSHEvblIItrp8sdDHQxANRJ
GvQiT72LhuOJaPE/eEgnui0VOTrYtDbINnwLPHF8YXvdVAHbh/2+8t0WCujV
Yhq0k2RL5m4cMXIM+lP9svkeP3lz0NSPmtuyzZa5tx3azKQfO/mQOuD57Bfn
hgD7NKHb3xI3kAlpvju2hs2A88So8AEYb2arGcZHZnISMkENNkHY8pnuo1Yv
p2L1hQUmMOLtDNWMx1gOqiNJ9oDUuu83NyH5GvioGUaTplZAu1Bn3d5CpB8e
jQ9uzFcdNde/idd9MwDlSQeWPPIWnXzeXK9GLz9t1XU8QCYXDO+WjHfTsHU6
bZY7w+jX/ZI3bTa6Nugc37VrsQt5jMpd0/sC57hPwbA74IYTL3hN5bkVbd4p
pW1aZ5hDBu9YdJxf9v7Kaw+gpziwQ3jKl2g5um+EpCdZQ/Am1+mR7nPRmF3Y
eyoz9OJQrNvTevba/J4NB4opC9rwR6LfMZBCfbPnkVOjpQmAifhS5MVih9WC
3FimZ6FZtx71oGQnlxtw5vkenQzuL9rBWK/0Fsbb6zDACa7YZwDUpkqC2mbJ
nG5SbGwb71QdjOoYq+UKHdhlM81taMP/3eACE/7uOBs5j7uJrNxR6vYStqNA
a1Z3zeEnLhUuhEnV+rgI5XajaKfoCXLfTCEg9YwDvaY+njYQEqQ/DFwhsWCe
cJLIv7NJZmfu5Xvwfe1bzSMOQNIfMQQGFqQeuTMIhh/1a2lGOTdGMZIRIzL4
ZlJ0UwyDJAjyIjbBhhcLPAwWlMkX2UAgjLLYV6CUFpwbOAOUXILzyKW++dVV
vBZJmiZDiS0iwEWMriYM6CyvyypeSLS6Tny8huFfusxHKA41Hl4Cdy28xeUP
nhi68r7xA5pyzoGYfND7d+X2HSUjFFdylUZq/2/4nAG9s7f7tycj9SsF57lf
uOX+mCQr2IK6TMAimRS5UCAUCgMI7e/atq0Rv4xonuerChT63W+VftsJeXm0
775DE/LmKC/vfSdrZihhFRl8yUSKgzDU9EMEYJ7afNLo+nN2kJda3MysXMrw
ktyYzBOaFWAmOBHaBBotfpSqcTU4kHQf8nE5O8QEFm4HgnUGFB9GjX+BNqy7
A3OUg0bcGMfQVaFuq0aucAtb1g6bCc5SQgLfIMUhlj6uVosFAUvRSNab2Kzt
wKF8eB44WEgQlWnTojcHpakOUF3EswL0XCeHnrJ4nUx2Bz3nzIicfrSVXPzT
VYdtLmdD8VgP5txYlsIkGUc9J4XQqSvpbVM3poPYrP5NyBemGW1/N6AAqS2X
valBE23izNtgQB7etaW/bdWfkP0ePyubijk/zbuibGIXrPgIJiZFJxqU/lQb
5psGGmpHISIavlJWbbHxszUi6gI2Piz2AKC6opfBLEIwSGHd5RI2ddYvu9Fa
rSFDzk29vhtlDtnmZO7ButTyvqen63HMrZTnxG4oEiHHcLggwy2sJ+b1UJEE
SWjdznI9O8mIt3owfJZnPMEme3maz828v/Vsay2ipyTmJDxoYJoWOJGYa7yJ
HXyI5P5o9XyQGvWw4fdY9zxqW91dQhbVRpCqow9aN2MzOGSDRT81cWp2wIHr
0hS1EFA5RyXct2F0EBQK9ZoO6JBeK4Ndln73NktPSUPs2tw+s51k3Pz5fsAn
eOVjRYeAt+7bo9FOSJv31iv08/CGgi3APt4Ya3jp3nFgQwIwMJQOLUdn2kum
kVD/pDv1jUFwLxdDYeQwg0kwe90dM8868dFr5rc3OJhEipOcv56hxwaOiXnC
YgG1KgH6yChNjjhSLrgVa6dW06pyfeLN6P61Z7/MEAO318+K7AP/hldaSg68
9AAStWChOQ4usP0neIkUf5yQ05v7aS6SahBo/RTa1MSPHSYTQNuNWMdGwZ7p
uP83GXWIuSQiN/ERxtROwYbc0h0k18VATpRrC5Te2h7guuX2XRf7YctFRki7
7yJa99av2YnE9cPWKeGXtIqyOF+Vqa0+hfxJ0EZKP6yvF8ww+38z4h5LpKcg
m8c/65mLUo+cztXg4JxAT7J5u2Vy2pER8e2nkxAZIFAjxadBmieP118MeiYt
G+2mEL8eW4kTwu1RY4Yw16rN/J2AtAllUX09k+xiNYPK90Yj4JRuMbF2NbP6
avqU58Vq2XFevtXXxVkT8L/J2pw56UTWJYPLgkddzcWpc+b9FZKgd8840gHh
gPz37kd2Mo2Pa5X08EcM4zT2zxL86bzw62l+86J7MfFN0d5GWCJuQCOiQiDo
bfFPNqqyKq47H2OunTFLxMr1E4L9BXYJlmRunvLvTjPSyPz6Hp0oeGRTkcmB
TilcVLiEndi6ugynUZuyMv4otao/uhLJAP9NMHgHjwfsXKPLgjKEh2VtwzKj
r6G8l3L8T0X5eo52N/ZlQtskardWK1bgoHx1qm0wEBrXhKItlcpNlqQcUhJk
3/WZSfoydW3hWSOYgm4t5/5I+7TasrTpFg6v4SgW6ayI454JowZIqzQ+UElc
zSinoUfhwsWVkj+U/htdBd+o/7sup+g/zBTtK/bZ5g+nn7W8JDEbwZee1d7Z
5iSl/o/ugsFXB9seXfvqk/f3F+/5z3q0gJ9MftZ5yIJDuZ6qH9dMw33H+mvq
P653Kfyq1pV/rL/aDu4q/MLad4ytvcE7nqnrgWsawcEBAubljxbo3pPw7KwB
VJvimpfCZsOPa6dXNxNqD5nnfA9225i1x8UF/uMNeIdU/98Dj7qGaynfTr9t
3Ej9+oZUso1Z++q3fGsVsXVP6IMl8Iyy0xT9zGGWEM6Nd0RF0a8FVIQ1I7gn
mj9C/ahryDfHJQLSzfmrRbZRWAaI8Q2ia/4jSNPiygbFB3680Pj1A4QFvRul
vv59g7v307JqNRHrxAJ7gMNC1rzvBkMCMaVdWIBQhu70KK8td1Jb86zuPqZa
Npmy+6wehFqjn0Sgdn7/d59RIKLPn5GO5us+QIc5qQ3mpDrNSQstd3v26gFV
VFhkiJf12HhCa3Fv9N9gYXGdL1OEBGv2quPx6zEml1KuPQlvKlZC/tDJisuI
RVSgQxfAAVUXX6LyFqfxZFVQxxZvBPXpAXzjj/qlPuwUK/GhqUdR/OgyW2AZ
mPCQJmof75Ux6bOIoykGyyRlo24EmT/89zPqQoGY2lJbnEImxQJX1QU1fiN3
aZp8iCUSIPugjvJFwkU5nkcFQE4H6jAqygq09ud4iZRlqNnHHyOyBN7GaX6p
w3YSrOlZxLNVirE0UkWIA9vJxZ9kyxUGR47ZzMVoGwTJToUeQEnVSQ5H45w+
QKotgQqUNIHjYFdBFU0xiV8qUWFLq6mOfaLFpUmThn5COjksiRQmEW2998cJ
qqLn8TzJyh/Qio6t2v7T/u7+/nB3f7j37Qjzk0Wxtw+QCUeZy9IPEgNZ0MDA
Mk8l6FSx2loV2QG+cEDe/fLg4yI9yMoDfOvADERWCTD1LPlIW/J7jPPMi3mU
Jf9tk7+3jl+cvVTHby+fKApceZVfqbf5Ffz2K7DIcAxUVq+5S22pttPlVQTn
F/6FNKHrc4JDScMTduhu/fqz+jU+P4Bf/3hRVcvyYGcH9wboPKAQFiPEcASI
7FzNd2jAHQrY2fmBNya8/SopK3j9j4soSav8YDmEh37Sr8ljL6YJ5bwp9Spa
URrrGQwSWStcv53y16OKv/4pWVTDqEqjrEIWHM2KxoDjLFInIFbOV0VeHy3K
op9gGukoyX+gmdcNxy1+4zBfXhfJ/ALLWvUVLPqeIkqfFejT1lGAIM5L3NVO
3n0kPnW9gcRnOaGAGfKs07AllvMDAUQxKfTCu3ia4C3K+Yq2NYLA9Ax0f+ar
QhhcepbiXW0pXWu19Yx/YNwUMCQFd3NUIe6QuJBuwstVUa4w6rvKuaF7uTr/
L3SBVEInuo+HzUNVBuG10pTBQFHCsVKnVMOD5vr89AjWmh8vdXYN4IZF/TOU
VzSTx6OJpoIl4cNSvYrnsL/fYnPMkqSrkCGVapw5P34kYlG+39YsWeEwcWzZ
URAfYr57X1OVJKveiYQF/E27X2/ckgOKuHuG+j/wUwN0dXU1KmaTYUwMRqAQ
xA58hk/3v6fyRnTBBwMkFUYQGFJw/7iUpgoiPaFsMo1aTBHYaLiW6iHW4n04
4H+xtw7+/u7Fv78/fvfiCH8//fP41SvzCw8hj53++c37V0f2N/v64ZuTkxev
j3gEbNjjfcSDPDwZ/+Uh88PDN2/Pjt+8Hr96yKF17qkUcXLDOSf2FiCZKofd
bS0AePH54Vu191htIz329/a+6/Ovz/aePu6TWGZopi/OwHCfTj2Tgr9wWCyT
KkqB1yNdGB4rY2kSfnPXHxnnZ6ztl0yoXYbUIcO1O0Xfw0RXmNBFX91EhXdS
d4SHQTXCSRIw7iecrBy6GH/K5cFrJTJ4BC+3NpuGokg8zrZMHBmu1sijTsNx
J9shTPqShuI4yXgJy0YYe8nxd9F5iWdApcACdKLrZfHw/Na4fW6kum/6Izn1
oAtuv8QiX84P0XxPdfzRA905N18PdOdqAf8ojPb/iTDCmr34y2gk/ylqIihL
Yn9V4U/+YTR6fVca3R2hz/e3RZqCAHuNUxX1SM3T/Fza8YhUcIs6mqgVShKh
ceKPkwu8C6SrDleLoHotZmSqsWfqcxt5s9AJ/lo3EvhuBoiuH6clDUcPmwIH
pbmD4STlkTM/t4efNCDCwwhxWSsz0bnfwxx+VjKUVd/bQ0uPMQkFUNdqg447
IuVA36aaVGP9ljxwwIfISfdDRKuo2yixne7PuthWsz5WAGeS9u6TcHJG50kK
M5HQFczGzThrJppM8lVWNUGFqo21AfOf3Qjczo5q5Wr+2lQvUbXq+fR1+57g
t+dynPN9yNkvbmaR358tmXYpUm2QoWqi9CxdcoOCwpxqp+YNnSwvnzTG54qk
LuDvN4RL1p7UNvMVLzrL93d31+GjubqGjY9rK0oE22wMws+E5d0AGHSHGYiU
SRqV5V2gn/E46pAGuj0Ow2kYDfeZu2FibmaPktnsFKy92jOP9p4864xtPAmv
2T8A3Rcm/LIrprM0v0qjcxB5d1jYl5g3+4pG2WxVl9wQzCvCcisMdGcxqWq0
GRbYF1Riqe+AwmvnkNgM/kW+pIDL3wf6NL4UZ9XtwNtiynSyS+4jBVaI+2M6
pf7JUpsChqiSrFYFkX70g4KOGPaI/0gdUZs/qqwnMRy1l22xFmwFm6kV0DT7
wNX+MMae/lrTCcilR2LqGP0OxNiMCt68zRB3mD4oab83O9wHBeykqWGepkdH
Cvw/zwC3m/5quvwHaD3vj962Kz1PW48nRAb24nCZFw3J6CHaig8CFqpTERlD
aUVjGusAcKDwc7tnZARDRExgXGXGN+uSfB0tgZPuiL6LNEYN8mx+I/TDx3J3
5OV9F9E10LjC5mrxW8Cb5NFvz+n73+6vQ6dFvfdRbcXoMB+/bdq9N8EMzX4T
gDzzztA+NLTMjYDlaJg2FvkGoBMbqHwrqPT+RtCGQUPJfN0BHA+wGdBpXEVJ
mL4docoIncEumofkJoTVuZiwi7pzELHAnXmoMzzuPDBMZlwe7C6QeSh1PBuS
y3JjHFZFAoZC2ThLboHD+3fHwz/nZbUxDjG2Arw7/Bc4zC3WIMuz+N4Wwh9v
U2zyc7oDvgc83shIzqn1eK8jP4R0i9vwAwz11lcpulEhzVmlADu+qSfcApFX
ery30SYi3qXI/SBCFLkNDlL9YCg52XfH5FDKKbzkATfFhwJN5/fBpycw0ni+
wVHorMrfV7EpXnbXZfl3GmtTLLC7wPI+1mPMA916p9wXKcxWuR09zgGhD/v3
gMdzHsjC/+7b77rC37sv+Hsbw8cI5vuYPo+zKfRlkX+8xp1xDxi8pbFgZ2zM
A4xFCXbX4j4ExFt3uE1xQTreBzuc0jibQs/yoenRenccXue246vDGU+edtEr
yklexMNZGs3DFsRmqPBwioejBl7kSnqGRUtN+67R4353zJbJ5T8lXh/uZoz8
I/GaVA1f6m+C2rrrVv/a1esIsdm9rRnIo0Xa5XL2vQQVUA86ybMw5r0Uwy+D
/ql0aEqLuIRNO5D0XVwm01Ws4WDMG/Z5pMoDGCtnCvrJC+TXoXXQt7RAca5W
+e3oUb8FPTIzQ/6z3xjFx6NvXRQ7LCQzRKBUu5Kkgi5juNTAkpcb84LN8DPp
J0FOaNTTdGjtAm6ldWOiCUebeqMipGblMKbw09FekAm49ud9oSOuXadJ0abI
UP3R+0LHOJY3RKi7RGrW774HsbTIb8GKDUxKjt4+1S0fQzEkusi8S3EXeivF
X9BbJ29aeihpqj4KnUCmvvzGUI/5tVuDxVLym8KUPle3BOgV698UtP/2Rkjc
xHPMvVh8fHN+9SaJaVwdmPWm2utBqYljZ3k1LG2dRiKeB7OVeuZNKrG+lnKP
g9IIwdDOuSUCzrt3QSH1mbYb7FfAtXcBKkx3y5l7b98FDSlBrD6pTVGQN7Vu
0wWJFhyacRbdMJD37gC5ecHfDbK8txlkCplsSIMe1+uAT5TOARZ86FeNbgHf
fxLwbdeTrcXtzSWljqrEdxyOMAikDfirLKkX7uQyXmrnm0afOFMnjtrQGKWV
GlR8s+ON4U4LhzI9r8xzrYqynugN0xX47U3tHFwpKgOLNNSaDkuL0Ho/LpM4
kbkTCRBUcqM7LWhTD2tvVuAoxVJhJeMEQeqBRFmTsSSMcctNxW2RTXggKYH0
nJTSqT8I0/fHsRVewm8EZi8p1Z1m3zyuW2ff1Ai3T9703dZL0iBLSt+hkqZx
d3stlU2Mdcp0J5QDoqIV55tOZ419s12fLeWou2CM6iLl5bvxzycvXp+NMfFL
nf3l7QvzVaBWjm+hNgu0dNA1mqMGrd/m2FybwrOD1yDQKn6x1vPhv0k8lK3d
fCN4W/zizig4tc9vhUat6tndENEFrsOoGOkeLsbT7bS5EbVW1udjRDLZKRWt
zr9jYAlTbMojnlfUowNjShcXrj6VUz0vFNI2P57SIEPL5EGiAldYpGTXXZ4w
Mq0L45eY4kJlJc2V62eVEr5HYPzybl1Q2/ttUNvrjtr59ZAKge/fAbNXUkl8
auu/1VcywNmN2i+deHodaq3cfNbg5oY4JqqRZ4AynnBQX+jaYjcdWJoAUsJV
F9ZeE9ZpoWa5t0JNbNqFDU7NdCeHcbiu4Vpo13F5J3CUTC0wpdDfeoBcxW8o
5SlvCdrfItK/HSsBUgKdXgAu0shlBSXfeS/En151o27M2YbrXTgTq1fbytZN
xvSri3VgzmPdi5cbGNixE5spqC1MrK2tlRq/xHaUlrnZ8UYVl3oDiHNd7fEQ
lgPPXeiWebTfrrw7xIY2TrtdXbkZobNZR4cq/12qx1QDe5jm2by52s0abZ1W
fC3SG5yu9VWXH3V2fPLinTp6/47VxLDLCof92lOF/m7tqRJupeKTW6l371+9
UKCUv/uLOnrx8vj1cYPqXtM/08vwJuVGWk+5PWOlczwW/ea+J7rGCM54QHXd
s7nJktEVvYG2l3Eh/YH4hZGtUyYVO7nuSSbhxMaK4nKp0RIzigvsEO54FGQN
/C6ORHsGEqC9HheEmJPR3VxXXUeq24raUY/lvTmYrTynet9AU94L+/tRnV6q
bIE8aYbRdKZ6I1j6Bbt1apTgs92ReoO+Bqxg5H3hNfLkXszUM9sHTa0FB7az
blTBiA4N2ptE2s6Na9QI6jUVmyaBzEqBPoRqOxnFI+p0mMWm/l/Yy6VrRdxD
Tr0e6M6lGe4PIz2SbU2ZhfpD1vowPtVsQt3f6GdoUqEP6OTzGkJzPRbbApz7
T+jeSUmz87vujmm7ig/9a/uDNT4v7rNe82dZAJEpQpJMG8PrvukH7sDbmK6/
5FYL14qvurCadd80g7fDBO6SDyy8WGoM4C7VPjnbotGOcuaIPnydBU00R5W0
EkXEabvNuLtJguIlcifYYCsHLxcfU+dgUO/qQT/Yth17JZRlPkm81mu6aqAD
Exl3JJw7EjfQgRqHwIY9Q65vCL+JJnXM2hFyltyjryvBzVngiVuvWqWWuht0
i9FbYaCX/Fr7tbRAlIUjC4pXwWLrdIcP9bVxi2QGsE7vhjTvr1ozFFs8XzuM
naa1dcdx1NzOXWZkTqt2RWvjydRPQKE6CpzM7F2z59We9JZ2a6NTXfqkwIa4
k8mKJiECprmc1NeaqgNOilg6mtiRDDLisuVQ/HJ1XmJdxswB4HbeNsjtgt0b
ZaVu/gFzYIGtUTYYFTbhzYGez/xewqiMmgl5s3CAP4dtdUVVMnTHEbsbYW5C
TtyAVAJSDz7cdQCLn5rUgRhjXWbECxX1EOeSkLqaVmzoCQbCPMEIF4d8VOY5
wD6h4q3NfVFvwtadlQISfaAlp8PYZC8DJZKZ06TZog/r5UXZDJyGaP6csPmy
W1DWTIbaYIvKtaVR3qBJ+Ng0duZxncuEK92I1Du2ucmQnQO283R1cirnxd07
KxLKmrm0+r3rvPwSJouFAun49fRBXXSzGepgHnP4WA4ZC40KrmH1TyzlQkVH
48mKuF82mtE2HabEQNVw+6N6Cd0mK8mVj2El6uc3Gu14i0YpuC0t+0zoSvem
fTrEZqADUFAladAro5ZWDhqGTdo6IWx5SEt/ZunpzoWXDLJmrC/exPGF7XVT
BWwf9hv9DIFeLeWG20myJXMX/Ep9/elP9RZdCk/eHDTVo+aubEH43jZo89Jv
XMy5qKRTru/sF6cBLpYtQivW0lZ3so30q+4GtmbNgI0/3HYYm2R2muF75KXS
jgJKsG7Uqz8biCJat/6stoDNt+CteUY1uuCII/WBrQE+t6aBdp6Bos/NTahv
MW8h0A+PxgfqpsvKUXP522pJ39v6U6hFYMUjb82p6Q5b13r1uezwGhYgewuG
L73usDaSQ3YUersdrVle72ag+51wiWCuuS7U2aDOvE/BsC/ghvMuZMdG5hSk
T8RbAApvBKwsaewwN4cM3qE4ckxlU1DXDZcwJoXT78bTvHQzcO5TiHIcv7ZW
oMd47fd/ASvdNdHtNGWGjsv0ay9j73L4FiLkay9jIdnXXsZfexn/a7YmvAXt
v/Yy1lh97WVsZvW1l/HXXsa/Qy9j3TChaG9ozJaLdz++3lH2mzU2tsiv7W68
ZgL/sgfYDSv3tYnxfRHaShdHl/3axPhrE+OvTYy/NjFuUv5fs4lxj/Pv2aNF
PqzjoxF3Tjk+qkedRPSFTkQm9qKuLjCCfoNvrz0fl+4f7MQosuXiNSNu6ISP
9teemBogvT1w9FijgK2o9dzAdMGjKraVE0jBlxchm8rveNxUV5sHyu5o9Gi/
23miMU/lol+EH5tRPIVd8WIoaqE1ge3nBF2u8UyO9RI2V85dsjQUYqARJFy8
6E460yq2Rv3TTpKy8DmrEZrmduKEJpQ8H/S6ltW+09nlHXMc8mHKHaadlZg0
Ukg8AZPMhrp7hZ9a5AkEghr0yoZEGoFstt1oAnSeaYILOPFbgfktLD14rUJK
xy6bW7uI1wQXc5U1wgnKsPhuub4cG78+Duf1qprRITL044pchzT+NJqw+HDD
/pPYXB+UPsisnuDmj28BS7cq246P0wyTQrPcjXst4n1Rurg0dp1701Hq+PXC
XNUZN0ptEg2aNYn0pfdF+k/CEVT+0PN60dMW5PalW82WpT0MHT6Hc6r3v4/q
2jQKFQEA

-->

</rfc>

