<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.5 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-acl-extensions-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.19.1 -->
  <front>
    <title abbrev="Enhanced ACLs">Extensions to the Access Control Lists (ACLs) YANG Model</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-acl-extensions-06"/>
    <author fullname="Oscar Gonzalez de Dios">
      <organization>Telefonica</organization>
      <address>
        <email>oscar.gonzalezdedios@telefonica.com</email>
      </address>
    </author>
    <author fullname="Samier Barguil">
      <organization>Telefonica</organization>
      <address>
        <email>samier.barguilgiraldo.ext@telefonica.com</email>
      </address>
    </author>
    <author fullname="Mohamed Boucadair">
      <organization>Orange</organization>
      <address>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <date year="2024" month="January" day="30"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 61?>

<t>RFC 8519 defines a YANG data model for Access Control Lists
(ACLs). This document discusses a set of extensions that fix many of
the limitations of the ACL model as initially defined in RFC 8519.</t>
      <t>The document also defines IANA-maintained modules for ICMP types and IPv6 extension headers.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Network Modeling Working Group mailing list (netmod@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/netmod/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/boucadair/enhanced-acl-netmod"/>.</t>
    </note>
  </front>
  <middle>
    <?line 69?>

<section anchor="introduction">
      <name>Introduction</name>
      <t><xref target="RFC8519"/> defines Access Control Lists (ACLs) as a
user-ordered set of filtering rules. The model targets the
configuration of the filtering behavior of a device. However, the
model structure, as defined in <xref target="RFC8519"/>, suffers from a set of limitations. This
document describes these limitations and specifies an enhanced ACL
structure (<xref target="sec-module"/>). The motivation of such enhanced ACL structure is discussed in detail in <xref target="ps"/>.</t>
      <t>When managing ACLs, it is common for network operators to group
match elements in pre-defined sets. The consolidation into group matches
allows for reducing the number of rules, especially in large scale
networks. If, for example, it is needed to find a match against 100
IP addresses (or prefixes), a single rule will suffice rather than creating
individual Access Control Entries (ACEs) for each IP address (or prefix). In
doing so, implementations would optimize the performance of matching
lists vs multiple rules matching.</t>
      <t>The enhanced ACL structure (<xref target="sec-module"/>) is also meant to facilitate the management of
network operators. Instead of entering the IP address or port number
literals, using user-named lists decouples the creation of the rule
from the management of the sets. Hence, it is possible to remove/add
 entries to the list without redefining the (parent) ACL rule.</t>
      <t>In addition, the notion of Access Control List (ACL) and defined sets
is generalized so that it is not device-specific as per <xref target="RFC8519"/>.  ACLs
and defined sets may be defined at network/administrative domain level
and associated to devices. This approach facilitates the reusability across multiple
network elements. For example, managing the IP prefix sets from a network
level makes it easier to maintain by the security groups.</t>
      <t>Network operators maintain sets of IP prefixes that are related to each other,
e.g., deny-lists or accept-lists that are associated with those provided by a
 VPN customer. These lists are maintained and manipulated by security expert teams.</t>
      <t>Note that ACLs are used locally in devices but are triggered by other
tools such as DDoS mitigation <xref target="RFC9132"/> or BGP Flow Spec <xref target="RFC8955"/>
        <xref target="RFC8956"/>. Therefore, supporting means to easily map to the filtering rules conveyed in
messages triggered by  these tools is valuable from a network operation standpoint.</t>
      <t>The enhanced ACL module (<xref target="sec-module"/>) conforms to the Network
Management Datastore Architecture (NMDA) defined in <xref target="RFC8342"/>.</t>
      <t>A set of examples to illustrate the use of the enhanced ACL module are provided in <xref target="sec-examples"/>.</t>
      <t>The document also defines IANA-maintained modules for ICMP types and IPv6 extension headers. The design of the modules adheres to the recommendations
in <xref target="I-D.ietf-netmod-rfc8407bis"/>. The templates to generate the modules are available in <xref target="template"/>, <xref target="v6-template"/>, and <xref target="iana-ipv6-ext-template"/>. Readers should refer to the IANA websites "IANA_ICMPv4_YANG_URL", "IANA_ICMPv6_YANG_URL", and "IANA_IPV6_YANG_URL" to retrieve the latest version of these IANA-maintained modules.</t>
      <section anchor="editorial-note-to-be-removed-by-rfc-editor">
        <name>Editorial Note (To be removed by RFC Editor)</name>
        <t>Note to the RFC Editor: This section is to be removed prior to publication.</t>
        <t>This document contains placeholder values that need to be replaced with finalized values at the time of publication. This note summarizes all of the substitutions that are needed.</t>
        <t>(1) Please apply the following replacements:</t>
        <t>XXXX --&gt; the assigned RFC number for this I-D
2022-10-24 --&gt; the actual date of the publication of this document</t>
        <t>(2) The modules are provided in <xref target="iana-icmp"/>, <xref target="iana-icmpv6"/>, and <xref target="iana-ipv6-ext"/> for the users convenience before publication as RFC. Please remove these appendices from the final RFC.</t>
        <t>(3) Please update  the following references:</t>
        <ul spacing="normal">
          <li>
            <t>IANA_ICMPv4_YANG_URL --&gt; The URL to retrieve the latest version of the IANA-maintained ICMPv4 module.</t>
          </li>
          <li>
            <t>IANA_ICMPv6_YANG_URL --&gt; The URL to retrieve the latest version of the IANA-maintained ICMPv6 module.</t>
          </li>
          <li>
            <t>IANA_IPV6_YANG_URL --&gt; The URL to retrieve the latest version of the IPv6 Extension Header Types IANA module.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The terminology for describing YANG modules is defined in <xref target="RFC7950"/>.
The meaning of the symbols in the tree diagrams is defined in
<xref target="RFC8340"/>.</t>
      <t>In addition to the terms defined in <xref target="RFC8519"/>, this document makes use of the following term:</t>
      <t>Defined set:
:Refers to reusable description of one or multiple information elements (e.g., IP address, IP prefix, port number, or ICMP type).</t>
    </section>
    <section anchor="overall-structure-of-the-enhanced-acl-module">
      <name>Overall Structure of The Enhanced ACL Module</name>
      <section anchor="tree-structure">
        <name>Tree Structure</name>
        <t><xref target="enh-acl-tree"/> shows the full tree of the enhanced ACL module (<xref target="sec-module"/>):</t>
        <figure anchor="enh-acl-tree">
          <name>Enhanced ACL Tree Structure</name>
          <artwork><![CDATA[
module: ietf-acl-enh
  +--rw defined-sets
  |  +--rw ipv4-prefix-sets
  |  |  +--rw prefix-set* [name]
  |  |     +--rw name           string
  |  |     +--rw description?   string
  |  |     +--rw prefix*        inet:ipv4-prefix
  |  +--rw ipv6-prefix-sets
  |  |  +--rw prefix-set* [name]
  |  |     +--rw name           string
  |  |     +--rw description?   string
  |  |     +--rw prefix*        inet:ipv6-prefix
  |  +--rw port-sets
  |  |  +--rw port-set* [name]
  |  |     +--rw name    string
  |  |     +--rw port* [id]
  |  |        +--rw id                              string
  |  |        +--rw (port)?
  |  |           +--:(port-range-or-operator)
  |  |              +--rw port-range-or-operator
  |  |                 +---u packet-fields:port-range-or-operator
  |  +--rw protocol-sets
  |  |  +--rw protocol-set* [name]
  |  |     +--rw name        string
  |  |     +--rw protocol*   union
  |  +--rw icmpv4-type-sets
  |  |  +--rw icmpv4-type-set* [name]
  |  |     +--rw name     string
  |  |     +--rw types* [type]
  |  |        +---u icmpv4-header-fields
  |  +--rw icmpv6-type-sets
  |     +--rw icmpv6-type-set* [name]
  |        +--rw name     string
  |        +--rw types* [type]
  |           +---u icmpv6-header-fields
  +--rw aliases
     +--rw alias* [name]
        +--rw name     string
        +---u alias

  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches:
    +--rw (payload)?
    |  +--:(prefix-pattern)
    |     +--rw prefix-pattern {match-on-payload}?
    |        +---u payload
    +--rw (alias)?
    |  +--:(alias-name)
    |     +--rw alias-name*       alias-ref
    +--rw (mpls)?
       +--:(mpls-values)
          +--rw mpls-values {match-on-mpls}?
             +---u mpls-match-parameters-config
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l2:
    +--rw vlan-filter {match-on-vlan-filter}?
    |  +--rw frame-type?         string
    |  +--rw (vlan-type)?
    |     +--:(range)
    |     |  +--rw lower-vlan    uint16
    |     |  +--rw upper-vlan    uint16
    |     +--:(operator)
    |        +--rw operator?     packet-fields:operator
    |        +--rw vlan*         uint16
    +--rw isid-filter {match-on-isid-filter}?
       +--rw (isid-type)?
          +--:(range)
          |  +--rw lower-isid    uint16
          |  +--rw upper-isid    uint16
          +--:(operator)
             +--rw operator?     packet-fields:operator
             +--rw isid*         uint16
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l3
            /acl:ipv4/acl:ipv4:
    +--rw ipv4-fragment
    |  +---u fragment-fields
    +--rw source-ipv4-prefix-list?        ipv4-prefix-set-ref
    +--rw destination-ipv4-prefix-list?   ipv4-prefix-set-ref
    +--rw next-header-set?                protocol-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l3
            /acl:ipv6/acl:ipv6:
    +--rw ipv6-fragment
    |  +---u fragment-fields
    +--rw source-ipv6-prefix-list?        ipv6-prefix-set-ref
    +--rw destination-ipv6-prefix-list?   ipv6-prefix-set-ref
    +--rw protocol-set?                   protocol-set-ref
    +--rw extension-header?
            iana-ipv6-ext-types:ipv6-extension-header-type
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /acl:tcp/acl:tcp:
    +--rw flags-bitmask
    |  +---u tcp-flags
    +--rw source-tcp-port-set?        port-set-ref
    +--rw destination-tcp-port-set?   port-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /acl:udp/acl:udp:
    +--rw source-udp-port-set?        port-set-ref
    +--rw destination-udp-port-set?   port-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:matches/acl:l4
            /acl:icmp/acl:icmp:
    +--rw icmpv4-set?   icmpv4-type-set-ref
    +--rw icmpv6-set?   icmpv6-type-set-ref
  augment /acl:acls/acl:acl/acl:aces/acl:ace/acl:actions:
    +---u acl-complementary-actions
    +--rw rate-limit?                  decimal64
]]></artwork>
        </figure>
        <t><xref target="enh-acl-grp"/> shows the reusable groupings that are defined in the enhanced ACL module:</t>
        <figure anchor="enh-acl-grp">
          <name>Enhanced ACL Groupings</name>
          <artwork><![CDATA[
  grouping tcp-flags:
    +-- (mode)?
       +--:(explicit)
       |  +-- operator?            operator
       |  +-- explicit-tcp-flag*   identityref
       +--:(builtin)
          +-- bitmask?             uint16
  grouping fragment-fields:
    +-- operator?   operator
    +-- type?       fragment-type
  grouping mpls-match-parameters-config:
    +-- traffic-class?       uint8
    +-- label-position?      identityref
    +-- upper-label-range?   rt-types:mpls-label
    +-- lower-label-range?   rt-types:mpls-label
    +-- label-block-name?    string
    +-- ttl-value?           uint8
  grouping payload:
    +-- offset?       identityref
    +-- offset-end?   uint64
    +-- operator?     operator
    +-- prefix?       binary
  grouping alias:
    +-- vlan*         uint16
    +-- prefix*       inet:ip-prefix
    +-- port-range* [lower-port]
    |  +-- lower-port    inet:port-number
    |  +-- upper-port?   inet:port-number
    +-- protocol*     uint8
    +-- fqdn*         inet:domain-name
    +-- uri*          inet:uri
  grouping icmpv4-header-fields:
    +-- type?             iana-icmpv4-types:icmpv4-type
    +-- code?             uint8
    +-- rest-of-header?   binary
  grouping icmpv6-header-fields:
    +-- type?             iana-icmpv6-types:icmpv6-type
    +-- code?             uint8
    +-- rest-of-header?   binary
  grouping acl-complementary-actions:
    +-- log-action
    |  +-- log-type?   identityref
    |  +-- log-id?     string
    +-- counter-action
       +-- counter-type?   identityref
       +-- counter-name*   string
]]></artwork>
        </figure>
      </section>
      <section anchor="defined-sets">
        <name>Defined Sets</name>
        <t>The augmented ACL structure includes several containers to manage reusable sets of elements that can be matched in an ACL entry.
Each set is uniquely identified by a name and can be called from the relevant entry. The following sets are defined:</t>
        <ul spacing="normal">
          <li>
            <dl>
              <dt>IPv4 prefix set:</dt>
              <dd>
                <t>It contains a list of IPv4 prefixes. A match will be considered if the IP address (source or destination, depending on the ACL entry) is contained in any of the prefixes.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>IPv6 prefix set:</dt>
              <dd>
                <t>It contains a list of IPv6 prefixes. A match will be considered if the IP address (source or destination, depending on the ACL entry) is contained in any of the prefixes.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Port sets:</dt>
              <dd>
                <t>It contains a list of port numbers to be used in TCP/UDP entries. The port numbers can be individual port numbers, a range of ports, and an operation.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Protocol sets:</dt>
              <dd>
                <t>It contains a list of protocol values. Each protocol can be identified either by a number (e.g., 17) or a name (e.g., UDP).</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>ICMP sets:</dt>
              <dd>
                <t>It contains a list of ICMPv4 <xref target="RFC0792"/> or ICMPv6 <xref target="RFC4443"/> types, each of them identified by a type value, optionally the code and the rest of the header.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Aliases:</dt>
              <dd>
                <t>An alias is defined by a combination of various parameters (e.g., IP prefix, protocol, port number, or VLAN). Sets of aliases can be defined and referred to in match criteria.</t>
              </dd>
            </dl>
          </li>
        </ul>
      </section>
      <section anchor="ipv6-extension-headers">
        <name>IPv6 Extension Headers</name>
        <t>The module can be used to manage ACLs that require matching against IPv6 extension headers. To that aim, a new IANA-maintained module for IPv6 extension header types is defined in this document.</t>
      </section>
      <section anchor="tcp-flags-handling">
        <name>TCP Flags Handling</name>
        <t>The augmented ACL structure (<xref target="enh-acl-tree"/>) includes a new leaf 'flags-bitmask' to better handle TCP flags <xref target="RFC9293"/>.</t>
        <t>Clients that support both 'flags-bitmask' and 'flags' matching fields <bcp14>MUST NOT</bcp14> set these fields in the same request.</t>
      </section>
      <section anchor="fragments-handling">
        <name>Fragments Handling</name>
        <t>The augmented ACL structure (<xref target="enh-acl-tree"/>) includes a new leaf 'fragment' to better handle fragments.</t>
        <t>Clients that support both 'fragment' and 'flags' matching fields <bcp14>MUST NOT</bcp14> set these fields in the same request.</t>
      </section>
      <section anchor="payload-based-filtering">
        <name>Payload-based Filtering</name>
        <t>Some transport protocols use existing protocols (e.g., TCP or UDP) as substrate. The match criteria for such protocols may rely upon the 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP payload, or a combination thereof. A new feature, called "match-on-payload", is defined in the document. This can be used, for example, for QUIC <xref target="RFC9000"/> or for tunneling protocols.</t>
      </section>
      <section anchor="match-on-mpls-headers">
        <name>Match on MPLS Headers</name>
        <t>The enhanced ACL module can be used to create rules to match against MPLS fields of a packet. The MPLS header defined in <xref target="RFC3032"/> and <xref target="RFC5462"/> contains the following fields:</t>
        <ul spacing="normal">
          <li>
            <t>Traffic Class: 3 bits 'EXP' renamed to 'Traffic Class Field."</t>
          </li>
          <li>
            <t>Label Value: A 20-bit field that carries the actual value of the MPLS Label.</t>
          </li>
          <li>
            <t>TTL: An eight-bit field that is used to encode a time-to-live value.</t>
          </li>
        </ul>
        <t>The augmented ACL structure (<xref target="enh-acl-tree"/>) allows an operator to configure ACLs that match based upon the following data nodes:</t>
        <ul spacing="normal">
          <li>
            <t>"traffic-class"</t>
          </li>
          <li>
            <t>"label-position" (e.g., top, bottom)</t>
          </li>
          <li>
            <t>"upper-label-range"</t>
          </li>
          <li>
            <t>"lower-label-range"</t>
          </li>
          <li>
            <t>"label-block-name"</t>
          </li>
          <li>
            <t>"ttl-value"</t>
          </li>
        </ul>
      </section>
      <section anchor="vlan-filtering">
        <name>VLAN Filtering</name>
        <t>Being able to filter all packets that are bridged within a VLAN or that
are routed into or out of a bridge domain is part of the VPN control
requirements derived of the EVPN definition in <xref target="RFC7209"/>.
All packets that are bridged within a VLAN or that are routed into or
out of a VLAN can be captured, forwarded, translated, or discarded based
on the network policy.</t>
      </section>
      <section anchor="instance-service-identifier-i-sid-filtering">
        <name>Instance Service Identifier (I-SID) Filtering</name>
        <t>Provider backbone bridging (PBB) was originally defined as Virtual
Bridged Local Area Networks <xref target="IEEE-802-1ah"/>
standard. However, instead of multiplexing VLANs, PBB
duplicates the MAC layer of the customer frame and separates it from
the provider domain, by encapsulating it in a 24-bit instance service
identifier (I-SID). This provides more transparency between the
customer network and the provider network.</t>
        <t>The I-component forms the customer or access facing interface or
routing instance. The I-component is responsible for mapping customer
Ethernet traffic to the appropriate I-SID. It is
mandatory to configure the default service identifier in the network.</t>
        <t>Being able to filter by I-component Service identifier is a feature of
the EVNP-PBB configuration.</t>
      </section>
      <section anchor="additional-actions">
        <name>Additional Actions</name>
        <t>In order to support rate-limiting (see <xref target="ps-rate"/>), a new action called "rate-limit" is defined. Also, the model supports new actions to complement existing ones: Log ('log-action') and write a counter ('counter-action'). The version of the module defined in this document supports only local actions.</t>
      </section>
    </section>
    <section anchor="sec-module">
      <name>Enhanced ACL YANG Module</name>
      <t>This model imports types from <xref target="RFC6991"/>, <xref target="RFC8519"/>, and <xref target="RFC8294"/>.</t>
      <sourcecode markers="true" name="ietf-acl-enh@2022-10-24.yang"><![CDATA[
module ietf-acl-enh {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-acl-enh";
  prefix acl-enh;

  import ietf-inet-types {
    prefix inet;
    reference
      "RFC 6991: Common YANG Data Types";
  }
  import ietf-access-control-list {
    prefix acl;
    reference
      "RFC 8519: YANG Data Model for Network Access
                 Control Lists (ACLs), Section 4.1";
  }
  import ietf-packet-fields {
    prefix packet-fields;
    reference
      "RFC 8519: YANG Data Model for Network Access
                 Control Lists (ACLs), Section 4.2";
  }
  import ietf-routing-types { 
    prefix rt-types;
    reference
      "RFC 8294: Common YANG Data Types for the Routing Area";
  }
  import iana-icmpv4-types { 
    prefix iana-icmpv4-types;
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }
  import iana-icmpv6-types { 
    prefix iana-icmpv6-types;
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }
  import iana-ipv6-ext-types { 
    prefix iana-ipv6-ext-types;
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }

  organization
    "IETF NETMOD Working Group";
  contact
    "WG Web:   https://datatracker.ietf.org/wg/netmod/
     WG List:  mailto:netmod@ietf.org

     Author:   Mohamed Boucadair
               mailto:mohamed.boucadair@orange.com
     Author:   Samier Barguil
               mailto:samier.barguilgiraldo.ext@telefonica.com
     Author:   Oscar Gonzalez de Dios
               mailto:oscar.gonzalezdedios@telefonica.com";
  description
    "This module contains YANG definitions for enhanced ACLs.

     Copyright (c) 2023 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 Revised BSD License
     set forth in Section 4.c of the IETF Trust's Legal Provisions
     Relating to IETF Documents
     (http://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.";

  revision 2022-10-24 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: Extensions to the Access Control Lists (ACLs)
                 YANG Model";
  }

  feature match-on-payload {
    description
      "Match based on a pattern is supported.";
  }

  feature match-on-vlan-filter {
    description
      "Match based on a VLAN range of vlan list is supported.";
  }

  feature match-on-isid-filter {
    description
      "Match based on a ISID range of vlan list is supported.";
  }

  feature match-on-alias {
    description
      "Match based on aliases.";
  }

  feature match-on-mpls {
    description
      "Match based on MPLS headers.";
  }

  identity offset-type {
    description
      "Base identity for payload offset type.";
  }

  identity layer2 {
    base offset-type;
    description
      "The offset starts at the beginning of the Data Link layer
       header.";
  }

  identity layer3 {
    base offset-type;
    description
      "The offset starts at the beginning of the IP header.";
  }

  identity layer4 {
    base offset-type;
    description
      "The offset start right after the IP header. This can be
       typically the beginning of transport header (e.g., TCP
       or UDP).";
  }

  identity payload {
    base offset-type;
    description
      "The offset start right after the end of the transport
       payload. For example, this represents the beginning of the
       TCP data right after any TCP options or the beginning of
       the UDP payload right after the UDP header.";
  }

  identity tcp-flag {
    description
      "Base Identity for the TCP Flags.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity ack {
    base tcp-flag;
    description
      "Acknowledgment TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity syn {
    base tcp-flag;
    description
      "Synchronize sequence numbers.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity fin {
    base tcp-flag;
    description
      "No more data from the sender.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity urg {
    base tcp-flag;
    description
      "Urgent pointer TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity psh {
    base tcp-flag;
    description
      "The Push function flag is similar to the URG flag and tells
       the receiver to process these packets as they are received
       instead of buffering them.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity rst {
    base tcp-flag;
    description
      "Reset TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity ece {
    base tcp-flag;
    description
      "ECN-Echo TCP flag bit.";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity cwr {
    base tcp-flag;
    description
      "Congestion Window Reduced flag bit";
    reference
      "RFC 9293: Transmission Control Protocol (TCP), Section 3.1";
  }

  identity mpls-acl-type {
    base acl:acl-base;
    description
      "An ACL that matches on fields from the MPLS header.";
  }

  identity label-position {
    description
      "Base identity for deriving MPLS label position.";
  }

  identity top {
    base label-position;
    description
      "Top of the label stack.";
  }

  identity bottom {
    base label-position;
    description
      "Bottom of the label stack.";
  }

  identity log-types {
    description
      "Base identity for deriving the Log actions.";
  }

  identity local-log {
    base log-types;
    description
      "A local log is used to record the ACL results.";
  }

  identity counter-type {
    description
      "Base identity for deriving the counter actions.";
  }

  identity counter-name {
    base counter-type;
    description
      "Identity for counter name to be updated based on
        the ACL match actions.";

  }

  typedef operator {
    type bits {
      bit not {
        position 0;
        description
          "If set, logical negation of operation.";
      }
      bit match {
        position 1;
        description
          "Match bit. This is a bitwise match operation defined as
           '(data & value) == value'.";
      }
      bit any {
        position 2;
        description
          "Any bit. This is a match on any of the bits in  bitmask.
           It evaluates to 'true' if any of the bits in the 
           value mask are set in the data,  i.e.,
           '(data & value) != 0'.";
      }
    }
    description
      "Specifies how to apply the defined bitmask.
       'any' and 'match' bits must not be set simultaneously.";
  }

  typedef fragment-type {
    type bits {
      bit df {
        position 0;
        description
          "Don't fragment bit for IPv4.
           Must be set to 0 when it appears in an IPv6 filter.";
      }
      bit isf {
        position 1;
        description
          "Is a fragment.";
      }
      bit ff {
        position 2;
        description
          "First fragment.";
      }
      bit lf {
        position 3;
        description
          "Last fragment.";
      }
    }
    description
      "Different fragment types to match against.";
  }

  typedef ipv4-prefix-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:ipv4-prefix-sets"
         + "/acl-enh:prefix-set/acl-enh:name";
    }
    description
      "Defines a reference to an IPv4 prefix set.";
  }

  typedef ipv6-prefix-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:ipv6-prefix-sets"
         + "/acl-enh:prefix-set/acl-enh:name";
    }
    description
      "Defines a reference to an IPv6 prefix set.";
  }

  typedef port-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:port-sets"
         + "/acl-enh:port-set/acl-enh:name";
    }
    description
      "Defines a reference to a port set.";
  }

  typedef protocol-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:protocol-sets"
         + "/acl-enh:protocol-set/acl-enh:name";
    }
    description
      "Defines a reference to a protocol set.";
  }

  typedef icmpv4-type-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:icmpv4-type-sets"
         + "/acl-enh:icmpv4-type-set/acl-enh:name";
    }
    description
      "Defines a reference to an ICMPv4 type set.";
  }

  typedef icmpv6-type-set-ref {
    type leafref {
      path "/acl-enh:defined-sets/acl-enh:icmpv6-type-sets"
         + "/acl-enh:icmpv6-type-set/acl-enh:name";
    }
    description
      "Defines a reference to an ICMPv6 type set.";
  }

  typedef alias-ref {
    type leafref {
      path "/acl-enh:aliases/acl-enh:alias/acl-enh:name";
    }
    description
      "Defines a reference to an alias.";
  }

  grouping tcp-flags {
    description
      "Operations on TCP flags.";
    choice mode {
      description
        "Choice of how flags are indicated.";
      case explicit {
        leaf operator {
          type operator;
          default "match";
          description
            "How to interpret the TCP flags.";
        }
        leaf-list explicit-tcp-flag {
          type identityref {
            base tcp-flag;
          }
          description
            "An explicit list of the TCP flags that are to be
             matched.";
        }
      }
      case builtin {
        leaf bitmask {
          type uint16;
          description
            "The bitmask matches the last 4 bits of byte 12 and 13 of
             the TCP header.  For clarity, the 4 bits of byte 12
             corresponding to the TCP data offset field are not
             included in any matching.";
          reference
           "RFC 9293: Transmission Control Protocol (TCP),
                      Section 3.1";
        }
      }
    }
  }

  grouping fragment-fields {
    description
      "Operations on fragment types.";
    leaf operator {
      type operator;
      default "match";
      description
        "How to interpret the fragment type.";
    }
    leaf type {
      type fragment-type;
      description
        "What fragment type to look for.";
    }
  }

grouping mpls-match-parameters-config {
  description
    "Parameters for the configuration of MPLS match rules.";

  leaf traffic-class {
    type uint8 {
      range "0..7";
    }
    description
      "The value of the MPLS traffic class (TC) bits,
       formerly known as the EXP bits.";
  }

  leaf label-position {
    type identityref {
      base label-position;
    }
    description 
      "Position of the label";
  }

  leaf upper-label-range {
    type rt-types:mpls-label;
    description 
      "Match MPLS label value on the MPLS header.
       The usage of this field indicated the upper 
       range value in the top of the stack.
       This label value does not include the
       encodings of Traffic Class and TTL.";
     reference
       "RFC 3032: MPLS Label Stack Encoding";
  }
    
  leaf lower-label-range {
    type rt-types:mpls-label;
    description 
      "Match MPLS label value on the MPLS header.
       The usage of this field indicated the lower 
       range value in the top of the stack. 
       This label value does not include the
       encodings of Traffic Class and TTL.";
     reference
       "RFC 3032: MPLS Label Stack Encoding";
  }

  leaf label-block-name {
    type string;
    description 
    "Reference to a label block predefiend in the
     implementation.";
  }
    
  leaf ttl-value {
    type uint8;
    description 
      "Time-to-live MPLS packet value match.";
    reference
      "RFC 3032: MPLS Label Stack Encoding";
    }
  }

  grouping payload {
    description
      "Operations on payload match.";
    leaf offset {
      type identityref {
        base offset-type;
      }
      description
        "Indicates the payload offset. This will indicate  
         the position of the data in packet to use for
         the match.";
    }
    leaf offset-end {
      type uint64;
      units "bytes";
      description
        "Indicates the number of bytes, starting from the offset to
         cover when performing the prefix match.";
    }
    leaf operator {
      type operator;
      default "match";
      description
        "How to interpret the prefix match.";
    }
    leaf prefix {
      type binary;
      description
        "The binary pattern to match against.";
    }
  }

  grouping alias {
    description
      "Specifies an alias.";
    leaf-list vlan {
      type uint16;
        description
          "VLAN of the alias.";
    }
    leaf-list prefix {
      type inet:ip-prefix;
      description
        "IPv4 or IPv6 prefix of the alias.";
    }
    list port-range {
      key "lower-port";
      description
        "Port range.  When only lower-port is
         present, it represents a single port number.";
      leaf lower-port {
        type inet:port-number;
        mandatory true;
        description
          "Lower port number of the port range.";
      }
      leaf upper-port {
        type inet:port-number;
        must '. >= ../lower-port' {
          error-message
            "The upper-port number must be greater than
             or equal to the lower-port number.";
        }
        description
          "Upper port number of the port range.";
      }
    }
    leaf-list protocol {
      type uint8;
      description
        "Identifies the target protocol number.
         For example, 6 for TCP or 17 for UDP.";
    }
    leaf-list fqdn {
      type inet:domain-name;
      description
        "FQDN identifying the target.";
    }
    leaf-list uri {
      type inet:uri;
      description
        "URI identifying the target.";
    }
  }

  grouping icmpv4-header-fields {
    description
      "Collection of ICMPv4 header fields that can be
       used to set up a match filter.";
    leaf type {
      type iana-icmpv4-types:icmpv4-type;
      description
        "Also known as control messages.";
      reference
        "RFC 792: Internet Control Message Protocol.";
    }
    leaf code {
      type uint8;
      description
        "ICMP subtype.";
      reference
        "RFC 792: Internet Control Message Protocol.";
    }
    leaf rest-of-header {
      type binary;
      description
        "Unbounded in length, the contents vary based on the
         ICMP type and code.";
      reference
        "RFC 792: Internet Control Message Protocol";
    }
  }

  grouping icmpv6-header-fields {
    description
      "Collection of ICMPv6 header fields that can be
       used to set up a match filter.";
    leaf type {
      type iana-icmpv6-types:icmpv6-type;
      description
        "Also known as control messages.";
      reference
        "RFC 4443: Internet Control Message Protocol (ICMPv6)
                   for Internet Protocol Version 6 (IPv6)
                   Specification.";
    }
    leaf code {
      type uint8;
      description
        "ICMP code.";
      reference
        "RFC 4443: Internet Control Message Protocol (ICMPv6)
                   for Internet Protocol Version 6 (IPv6)
                   Specification.";
    }
    leaf rest-of-header {
      type binary;
      description
        "Unbounded in length, the contents vary based on the
         ICMP type and code. Also referred to as 'Message Body'
         in ICMPv6.";
      reference
        "RFC 4443: Internet Control Message Protocol (ICMPv6)
                   for Internet Protocol Version 6 (IPv6)
                   Specification.";
    }
  }

  grouping acl-complementary-actions {
    description
      "Collection of complementary ACL actions.";


    container log-action {
      description
        "Container for defining log actions.";

      leaf log-type {
        type identityref {
          base acl-enh:log-types;
        }
        description
          "The type of log action to be performed.";
      }
      leaf log-id {
        when "derived-from-or-self(../log-type, "
           + "'acl-enh:local-log')" {
          description
            "Name of the log file updated when type is 'local-log'.";
        }
        type string;
        description
          "The name of the counter action.";
      }
    }

    container counter-action {
      description
        "Container for defining counter actions.";

      leaf counter-type {
        type identityref {
          base acl-enh:counter-type;
        }
        description
          "The type of counter action to be performed.";
      }
      leaf-list counter-name {
        when "derived-from-or-self(../counter-type, "
           + "'acl-enh:counter-name')" {
          description
            "Name for the counter or variable to update when  
            'counter-type' is 'counter-name'.";
        }
        type string;
        description
          "List of possible variables or counter names to
          update based on match critieria.";
      }
    }  
  }

  augment "/acl:acls/acl:acl/acl:aces/acl:ace"
        + "/acl:matches" {
    description
      "Adds a match type based on the payload.";
    choice payload {
      description
        "Matches based upon a prefix pattern.";
      container prefix-pattern {
        if-feature "match-on-payload";
        description
          "Indicates the rule to perform the payload-based match.";
        uses payload;
      }
    }
    choice alias {
      description
        "Matches based upon aliases.";
      leaf-list alias-name {
        type alias-ref;
        description
          "Indicates one or more aliases.";
      }
    }
    choice mpls {
      container mpls-values {
        if-feature "match-on-mpls";
        uses mpls-match-parameters-config;
        description
          "Provides the rule set that matches MPLS headers.";
      }
      description
        "Matches against MPLS headers, for example, label
         values";          
    } 
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l2" {
    description
      "Adds a match type based on MAC VLAN and ISID filters.";
    container vlan-filter {
      if-feature "match-on-vlan-filter";
      description
        "Indicates how to handle MAC VLANs.";
      leaf frame-type {
        type string;
        description
          "Entering the frame type allows the
           filter to match a specific type of frame format";
      }
      choice vlan-type {
        description
          "VLAN definition from range or operator.";
        case range {
          leaf lower-vlan {
            type uint16;
            must '. <= ../upper-vlan' {
              error-message
                "The lower-vlan must be less than or equal to
                 the upper-vlan.";
            }
            mandatory true;
            description
              "Lower boundary for a vlan.";
          }
          leaf upper-vlan {
            type uint16;
            mandatory true;
            description
              "Upper boundary for a vlan.";
          }
        }
        case operator {
          leaf operator {
            type packet-fields:operator;
            default "eq";
            description
              "Operator to be applied on the vlan below.";
          }
          leaf-list vlan {
            type uint16;
            description
              "VLAN number along with the operator on which to
               match.";
          }
        }
      }
    }
    container isid-filter {
      if-feature "match-on-isid-filter";
      description
        "Indicates how to handle ISID filters.
         The I-component is responsible for mapping customer
         Ethernet traffic to the appropriate ISID.";
      choice isid-type {
        description
          "ISID definition from range or operator.";
        case range {
          leaf lower-isid {
            type uint16;
            must '. <= ../upper-isid' {
              error-message
                "The lower-isid must be less than or equal to
                 the upper-isid.";
            }
            mandatory true;
            description
              "Lower boundary for a ISID.";
          }
          leaf upper-isid {
            type uint16;
            mandatory true;
            description
              "Upper boundary for a ISID.";
          }
        }
        case operator {
          leaf operator {
            type packet-fields:operator;
            default "eq";
            description
              "Operator to be applied on the ISID below.";
          }
          leaf-list isid {
            type uint16;
            description
              "ISID number along with the operator on which to
               match.";
          }
        }
      }
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l3/acl:ipv4/acl:ipv4" {
    description
      "Handle non-initial and initial fragments for IPv4 packets.";
    container ipv4-fragment {
      must "not(../acl:flags)" {
        error-message
          "Either flags or fragment should be provided, but not
           both.";
      }
      description
        "Indicates how to handle IPv4 fragments.";
      uses fragment-fields;
    }
    leaf source-ipv4-prefix-list {
      type ipv4-prefix-set-ref;
      description
        "A reference to an IPv4 prefix list to match the source
         address.";
    }
    leaf destination-ipv4-prefix-list {
      type ipv4-prefix-set-ref;
      description
        "A reference to a prefix list to match the destination
         address.";
    }
    leaf next-header-set {
      type protocol-set-ref;
      description
        "A reference to a protocol set to match the next-header
         field.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l3/acl:ipv6/acl:ipv6" {
    description
      "Handles non-initial and initial fragments for IPv6 packets.";
    container ipv6-fragment {
      description
        "Indicates how to handle IPv6 fragments.";
      uses fragment-fields;
    }
    leaf source-ipv6-prefix-list {
      type ipv6-prefix-set-ref;
      description
        "A reference to a prefix list to match the source address.";
    }
    leaf destination-ipv6-prefix-list {
      type ipv6-prefix-set-ref;
      description
        "A reference to a prefix list to match the destination
         address.";
    }
    leaf protocol-set {
      type protocol-set-ref;
      description
        "A reference to a protocol set to match the protocol field.";
    }
    leaf extension-header {
       type iana-ipv6-ext-types:ipv6-extension-header-type;
       description
         "IPv6 extension header value."; 
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:tcp/acl:tcp" {
    description
      "Handles TCP flags and port sets.";
    container flags-bitmask {
      must "not(../acl:flags)" {
        error-message
          "Either flags or flags-bitmask should be provided, but not
           both.";
      }
      description
        "Indicates how to handle TCP flags.";
      uses tcp-flags;
    }
    leaf source-tcp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the source port.";
    }
    leaf destination-tcp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the destination port.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:udp/acl:udp" {
    description
      "Handle UDP port sets.";
    leaf source-udp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the source port.";
    }
    leaf destination-udp-port-set {
      type port-set-ref;
      description
        "A reference to a port set to match the destination port.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:matches/acl:l4/acl:icmp/acl:icmp" {
    description
      "Handle ICMP type sets.";
    leaf icmpv4-set {
      type icmpv4-type-set-ref;
      description
        "A reference to an ICMPv4 type set to match the ICMPv4 type
         field.";
    }
    leaf icmpv6-set {
      type icmpv6-type-set-ref;
      description
        "A reference to an ICMPv6 type set to match the ICMPv6 type
         field.";
    }
  }

  augment "/acl:acls/acl:acl/acl:aces"
        + "/acl:ace/acl:actions" {
    description
      "Complementary actions including Rate-limit action.";

    uses acl-complementary-actions;

    leaf rate-limit {
      when "../acl:forwarding = 'acl:accept'" {
        description
          "Rate-limit valid only when accept action is used.";
      }
      type decimal64 {
        fraction-digits 2;
      }
      units "bytes per second";
      description
        "Indicates a rate-limit for the matched traffic.";
    }
  }


  container defined-sets {
    description
      "Predefined sets of attributes used in policy match
       statements.";
    container ipv4-prefix-sets {
      description
        "Data definitions for a list of IPv4 or IPv6
         prefixes which are matched as part of a policy.";
      list prefix-set {
        key "name";
        description
          "List of the defined prefix sets.";
        leaf name {
          type string;
          description
            "Name of the prefix set -- this is used as a label to
             reference the set in match conditions.";
        }
        leaf description {
          type string;
          description
            "Defined Set description.";
        }
        leaf-list prefix {
          type inet:ipv4-prefix;
          description
            "List of IPv4 prefixes to be used in match
             conditions.";
        }
      }
    }
    container ipv6-prefix-sets {
      description
        "Data definitions for a list of IPv6 prefixes which are
         matched as part of a policy.";
      list prefix-set {
        key "name";
        description
          "List of the defined prefix sets.";
        leaf name {
          type string;
          description
            "Name of the prefix set -- this is used as a label to
             reference the set in match conditions.";
        }
        leaf description {
          type string;
          description
            "A textual description of the prefix list.";
        }
        leaf-list prefix {
          type inet:ipv6-prefix;
          description
            "List of IPv6 prefixes to be used in match conditions.";
        }
      }
    }
    container port-sets {
      description
        "Data definitions for a list of ports which can
         be matched in policies.";
      list port-set {
        key "name";
        description
          "List of port set definitions.";
        leaf name {
          type string;
          description
            "Name of the port set -- this is used as a label to
             reference the set in match conditions.";
        }
        list port {
          key "id";
          description
            "Port numbers along with the operator on which to
             match.";
          leaf id {
            type string;
            description
              "Identifier of the list of port numbers.";
          }
          choice port {
            description
              "Choice of specifying the port number or referring to a
               group of port numbers.";
            container port-range-or-operator {
              description
                "Indicates a set of ports.";
              uses packet-fields:port-range-or-operator;
            }
          }
        }
      }
    }
    container protocol-sets {
      description
        "Data definitions for a list of protocols which can be
         matched in policies.";
      list protocol-set {
        key "name";
        description
          "List of protocol set definitions.";
        leaf name {
          type string;
          description
            "Name of the protocols set -- this is used as a 
             label to reference the set in match conditions.";
        }
        leaf-list protocol {
          type union {
            type uint8;
            type string;
          }
          description
            "Value of the protocol set.";
          //Check if we can reuse an IANA-maintained module
        }
      }
    }
    container icmpv4-type-sets {
      description
        "Data definitions for a list of ICMPv4 types which can be
         matched in policies.";
      list icmpv4-type-set {
        key "name";
        description
          "List of ICMP type set definitions.";
        leaf name {
          type string;
          description
            "Name of the ICMPv4 type set -- this is used as a label 
             to reference the set in match conditions.";
        }
        list types {
          key "type";
          description
            "Includes a list of ICMPv4 types.";
          uses icmpv4-header-fields;
        }
      }
    }
  container icmpv6-type-sets {
      description
        "Data definitions for a list of ICMPv6 types which can be
         matched in policies.";
      list icmpv6-type-set {
        key "name";
        description
          "List of ICMP type set definitions.";
        leaf name {
          type string;
          description
            "Name of the ICMPv6 type set -- this is used as a label 
             to reference the set in match conditions.";
        }
        list types {
          key "type";
          description
            "Includes a list of ICMPv6 types.";
          uses icmpv6-header-fields;
        }
      }
    }
}
  container aliases {
    description
      "Top-levl container for aliases.";
    list alias {
      key "name";
      description
        "List of aliases.";
      leaf name {
        type string;
        description
          "The name of the alias.";
      }
      uses alias;
    }
  }
}
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The YANG modules specified in this document define a schema for data
 that is designed to be accessed via network management protocol such
 as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer
 is the secure transport layer, and the mandatory-to-implement secure
 transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer
 is HTTPS, and the mandatory-to-implement secure transport is TLS
 <xref target="RFC8446"/>.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/> provides the means to restrict access for particular NETCONF or RESTCONF users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content.</t>
      <t>There are a number of data nodes defined in this YANG module that are writable/creatable/deletable (i.e., config true, which is the default). These data nodes may be considered sensitive or vulnerable in some network environments. Write operations (e.g., edit-config) to these data nodes without proper protection can have a negative effect on network operations. These are the subtrees and data nodes and their sensitivity/vulnerability:</t>
      <dl>
        <dt>'defined-sets' and 'aliases':</dt>
        <dd>
          <t>These lists specify a set of sets and aliases. Similar to <xref target="RFC8519"/>, unauthorized write access to these
   list can allow intruders to modify the entries so as to permit
   traffic that should not be permitted, or deny traffic that should
   be permitted.  The former may result in a DoS attack, or
   compromise a device.  The latter may result in a DoS attack.</t>
        </dd>
      </dl>
      <t>Some of the readable data nodes in this YANG module may be considered sensitive or vulnerable in some network environments. It is thus important to control read access (e.g., via get, get-config, or notification) to these data nodes. These are the subtrees and data nodes and their sensitivity/vulnerability:</t>
      <dl>
        <dt>'defined-sets' and 'aliases':</dt>
        <dd>
          <t>Unauthorized read access of these lists will allow
an attacker to identify the actual resources that are bound
to ACLs.</t>
        </dd>
      </dl>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="uri-registrations">
        <name>URI Registrations</name>
        <t>This document requests IANA to register the following URIs in the "ns"
   subregistry within the "IETF XML Registry" <xref target="RFC3688"/>:</t>
        <artwork><![CDATA[
         URI: urn:ietf:params:xml:ns:yang:ietf-acl-enh
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.

         URI: urn:ietf:params:xml:ns:yang:iana-icmpv4-types
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.

         URI: urn:ietf:params:xml:ns:yang:iana-icmpv6-types
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.

         URI: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types
         Registrant Contact: The IESG.
         XML: N/A; the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="yang-module-name-registrations">
        <name>YANG Module Name Registrations</name>
        <t>This document requests IANA to register the following YANG modules in
   the "YANG Module Names" subregistry <xref target="RFC6020"/> within the "YANG
   Parameters" registry.</t>
        <artwork><![CDATA[
    name: ietf-acl-enh
    namespace: urn:ietf:params:xml:ns:yang:ietf-acl-enh
    maintained by IANA: N
    prefix: acl-enh
    reference: RFC XXXX

    name: iana-icmpv4-types
    namespace: urn:ietf:params:xml:ns:yang:iana-icmpv4-types
    maintained by IANA: Y
    prefix: iana-icmpv4-types
    reference: RFC XXXX

    name: iana-icmpv6-types
    namespace: urn:ietf:params:xml:ns:yang:iana-icmpv6-types
    maintained by IANA: Y
    prefix: iana-icmpv6-types
    reference: RFC XXXX

    name: iana-ipv6-ext-types
    namespace: urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types
    maintained by IANA: Y
    prefix: iana-ipv6-ext-types
    reference: RFC XXXX
]]></artwork>
      </section>
      <section anchor="considerations-for-iana-maintained-modules">
        <name>Considerations for IANA-Maintained Modules</name>
        <section anchor="icmpv4-types-iana-module">
          <name>ICMPv4 Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-icmpv4-types" YANG module by
applying the XSLT stylesheet from <xref target="template"/> to the XML version of
<xref target="IANA-ICMPv4"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-icmpv4-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-icmpv4-types" YANG module.  They must instead be added to the "ICMP Type Numbers" registry <xref target="IANA-ICMPv4"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "ICMP Type Numbers" registry, a new "enum" statement
must be added to the "iana-icmpv4-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-icmpv4-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to "ICMP Type Numbers" <xref target="IANA-ICMPv4"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-icmpv4-types"
[IANA_ICMPv4_YANG_URL] must be updated as defined in RFC XXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "ICMP Type Numbers" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC2780"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC2780"/>[RFCXXXX]</t>
            </dd>
          </dl>
        </section>
        <section anchor="icmpv6-types-iana-module">
          <name>ICMPv6 Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-icmpv6-types" YANG module by
applying the XSLT stylesheet from <xref target="v6-template"/> to the XML version of
<xref target="IANA-ICMPv4"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-icmpv6-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-icmpv6-types" YANG module. They must instead be added to the "ICMPv6 "type" Numbers" registry <xref target="IANA-ICMPv6"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "ICMPv6 "type" Numbers" registry, a new "enum" statement
must be added to the "iana-icmpv6-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-icmpv6-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to "ICMPv6 "type" Numbers" <xref target="IANA-ICMPv6"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-icmpv6-types"
[IANA_ICMPv6_YANG_URL] must be updated as defined in RFC XXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "ICMPv6 "type" Numbers" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC4443"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC4443"/>[RFCXXXX]</t>
            </dd>
          </dl>
        </section>
        <section anchor="ipv6-extension-header-types-iana-module">
          <name>IPv6 Extension Header Types IANA Module</name>
          <t>IANA is requested to create and post
the initial version of the "iana-ipv6-ext-types" YANG module by
applying the XSLT stylesheet from <xref target="iana-ipv6-ext-template"/> to the XML version of
<xref target="IANA-IPv6"/>.</t>
          <t>This document defines the initial version of the IANA-maintained
"iana-ipv6-ext-types" YANG module.  The most recent version of the YANG module
is available from the "YANG Parameters" registry
<xref target="IANA-YANG-PARAMETERS"/>.</t>
          <t>IANA is requested to add this note to the registry <xref target="IANA-YANG-PARAMETERS"/>:</t>
          <ul empty="true">
            <li>
              <t>New values must not be directly added to the "iana-ipv6-ext-types" YANG module.  They must instead be added to the "IPv6 Extension Header Types" registry <xref target="IANA-ICMPv6"/>.</t>
            </li>
          </ul>
          <t>When a value is added to the "IPv6 Extension Header Types" registry, a new "enum" statement
must be added to the "iana-ipv6-ext-types" YANG module.  The "enum" statement,
and sub-statements thereof, should be defined:</t>
          <dl>
            <dt>"enum":</dt>
            <dd>
              <t>Replicates a name from the registry.</t>
            </dd>
            <dt>"value":</dt>
            <dd>
              <t>Contains the decimal value of the IANA-assigned value.</t>
            </dd>
            <dt>"status":</dt>
            <dd>
              <t>Is included only if a registration has been deprecated
or obsoleted.  IANA "deprecated" maps to YANG status
"deprecated", and IANA "obsolete" maps to YANG status
"obsolete".</t>
            </dd>
            <dt>"description":</dt>
            <dd>
              <t>Replicates the description from the registry.</t>
            </dd>
            <dt>"reference":</dt>
            <dd>
              <t>Replicates the reference(s) from the registry with the
title of the document(s) added.</t>
            </dd>
          </dl>
          <t>Unassigned or reserved values are not present in the module.</t>
          <t>When the "iana-ipv6-ext-types" YANG module is updated, a new "revision"
statement with a unique revision date must be added in front of the
existing revision statements.</t>
          <t>IANA is requested to add this note to the "IPv6 Extension Header Types" registry <xref target="IANA-IPv6"/>:</t>
          <artwork><![CDATA[
When this registry is modified, the YANG module "iana-ipv6-ext-types"
[IANA_IPV6_YANG_URL] must be updated as defined in RFC XXXX.
]]></artwork>
          <t>IANA is requested to updated the "Reference" in the "IPv6 Extension Header Types" registry
as follows:</t>
          <dl>
            <dt>OLD:</dt>
            <dd>
              <t><xref target="RFC2780"/><xref target="RFC5237"/><xref target="RFC7045"/></t>
            </dd>
            <dt>NEW:</dt>
            <dd>
              <t><xref target="RFC2780"/><xref target="RFC5237"/><xref target="RFC7045"/>[RFCXXXX]</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8519">
          <front>
            <title>YANG Data Model for Network Access Control Lists (ACLs)</title>
            <author fullname="M. Jethanandani" initials="M." surname="Jethanandani"/>
            <author fullname="S. Agarwal" initials="S." surname="Agarwal"/>
            <author fullname="L. Huang" initials="L." surname="Huang"/>
            <author fullname="D. Blair" initials="D." surname="Blair"/>
            <date month="March" year="2019"/>
            <abstract>
              <t>This document defines a data model for Access Control Lists (ACLs). An ACL is a user-ordered set of rules used to configure the forwarding behavior in a device. Each rule is used to find a match on a packet and define actions that will be performed on the packet.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8519"/>
          <seriesInfo name="DOI" value="10.17487/RFC8519"/>
        </reference>
        <reference anchor="RFC8956">
          <front>
            <title>Dissemination of Flow Specification Rules for IPv6</title>
            <author fullname="C. Loibl" initials="C." role="editor" surname="Loibl"/>
            <author fullname="R. Raszuk" initials="R." role="editor" surname="Raszuk"/>
            <author fullname="S. Hares" initials="S." role="editor" surname="Hares"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>"Dissemination of Flow Specification Rules" (RFC 8955) provides a Border Gateway Protocol (BGP) extension for the propagation of traffic flow information for the purpose of rate limiting or filtering IPv4 protocol data packets.</t>
              <t>This document extends RFC 8955 with IPv6 functionality. It also updates RFC 8955 by changing the IANA Flow Spec Component Types registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8956"/>
          <seriesInfo name="DOI" value="10.17487/RFC8956"/>
        </reference>
        <reference anchor="RFC8342">
          <front>
            <title>Network Management Datastore Architecture (NMDA)</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <author fullname="P. Shafer" initials="P." surname="Shafer"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <author fullname="R. Wilton" initials="R." surname="Wilton"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>Datastores are a fundamental concept binding the data models written in the YANG data modeling language to network management protocols such as the Network Configuration Protocol (NETCONF) and RESTCONF. This document defines an architectural framework for datastores based on the experience gained with the initial simpler model, addressing requirements that were not well supported in the initial model. This document updates RFC 7950.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8342"/>
          <seriesInfo name="DOI" value="10.17487/RFC8342"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC0792">
          <front>
            <title>Internet Control Message Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="792"/>
          <seriesInfo name="DOI" value="10.17487/RFC0792"/>
        </reference>
        <reference anchor="RFC4443">
          <front>
            <title>Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification</title>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="M. Gupta" initials="M." role="editor" surname="Gupta"/>
            <date month="March" year="2006"/>
            <abstract>
              <t>This document describes the format of a set of control messages used in ICMPv6 (Internet Control Message Protocol). ICMPv6 is the Internet Control Message Protocol for Internet Protocol version 6 (IPv6). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="89"/>
          <seriesInfo name="RFC" value="4443"/>
          <seriesInfo name="DOI" value="10.17487/RFC4443"/>
        </reference>
        <reference anchor="RFC9293">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="RFC3032">
          <front>
            <title>MPLS Label Stack Encoding</title>
            <author fullname="E. Rosen" initials="E." surname="Rosen"/>
            <author fullname="D. Tappan" initials="D." surname="Tappan"/>
            <author fullname="G. Fedorkow" initials="G." surname="Fedorkow"/>
            <author fullname="Y. Rekhter" initials="Y." surname="Rekhter"/>
            <author fullname="D. Farinacci" initials="D." surname="Farinacci"/>
            <author fullname="T. Li" initials="T." surname="Li"/>
            <author fullname="A. Conta" initials="A." surname="Conta"/>
            <date month="January" year="2001"/>
            <abstract>
              <t>This document specifies the encoding to be used by an LSR in order to transmit labeled packets on Point-to-Point Protocol (PPP) data links, on LAN data links, and possibly on other data links as well. This document also specifies rules and procedures for processing the various fields of the label stack encoding. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3032"/>
          <seriesInfo name="DOI" value="10.17487/RFC3032"/>
        </reference>
        <reference anchor="RFC5462">
          <front>
            <title>Multiprotocol Label Switching (MPLS) Label Stack Entry: "EXP" Field Renamed to "Traffic Class" Field</title>
            <author fullname="L. Andersson" initials="L." surname="Andersson"/>
            <author fullname="R. Asati" initials="R." surname="Asati"/>
            <date month="February" year="2009"/>
            <abstract>
              <t>The early Multiprotocol Label Switching (MPLS) documents defined the form of the MPLS label stack entry. This includes a three-bit field called the "EXP field". The exact use of this field was not defined by these documents, except to state that it was to be "reserved for experimental use".</t>
              <t>Although the intended use of the EXP field was as a "Class of Service" (CoS) field, it was not named a CoS field by these early documents because the use of such a CoS field was not considered to be sufficiently defined. Today a number of standards documents define its usage as a CoS field.</t>
              <t>To avoid misunderstanding about how this field may be used, it has become increasingly necessary to rename this field. This document changes the name of the field to the "Traffic Class field" ("TC field"). In doing so, it also updates documents that define the current use of the EXP field. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5462"/>
          <seriesInfo name="DOI" value="10.17487/RFC5462"/>
        </reference>
        <reference anchor="RFC7209">
          <front>
            <title>Requirements for Ethernet VPN (EVPN)</title>
            <author fullname="A. Sajassi" initials="A." surname="Sajassi"/>
            <author fullname="R. Aggarwal" initials="R." surname="Aggarwal"/>
            <author fullname="J. Uttaro" initials="J." surname="Uttaro"/>
            <author fullname="N. Bitar" initials="N." surname="Bitar"/>
            <author fullname="W. Henderickx" initials="W." surname="Henderickx"/>
            <author fullname="A. Isaac" initials="A." surname="Isaac"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>The widespread adoption of Ethernet L2VPN services and the advent of new applications for the technology (e.g., data center interconnect) have culminated in a new set of requirements that are not readily addressable by the current Virtual Private LAN Service (VPLS) solution. In particular, multihoming with all-active forwarding is not supported, and there's no existing solution to leverage Multipoint-to-Multipoint (MP2MP) Label Switched Paths (LSPs) for optimizing the delivery of multi-destination frames. Furthermore, the provisioning of VPLS, even in the context of BGP-based auto-discovery, requires network operators to specify various network parameters on top of the access configuration. This document specifies the requirements for an Ethernet VPN (EVPN) solution, which addresses the above issues.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7209"/>
          <seriesInfo name="DOI" value="10.17487/RFC7209"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC8294">
          <front>
            <title>Common YANG Data Types for the Routing Area</title>
            <author fullname="X. Liu" initials="X." surname="Liu"/>
            <author fullname="Y. Qu" initials="Y." surname="Qu"/>
            <author fullname="A. Lindem" initials="A." surname="Lindem"/>
            <author fullname="C. Hopps" initials="C." surname="Hopps"/>
            <author fullname="L. Berger" initials="L." surname="Berger"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>This document defines a collection of common data types using the YANG data modeling language. These derived common types are designed to be imported by other modules defined in the routing area.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8294"/>
          <seriesInfo name="DOI" value="10.17487/RFC8294"/>
        </reference>
        <reference anchor="RFC6241">
          <front>
            <title>Network Configuration Protocol (NETCONF)</title>
            <author fullname="R. Enns" initials="R." role="editor" surname="Enns"/>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes RFC 4741. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6241"/>
          <seriesInfo name="DOI" value="10.17487/RFC6241"/>
        </reference>
        <reference anchor="RFC8040">
          <front>
            <title>RESTCONF Protocol</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="K. Watsen" initials="K." surname="Watsen"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes an HTTP-based protocol that provides a programmatic interface for accessing data defined in YANG, using the datastore concepts defined in the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8040"/>
          <seriesInfo name="DOI" value="10.17487/RFC8040"/>
        </reference>
        <reference anchor="RFC6242">
          <front>
            <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
            <author fullname="M. Wasserman" initials="M." surname="Wasserman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6242"/>
          <seriesInfo name="DOI" value="10.17487/RFC6242"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="IANA-YANG-PARAMETERS" target="https://www.iana.org/assignments/yang-parameters">
          <front>
            <title>YANG Parameters</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-ICMPv4" target="https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml">
          <front>
            <title>ICMP Type Numbers</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-ICMPv6" target="https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml">
          <front>
            <title>ICMPv6 type Numbers</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IANA-IPv6" target="https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xhtml">
          <front>
            <title>IPv6 Extension Header Types</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="IEEE-802-1ah" target="https://standards.ieee.org/standard/802_1ah-2008.html">
          <front>
            <title>IEEE Standard for Local and metropolitan area networks -- Virtual Bridged Local Area Networks Amendment 7: Provider Backbone Bridges</title>
            <author initials="" surname="IEEE" fullname="IEEE">
              <organization/>
            </author>
            <date year="2008" month="August"/>
          </front>
        </reference>
        <reference anchor="RFC9132">
          <front>
            <title>Distributed Denial-of-Service Open Threat Signaling (DOTS) Signal Channel Specification</title>
            <author fullname="M. Boucadair" initials="M." role="editor" surname="Boucadair"/>
            <author fullname="J. Shallow" initials="J." surname="Shallow"/>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document specifies the Distributed Denial-of-Service Open Threat Signaling (DOTS) signal channel, a protocol for signaling the need for protection against Distributed Denial-of-Service (DDoS) attacks to a server capable of enabling network traffic mitigation on behalf of the requesting client.</t>
              <t>A companion document defines the DOTS data channel, a separate reliable communication layer for DOTS management and configuration purposes.</t>
              <t>This document obsoletes RFC 8782.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9132"/>
          <seriesInfo name="DOI" value="10.17487/RFC9132"/>
        </reference>
        <reference anchor="RFC8955">
          <front>
            <title>Dissemination of Flow Specification Rules</title>
            <author fullname="C. Loibl" initials="C." surname="Loibl"/>
            <author fullname="S. Hares" initials="S." surname="Hares"/>
            <author fullname="R. Raszuk" initials="R." surname="Raszuk"/>
            <author fullname="D. McPherson" initials="D." surname="McPherson"/>
            <author fullname="M. Bacher" initials="M." surname="Bacher"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>This document defines a Border Gateway Protocol Network Layer Reachability Information (BGP NLRI) encoding format that can be used to distribute (intra-domain and inter-domain) traffic Flow Specifications for IPv4 unicast and IPv4 BGP/MPLS VPN services. This allows the routing system to propagate information regarding more specific components of the traffic aggregate defined by an IP destination prefix.</t>
              <t>It also specifies BGP Extended Community encoding formats, which can be used to propagate Traffic Filtering Actions along with the Flow Specification NLRI. Those Traffic Filtering Actions encode actions a routing system can take if the packet matches the Flow Specification.</t>
              <t>This document obsoletes both RFC 5575 and RFC 7674.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8955"/>
          <seriesInfo name="DOI" value="10.17487/RFC8955"/>
        </reference>
        <reference anchor="I-D.ietf-netmod-rfc8407bis">
          <front>
            <title>Guidelines for Authors and Reviewers of Documents Containing YANG Data Models</title>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="18" month="December" year="2023"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-06"/>
        </reference>
        <reference anchor="RFC8340">
          <front>
            <title>YANG Tree Diagrams</title>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <author fullname="L. Berger" initials="L." role="editor" surname="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution of the YANG language.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="215"/>
          <seriesInfo name="RFC" value="8340"/>
          <seriesInfo name="DOI" value="10.17487/RFC8340"/>
        </reference>
        <reference anchor="RFC9000">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC2780">
          <front>
            <title>IANA Allocation Guidelines For Values In the Internet Protocol and Related Headers</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <author fullname="V. Paxson" initials="V." surname="Paxson"/>
            <date month="March" year="2000"/>
            <abstract>
              <t>This memo provides guidance for the IANA to use in assigning parameters for fields in the IPv4, IPv6, ICMP, UDP and TCP protocol headers. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="37"/>
          <seriesInfo name="RFC" value="2780"/>
          <seriesInfo name="DOI" value="10.17487/RFC2780"/>
        </reference>
        <reference anchor="RFC5237">
          <front>
            <title>IANA Allocation Guidelines for the Protocol Field</title>
            <author fullname="J. Arkko" initials="J." surname="Arkko"/>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="February" year="2008"/>
            <abstract>
              <t>This document revises the IANA guidelines for allocating new Protocol field values in IPv4 header. It modifies the rules specified in RFC 2780 by removing the Expert Review option. The change will also affect the allocation of Next Header field values in IPv6. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="37"/>
          <seriesInfo name="RFC" value="5237"/>
          <seriesInfo name="DOI" value="10.17487/RFC5237"/>
        </reference>
        <reference anchor="RFC7045">
          <front>
            <title>Transmission and Processing of IPv6 Extension Headers</title>
            <author fullname="B. Carpenter" initials="B." surname="Carpenter"/>
            <author fullname="S. Jiang" initials="S." surname="Jiang"/>
            <date month="December" year="2013"/>
            <abstract>
              <t>Various IPv6 extension headers have been standardised since the IPv6 standard was first published. This document updates RFC 2460 to clarify how intermediate nodes should deal with such extension headers and with any that are defined in the future. It also specifies how extension headers should be registered by IANA, with a corresponding minor update to RFC 2780.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7045"/>
          <seriesInfo name="DOI" value="10.17487/RFC7045"/>
        </reference>
      </references>
    </references>
    <?line 1858?>

<section anchor="icmpv4-types">
      <name>ICMPv4 Types</name>
      <section anchor="template">
        <name>XSLT Template to Generate The ICMPv4 Types IANA-Maintained Module</name>
        <sourcecode markers="true"><![CDATA[

<?xml version="1.0" encoding="utf-8"?>
<stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform"
    xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:iana="http://www.iana.org/assignments"
    xmlns:yin="urn:ietf:params:xml:ns:yang:yin:1"
    version="1.0">
  <import href="../../../xslt/iana-yinx.xsl"/>
  <output method="xml" encoding="utf-8"/>
  <strip-space elements="*"/>

  <template match="iana:registry[@id='icmp-parameters-types']">
    <element name="yin:typedef">
      <attribute name="name">icmpv4-type-name</attribute>
      <element name="yin:type">
        <attribute name="name">enumeration</attribute>
        <apply-templates
            select="iana:record[not(iana:description = 'Unassigned' or
                    starts-with(iana:description, 'Reserved') or 
                    starts-with(iana:description, 'RFC3692')) or 
                    contains(iana:description, 'experimental')]"/>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This enumeration type defines mnemonic names and
          corresponding numeric values of ICMPv4 types.
        </element>
      </element>
      <element name="yin:reference">
        <element name="yin:text">
          RFC 2708: IANA Allocation Guidelines For Values In
                    the Internet Protocol and Related Headers
        </element>
      </element>
    </element>
    <element name="yin:typedef">
      <attribute name="name">icmpv4-type</attribute>
      <element name="yin:type">
        <attribute name="name">union</attribute>
        <element name="yin:type">
          <attribute name="name">uint8</attribute>
        </element>
        <element name="yin:type">
          <attribute name="name">icmpv4-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an ICMPv4 type using either
          the assigned mnemonic name or numeric value.
        </element>
      </element>
    </element>
  </template>

  <template match="iana:record">
    <call-template name="enum">
      <with-param name="id">
        <choose>
          <when test="contains(iana:description, '(Deprecated)')">
            <value-of select="translate(normalize-space(substring-before(iana:description, 
                  '(Deprecated)')),' ','')"/>
          </when>
          <otherwise>
            <value-of select="translate(normalize-space(iana:description),' ','')"/>
          </otherwise>
        </choose>
      </with-param>
      <with-param name="deprecated"
                  select="contains(iana:description, '(Deprecated)')"/>
    </call-template>
  </template>

</stylesheet>

]]></sourcecode>
      </section>
      <section anchor="iana-icmp">
        <name>Initial Version of the The ICMPv4 Types IANA-Maintained Module</name>
        <sourcecode markers="true" name="iana-icmpv4-types@2020-09-25.yang"><![CDATA[

module iana-icmpv4-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-icmpv4-types";
  prefix iana-icmpv4-types;

  organization
    "Internet Assigned Numbers Authority (IANA)";

  contact
    "Internet Assigned Numbers Authority

     ICANN
     12025 Waterfront Drive, Suite 300
     Los Angeles, CA 90094
     

     Tel: +1 424 254 5300

     <mailto:iana@iana.org>";

  description
    "This YANG module translates IANA registry 'ICMP Type Numbers' to
     YANG derived types.

     Copyright (c) 2020 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 Revised 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).

     The initial version of this YANG module is part of RFC XXXX;
     see the RFC itself for full legal notices.

     This version of this YANG module was generated from the
     corresponding IANA registry using an XSLT stylesheet from the
     'iana-yang' project (https://github.com/llhotka/iana-yang).";

  reference
    "Internet Control Message Protocol (ICMP) Parameters
     (https://www.iana.org/assignments/icmp-parameters/)";

  revision 2020-09-25 {
    description
      "Current revision as of the revision date specified in the XML
       representation of the registry page.";
    reference
      "https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xml";
  }

  /* Typedefs */

  typedef icmpv4-type-name {
    type enumeration {
      enum EchoReply {
        value 0;
        description
          "Echo Reply";
        reference
          "RFC 792";
      }
      enum DestinationUnreachable {
        value 3;
        description
          "Destination Unreachable";
        reference
          "RFC 792";
      }
      enum SourceQuench {
        value 4;
        status deprecated;
        description
          "Source Quench (Deprecated)";
        reference
          "- RFC 792
           - RFC 6633";
      }
      enum Redirect {
        value 5;
        description
          "Redirect";
        reference
          "RFC 792";
      }
      enum AlternateHostAddress {
        value 6;
        status deprecated;
        description
          "Alternate Host Address (Deprecated)";
        reference
          "RFC 6918";
      }
      enum Echo {
        value 8;
        description
          "Echo";
        reference
          "RFC 792";
      }
      enum RouterAdvertisement {
        value 9;
        description
          "Router Advertisement";
        reference
          "RFC 1256";
      }
      enum RouterSolicitation {
        value 10;
        description
          "Router Solicitation";
        reference
          "RFC 1256";
      }
      enum TimeExceeded {
        value 11;
        description
          "Time Exceeded";
        reference
          "RFC 792";
      }
      enum ParameterProblem {
        value 12;
        description
          "Parameter Problem";
        reference
          "RFC 792";
      }
      enum Timestamp {
        value 13;
        description
          "Timestamp";
        reference
          "RFC 792";
      }
      enum TimestampReply {
        value 14;
        description
          "Timestamp Reply";
        reference
          "RFC 792";
      }
      enum InformationRequest {
        value 15;
        status deprecated;
        description
          "Information Request (Deprecated)";
        reference
          "- RFC 792
           - RFC 6918";
      }
      enum InformationReply {
        value 16;
        status deprecated;
        description
          "Information Reply (Deprecated)";
        reference
          "- RFC 792
           - RFC 6918";
      }
      enum AddressMaskRequest {
        value 17;
        status deprecated;
        description
          "Address Mask Request (Deprecated)";
        reference
          "- RFC 950
           - RFC 6918";
      }
      enum AddressMaskReply {
        value 18;
        status deprecated;
        description
          "Address Mask Reply (Deprecated)";
        reference
          "- RFC 950
           - RFC 6918";
      }
      enum Traceroute {
        value 30;
        status deprecated;
        description
          "Traceroute (Deprecated)";
        reference
          "- RFC 1393
           - RFC 6918";
      }
      enum DatagramConversionError {
        value 31;
        status deprecated;
        description
          "Datagram Conversion Error (Deprecated)";
        reference
          "- RFC 1475
           - RFC 6918";
      }
      enum MobileHostRedirect {
        value 32;
        status deprecated;
        description
          "Mobile Host Redirect (Deprecated)";
        reference
          "- David Johnson <>
           - RFC 6918";
      }
      enum IPv6Where-Are-You {
        value 33;
        status deprecated;
        description
          "IPv6 Where-Are-You (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum IPv6I-Am-Here {
        value 34;
        status deprecated;
        description
          "IPv6 I-Am-Here (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum MobileRegistrationRequest {
        value 35;
        status deprecated;
        description
          "Mobile Registration Request (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum MobileRegistrationReply {
        value 36;
        status deprecated;
        description
          "Mobile Registration Reply (Deprecated)";
        reference
          "- Bill Simpson <mailto:Bill.Simpson&um.cc.umich.edu>
           - RFC 6918";
      }
      enum DomainNameRequest {
        value 37;
        status deprecated;
        description
          "Domain Name Request (Deprecated)";
        reference
          "- RFC 1788
           - RFC 6918";
      }
      enum DomainNameReply {
        value 38;
        status deprecated;
        description
          "Domain Name Reply (Deprecated)";
        reference
          "- RFC 1788
           - RFC 6918";
      }
      enum SKIP {
        value 39;
        status deprecated;
        description
          "SKIP (Deprecated)";
        reference
          "- Tom Markson <mailto:markson&osmosys.incog.com>
           - RFC 6918";
      }
      enum Photuris {
        value 40;
        description
          "Photuris";
        reference
          "RFC 2521";
      }
      enum ICMPmessagesutilizedbyexperimentalmobilityprotocolssuchasSeamoby {
        value 41;
        description
          "ICMP messages utilized by experimental mobility protocols
           such as Seamoby";
        reference
          "RFC 4065";
      }
      enum ExtendedEchoRequest {
        value 42;
        description
          "Extended Echo Request";
        reference
          "RFC 8335";
      }
      enum ExtendedEchoReply {
        value 43;
        description
          "Extended Echo Reply";
        reference
          "RFC 8335";
      }
    }
    description
      "This enumeration type defines mnemonic names and corresponding
       numeric values of ICMPv4 types.";
    reference
      "RFC 2708: IANA Allocation Guidelines For Values In the
       Internet Protocol and Related Headers";
  }

  typedef icmpv4-type {
    type union {
      type uint8;
      type icmpv4-type-name;
    }
    description
      "This type allows reference to an ICMPv4 type using either the
       assigned mnemonic name or numeric value.";
  }
}

]]></sourcecode>
      </section>
    </section>
    <section anchor="icmpv6-types">
      <name>ICMPv6 Types</name>
      <section anchor="v6-template">
        <name>XSLT Template to Generate The ICMPv6 Types IANA-Maintained Module</name>
        <sourcecode markers="true"><![CDATA[

<?xml version="1.0" encoding="utf-8"?>
<stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform"
    xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:iana="http://www.iana.org/assignments"
    xmlns:yin="urn:ietf:params:xml:ns:yang:yin:1"
    version="1.0">
  <import href="../../../xslt/iana-yinx.xsl"/>
  <output method="xml" encoding="utf-8"/>
  <strip-space elements="*"/>

  <template match="iana:registry[@id='icmpv6-parameters-2']">
    <element name="yin:typedef">
      <attribute name="name">icmpv6-type-name</attribute>
      <element name="yin:type">
        <attribute name="name">enumeration</attribute>
        <apply-templates
            select="iana:record[not(iana:name = 'Unassigned' or
                    starts-with(iana:name, 'Reserved') or 
                    starts-with(iana:name, 'Private'))]"/>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This enumeration type defines mnemonic names and
          corresponding numeric values of ICMPv6 types.
        </element>
      </element>
      <element name="yin:reference">
        <element name="yin:text">
          RFC 2708: IANA Allocation Guidelines For Values In
                    the Internet Protocol and Related Headers
        </element>
      </element>
    </element>
    <element name="yin:typedef">
      <attribute name="name">icmpv6-type</attribute>
      <element name="yin:type">
        <attribute name="name">union</attribute>
        <element name="yin:type">
          <attribute name="name">uint8</attribute>
        </element>
        <element name="yin:type">
          <attribute name="name">icmpv6-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an ICMPv6 type using either
          the assigned mnemonic name or numeric value.
        </element>
      </element>
    </element>
  </template>

  <template match="iana:record">
    <call-template name="enum">
      <with-param name="id">
        <choose>
          <when test="contains(iana:name, '(Deprecated)')">
            <value-of select="translate(normalize-space(substring-before(iana:name, 
                  '(Deprecated)')),' ','')"/>
          </when>
          <otherwise>
            <value-of select="translate(normalize-space(iana:name),' ','')"/>
          </otherwise>
        </choose>
      </with-param>
      <with-param name="description">
        <value-of select="concat(iana:name, '.')"/>
      </with-param>
      <with-param name="deprecated"
                  select="contains(iana:name, '(Deprecated)')"/>
    </call-template>
  </template>

</stylesheet>

]]></sourcecode>
      </section>
      <section anchor="iana-icmpv6">
        <name>Initial Version of the The ICMPv6 Types IANA-Maintained Module</name>
        <sourcecode markers="true" name="iana-icmpv6-types@2020-09-25.yang"><![CDATA[

module iana-icmpv6-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-icmpv6-types";
  prefix iana-icmpv6-types;

  organization
    "Internet Assigned Numbers Authority (IANA)";

  contact
    "Internet Assigned Numbers Authority

     ICANN
     12025 Waterfront Drive, Suite 300
     Los Angeles, CA 90094
     

     Tel: +1 424 254 5300

     <mailto:iana@iana.org>";

  description
    "This YANG module translates IANA registry 'ICMPv6 \"type\"
     Numbers' to YANG derived types.

     Copyright (c) 2023 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 Revised 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).

     The initial version of this YANG module is part of RFC XXXX;
     see the RFC itself for full legal notices.

     This version of this YANG module was generated from the
     corresponding IANA registry using an XSLT stylesheet from the
     'iana-yang' project (https://github.com/llhotka/iana-yang).";

  reference
    "Internet Control Message Protocol version 6 (ICMPv6) Parameters
     (https://www.iana.org/assignments/icmpv6-parameters/)";

  revision 2023-04-28 {
    description
      "Current revision as of the revision date specified in the XML
       representation of the registry page.";
    reference
      "https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xml";
  }

  /* Typedefs */

  typedef icmpv6-type-name {
    type enumeration {
      enum DestinationUnreachable {
        value 1;
        description
          "Destination Unreachable.";
        reference
          "RFC 4443";
      }
      enum PacketTooBig {
        value 2;
        description
          "Packet Too Big.";
        reference
          "RFC 4443";
      }
      enum TimeExceeded {
        value 3;
        description
          "Time Exceeded.";
        reference
          "RFC 4443";
      }
      enum ParameterProblem {
        value 4;
        description
          "Parameter Problem.";
        reference
          "RFC 4443";
      }
      enum EchoRequest {
        value 128;
        description
          "Echo Request.";
        reference
          "RFC 4443";
      }
      enum EchoReply {
        value 129;
        description
          "Echo Reply.";
        reference
          "RFC 4443";
      }
      enum MulticastListenerQuery {
        value 130;
        description
          "Multicast Listener Query.";
        reference
          "RFC 2710";
      }
      enum MulticastListenerReport {
        value 131;
        description
          "Multicast Listener Report.";
        reference
          "RFC 2710";
      }
      enum MulticastListenerDone {
        value 132;
        description
          "Multicast Listener Done.";
        reference
          "RFC 2710";
      }
      enum RouterSolicitation {
        value 133;
        description
          "Router Solicitation.";
        reference
          "RFC 4861";
      }
      enum RouterAdvertisement {
        value 134;
        description
          "Router Advertisement.";
        reference
          "RFC 4861";
      }
      enum NeighborSolicitation {
        value 135;
        description
          "Neighbor Solicitation.";
        reference
          "RFC 4861";
      }
      enum NeighborAdvertisement {
        value 136;
        description
          "Neighbor Advertisement.";
        reference
          "RFC 4861";
      }
      enum RedirectMessage {
        value 137;
        description
          "Redirect Message.";
        reference
          "RFC 4861";
      }
      enum RouterRenumbering {
        value 138;
        description
          "Router Renumbering.";
        reference
          "RFC 2894";
      }
      enum ICMPNodeInformationQuery {
        value 139;
        description
          "ICMP Node Information Query.";
        reference
          "RFC 4620";
      }
      enum ICMPNodeInformationResponse {
        value 140;
        description
          "ICMP Node Information Response.";
        reference
          "RFC 4620";
      }
      enum InverseNeighborDiscoverySolicitationMessage {
        value 141;
        description
          "Inverse Neighbor Discovery Solicitation Message.";
        reference
          "RFC 3122";
      }
      enum InverseNeighborDiscoveryAdvertisementMessage {
        value 142;
        description
          "Inverse Neighbor Discovery Advertisement Message.";
        reference
          "RFC 3122";
      }
      enum Version2MulticastListenerReport {
        value 143;
        description
          "Version 2 Multicast Listener Report.";
        reference
          "RFC 3810";
      }
      enum HomeAgentAddressDiscoveryRequestMessage {
        value 144;
        description
          "Home Agent Address Discovery Request Message.";
        reference
          "RFC 6275";
      }
      enum HomeAgentAddressDiscoveryReplyMessage {
        value 145;
        description
          "Home Agent Address Discovery Reply Message.";
        reference
          "RFC 6275";
      }
      enum MobilePrefixSolicitation {
        value 146;
        description
          "Mobile Prefix Solicitation.";
        reference
          "RFC 6275";
      }
      enum MobilePrefixAdvertisement {
        value 147;
        description
          "Mobile Prefix Advertisement.";
        reference
          "RFC 6275";
      }
      enum CertificationPathSolicitationMessage {
        value 148;
        description
          "Certification Path Solicitation Message.";
        reference
          "RFC 3971";
      }
      enum CertificationPathAdvertisementMessage {
        value 149;
        description
          "Certification Path Advertisement Message.";
        reference
          "RFC 3971";
      }
      enum ICMPmessagesutilizedbyexperimentalmobilityprotocolssuchasSeamoby {
        value 150;
        description
          "ICMP messages utilized by experimental mobility protocols
           such as Seamoby.";
        reference
          "RFC 4065";
      }
      enum MulticastRouterAdvertisement {
        value 151;
        description
          "Multicast Router Advertisement.";
        reference
          "RFC 4286";
      }
      enum MulticastRouterSolicitation {
        value 152;
        description
          "Multicast Router Solicitation.";
        reference
          "RFC 4286";
      }
      enum MulticastRouterTermination {
        value 153;
        description
          "Multicast Router Termination.";
        reference
          "RFC 4286";
      }
      enum FMIPv6Messages {
        value 154;
        description
          "FMIPv6 Messages.";
        reference
          "RFC 5568";
      }
      enum RPLControlMessage {
        value 155;
        description
          "RPL Control Message.";
        reference
          "RFC 6550";
      }
      enum ILNPv6LocatorUpdateMessage {
        value 156;
        description
          "ILNPv6 Locator Update Message.";
        reference
          "RFC 6743";
      }
      enum DuplicateAddressRequest {
        value 157;
        description
          "Duplicate Address Request.";
        reference
          "RFC 6775";
      }
      enum DuplicateAddressConfirmation {
        value 158;
        description
          "Duplicate Address Confirmation.";
        reference
          "RFC 6775";
      }
      enum MPLControlMessage {
        value 159;
        description
          "MPL Control Message.";
        reference
          "RFC 7731";
      }
      enum ExtendedEchoRequest {
        value 160;
        description
          "Extended Echo Request.";
        reference
          "RFC 8335";
      }
      enum ExtendedEchoReply {
        value 161;
        description
          "Extended Echo Reply.";
        reference
          "RFC 8335";
      }
    }
    description
      "This enumeration type defines mnemonic names and corresponding
       numeric values of ICMPv6 types.";
    reference
      "RFC 2708: IANA Allocation Guidelines For Values In the
       Internet Protocol and Related Headers";
  }

  typedef icmpv6-type {
    type union {
      type uint8;
      type icmpv6-type-name;
    }
    description
      "This type allows reference to an ICMPv6 type using either the
       assigned mnemonic name or numeric value.";
  }
}

]]></sourcecode>
      </section>
    </section>
    <section anchor="ipv6-extension-header-types">
      <name>IPv6 Extension Header Types</name>
      <section anchor="iana-ipv6-ext-template">
        <name>XSLT Template to Generate The IPv6 Extension Header Types IANA-Maintained Module</name>
        <sourcecode markers="true"><![CDATA[

<?xml version="1.0" encoding="utf-8"?>
<stylesheet
    xmlns="http://www.w3.org/1999/XSL/Transform"
    xmlns:html="http://www.w3.org/1999/xhtml"
    xmlns:iana="http://www.iana.org/assignments"
    xmlns:yin="urn:ietf:params:xml:ns:yang:yin:1"
    version="1.0">
  <import href="../../../xslt/iana-yinx.xsl"/>
  <output method="xml" encoding="utf-8"/>
  <strip-space elements="*"/>

  <template match="iana:registry[@id='extension-header']">
    <element name="yin:typedef">
      <attribute name="name">ipv6-extension-header-type-name</attribute>
      <element name="yin:type">
        <attribute name="name">enumeration</attribute>
        <apply-templates
            select="iana:record[not(iana:description = 'Unassigned' or
                    starts-with(iana:description, 'Reserved') or 
                    starts-with(iana:description, 'Use for experimentation and testing')) or 
                    contains(iana:description, 'experimental')]"/>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This enumeration type defines mnemonic names and
          corresponding numeric values of IPv6 Extension header types.
        </element>
      </element>
      <element name="yin:reference">
        <element name="yin:text">
          RFC 2708: IANA Allocation Guidelines For Values In
                    the Internet Protocol and Related Headers
        </element>
      </element>
    </element>
    <element name="yin:typedef">
      <attribute name="name">ipv6-extension-header-type</attribute>
      <element name="yin:type">
        <attribute name="name">union</attribute>
        <element name="yin:type">
          <attribute name="name">uint8</attribute>
        </element>
        <element name="yin:type">
          <attribute name="name">ipv6-extension-header-type-name</attribute>
        </element>
      </element>
      <element name="yin:description">
        <element name="yin:text">
          This type allows reference to an IPv6 Extension header type using either
          the assigned mnemonic name or the numeric protocol number value.
        </element>
      </element>
    </element>
  </template>

  <template match="iana:record">
    <call-template name="enum">
      <with-param name="id">
        <choose>
          <when test="contains(iana:description, '(Deprecated)')">
            <value-of select="translate(normalize-space(substring-before(iana:description, 
                  '(Deprecated)')),' ','')"/>
          </when>
          <otherwise>
            <value-of select="translate(normalize-space(iana:description),' ','')"/>
          </otherwise>
        </choose>
      </with-param>
      <with-param name="deprecated"
                  select="contains(iana:description, '(Deprecated)')"/>
    </call-template>
  </template>

</stylesheet>

]]></sourcecode>
      </section>
      <section anchor="iana-ipv6-ext">
        <name>Initial Version of The IPv6 Extension Header Types IANA-Maintained Module</name>
        <sourcecode markers="true" name="iana-ipv6-ext-types@2023-04-28.yang"><![CDATA[

module iana-ipv6-ext-types {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:iana-ipv6-ext-types";
  prefix iana-ipv6-ext-types;

  organization
    "Internet Assigned Numbers Authority (IANA)";

  contact
    "Internet Assigned Numbers Authority

     ICANN
     12025 Waterfront Drive, Suite 300
     Los Angeles, CA 90094
     

     Tel: +1 424 254 5300

     <mailto:iana@iana.org>";

  description
    "This YANG module translates IANA registry 'IPv6 Extension Header
     Types' to YANG derived types.

     Copyright (c) 2023 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 Revised 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 was generated from the
     corresponding IANA registry using an XSLT stylesheet from the
     'iana-yang' project (https://github.com/llhotka/iana-yang).";

  reference
    "Internet Protocol Version 6 (IPv6) Parameters
     (https://www.iana.org/assignments/ipv6-parameters/)";

  revision 2023-09-29 {
    description
      "Current revision as of the revision date specified in the XML
       representation of the registry page.";
    reference
      "https://www.iana.org/assignments/ipv6-parameters/ipv6-parameters.xml";
  }

  /* Typedefs */

  typedef ipv6-extension-header-type-name {
    type enumeration {
      enum IPv6Hop-by-HopOption {
        value 0;
        description
          "IPv6 Hop-by-Hop Option";
        reference
          "RFC 8200";
      }
      enum RoutingHeaderforIPv6 {
        value 43;
        description
          "Routing Header for IPv6";
        reference
          "- RFC 8200
           - RFC 5095";
      }
      enum FragmentHeaderforIPv6 {
        value 44;
        description
          "Fragment Header for IPv6";
        reference
          "RFC 8200";
      }
      enum EncapsulatingSecurityPayload {
        value 50;
        description
          "Encapsulating Security Payload";
        reference
          "RFC 4303";
      }
      enum AuthenticationHeader {
        value 51;
        description
          "Authentication Header";
        reference
          "RFC 4302";
      }
      enum DestinationOptionsforIPv6 {
        value 60;
        description
          "Destination Options for IPv6";
        reference
          "RFC 8200";
      }
      enum MobilityHeader {
        value 135;
        description
          "Mobility Header";
        reference
          "RFC 6275";
      }
      enum HostIdentityProtocol {
        value 139;
        description
          "Host Identity Protocol";
        reference
          "RFC 7401";
      }
      enum Shim6Protocol {
        value 140;
        description
          "Shim6 Protocol";
        reference
          "RFC 5533";
      }
    }
    description
      "This enumeration type defines mnemonic names and corresponding
       numeric values of IPv6 Extension header types.";
    reference
      "RFC 2708: IANA Allocation Guidelines For Values In the
       Internet Protocol and Related Headers";
  }

  typedef ipv6-extension-header-type {
    type union {
      type uint8;
      type ipv6-extension-header-type-name;
    }
    description
      "This type allows reference to an IPv6 Extension header type
       using either the assigned mnemonic name or the numeric
       protocol number value.";
  }
}

]]></sourcecode>
      </section>
    </section>
    <section anchor="ps">
      <name>Problem Statement &amp; Gap Analysis</name>
      <section anchor="ps-sets">
        <name>Suboptimal Configuration: Lack of Support for Lists of Prefixes</name>
        <t>IP prefix-related data nodes, e.g., "destination-ipv4-network" or
   "destination-ipv6-network", do not support handling a list of IP
   prefixes, which may then lead to having to support large numbers of ACL entries in a configuration file.</t>
        <t>The same issue is encountered when ACLs have to be in place to mitigate DDoS
attacks that involve a set of sources (e.g., <xref target="RFC9132"/>). The situation is even worse when both a list of sources
and destination prefixes are involved in the filtering.</t>
        <t><xref target="example"/> shows an example of the required ACL configuration for filtering traffic from two prefixes.</t>
        <figure anchor="example">
          <name>Example Illustrating Sub-optimal Use of the ACL Model with a Prefix List (Message Body)</name>
          <artwork><![CDATA[
{
  "ietf-access-control-list:acls": {
    "acl": [
      {
        "name": "first-prefix",
        "type": "ipv6-acl-type",
        "aces": {
          "ace": [
            {
              "name": "my-test-ace",
              "matches": {
                "ipv6": {
                  "destination-ipv6-network":
                    "2001:db8:6401:1::/64",
                  "source-ipv6-network":
                    "2001:db8:1234::/96",
                  "protocol": 17,
                  "flow-label": 10000
                },
                "udp": {
                  "source-port": {
                    "operator": "lte",
                    "port": 80
                  },
                  "destination-port": {
                    "operator": "neq",
                    "port": 1010
                  }
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      },
      {
        "name": "second-prefix",
        "type": "ipv6-acl-type",
        "aces": {
          "ace": [
            {
              "name": "my-test-ace",
              "matches": {
                "ipv6": {
                  "destination-ipv6-network":
                    "2001:db8:6401:c::/64",
                  "source-ipv6-network":
                    "2001:db8:1234::/96",
                  "protocol": 17,
                  "flow-label": 10000
                },
                "udp": {
                  "source-port": {
                    "operator": "lte",
                    "port": 80
                  },
                  "destination-port": {
                    "operator": "neq",
                    "port": 1010
                  }
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      }
    ]
  }
}
]]></artwork>
        </figure>
        <t>Such a configuration is suboptimal for both:</t>
        <ul spacing="normal">
          <li>
            <t>Network controllers that need to manipulate large files. All or a
subset for this configuration will need to be passed to the
underlying network devices.</t>
          </li>
          <li>
            <t>Devices may receive such a configuration and thus will need to
maintain it locally.</t>
          </li>
        </ul>
      </section>
      <section anchor="manageability-impossibility-to-use-aliases-or-defined-sets">
        <name>Manageability: Impossibility to Use Aliases or Defined Sets</name>
        <t>The same approach as the one discussed for IP prefixes can be generalized by introducing the concept of "aliases" or "defined sets".</t>
        <t>The defined sets are reusable definitions across several ACLs. Each category is modeled in YANG as a list of parameters related to the class it represents. The following sets can be considered:</t>
        <ul spacing="normal">
          <li>
            <dl>
              <dt>Prefix sets:</dt>
              <dd>
                <t>Used to create lists of IPv4 or IPv6 prefixes.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Protocol sets:</dt>
              <dd>
                <t>Used to create a list of protocols.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>Port number sets:</dt>
              <dd>
                <t>Used to create lists of TCP or UDP port values
(or any other transport protocol that makes uses of port numbers).
The identity of the protocols is identified by the protocol set, if
present.  Otherwise, a set applies to any protocol.</t>
              </dd>
            </dl>
          </li>
          <li>
            <dl>
              <dt>ICMP sets:</dt>
              <dd>
                <t>Uses to create lists of ICMP-based filters. This applies only when the protocol is set to ICMP or ICMPv6.</t>
              </dd>
            </dl>
          </li>
        </ul>
        <t>Aliases may also be considered to manage resources that are identified by a combination of various parameters (e.g., prefix, protocol, port number, FQDN, or VLAN IDs).
Note that some aliases can be provided by decomposing them into separate sets.</t>
      </section>
      <section anchor="bind-acls-to-devices-not-only-interfaces">
        <name>Bind ACLs to Devices, Not Only Interfaces</name>
        <t>In the context of network management, an ACL may be enforced in many
   network locations.  As such, the ACL module should allow for binding an
   ACL to multiple devices, not only (abstract) interfaces.</t>
        <t>The ACL name must, thus, be unique at the scale of the network, but the same name may be used in many devices when enforcing node-specific ACLs.</t>
      </section>
      <section anchor="ps-frag">
        <name>Partial or Lack of IPv4/IPv6 Fragment Handling</name>
        <t><xref target="RFC8519"/> does not support fragment handling for IPv6 but
offers a partial support for IPv4  through the use of 'flags'.  Nevertheless,
the use of 'flags' is problematic since it does not allow a bitmask
to be defined.  For example, setting other bits not covered by the
'flags' filtering clause in a packet will allow that packet to get
through (because it won't match the ACE).</t>
        <t>Defining a new IPv4/IPv6 matching field called 'fragment' is thus required to efficiently handle fragment-related filtering rules.</t>
      </section>
      <section anchor="ps-flags">
        <name>Suboptimal TCP Flags Handling</name>
        <t><xref target="RFC8519"/> supports including flags in the TCP match fields, however
   that structure does not support matching operations as those
   supported in BGP Flow Spec.  Defining this field to be defined as a
   flag bitmask together with a set of operations is meant to
   efficiently handle TCP flags filtering rules.</t>
      </section>
      <section anchor="ps-rate">
        <name>Rate-Limit Action</name>
        <t><xref target="RFC8519"/> specifies that forwarding actions can be 'accept' (i.e., accept matching
   traffic), 'drop' (i.e., drop matching traffic without sending any
   ICMP error message), or 'reject' (i.e., drop matching traffic and send an ICMP error message to the source). However, there are situations where the matching traffic can be accepted, but with a rate-limit policy. This capability is not supported by <xref target="RFC8519"/>.</t>
      </section>
      <section anchor="ps-pf">
        <name>Payload-based Filtering</name>
        <t>Some transport protocols use existing protocols (e.g., TCP or UDP) as substrate. The match criteria for such protocols may rely upon the 'protocol' under 'l3', TCP/UDP match criteria, part of the TCP/UDP payload, or a combination thereof. <xref target="RFC8519"/> does not support matching based on the payload.</t>
        <t>Likewise, the current version of the ACL model does not support filtering of encapsulated traffic.</t>
      </section>
      <section anchor="reuse-the-acls-content-across-several-devices">
        <name>Reuse the ACLs Content Across Several Devices</name>
        <t>Having a global network view of the ACLs is highly valuable for service providers. An ACL could be defined and applied
based on the network topology hierarchy. So, an ACL can be
defined at the network level and, then, that same ACL can be used (or referenced to)
in several devices (including termination points) within the same network.</t>
        <t>This network/device ACLs differentiation introduces several new
requirements, e.g.:</t>
        <ul spacing="normal">
          <li>
            <t>An ACL name can be used at both network and device levels.</t>
          </li>
          <li>
            <t>An ACL content updated at the network level should imply
a transaction that updates the relevant content in all the nodes using this
ACL.</t>
          </li>
          <li>
            <t>ACLs defined at the device level have a local meaning for the specific node.</t>
          </li>
          <li>
            <t>A device can be associated with a router, a VRF, a
logical system, or a virtual node. ACLs can be applied in physical and
logical infrastructure.</t>
          </li>
        </ul>
      </section>
      <section anchor="match-mpls-headers">
        <name>Match MPLS Headers</name>
        <t>The ACLs could be used to create rules to match MPLS fields on a packet. <xref target="RFC8519"/> does not support such function.</t>
      </section>
    </section>
    <section anchor="sec-examples">
      <name>Examples</name>
      <t>This section provides a few examples to illustrate the use of the enhanced ACL module.</t>
      <t><xref target="example_4"/> shows an example of a request to install a filter to discard incoming TCP messages having all flags unset.</t>
      <section anchor="tcp-flags-handling-1">
        <name>TCP Flags Handling</name>
        <figure anchor="example_4">
          <name>Example of an ACL to Deny TCP Null Attack Messages (Request Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-access-control-list:acls":{
      "acl":[
         {
            "name":"tcp-flags-example",
            "aces":{
               "ace":[
                  {
                     "name":"null-attack",
                     "matches":{
                        "tcp":{
                           "acl-enh:flags-bitmask":{
                              "operator":"not any",
                              "bitmask":4095
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"drop"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="fragments-handling-1">
        <name>Fragments Handling</name>
        <t><xref target="example_2"/> shows the content of a POST request to allow the traffic destined to 198.51.100.0/24 and UDP port number 53, but to drop all fragmented
packets.  The following ACEs are defined (in this order):</t>
        <ul spacing="normal">
          <li>
            <t>"drop-all-fragments" ACE: discards all fragments.</t>
          </li>
          <li>
            <t>"allow-dns-packets" ACE: accepts DNS packets destined to 198.51.100.0/24.</t>
          </li>
        </ul>
        <figure anchor="example_2">
          <name>Example Illustrating Candidate Filtering of IPv4 Fragmented Packets (Message Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-access-control-list:acls":{
      "acl":[
         {
            "name":"dns-fragments",
            "type":"ipv4-acl-type",
            "aces":{
               "ace":[
                  {
                     "name":"drop-all-fragments",
                     "matches":{
                        "ipv4":{
                           "acl-enh:ipv4-fragment":{
                              "operator":"match",
                              "type":"isf"
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"drop"
                     }
                  },
                  {
                     "name":"allow-dns-packets",
                     "matches":{
                        "ipv4":{
                           "destination-ipv4-network":"198.51.100.0/24"
                        },
                        "udp":{
                           "destination-port":{
                              "operator":"eq",
                              "port":53
                           }
                        },
                        "actions":{
                           "forwarding":"accept"
                        }
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
        <t><xref target="example_3"/> shows an example of the body of a POST request to allow the traffic destined to 2001:db8::/32 and UDP port number 53, but to drop all fragmented packets. The following ACEs are defined (in this order):</t>
        <ul spacing="normal">
          <li>
            <t>"drop-all-fragments" ACE: discards all fragments (including atomic fragments). That is, IPv6 packets that include a Fragment header (44) are dropped.</t>
          </li>
          <li>
            <t>"allow-dns-packets" ACE: accepts DNS packets destined to 2001:db8::/32.</t>
          </li>
        </ul>
        <figure anchor="example_3">
          <name>An Example Illustrating Filtering of IPv6 Fragmented Packets (Message Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-access-control-list:acls":{
      "acl":[
         {
            "name":"dns-fragments",
            "type":"ipv6-acl-type",
            "aces":{
               "ace":[
                  {
                     "name":"drop-all-fragments",
                     "matches":{
                        "ipv6":{
                           "acl-enh:ipv6-fragment":{
                              "operator":"match",
                              "type":"isf"
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"drop"
                     }
                  },
                  {
                     "name":"allow-dns-packets",
                     "matches":{
                        "ipv6":{
                           "destination-ipv6-network":"2001:db8::/32"
                        },
                        "udp":{
                           "destination-port":{
                              "operator":"eq",
                              "port":53
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"accept"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="vlan-filtering-1">
        <name>VLAN Filtering</name>
        <t><xref target="example_7"/> shows an ACL example to illustrate how to apply a VLAN range filter.</t>
        <figure anchor="example_7">
          <name>Example of VLAN Filter (Message Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-acces-control-list:acls":{
      "acl":[
         {
            "name":"VLAN_FILTER",
            "aces":{
               "ace":[
                  {
                     "name":"1",
                     "matches":{
                        "ietf-acl-enh:vlan-filter":{
                           "lower-vlan":10,
                           "upper-vlan":20
                        }
                     },
                     "actions":{
                        "forwarding":"ietf-acces-control-list:accept"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="isid-filtering">
        <name>ISID Filtering</name>
        <t><xref target="example_6"/> shows an ACL example to illustrate the ISID range filtering.</t>
        <figure anchor="example_6">
          <name>Example ISID Filter (Message Body)</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-acces-control-list:acls":{
      "acl":[
         {
            "name":"test",
            "aces":{
               "ace":[
                  {
                     "name":"1",
                     "matches":{
                        "ietf-acl-enh:isid-filter":{
                           "lower-isid":100,
                           "upper-isid":200
                        }
                     },
                     "actions":{
                        "forwarding":"ietf-acces-control-list:accept"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="rate-limit">
        <name>Rate-Limit</name>
        <t><xref target="example_5"/> shows an ACL example to rate-limit incoming SYNs during a SYN flood attack.</t>
        <figure anchor="example_5">
          <name>An Example of Rate-Limit Incoming TCP SYNs (Message Body).</name>
          <sourcecode type="json"><![CDATA[
{
   "ietf-access-control-list:acls":{
      "acl":[
         {
            "name":"tcp-flags-example-with-rate-limit",
            "aces":{
               "ace":[
                  {
                     "name":"rate-limit-syn",
                     "matches":{
                        "tcp":{
                           "acl-enh:flags-bitmask":{
                              "operator":"match",
                              "bitmask":2
                           }
                        }
                     },
                     "actions":{
                        "forwarding":"accept",
                        "acl-enh:rate-limit":"20.00"
                     }
                  }
               ]
            }
         }
      ]
   }
}
]]></sourcecode>
        </figure>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>Many thanks to Jon Shallow and Miguel Cros for the review and comments to the document, including prior to publishing the document.</t>
      <t>Thanks to Qiufang Ma, Victor Lopez, Joe Clarke, and Mahesh Jethanandani for the comments and suggestions.</t>
      <t>The IANA-maintained modules were generated using an XSLT stylesheet from the 'iana-yang' project (https://github.com/llhotka/iana-yang).</t>
      <t>This work is partially supported by the European Commission under   Horizon 2020 Secured autonomic traffic management for a Tera of SDN
 flows (Teraflow) project (grant agreement number 101015857).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3PbRrLod1Ttf5jDVB1JOST1pi0mjiNLcqxzJVkryclu
5aZSIAiSOAYBBg/Jiq/Ob7m/5f6y24+ZweBFgqLsJHus2qwlANPT3dOv6emZ
6XQ6VuIlvtsXJx8SN4i9MIhFEopk4opDx3HjWByFQRKFvjjz4iQW64dHZ/GG
+OfhxQ/iPBy6vmUPBpF7CwCCiR047lDgF9YwdAJ7CnCHkT1KOp6bjDqBm0zD
Ycd2/I6re+ts9SzLihM7GP5q+2EATZIodS1vFtFvcbKztXWwtWPZkWv3Revt
zI3shPCEJuLcDuyxO3WDpGXdjfuC+7De3/XFaZC4EfzdOUYULMdO+iJOhlac
DqZejJ0n9zPo7vTk5rVlOeHQCwBACog+t2ZeX/ychE5bxGGURO4oht/up/jL
L5Zlp8kkjPqW6FgCfkap7zOxb2PHjsQPYfC77bu/i6Erjr0wpo/CaGwH3u+E
el/cuL47CgPPsemlO7U9vy9CbN4dy+ZDdwiNv0/0p10nnJb7vLannhuJV3Y0
Tj2/cV8xNesOuNnYi2x/GHZhXBZ2eB5O4N+heBWmjj20vaiiz7eRHYxds78p
t+oOVKvvQ/qmuo+/e4H4Ka0A/Ca171zPBDzwfL97l34/oTcEzvKCURhNocmt
28dvTw8vDjsos53Lw6vD85Obk6tremH8SD1okWhf2hHgAfITt4qfAcNckKRJ
kszi/ubm3d1d1wMh7AKemzaI1ThAaYw374G6zkzDsTQep0fnl7d7dd3jW3ED
giku0ulgFQQ8ZzozECj+3f0wSaZ+Aa3ePLRueyJ5KsRue0XUck9KyM1DDRHT
5ku8ce0h6AOycAUUiwjWo3dyctJ5vrXT2bYntRjCN+IaTZwdDQWIpjgLHdsn
AwYAo3AW+h68Fmjj0ITdhdH7WHQ64kcvSlL48lXkDcegc9zuED+7UJ8dAspD
RFs864vLKLz1hmQPnPcDMKeyaYkVQzsB1A7TMVhYASb2+QJWxRL9uOu5rksM
U482gfxfgfwOgukSZ/KwtL3M/XQKfwvBuo/csqwOUG8P4iSyncSyrl4fief7
2wdgUkde4ILtZxcEVNhgWsAPEVurXJbFLqsrbiZeLMAvpcSroRc7aRwTqNhN
RDgSruECJ3YiRt4HMbWDe3hnoUP0vSmMEvse+Jx85NGZ7N6OhRd4iWf7/r3E
cghPhMK8a1k30ED3b/txqKkhGQdzFiQ2tQOQqQ/PkSYyCKh37PBI2jWmYkLS
HneZYVNvOPRdy/oKnV8EQBzE1rI+fvw3wAPReHjQnc7z70CNbaWxG3XCCOAD
SpJHI88HBQBPKSLEELnqSg6wxCDvXPCmwcgbp+ypFbOytgN3Yt96QBy8sQGh
W89xu+JNeOfeulGbIDBMGH+gIY3cNqJksNWkCFxzOhoBF8QoCqfZeBrjxaNv
ZaPvxk7kDVzCNs4PLXI5nrmON/KI58I1IhtLYyTWP36MXafDY/XwsKF4AV5H
kx2nziTXPqNIoDRKISSShi6Mvs/EzeKHBxjTnyZugCJoj5FrODRt4SXYEtzc
FLpAAZH2QoQUGYURBXDjKExnFrhA7N+nAAkFVMwit6PYCGySAwjDFYMJGjLe
IIYSgCAAbmyBVId3LI8gDKmD6OCQBuQKkFISh7ZwiXOkBNCbjyIhIKoBoVRm
rStOR22C5H6wpzPfVSQFrgshDyIP6A1hGBl7eww6ATZqe2vLOr0U9nAYuaS3
6wACyAEtdeONNg47YOW7hIm4g6iAxAIkSwBbJoAlKHUgHLCdCXwIMcLQA1OJ
1rWgCSfwDw496MIJ6AKhagMmWe9G3zDspwEIFnIkDoEWJAnZLaXpLkz9IYxN
AhL2u0tMg3Gi8ARkAjlHZCJGPmngbSymqZ94M0lKrD+QJqRGnIriiCwlIzN1
bZB4ZKvteOhnEkZjqkNnNHAlKUK64gTMC5nGQGouNjT4gGyAAFnKAVAAn0Gn
bZHiYAiyIAFFi0zc0HVArHzWOzkWmYFAci3S4RJ+9IQF9o0L1CuhmYXgtQfA
KqAvcqfhrbsJuFmIMI2hnMtg7yAT4IbSBCUYNUCRsw5+HT7fIH4iCsDn0wBJ
9BC5Ngt6qBCtMJtkNTfIcJi6ZQF+YzdAjsDQw7OQ/YoU9zCRlq8jrY2DNg7Y
nzNuXcETqiJwYM892FH9DODKIQQGTIE6dJ0YAIPLQc8ifLCtPoGBQCcEHU1Y
2RgHaSGFPZtFIQp7Jiw8VpGbxvYAH90L24mA7VpMtewoQ9MVr0311gZMCg8r
DlMhLbaEYBGS0OA99Apscu0Y5zaApXKOYnAvRcFJI8SF7BT6v4uSGdRtqCcY
Ot23Kz08DDwQ5itWkJaHaCvaltsdd9vAnOC+w6ILFNkw9LNE/q0BGOxECYMX
IXiUGQdiQ0QYJl4/Xl4IMPVJOIVJF9rc2JUqgSAM108xIUx4ZimjBc01re4H
oA1U2bWnRHFImgxooIQQoBR9iY9BIhtgObhikDKuoBTjMflzgEuUWkkY+jE7
KhC/4+PwGsKIxBuzZn78+BJE8WB7dwciB2DBqx8uxWvwBeIaZFa+fX6wv//w
oIKMg/0eSi2QCKwO0XPH6QyNBEoA2qKYWR17gOLUnikVLUQW6JNu3XtyjdYU
NA5sQZzHX/puJgBk99b2UxttQV6opEQgNRSxzsBWJ1W2lE1n2ZBiMAP2WhsT
KWlWlnsQxxCHwuAChw8jsNWJK23yxfnx4UZF3LK7t0MO/jCLPUlZqA9wXSlp
L9tpGFNlAKvQxWHVwkY9IPYKHvXyKQNPih8gnIKpk8JSAbGHKAOabZGLQQvM
VdgzWoTry9POcdfMDkUj5/ne1rOBF0spAnEHStgOhdKeKg+mOkItvIXgiUaf
4KpGGB1+/AiTN/MBkvPxI078OjSxA6qM911xxbSJeELOG+SYjRDZL+CYuHMH
sYcYtfDPX3lG/yvOSH59d3XWapvPe+Zz7Fm+u/zReMPuC13WLZNGBCcCwuE4
c5CxWzdgMMhffSVOwGOFEURfgkzD+k2IHoLdImkMTkb4ow1lPpiq7EWf/QDI
EMeCxHUDyizCuB2ezdKB7zk0liRi5uQKNAbxA2/m2447CX2ckaJ6KsOLsZ4G
TB9J4wliKb2l/Bw+RgQhfCItMHtlTAMkI06nUzuCdhjz+DpeSGEC6SVpks3p
UFQ40ASk17c3xKUPpshFv+ezZxmFGOuSHWLMyKX1Lesf8ANz8u/oK04WAJrI
ORkFo9IkiBLItLWztbPT2d7q7OxlbRyay+PMW2FokMOPDC4Cfjsban6l5Tyv
6izDznTGcq7/vO3VyDlYcUaT7EokzWzgYUwFo4EGO4cUuASgsKvYxFIgZRF4
BtpM/kUHbTR+1ATQ39XsTWdEdYnBoFjYM7IX5v9fiyp1Iv4hG/D3RnpS0hKG
KPnYLXbVe/KuelVdmQr/mI7q01xslFSXMPu/cSMIAUM/HN+z9X/v3sNMJBqC
xTp/d32DFgr/FRdv6ferk7+/O706Ocbfr98cnp3pXyz5xfWbt+/OjrPfspZH
b8/PTy6OuTE8FblHVuv88J/K8L29vDl9e3EI5g6ENyfrHJyQPfBwqgFhGgY/
NkzZ5UydBP7V0eX/+7/be9KL7mxTPkO61O1ne/DHHcyYubcwAIXmP4F99xZK
qx0hFLQQjj2D4BZnKjbZ+Tv0aBFy7+ufkTO/9MW3A2e2vfedfIAE5x4qnuUe
Es/KT0qNmYkVjyq60dzMPS9wOo/v4T9zfyu+Gw+/femDuIrO9vOX31ksI0km
NGQjJOdRUSnXpqyQV5GIeXawv4WhBlkriPGwkTLC99MBBWgBG/LIhXjBs8cR
BLF5WJYMJ3f3CJY5CVN+CnGckwfKyxRPI4zwKbM8CAdsznE2oepb/SuXkkik
jjjZ8V3Jg5myz5hPBc7o+bleZ4DXOsuyzlOHbJbcziYebXO63BZmlLVBmvv2
FqeLvrjW83roFrlqLq/hyltKeT5QdeSn/hpTfRAk0hobcho0AoWbp3C4vML8
nxNOFqNf4NJ///d/W/x3X1CoRit4wQSM2390OtGdGo8OTXqF+D/qOTidvQ4T
brzTr7M3X4ufMUvwi/5AqG/wsZEhhrAYMyWlz4xxejnnM+7xawUNkE76BpIF
3Ht/Bdx7FbijjFUiLZ8vRrkWCYAArb1hrq1+7Q2LKf38TxmsbrqOoDdeFt7x
6z697NB6YSeMOmqKv1H+OodpuUVlA27TScXMdt67SWfkuf4w7s+DoIYkTEIn
9KsFJHvXTETqB54h4dCnAebzTTHFYG+vgwakCovC6waI1GFBE0Foj/9WDD5w
T/bFE0PJxBKqvSKqouZ1HlWxCFUxH1VRgWqvhCo3h/kHhKy8am8+MjCaj47Z
E7XE4NZOx+SUNsF49uG/WP0i/3XVA5f+lYl3XjNTGmLf+6E9JCVRfAXVYEs0
sxMsd9hQ70Tebqj34iNB7oRBR4J7eGk0MVSBXprdEymFzukZZXjLHWfvlNHi
J4CPCRam3QqqkFDxUYfnfxvGIiE3MF4axODTh5fGx5oS+p6/yxZwO7xA9ehx
od/9HXN4bn076HASy8DLePpgsg4ajBAZkveXGmVDhvR36wSDQoSXeSb318k8
mazXrSDQAdHGpvg4hah6u1f1XQph8ZzvqBfT3pa0Tb1kIvIm1DCapXbYpfZm
ZsfSHMTesMxO4+mDKTPIJnpnsMkQKINNoopN2LSAReE7ZlPtdxVsKohtYzYV
2mGXFWxaRWx3c/3QMwyC9C+mVFN0BJJKvRlyCYqlnmb2UzWKwzRy3I4Z/mGu
W4t5IS4sWASIhxIvoKC6EsT81gEm86Rhh7cvReHH9Muy6dPzsqd/KfCytwIv
e3W87DXmZQnE/NYmr0qMrOalaqoTxXIs8qa5kHpFf91Xf+aa0bsVh2ivPESJ
M1P/mgM08u1x3Bl4ydSO3+cHCL7s0Ovy0OArFVlrLqkHc8aj2K7Q5IlJTocz
9W+/TAM8fRQNxXaflgYM2/QvOc3i0FMiUQh6C+jL2M/8tlf8dkm8bcqVZ8Ea
xn0wRXZCXQsQ3XfkRwYmuI7RocqTCuUauo43tf3eHk2/P/bFV+a8nkvLXrRy
WYF8KqD1YCYDxtEslwvQGQ5aP4WYw8iPG+mVmiyBTAoI3TrTD80EiOzCoVuI
7NwPM99zvES7SFawgneUP0W3KL9VMDqqT3SP3hDY7CX3aqxVh4MUggUvKISR
Qup4nu/auWqqCmY5o83EN4cmvjRDOg1BGjINel5YmvWTRDaWsHQc347jlwae
z/Unvj1wfVDC2FMZhAp24IccwvDnFBDht5Eyv4QPvcwgU2y0TAP6dOCHznuK
+wkZI6QlihKfo3eT94oizR05/TAYPhoZpqmKPP6i4wbDlxJib69yvCpGjD2g
gj4A6xbdm+jQxCVDZl7oWsjTyDRNlqSRH+ncAswqmc/46BfD6YjssQZEzWSt
jfEljyy+fFn3JWOWJRKKUjT6bWiQRCC4boQGMpOhyMu+4s/gkcmqqixAv1I1
JAy9ZLWnAoHsD93OAVNSVtYM/Qh8UiccqWCjchCrJv3NMOuZmPWeHrNaZ9E3
dHEsH+ZFZKwnkEWdMD7xhoxhQRWdMMW1FhNu4U0d7MJnao4v4RcdFvieSn/1
g3I96Kq++kqobPw1JodoKUH64XLpZOD4KcQhInYpX64WnGX6nivHMh+n6n90
ip5cnQNT3oErSxzJ28ED7Adrx+671glWA2F5hhdj3u231MWaGuIECA8X9nD2
B5ebJDSsvIF3ej00gj5vsf6OgVIqP1uGIMQMlwt+9Wtc6NszaqT6Vl+cGkvq
NhezUTmT/hDrtw5lwSSVPg64qNPj4l1PLSFmBYwc+Ale51HxHBY80ZouLt8E
usKZcN/gslO1zknsutfr2AoLSUCvKQG9PyMBl2hzcWzqUTeWcVSFRCrreG+O
LjffHV+qEkQe89z3UlaMClTzNZaykmtQ/cS8oAmNdCUToynt+SJU1WecNOsK
Emz9VCGTCbbrUbksyzeXNsg1re1nG1QHx2IvHwKtGzzuuJQ1Hxe5EM+rdlvP
DmRVmVw058d7e3u78JhMblvW5NEgTUvaR9tRiKw2ldiGARW+UW0p2GViG2th
rItI2RATwoec6UV0DwN28uaKJHUBdnkghQsh3NqRF6axyGI2Y71Pr/FJ3pZX
+348O7zY6JKFo9p3RkCNga7lDGTRUcRVMl4gNcOJsMDWs7ncp7IiQFpOuZon
AZNoZoaRygXJBkbub6kXubrEWFdb11Z7yRpW25u2qcTurqYkiUvIqqDImrL8
MnJu5ZbJAz0Sr3FKId4AQ3z0LHOdwnpx6XMj8xOMqe/aI7GWm+WvsfJiblxM
sBuX+qVvpDwe7Bzs0nr0ke9l3kMWNYpBmExKMHEA+dlaxlqOOIQqJiDXwoU0
8o2cb8WoWzgwILTMiddyEvHknJBwK5igXsUL6NYQnpjkS54AdAY2iu5rVRtq
WdfhFIsI7CAmNJSq8Tq/+8GLqc40eyy1EwcVBBJtFVV8pAOusJSbNnLaRaJL
BbEZGKy2jjAASGfSr6ypl2sQHaBYr/m7a21t/fMg22gwtAlS38hZTpttqmlp
0AC74Qh9Ig7XyLV5E4wML1rFRZxWu6RPWcmnLJQzbEFh/wX+8fd3p0eq2ndr
a4vtMpWKpUHg+jmm8hCdE4WA7Pnl2XXe+lQVFhRMEdX+qx0OZJrMzR4EUsoI
7RHihDmPFr2UtqRUCrK7RaXKXPqGD/b3evhAO6N8IYiaBlgdccNzbXGEc+2+
2MUkQSzWTv5xuQZDz7sYANG13HcgmgCg24L2Zzj7FT+iNwJ/Ina20B5wByrg
jHhPQlYLSL5LiQXRRVC6iM7NGbkl1xtPkiIoL9aMdAN2dVQi2UnCjo9F/wS4
u7SZkPt8dKjBpZ5qN5fpOXi8WD21TmR8pY15ASAWU0zbyiUyWvgkn7doKUVN
wlkbjUsSTjfws1LWghsXUxMGyCz/QA91wqFFUose2LQnr1xye3ILiVxwwgoc
ljgjLTaQezCxThWDRwZFxZR2YtFWgjBNSBYBEm5uSxMWXm6pNmJ4cc4Y0M4A
3kxiSXfMth7E28OKW/ndCX7IG1fkLi1Ve7WzhftErMOlkRZlpC2NNH2oZzUz
lBi2G3d2NMRfyQjTJgUyYLiXjd6wUFhSJFQRPm5xde5l4BJgIT4E79duhPsT
xKmK6yDSPO1cnx5vmEOk97QO1J5WogrHbf3y1asNcWfj9gxv7AW53ZfwVO6f
tebtn/340dzD+/BgqX2txo5EL9sKpYq/PmD/yCQIUgELa5jOqGpWKvj54ZHw
7XveHEcBqdz9weu+vMvQxTAy4b0uOGW0eCoiyWV5aWMcCkpuz2LcEkKZjIRm
L2Jnj+yCp9gZMzstr8RO6QIkaHBnYaS8KG5+cnArUXLnugHv3lSoqsFTcbRG
Tb6QBuaUshcwMDDPlTslTILlzhkwlripCPHHrAH8jrM3C+WPHzIVbONNkIA4
BPAznA0OZGA5tWeUOVF9WCfoMQMML6R1lgWDtJ9pFuH2HEGs6OLMxIutKY4x
2Lf7vIEjv+mObBhkxU5hsNPLCXW3xnzAgJn4X1fAwUBMenW1vfjkx4vLDkiS
yG2eZY05lHWQtFmR1xGwPJI252LHKirLlhRIO2LXpc2knYh2NmyokJ0zPjqa
yFq1jDACgg8fdzQmeoev7CU2YMTMPpW7yiIwIB2c6FkIWKxlyas13iV3h2ER
hTyUQIJP8rmoNbmZtlACLSOJumlDhh/V/vq8x57RpOLKXPZJHWGCED9+ZdQ8
ys0MTLI3ZYg8Z6G0Dlvd3sHBNhfdmwWoWdjxfOdgj2YNmA379ujt8Yl4dfLD
6cX1dyglrmiZlZTfZ7sFunhuREvWW+bKLcXHv1lC0LESii/b3e1v8CE6O9Bk
kLFWGgV9bNWnGWrc/zD1+0Hcx2Z9E1qLGsosjXwGj/Ah08x9Y4qXs5/cvW6C
L77hJ7qM/28yOdjCTRHIoL444n3KxGzcJCXPZaCWD8XO2Ep0pDekRepCr4Do
3E5xHPpGb+f6aAC1PZC3b6pGxk/VPvg26C6ryl53uwbpXClHAd3cuz8K8Z0a
xKXhVaMrcpirZZ75SIOM1w2x3mZyJe07Ot0KTIrp/yIipQ/mYoR7dJY8y6iC
o9npRvMQ7i1CuPcnQjhXa1GNcu6TPwZp/Mc874dbtfCEJnFxcnP+9lj8BLqA
4kSLB9yQpnZOIj/+6Qfxkzvow6/q6BKci+A5Iu/diLYa0uEld+NN3nG4KVGD
dogwNMRzhZKwz6+/Vy0YO/g55NNM4LfSSUglKiWoeYcflaDmD3SqA9n0/KYS
+Oozquq6aXAkFQ+CUcUuB0J5UZr8q9k3n9qiZzFsJsx0QdzVjD4KZ/cRzn7F
urMB8+mdXTqrCybqeGaNjknBFyIgIzdsK3L44Bl9WgtOlDGq8QWBpbASYjMY
GN3nFVCIy1iDlLe/QSeYWMJN5LzegE94BY9D3TbvWwzV2KtDBoBw3NIvVyU8
2tgPARZOtWZpFKd8JgNHDHE6+C9XCXB2ZIED6qW2vJjrFhySXbm3Hk6+X10f
g+DStxIAZtkAN8AK0M78gKN3kmkmrsXizB1DlERTLNJlzQc51wBs6PtjGWSp
D9ZRu0C56Ig2180US+Ldwb0xGxljSRpy8ZwXm/uKzGmxsjHfACmKKLVL1Uti
1x+R2NB+Fp/wx+MZ8BCDlgxhIpfJEcY2TOmaS4KKBoZP7tHNuq0/zv6pWUEx
xTcP/3MjGYNSK1S1N+7k5aAYhHx+N7n65SW6ojyBXq+iQmIK3JboOlfru0TX
pzCfW7FrXvRZolNesVkAFWtjlgBqJDQLkNXCu6puoQWvOYBf4WZb3QiVREkP
A6B5TE0XlK3YUdARObPXb+o7xZmaBA9TeJwtyU3bA3fsBeZeQAoPz7zgPXem
lUKuyc3Ba/eT4nV62QCFvSdAgR2PsEeJGxV6NpP0mjEA3nP0mmYeb70GIlPh
2UqHbi5XPGqoKhiWpyTLDXTeUuOpsZL9Fk6JIYcQuTP0ybzaVB4oDQKXcyjF
bHaMy/m0zjOTZ7RFJSAZY3HvdbYEUyIA380VCVV8uFAbT01tlKs/vK65wMvg
umMfVyWCWJ5Xqj2LXvlfB2DGZG/XmKXmsIXgNzfMCvs5Y3zovA/CO98dcims
WhXFVZHPiHh8HyyL+PV94EwiCE9/x4zobykdbSBrKz4j5iNvacwvQk7MkmTr
EiJQh0wMPwfmaTReFvN30RiFhI7WwVMJ/hhhmcWTZRFHS3aZQrtRGjB0whsj
CG/q+bY+9+Xd1Q/8iuYdru9nUyZ5uI3r3XIydhaFFAfySrdakrHpwb08c4q+
HmoQxvrCgM4ylMdlTT8j96Is29aUe1cuuoA/aLSBh8vie3J00TlxJuEfhbJz
Fy2LMvQ1xvo2APuTFwzDO5yipjhZVvh/PvSp5JuWi40wlAiR2yOoXGOeT+EC
y2wB2cVcvVro1xbPiIdrAzJz8Xi5iJjWVVG/qBuCJBSkOmcfznLk5rufZ16g
oYyDuCMIl5z3Nb3wqvfjOnrFbRv3pSqH505T5vAOe8HFHbW8UtcLBK8d6CtP
lOp7nqTI5RtsaxQ74Bli0VDXdUKsmPpJXe9mFfMKZKpFqvmkmrXQOWpNLOYQ
nAsTVZcETFaX0glKQz1p1K5DM0NW0BhYGnhi70N3lJV1SBSJN1To8lFBxCVl
PJzyY9aFVrStb7KHFVQwJSPMQLVx6HDuIgJ3rMsnswLWlob0YHbMRFR1vd2g
azmv9lTJEy2zwp93XqyKvLLDALMyAROGWFun8OvfuYRmQ7x4wb+t1aGM044q
hHcaIHwIbQvoTlVZlVGdTAME8aTat9TNYXyaCJfOPpRn5K3hBQprWDNdAQJ/
z7XmEiSESqEJFbzL+jHgQxtEvOt223NZ9G8vxFYFex7mxOj6fOUJeDTAOTt/
TVffFkldA2pknSHxaI1pmmIyGOV1wMhD3AY2wQ7cMI39+7y2Ki3I7cpaoArD
0aM14TgM1hLdGUGTVbF7+RE8Rxok/sCMLTq3Css8+NCqWG5OoHJazpPVCaMX
V6PbRHtOqShBYlvXwagafhNhf+1hiLmoA7+6g90GHZzZc+HPkcdjb0TBkzFa
7B2LlYnV8lSxJT0nVVhuazzDFEgyEa1Nue7eNw9Q0g+Lpye1DFr/w2icfaIf
UfHbN4up1ofp69iRdDEo7kGppbq4efxJqO79gVT3FlJtbnFenVx9VFMtnfKD
p6KStyTUU1fY0v8EFJqHJNWPZvbR01Fq7I+pkeDyTvEnkODCkUx1NBe+e0Ix
5k02RMF80nufgvReQ9J7n4r03gLS9TFESxEsV37yfz8d5gQuj295c/28WYxx
MVYYZJtYtBt0JiEWIWJZW0ZjpSdtHfGnEDlidMY92xFvWMMK16HhWx2b9l3w
lnzTc9MWk+J0g3+I3+rVN+YbVXrJGxxahXeVXh/wfcMxpD45VKfZ8xwwxkYh
yDVmpRMFKtA1tsDm31anckq9zcMfq/wVB9VOuRwJWbU2TQbzzdUO1mo6H3ID
JY9DKI2TDLYr6Obd7Q0H4oYnGgRK5Xc4HwFE7XFwjSnO+8QV2zsUy2/vmssy
smNJu1oZo4Uix7fxEHwufijBKkBwwohLhoeyhkGBpImLXLri/RR0InSYFADI
/VJ6m6i+gyMvk6WcG/NhucRboWv9U8rHVQ/tQ5XJKJxc0dxw5ONfTW6NNldr
cp0WV1ubSu3NodEtWFZCxpy6SURy07oFvf5ENzyZvSASfhi+xzlavkdibqOT
Oxihci1Udp+cXgYsXZFE6UiebPDdSiqFw+SaG2hyjovOG8g4wfUQra1u91kD
h0RV1qVNSKqInjsDKd0gfcskFUuf3Ahm7LhGGMi1DXHyj0v6Lu/GCP3qhG29
Za3PfpaJ0fmM1qWCb+ZBy8iU9hTl8Kk44aSct8v65JyTkUuW7AxKqWzNvRs6
fd0eu7oQik2R9q/UlLDMcjWMKANXZyln2WXO9Ro9AFATnWHo8pUz0rDlVtNp
CxmdAYSHDee2t6GJvrk5y8xe2eKRtcNtd31jBxted+e8FycSsh4DbJAJRXEX
159yHAjL5cZB/PkHoqCZ2aa53BjwiR61bG9d5WdcTCjBwnk0zhGwEoTZJPHM
X5DVrZYMvWmvbOnmycCNuQWSeMCrrzrJCSKyYLmvEf9qnG6DSr28s1UN8oix
r+UYJe/gaoLQmsodI1So9oGnUs7ZeucrxWRKms7iUPogzMwxNSnYW4qu8JY5
5jrIBBbPjsKo0C5P70OJbDzFqUA6H+ikKUsDjP9aGP3FiwKMPJnZlXXUuM0V
TBwzyfVHVSsXGmg7Ia7uU15W3t+m1odkwmgOTZ8vbFqIi/wgjwnXMy/oj2N7
KnxW1aU1ydEa7VhYanltXrpozofNuRpVeZZFIzdFqcsP895XFtU8/IdiN5V8
yh/mtUjqMAejzsCQ4Ob2Td3qc8GyrvHujlZ2GNgiubjkfYC4u0AIukBS7obT
p4l55oKXrLej+/SM6jt9m6Jxgokx9zHcN31gGKOMU8YZZMbgGBsvo9RtMGpn
5H8NPPSZPRmlFWsJRqS3NIq4HLPWFd+9EN3uZkbmWn5+7EZRGHXk3WTmC6kt
RucS8alc5xnT4Qd8I2W+IUqM+xseDaC2AWRMLo1CLsFQx753FEYuyb4KfZBT
1rLqPV+kCGpjBttfviY2AyipMnDOlYX2aMIkj+/YfkZ/vTu+rNdcPMmuSm+N
4+wWIPz678cXajvJvbLyjHZ9t2nkVfUKjxf09u7qtFFnRXNaddDePOt6FPq+
TChkBzHJ0mHZ2jgWTSOoKi/QIaYzvT5dWIWsm5HPPd1vAWNw93E2v5SbQoW6
CtCQ2YokDIVyzw4gkjtF/4gbw1Xy5ZwB6CRMpZt0clnS5qJOJ2Clg1zS4pMg
mD9W8DH+/F0wCPHgGgrPfTcYJ5O2Skwk5ANu0dfrTQrmPEVk19bw4Xe4seqp
6F0s9b2VpL73GaW+4uTITy31eHxaAy6LdWZG1c4kwWUKCoRu8qPcvtWDxrVN
ZRTn5Mt8nkq5Gkran58Jf0IFpvMecgfPgQSuKZ69Cof3awYAT622/bWHozRL
qTuLtbmVyTWn0rx8UR4300eWGme7LlyY0224SlHeYu0XCjELUfq4k7dRi1a0
VEUvLWwWizUNOa7FU8a/PMsdGejJWkY5gc4tWT2UkPaGJlo0827JM5E6OFXH
W5lwL+g6xeiMZVu0cgLwH6K1llEii1HXNlp5gusXtC7sqc6MIxl0dIcqxSSU
mJWgJxn4ugi9nFFbxMHA6D5fhloZshcFK3+oyiOFq6r8NTdWVWW2SwpZRY3s
I+Qsj2lTWePwvap8d7HYmXjPEz0T+rLSl60XMXVhRIeQqiOH5M2qhGe+sFOs
meitkZDmEHkaOT3TJ+LGfD6Two424JmVzHE+o6ZQ1w4qOzLRo0NOyyLOFEpJ
V5c0tBbf0mCMjCxDUXdNtOaZ9cPhMKvIZcdsOFO9j7FQYVHIAtep27lcHzeO
0LOzc2MowWaWWWjlLN7nlYH0Rh21E7l8QGSDkcznSXENknYzsQKZFMtTOfNZ
RhpRPMxWflSTUpBMyiUDl2FRbv81/mQ6nF04VjJDuuRnKTao6z5xT16540q6
zJ3f5qjlbi1bMGT4bYmr81adGxB1qU5+00PLZ7EaG3EqdqEb9C0ao9zJnRJK
4ZhRWh0ysGJ2tL7J0FRqvpyWV2h39XVtj1V2PMuPcscYKtOhAzwRNIqr9EBX
HKNQM8zGl81XMGS5vDylVyFW1AfjbrmSKjQ27CdBovchykMLpS758haZnLuR
NGdrAiKWUbd20AyEr8ytEDCpQvq6OxP1uSl941RMWsORR0JEeoklZ6SoEKqQ
Y9eMM67Ny72sr4bK0sXfUro4u1BvrQhibsqYyLnRGV9CQeWLfd5OiseyZunh
ipmOLhug5oVapUI52pxM/ByGE5ackafZpzwHB0a7oseHEnuN2wabs/exaHLm
eyk0HwpiUl2/OKe0URJSfb9fCXe53uf+VhypeWS9NU7mHdAJl76XBSXEW7Cz
4d2iwahaT1s0FvPwIlWUSwy2H4LhoJORaEFVoQxI3k08NLBl8S2HE9VDU/C7
2vJWnCJTY3mNLx9reXNewMD4EWeXGq0bnWKKh5gagSEbTX35ZROjScg/udGk
yzFXMpoIYSWjSSg83mhi889rNAuDWerPMJpLsvdJjeZ8NP/6RpMUYgmjudxY
zMOLev7MRvPpI+vd8iWyc2PtN2xEA7TF8ug1m+rE+Hd9+YTeLqlO0agIuHM3
1GaDQlagFYQJ5mkQKSqkz+deag1L64SvwOHi+zDKCoXjSZj6Q0os8Yxq2BaD
NClVkOP1GM0nUbVeBknPruLI4NGUsFDjXbHIUHMRb3G5qrx7cdEi1dwNg9SF
ngdQVSThYTBI3uJUuTIy7/7fJ8e8HmcDjYaIF64eLuBa3Fm3PKLZbrY8pka/
BqYjvpiiYq3jUyh+duNxA8WPm2t+b77m9yo0f2kV6z2NivXmC2pxq+yTCao6
mLS5Sv1RmC6vUqbSfDZ90m8qVEjiVbyn2vAqRgVA0wuuM+9dHSq0qu/R4jte
Wt+IT6rie8UbsxspeLZ1DdVb7Tmu0uLc1VmfzH/nOvm8TrxqIyIZF72ts96s
mHeEF+Xf2Ie+tOzL8ag0JPhyoRX5rIgZHVdg96lE3rgxvUkwS6dJluTcHEzz
svQ/1WB+VsT+mMHMXR3fZDiz+pjyeGbXzRedZ/k8geUj6fzu/TzzjJfzQz0T
014dpr0nwLQ3D9NeA0yfZMRlccLcgT3KleWoqh7ehoX5uCt9C45ZY8HNyV7X
lgbpz7iyK4Ojec5lBMqT8R1a2OcLscboO+4sWcs5t7rknYEmBADekMv7qQMG
o+of5LFpVQ6MhmzoOt7U9nt7Zq8Q8FLrztAb4w6bnXJjc+sNrg7D2IM3N1aY
F7lH22SRKm9Q1zDLzGeFjOAvWdhgnj8xb9QveRsaniilroG2Ez7g3431nb18
OxkjoXGOE0AzPy0opB2Mc2oWzT/o6OvixQeFu5zllMcYbnUtsUwA2VHGKDs7
L99Wt6sZq4DZJpa89sv9JOZ5FfOk7cw4jkDxMTshJ3+2Ak+CC8vvdauOTauu
ss4E3tIuj0mjcbNjveWwlBkzbNVEH2omC0zwVICslkm1KJwMkdtguCI9xsXm
5leLD6Yo7kLS3cudSFoEGyJyZkqblq389dV5HeCfRSyrXZIpHOa0upL0KlTC
QPaLcvzllONQJDCzxdUZE2ieQBywJ9CW3qO1pTdXWx6tH/r0rxUVg++oY4Vw
clvKBpnDUG7Oy5dP6W2HT6EJOuQ3cP0MaqB6/XxKoLiWJ4N45uWK7ebRcJlt
yosfsfpTtfbDUX/14lQFfxcsTmUXVqoaaHOci2fql7iUlUSWODW/4+wAKq4h
0hvjctsYI7lXQR7xYxfBcFH/AnRL6kiL3FjkW7dWORf1QqCLYqX0s9Sxrpc0
lz2rcSi0fKhh+GKDYx7Gt6rR0Zeja8OTP5uqieGpzO8+1viYGd3Pa4A0K2qt
UGHolVFa3RfX7c/VVMF8reilK3ddzWdEw6PMfjTPEqo4gFH9bG4eTVznPR5S
fMd3w0cunhWBaYXDi8MO7tWVF57x/WDLRJ2FAxhXjTqznMsqol7AamVpzyWo
Pq+4F1NUc9xuQexXFnhaU7qf5auoJQfxeVPXe8qn78Q141yQVrLTVRuuFwV7
BaHsPa1Q9p5GKHv/OkLZ+5cUyt4CoewtI5QFuZT7Gual0G7CWcd3b31z0S6M
Sjsisj0YGRsqhKha3JUAVe/vKAnLalvp8uevmKlNSvPi20L28UFe4X1ycXz9
HV3pbX2F5zOmeCQl7meNvaE62AnvD3fNqy1jVQlfdWc55w0wVARdndq89w50
3+LNGXQde+yNA96Qi6VrdMkk/Hnr2eoieiz3s8d8A3vmdFNnYqHYX5zcHL29
eK0uLt/Z2354wOj56uTafPF8a2/r4aHLNaxYTwkjoprSBXgWYsP64WBBbXYD
Hb1u6ytZdfEhnsWlz/uSzSyjHcC7ZljXE9f3xfr19ZuNDM+dIjoa4wyfNzc3
l9cNu873fHN2bSnS9/Z6dFk79qUu3D7KHdBYuNuT7+devzg8OlcIP98lxs7M
nTZT1+brQXG7d+Q5iRw+eTVjlHhOipdMKT6bowLCGMW6okIdF+nSdbFyXmED
z+xb2/NpN2AVEC0N+t6LWG74pj3iTDJub8L/jANi6CSvIEQ6VGZLia55aas+
l/YOFAGR2HTwaBv6DRjk0m9ina6QkCdeUkFqW/osKVCyqHMDDx3DO7OM3qf2
PUq9I1WM0vgBnjp2S8XKt6kP9oh6oTt6p67WCTe49aIw4AS++AkQdE0uyOsS
XTDuchvVhiy3ziOgLvTFCmw5g5JbvdHhTuxbYhzdcQK/uqMRvMVJu0Ij61JR
R+f4ohqlgyRyXR4Qo0cpy16kSQUjs6ko9Xz4q29ZYs1cApEXY0jzuda3RF/2
5tMttHIenU1JKQbBNsriiuvswjMp0PvbBw8PbZhA8D3K3u+46Zn4KKVY8csM
KRw6vAsUFo8mi9KhFGK6D5lv+IABifA0oJgOGOAthlMvkUB06TuKlqzUkNd7
6CuU24J2KAf3VV9LOOb30orwqaUkUnxzEJ3uK47Da1wTgmk4wpXNcaEvCqd4
cQzGYbee4ypbRDsv50ABpboOM28DCjEkATWGuEqXnkrSTxNWqzSWV8DzVdP6
LBHERw2gVAJ0JWO8swf+TyoDsRivVVbHJlRqx+cW6XemKJqEMK+1uNOxhSSF
OJwokTQyvD9NnbbEsYBDuWcYSSqYMI7aphp4bA5N6GJyC50+zk5LDv+rrwQe
43TljvHycPVUyOM/ta+P8DZKRI+AkFfABvLK0VGI+GIyC2Dpu3paQdxCSMBZ
/jq6J5OkXtPl3P84P1Od37ek9u72nj9/eACuYrSiYyEA3RdpFPTxvu4+7SSN
+x+mfj+I+/d2MKbnHblvPWumKAv48A5gWp+3upxc/9DNPgM8+uJi8/AbKfhE
LowUnXFFx/ohprQXfGaDQlnLIFY8SupPil3vT4tdrhzx0+PHUfJX+p5ztHE0
YSuoyeN0JBdfewHpKepDsbe4lVMdGVtu7UCom9MjbIdAspO6W0K16mZKhPT1
RUlJNNlLKpeR5hrcE8nAY3rD6019YX6tZ6l9oa6ht0ysKjWkKWqVjavw+2cO
v+p2jTHtrYJp75GY9pbFtKw5S+Fabt4U23LLKnyVpuXdEpfQYzL1POuNNYNc
1lcq43VDqQvSN35tWfQH7V1Uao4BBJ1aKQt648RCvVGF+7fyGCYZ87RKYtHK
xTqDe4tufFPrOv+4PruB+fw9oDZx8WoG3JH48WPiwgwO+gRdlTsh0cZkfVkf
PxKBTIicwZVn1zzJqEG1kG62FqAug8ApMICu8YVOCgCNjy00jHp+ps8XZiNV
ZWkUQfhB5/Lw6vD85Obk6pooqxwTezjkSBJCNVcxybB21dAgKvgO5rl38giG
3B16Qw/ISvx7BM19NBhQ5so9A1KXGQ/cAgzKDqK0iQtei2uVUDVGks6utdVJ
63FzWG2akN2Jlgvz2VZWxmWpnaHLU1aC1bZQDcCzdLIqMQQXueGobRSYy4AW
GM4Q+hborYt3vcgVQspLackwPE6LCKcG8mQmNVemsr38rQ3EOzuWiSLeGAAg
ELc0Jhj0c6rqHV1ZNoh3RKpOOc8xgSnZwHXxekzMOuBBVyoGwMXoQRzCrJ5m
VCSPreyzFu5spvkcsY/7Vm3N7zhbw80VwPmN9VdIlJHlK7JT1hfrKpJKvmoL
KvlSaK9fr8cbZQB6gZ5wS7zE12OgjA62IwmDzmC+ogaFlqtjN7pVAxSrq2fU
Gcwq5JeCJzWgiTnFHDcfSqZlP4IpK1qllqUFlHG3cUEQLIhQXwg6hSmvGx7x
LlDVTZb7wYvpjHTdyCiObGqaqnS2oPZ99r2ScIIo+Q6/UwrBQxoLZraKPwTn
ZwT+KwP/FRv8+u7q7BdNqzrIzc4luZRbraNLtaKB0RcgtPSEbY5lsuxYhrAx
UPr27Bgl8OPHl9DlzrPnEJJa1sXJT8WHP8NviNAvhtfufWKv3VvBa2PjP9Zx
V2H/xXFXc6Wh3waJ47WsBb6719B3z4H3aP89Z9i/+O8v/vtP4b8rDetfyH9X
6G1B/Vf34b0aH977rD58joWa48fxqOOSH+eHRT+OPZzoTb1veFPvp3PruVzC
oxx7AU5TH6+cwlN5+HpC/mf7+EV8Wejm6wVyFWffBOqjXP5COfji9L84/T/c
6c8xu38Nt/8I2/AEcUCebWYkcPnjZ4wDmpC9cFbPv+/v7D5Tvz/b2tuvme3X
fWxED1an0xED23lPC9JGEp9WAch530jnjET+4OIqO/x+k9XuZmFGeXVAfPxK
+3Ze+eLit1cnP5xeXH9nWd++/DDVzvpFa7u71dJXV75opcmo87z18jvr2yyC
oPGDRkH8ojVJkll/c/Pu7q57t9sNo/Hm9sHBwSagvUm3JWOVRitr0J8kU7+2
1Qd8a36N0pP7Gh/Q96zUJPtmAwh6AOc5azjwQX+bW+RI/g4efcsVFmICBugF
7u/m/32I/WST5Bgaf+jCn61N+jxMk1maCIgsJuHwRQu6KXOOv8RysVmHlpiE
y1VswLuv8S2+VgPERaovSGn6SiB//t4bvljDUNo8K5o0ae0XwhsgSKDky160
kEj8AHRHfgCf6I3S8iMq5PzOLGTHJ99u6u90y2rgGnItbHS3cv2qAiw2wzBV
h57GKjb8xC5ewqF54YTR8Gc8QIb+Nj3MC7GW2fi1rOYn/0P3QsYdtL4lEG2x
diX9wtoGeolHQcAijYOdtY16CLLiNq5q7n6YuZFHRxH4axu/sNwQkzYl++cM
h+mPDfZWjBsYYeMLWdJijJM6TICj+WngTsPAc+SB/3YwtExqzFvZCQR8Kf1q
sQI/Q6pETgP6snhhOerQYew823re51Dn0MdrPYjMH1Jv6PpEJF5Q9yNjfRpU
jhuFd6W7ajCCunJ98jjsSuLGVBb/fAr1fUrNpV1G1Tq7EGQ9UNygVA20yK6V
+mlg0h4phyvqmXng+ryDYlK8rVO4dOqVAYMK3FQsm1NNqu4zFbC5vuX+/HZT
2eK5fgltsXI8DtCjLbjkAE2zdH9oMNlzydfe0GSeMwnD2M0NK1/FA2Hdi9Y8
k7l+rCc0G2sbOXYDEOJDh2pj2ZFQuThiuR7gmfW+97vLHnkdS7Bp90Fn4EK8
4lZ0VmEXCv1vtNfEWnsNENnMEbOJ1OSehDiud16e6OUwLiJY23lFX99u5lkO
GOoRqh80Y/JYwQuF8RLDtankLydBJSn8djOLO/HP0sYNiJllvunHfHKoeXys
c5VVATLfElVek/x+Z2tnq7N10NnZ72Jk2bIsNREsfio+AlX4TUflr7a7299Y
Rt2RmBuzltdDsbE8IKH08htUXQiR7cD7nZwd8bmlHdihMiEyESoOuQg3uRfr
yKKNFkFwuHqwcWNZwXh6dHjBNW9iGzi0L37Cu3F5HnuM9y61xXWKRee7W1v8
2VkIUIIxSFDcFkeH4mBr62CPX0mYN67fF/+xLfZ29sTO/p7Yx7b86tup7flJ
SCz6Xk0OvmMKDPFjKm5KGx6UgskcrZ7TrpWWfdfATnOXBEDeIaWiG35zFM7u
I288ScS6syFQPgQV9N5EOK1Vm1ogzovprCq1Hx+nuQyAy6FV/bO+x88XBDXW
2QvV4ZU7RHzRtaFUYQ+47ZYqyvkYUXgir/nGiRgwmNIPKkZWuyF4/s6hURun
1brWXszSKE655pyTRmAs/ws3RSh2IKK+58CcGvgJzWK9sQzn7JwRuMKEBfz9
6vpYnMlvYzmPRMQAJcD5Wu7E2Os6Oqmm2bcWizN3DFpOd9/EVGwqeQADKA8N
oM+PZRJIvl/H2WMM08cEwbhuF7WMppAS644XjMINxdKbugR2QXS87EwalZb4
xpK2kKvn8bGX4OViVLs3SmEcfSIBC/GdTGxILOf1dWfHYiyn/UOdEOPG+Sg8
L8UcR2Atb9UKgAaxxnNbsDRruCGGRldzbQwikg66Tjjd9P1JmLy3N/XnG11W
NB3LFIzF/JshN4y0fGGo6mb6m4VZ8OaGQkAmxDKbTDa3bAPwOIoUOEa1ybKR
HWebO8xsXGGfH62IKN+nL1e3zQNuNOdnNt3Dna/xVAgsTWXh7y4mGhD2A9K+
+TXZKZgrxOLrTXwipw6iGAdLllCIaU75PkrE8Jk4geAA07H3+rG82klsfaMf
lLlKhGFbyuXet7Jvi+TTl/L+YP3Zg4nCcXam5Lsgcm1nQms6RXx2F+JjABIG
pJWQuybD+vcUGk1KKO1lkDl9bqTwF2LLkIUEbUZLixDuCImyGZnxw15vd7ea
EPQduPxUImJ/Iaaq6UqMPMTbVmBw3DdhnBzyqdElXHqrMFT3ILALofpYhrPE
woPt59UkkLwXUX7eSE1WYt0V+Gw3OhyCz0jAr/KB6QU0DhaPIkEROTBN0Nre
2e/Nw+uaTidI8rZFobW92IpIvEwwq6F1403dkw+O6+KiSgmh7YUIYXuhAKw0
cNrhgScEQzQtY7OzEBsNQ0ggK2GEtIFmTWdlVBbbV934aVCodjvbe83xeALn
cxrwjXbQxRWvLZUxMizk8lbJ6ECoHp7K2NdaqhxVlVxeydLmaUL4n5wiac3P
7fh97Tg9W8l7SHeBPawwUAf7W48mq3Kgnj8hUY8bqSVJuolsx43QqJdDuK1V
iDEAL0/E9u7B7jJU4Ak+Y7C8MKeRU7UTvK+gTNL2KiSpXkTWjeB+HkHh3rP9
ZSg8DweeT9FYbWi4u7MKcdwBB2O6i+XoOrZvvaH4z3ASxMCZb79bhj5c/f8J
y4M6h/DfP8O0TN7uSkYQqwvyHSxH3Cvc5n7tTWdEm0xs4cOufPjv6bTrON10
6jmTrjtMlyb/tHM47bzBE0JKpK80dSHSM+B/JrJZ6MxNynXuYnclty6F2+zo
kV7j8/Ojys/srhQQVHNjeXfzaXlxHGI5Ku4rr5WJlUIIhq+2yT82gth+9vz5
Y6mqHNmVIog8TY8LIJal6Pp/nV6WyThYhQwCuRzmNyFojx29N0Vxyn//exhP
w/g+7nqBE44xWbqUHF5OwiSNvHL6Y2/xbFm1bTLp2dnf2a5xDkfnl/LmpThN
PFxpHA7uzZqUacgHu+jDUfFAMju+dm14UxayvcXTalpiUZ0K1SvuoDf7Farj
7FhWk7WIBSZwJR5NuLC31duvyedgaSDM8TkHWm0R9hbP0BUYIfOhBKgJZs93
dxthVqXVe4un60W8Gk6VK7Di/6/IrS9bTpRfvlA9L6glqsurL1/tk62BiGYF
PlnavSLJbubX5TG9ErhxPq/5pJig/6YBcx9TQ2KS2bSARFL6ULXkntu02rRK
tbdoFd7caPqlUPUvXaiKdzNkpao7T1Wm2vurlamSaj2yPhXbPrIwVTa9jLxb
wHdt41+nnLT3pZy06sHTlpP2vpSTLml6/qTlpL0v5aRiXjmptJOfuI6Ue6mw
BH94ASli9jkqRyulvIQsjA2wIjcyXROtT1enWi0Hn69AdWFobGymb1Si2mte
otp76hLV3rwS1d6XEtUnLVEF0fnfdKzB/5bSblSrLlOouvulUPVLoeqXQtVS
oaoitsclq7e9xxat5mbEVWWru52tvc7O87962WqeztKTpUpXe0uWrjasG12c
ma6pG+02yi7v7dUUXF7SzXA3YfjKG5eQalL3hc0FtBcAYEVc5pbENSv80hVx
K7NlQU3c4vqvUknciijNy/9v7zQr8FR5/ydBpbIQaGdxiWeW6F8RjfPUB09g
xwne7IMG/u+pG1XgtLt4wUqDEgqWIGCNMNx5tr3VEEMgm+6pLKG4WP8rUGRo
T43jcRhU2KfdxcagAkOEtSJ+Tep3dxdbh4oC3mbi97xXszzZpOB5e3exoagq
eV4RtQsXIt5BuIhri4vqFaCn5JuCuYhzvebYPSXvVBGYCrvKiD1bPKSqkEwC
eRJJu3L57iSMSstILXYAUs4MMM008/nBXv36/AVMsoxC2zoLvNgr0MI7QjPL
gpcwwnu9nRoDUoHmFcX8ccXgNihuqMZUgVwVWaqwdJVkH3uxE8KTe1P/aiWz
SX0Dw9dKKHQPORVfSnB3t3dq69arqcnpaz05i13OHHLy5uVp6JG5sp3Gfr1B
AYTKv+2I1Tz87vM6D/omnLqHMANWG5o0j2Q0WD8Ai50XwhYEXG9lyoZAhavL
ML+386ym3GQOGRBL1hOx2MstIAID3achgSsQLykBOd837y32frKckaEt76Cb
YbnASe8t9oV5NJf31PV4HiEklXi7tJNJMyO52FPmAAuEvIJxPHhW49VL6De0
iot9aQX+K1jDWgKevD5ve7+h933iAr1mPru2Qk/b7UYzgv1lpnqPnxvsPK/Z
eFjAdr4Z2l9m1vfoKVZTXG8wrx7UobrY1ZZQNQCuiOnrc9xucK7ksozdYlfK
IJRuxo0Q2t/v1ZTvXl2eyQRyrSXZb7Cp+vKsmIduZrT39+sC3LMLoPIMa1TC
6B2djVmP4GInyOCEhCcY4HKoPqvLLx2n8gBYGRTUb71c7AU1LB1hLJOK6z2r
84FFHOlGYTUnKSO62PeVETVBrojteQOhXOzezh8plM+e7dZ4siY11tu9BmdN
VBVZN8JtlSrr7d5il1JRZv1YvP6YOuven7bOurdCnXXvieusK4qrnr7Ouv7A
4iZl1wuuJJhTalK6FWCFguy/mRXZfyP+LFOSbbRoUpNtft6sKNts0bAqm5vk
y7Lx2TJ12fR9s8Js+rS+MvtvFn3QoDbbVcLQmZAwYGE20zKvZPRvUqbr6iOl
sOQgV5dLakh11Zh/00ZxuVpts12+WDt7gz+PP1Q4D0fDW+ZU4UeBeBfTTefm
lEuX0CS0Tj2WRw5Xg1/uzGE9QLqMc86Q5Qr7jBGoq181EVzWgZltF1aK5+0e
C6T0aQaaZRKbEG3Uji9J8vJus3pEG5ePL0Nr6e9PYQ+e1hSUisrnj0cBaPOy
8nlsXK2rR1jOR8vtyso6NyCq1bhcfGTCnF99jm+VYqu0kuDFNBk3PV64jerd
+Z6T69IliPrCdN1rZWW6gacsns4JxiOPOs5bhic+67jK7MypVc/Rw8XquUdZ
IfnjsZ533nG+/6redN16JiBGKXn9+Bm15FU8edShx0oi80XlFXL5uLryp4n7
FxaZ5+5z+T4rX6wsM899THO1lQvN8/fJYPNcqXnu9Zdi86coNq+SKYkN3UTy
peD8X7/g/F+0+lvH0D8a1d6PrfVuVOl90Nk5kEmrv2ald7HO+5FV3vPjXzPP
V1v0jQP1Jpx1Bvcd+OftrDIb32CtE+1bBkcwoEZp252tOeWUINlsK0GXqY8i
ag3KViQc5cgxG4CgFiHHp84gembswk/3tw5qcuCvI3uMg7wA6wZrbBLQsmjP
5+lJ4NizOGXDBmYxRVd7ad/7oV0uZG+wxp2DJxRAISE2Wqjc3apZ1MJQAB0Z
ew/JhhKOixcU8nAkPxuitviIbZb0uG6kGyzFmNslJLQnGu1zWVpQw7smZbUK
xBJsm1cXFSenFJyA0CmvUcZq8boanYGoIGkH1GhlbW+rZmXteuJNe/VYNSi3
JAhLYbO/Xzpe/POvWc1J9/25lrBq3d3yK1rzPefKC1y1LFUsKC57NcvlqNbV
KZ25S2Fqd9C1vkj138UP9gxmSrZ/H+PZaV/N4geaFl+ngxDoxRt6aUF9nLLA
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
9ced+5YBAA==

-->

</rfc>
