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


<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [

<!ENTITY RFC6790 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.6790.xml">
<!ENTITY RFC4221 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4221.xml">
<!ENTITY RFC3032 SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.3032.xml">
<!ENTITY I-D.bocci-mpls-miad-adi-requirements SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.bocci-mpls-miad-adi-requirements.xml">
<!ENTITY I-D.andersson-mpls-mna-fwk SYSTEM "https://xml2rfc.tools.ietf.org/public/rfc/bibxml3/reference.I-D.andersson-mpls-mna-fwk.xml">
]>


<rfc ipr="trust200902" docName="draft-li-mpls-entropy-00" category="info" submissionType="IETF">
  <front>
    <title abbrev="Entropy Values">Entropy Values</title>

    <author initials="T." surname="Li" fullname="Tony Li">
      <organization>Juniper Networks</organization>
      <address>
        <email>tony.li@tony.li</email>
      </address>
    </author>

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

    
    <workgroup>MPLS Working Group</workgroup>
    

    <abstract>


<t>Equal Cost Multi-Path (ECMP) forwarding is an essential function in
distributing traffic across parallel paths. Packets within a flow must
be kept on a single path to avoid reordering, while different flows
must be distributed across paths to achieve parallelism.</t>

<t>Previously, MPLS has addressed this through the use of an entropy
label, providing up to 20 bits of entropy that can be added to the
label stack to distinguish different flows. <xref target="RFC6790"/> With the
interest in MPLS Network Actions, there are proposals to 
embedding entropy into alternate structures, so it is an appropriate
time to consider how many bits should be used for entropy in the
future. <xref target="I-D.bocci-mpls-miad-adi-requirements"/><xref target="I-D.andersson-mpls-mna-fwk"/></t>

<t>In this document, we examine the question of how to provide adequate
entropy through a simple stochastic simulation. This is not intended
to be a comprehensive and extensive treatise, but rather a simple
investigation to build intuition into the issues.</t>



    </abstract>



  </front>

  <middle>


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

<t>Equal Cost Multi-Path (ECMP) forwarding is an essential function in
distributing traffic across parallel paths. Packets within a flow must
be kept on a single path to avoid reordering, while different flows
must be distributed across paths to achieve parallelism.</t>

<t>Previously, MPLS has addressed this through the use of an entropy
label, providing up to 20 bits of entropy that can be added to the
label stack to distinguish different flows. <xref target="RFC6790"/> With the
interest in MPLS Network Actions, there are proposals to 
embedding entropy into alternate structures, so it is an appropriate
time to consider how many bits should be used for entropy in the
future. <xref target="I-D.bocci-mpls-miad-adi-requirements"/><xref target="I-D.andersson-mpls-mna-fwk"/></t>

<t>In this document, we examine the question of how to provide adequate
entropy through a simple stochastic simulation. This is not intended
to be a comprehensive and extensive treatise, but rather a simple
investigation to build intuition into the issues.</t>

<section anchor="model" title="Model">

<t>In a typical ECMP situation, a Label Edge Router (LER) <xref target="RFC4221"/>
would examine incoming traffic and use values in the incoming packet
to compute an Entropy Label (EL). This would be placed in the label
stack.  Subsequent routers on the path could use this EL as input to a
hashing function and the resulting hash value would then be used to
select one of the possible output paths. If the entropy label and the
hashing function are implemented correctly, packets would be uniformly
distributed across the possible paths. If packet sizes are uniformly
distributed, this would also imply that bandwidth would be uniformly
distributed across paths.</t>

<t>Moving forward, we expect that entropy will continue to be carried in
the label stack, but may not occupy a Label field inside of a Label
Stack Entry (LSE) <xref target="RFC3032"/>.  We generalize this to an Entropy
Value (EV) and seek to understand the necessary size of this field.</t>

</section>
<section anchor="methodology" title="Methodology">

<t>To study this, we employ a pseudo-random number generator to create
Entropy Values and then we apply a hashing function to them. Ideally,
the results of the hash will be uniformly distributed. Error metrics
are used to characterize how far results are from this ideal.</t>

</section>
</section>
<section anchor="randomness" title="Randomness">

<t>Real hardware does not use a random number generator to create
entropy. Doing so would require mapping each flow to an entropy value
and this would be painful to implement due to scale. Rather,
implementations that we are familiar with use a hashing function on
the packet header to create an entropy value. Ideally, the results of
this would be uniformly distributed. However, we cannot assume that
all traffic will be quite so cooperative.</t>

<t>Conversely, we also cannot assume that the LER will generate no
entropy.  If an LER does nothing except place a constant in the
entropy value, no downstream hashing function will be able to extract
any entropy.</t>

<t>To model this, we intentionally choose an imperfect random number
generator, specifically, we choose one that has a normal
distribution (i.e., Gaussian or bell curve). This should produce many
different entropy values and if the hashing function is doing its job,
the resulting entropy should result in a uniform distribution of hash
values.</t>

</section>
<section anchor="hashing" title="Hashing">

<t>Similarly, there is no standardized way of implementing the hash
function that downstream routers will use to convert an entropy value
into a hash value. In cases where the entropy value has more bits than
the hash value can support, it is up to the hashing function to fold
the entropy from all of the entropy value bits into the hash value.</t>

<t>Thus, we consider a number of hashing functions:</t>

<t><list style="symbols">
  <t>Addition: High order bits are added to the low order bits to produce
the hash value.</t>
  <t>Masking: High order bits are simply discarded.</t>
  <t>Xor: High order bits are XOR’ed into the low order bits.</t>
  <t>CRC-CCITT: Compute a CRC over the entropy value and XOR the
resulting bits together.</t>
  <t>MD4: Compute the MD4 digest over the entropy value and XOR the
resulting bits together.</t>
  <t>MD4: Compute the MD5 digest over the entropy value and XOR the
resulting bits together.</t>
  <t>SHA1: Compute the SHA1 digest over the entropy value and XOR the
resulting bits together.</t>
  <t>SHA256: Compute the SHA256 digest over the entropy value and XOR the
resulting bits together.</t>
</list></t>

<t>Some of these hash functions work better than others.  Additional hash
functions could easily be added.</t>

</section>
<section anchor="Hardware" title="Future Hardware Considerations">

<t>When ECMP was first implemented, 4-way ECMP was the norm.  In the
early days of sparse networks, that was frequently adequate. As the
number of interfaces on a router has grown, ECMP has followed suit,
and 128-way and 256-way ECMP is now in production.</t>

<t>While hardware has provided an impetetus to grow the breadth of ECMP,
it is also suggesting that there is an upper bound to what needs to be
supported. It is fairly clear that with current networking trends, we
will never need more paths from a single router than it has physical
interfaces.  While logically, more would be possible, the growth in
bandwidth has driven the need for ECMP and that bandwidth is most
easily provided through the use of non-fractional interfaces.</t>

<t>Concurrently, we note a trend away from building multi-chassis routers
with an arbitrary number of physical interfaces, so this implies a
bound of around 1000 physical interface per router for the foreseable
future.</t>

<t>Hardware is also most conveniently impelemented on power of two
boundaries.  Thus, we investigate ECMP from 4-way to 4096-way, in
powers of two.</t>

</section>
<section anchor="results" title="Results">

<t>For hash values from 8 to 12 bits, we consider entropy values with 0
to 5 additional bits (i.e., 8 to 17 bits). We generate enough random
samples so that each hash bucket should ideally have 1000 entries.</t>

<t>The error for each has bucket is then difference between the number of
hash results and 1000.  We then compute the following error metrics
for each combination of algorithm, hash value bits, and additional
bits:</t>

<t><list style="symbols">
  <t>Root Mean Square Error (RMSE): The Root Mean Square Error is the
square root of the sum of the squares of the errors for each bucket,
divided by the number of buckets.</t>
  <t>Mean Average Error (MAE): The Mean Average Error is the arithmetic
mean of the absolute value of the error for each bucket.</t>
  <t>Mean Average Percentage Error (MAPE): The Mean Average Percentage
Error is the arithmetic mean of the percentage of error for each
bucket.</t>
</list></t>

<t>We then summarize the results based on the number of additional bits
and on algorithm, computing the mean of each of the above metrics.</t>

</section>
<section anchor="conclusion" title="Conclusion">

<t>The arguments in <xref target="Hardware"/> suggest that 4096-way ECMP will be
sufficient for some time to come. This suggests that a base of 12 bits
would be a good start.</t>

<t>We arbitrarily select a MAPE of 5.0 as a threshold of acceptability.
This represents a distribution that is within 5% of our goal of a
uniform distribution.</t>

<t>A solution to the issue would be a number of bits entropy value and a
set of hashing algorithms that would provide acceptable performance
over the full range of hash values, from 2 to 12 bits.</t>

<t>We observe that for some entropy values, we get unacceptable solutions
across all algorithms:</t>

<figure><artwork><![CDATA[
For 2-way ECMP with 0 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add | 653.0 | 653.0 | 65.3 |
|      mask | 374.0 | 374.0 | 37.4 |
|       xor | 653.0 | 653.0 | 65.3 |
| crc-ccitt | 653.0 | 653.0 | 65.3 |
|       md4 | 653.0 | 653.0 | 65.3 |
|       md5 | 371.0 | 371.0 | 37.1 |
|      sha1 | 374.0 | 374.0 | 37.4 |
|    sha256 | 374.0 | 374.0 | 37.4 |
+-----------+-------+-------+------+
]]></artwork></figure>
<t>Clearly, a 2 bit entropy value is not acceptable.</t>

<t>We also observe that some algorithms perform better than others:
~~~
For 16-way ECMP with 1 more bits of entropy:
+———–+——-+——-+——+
|      Hash |  RMSE |   MAE | MAPE |
+———–+——-+——-+——+
|       add |  39.2 |  33.6 |  3.4 |
|      mask |  30.2 |  25.2 |  2.5 |
|       xor |  39.2 |  32.6 |  3.3 |
| crc-ccitt |  27.9 |  22.8 |  2.3 |
|       md4 | 226.6 | 190.1 | 19.0 |
|       md5 | 255.0 | 194.4 | 19.4 |
|      sha1 | 194.6 | 164.1 | 16.4 |
|    sha256 | 252.1 | 226.4 | 22.6 |
+———–+——-+——-+——+
~~~</t>

<t>Understanding why some algorithms perform poorly is not understood at
this time and a subject for future research.</t>

<t>Once we reach about 10 bits of entropy value, most algorithms work
well, most of the time:</t>

<figure><artwork><![CDATA[
For 1024-way ECMP with 0 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 32.2 | 25.7 |  2.6 |
|      mask | 31.4 | 25.2 |  2.5 |
|       xor | 32.0 | 25.2 |  2.5 |
| crc-ccitt | 31.3 | 24.9 |  2.5 |
|       md4 | 54.4 | 43.7 |  4.4 |
|       md5 | 54.9 | 43.2 |  4.3 |
|      sha1 | 57.1 | 44.8 |  4.5 |
|    sha256 | 56.5 | 45.5 |  4.5 |
+-----------+------+------+------+

For 256-way ECMP with 2 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 33.2 | 25.5 |  2.5 |
|      mask | 29.7 | 23.6 |  2.4 |
|       xor | 31.4 | 25.4 |  2.5 |
| crc-ccitt | 30.3 | 23.7 |  2.4 |
|       md4 | 56.3 | 44.5 |  4.4 |
|       md5 | 54.7 | 43.7 |  4.4 |
|      sha1 | 54.6 | 43.9 |  4.4 |
|    sha256 | 54.0 | 43.6 |  4.4 |
+-----------+------+------+------+
]]></artwork></figure>

<t>If we look at summaries by additional bits and by algorithm we see:</t>

<figure><artwork><![CDATA[
Error per added bit
+------------+-------+-------+-------+
| Added bits | MRMSE |  MMAE | MMAPE |
+------------+-------+-------+-------+
|          0 | 168.3 | 148.1 |  14.8 |
|          1 | 113.9 |  98.4 |   9.8 |
|          2 |  75.7 |  62.9 |   6.3 |
|          3 |  60.3 |  51.2 |   5.1 |
|          4 |  51.5 |  43.6 |   4.4 |
|          5 |  45.4 |  38.7 |   3.9 |
+------------+-------+-------+-------+

Error per algorithm
+-----------+-------+-------+-------+
| Algorithm | MRMSE |  MMAE | MMAPE |
+-----------+-------+-------+-------+
|       add |  50.7 |  43.9 |   4.4 |
|      mask |  35.1 |  29.9 |   3.0 |
|       xor |  53.6 |  48.0 |   4.8 |
| crc-ccitt |  48.1 |  42.7 |   4.3 |
|       md4 | 137.9 | 119.9 |  12.0 |
|       md5 | 127.7 | 108.2 |  10.8 |
|      sha1 | 111.8 |  94.5 |   9.4 |
|    sha256 | 122.0 | 103.5 |  10.3 |
+-----------+-------+-------+-------+
]]></artwork></figure>

<t>This leads us to propose that we endorse the use of the set of
algorithms: add, mask, xor, and crc-ccitt and that we use at least 4
additional bits for our entropy value, resulting in total of 16 (12 +
4). Please note that this is a minimum. Most proposals are proposing
higher numbers of bits, thus exceeding this minimum.</t>

</section>
<section anchor="security-considerations" title="Security Considerations">

<t>No security issues are discussed in this document.</t>

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

<t>This document makes no requests of IANA.</t>

</section>


  </middle>

  <back>

    <references title='Normative References'>

&RFC6790;
&RFC4221;
&RFC3032;


    </references>

    <references title='Informative References'>

&I-D.bocci-mpls-miad-adi-requirements;
&I-D.andersson-mpls-mna-fwk;


    </references>


<section anchor="source-code" title="Source Code">

<figure><artwork type="python"><![CDATA[
#!/usr/bin/python3
#
# Copyright 2022, Juniper Networks, Inc.
# Tony Li (tli)
#
# Statistical study on the number of entropy bits necessary.
#
# Equal Cost Multi-Path (ECMP) forwarding directs traffic down
# multiple paths. An entropy label is included in the MPLS label
# stack or in the MPLS Network Action sub-stack to help
# implementations keep individual flows on a consistent path but
# spread different flows across different paths.
#
# The entropy label is supposed to be used by an implementation
# as input to a hash function, producing a hash value that is an
# index into the set of paths. If the hash values are uniformly
# distributed, then the paths will be equally used. If the hash
# function is poor or there is not enough entropy in the entropy
# label, then the hash values will not be uniformly distribute.
#
# To gain some intuition about how many bits of entropy are
# necessary, we simulate the hashing of a large number of random
# values and then measure the uniformity of the results.
#

import crcmod
from numpy import random, round
import matplotlib.pyplot as plt
import math
from tabulate import tabulate
import binascii
import hashlib

# To get an interesting volume of data, we need about this many
# samples per bucket.
DEPTH = 1000

# ECMP is typically up to N way, where N is 2 ** P.  We study a
# range of P values to get an understanding of the number of
# necessary bits as a function of P.

P_RANGE = range(1, 13)
#P_RANGE = range(2, 6)

# Consider this many additional bits of entropy, above and beyond
# P.
MORE_BITS_RANGE = range(0, 6)

# Format for floating point numbers
FLT = '%.1f'

class HashFunc(object):
   def __init__ (self, p, name):
      self.bits = p
      self.name = name
      # Mask of bits inside of the target range
      self.lowmask = (2 ** p - 1)
      # Mask of bits outside of the target range
      self.highmask = ~self.lowmask

   def hashfunc(self, v):
      raise NotImplementedError()

class AddHash(HashFunc):
   def __init__(self, p):
      super().__init__(p, 'add')

   def hashfunc(self, v):
      old = v
      if self.highmask & v:
         v = (v & self.lowmask) + ((v & self.highmask) >>
                                   self.bits)
      return v & self.lowmask

class MaskHash(HashFunc):
   def __init__(self, p):
      super().__init__(p, 'mask')

   def hashfunc(self, v):
      return v & self.lowmask

class XorHash(HashFunc):
   def __init__(self, p):
      super().__init__(p, 'xor')

   def hashfunc(self, v):
      while self.highmask & v:
         v = (v & self.lowmask) ^ ((v & self.highmask) >>
                                   self.bits)
      return v

class CrcHash(HashFunc):
   # CRC-CCITT
   def __init__(self, p):
      super().__init__(p, 'crc-ccitt')

   def hashfunc(self, v):
      v = binascii.crc_hqx(v.to_bytes(4, 'little'), 0)
      while self.highmask & v:
         v = (v & self.lowmask) ^ ((v & self.highmask) >>
                                   self.bits)
      return v

class Md4Hash(HashFunc):
   def __init__(self, p):
      super().__init__(p, 'md4')
      self.func = hashlib.new('md4')

   def hashfunc(self, v):
      m = self.func.copy()
      m.update(v.to_bytes(4, 'little'))
      d = m.digest()
      v = int.from_bytes(d, 'little')
      while self.highmask & v:
         v = (v & self.lowmask) ^ ((v & self.highmask) >>
                                   self.bits)
      return v

class Md5Hash(HashFunc):
   def __init__(self, p):
      super().__init__(p, 'md5')
      self.func = hashlib.md5()

   def hashfunc(self, v):
      m = self.func.copy()
      m.update(v.to_bytes(4, 'little'))
      d = m.digest()
      v = int.from_bytes(d, 'little')
      while self.highmask & v:
         v = (v & self.lowmask) ^ ((v & self.highmask) >>
                                   self.bits)
      return v

class Sha1Hash(HashFunc):
   def __init__(self, p):
      super().__init__(p, 'sha1')
      self.func = hashlib.sha1()

   def hashfunc(self, v):
      m = self.func.copy()
      m.update(v.to_bytes(4, 'little'))
      d = m.digest()
      v = int.from_bytes(d, 'little')
      while self.highmask & v:
         v = (v & self.lowmask) ^ ((v & self.highmask) >>
                                   self.bits)
      return v

class Sha256Hash(HashFunc):
   def __init__(self, p):
      super().__init__(p, 'sha256')
      self.func = hashlib.sha256()

   def hashfunc(self, v):
      m = self.func.copy()
      m.update(v.to_bytes(4, 'little'))
      d = m.digest()
      v = int.from_bytes(d, 'little')
      while self.highmask & v:
         v = (v & self.lowmask) ^ ((v & self.highmask) >>
                                   self.bits)
      return v

def rmse( error ):
   # Compute the root mean square error of this run.
   errsq = [ err ** 2 for err in error ]
   rmse = math.sqrt( sum( errsq ) / len( error ) )
   return rmse

def mae( error ):
   # Compute the mean average error of this run.
   mae = sum( [ abs( err ) for err in error ] ) / len( error )
   return mae

def mape( error ):
   # Compute the mean average percentage error of this run.
   mape = 0.0
   for ( ind, err ) in enumerate( error ):
      if err != 0.0:
         mape += abs( err / DEPTH)
   mape = mape / len( error )
   return mape * 100.0

def mean(vec):
   return sum(vec)/len(vec)

def simulate(p, bits):
   total = p + bits
   # Uniform distribution
   #samples = random.randint(0, (2 ** total), (2 ** p) * DEPTH)
   # Normal distribution
   # This emulates a 'poor' random number generator
   floats = random.normal(2 ** (total - 1),
                          scale=2 ** (total - 3),
                          size=(2 ** p) * DEPTH)
   rounded = round(floats)
   samples = [ int(x) for x in rounded ]
   samples = [ x if x > 0 else -x for x in samples ]
   samples = [ x if x < 2 ** total else (2 ** total - 1) for x in
               samples ]
   # Debugging
   # print (samples)
   #
   #count, bins, ignored = plt.hist(samples, bins = 2 ** total)
   #plt.title('Random samples using %d bits of entropy' %
   #          total)
   #plt.show()
   #
   hashes = [ AddHash(p), MaskHash(p), XorHash(p), CrcHash(p),
              Md4Hash(p), Md5Hash(p), Sha1Hash(p), Sha256Hash(p)
             ]
   results = []
   for h in hashes:
      hashvals = [ h.hashfunc(x) for x in samples ]
      # print(hashvals)
      buckets = [ 0 ] * 2 ** p
      for x in hashvals:
         buckets[x] += 1
      # print(h.name, buckets, sum(buckets))
      error = [ DEPTH - x for x in buckets ]
      # print(error)
      # print(rmse(error), mae(error), mape(error))
      results.append( [ h.name, FLT % rmse(error), FLT %
                        mae(error), FLT % mape(error) ] )
   return results

headers = ['Hash', 'RMSE', 'MAE', 'MAPE']
summary_headers = ['Added bits', 'MRMSE', 'MMAE', 'MMAPE']
algo_summary_headers = ['Algorithm', 'MRMSE', 'MMAE', 'MMAPE']
summary = []
per_algo = {}
for more in MORE_BITS_RANGE:
   per_bit = []
   for p in P_RANGE:
      print( 'For %d-way ECMP with %d more bits of entropy:' %
             (2 ** p, more))
      results = simulate(p, p + more)
      print(tabulate(results, headers=headers, tablefmt='pretty',
                     stralign='right'))
      rmsevec = [ float(x[1]) for x in results ]
      maevec = [ float(x[2]) for x in results ]
      mapevec = [ float(x[3]) for x in results ]
      per_bit.append([FLT % mean(rmsevec), FLT % mean(maevec),
                      FLT % mean(mapevec)])
      print()

      for result in results:
         if not per_algo.get(result[0]):
            per_algo[result[0]] = [ [], [], [] ]
         for i in range(1,4):
            per_algo[result[0]][i-1].append(float(result[i]))

   rmsevec = [ float(x[0]) for x in per_bit ]
   maevec = [ float(x[1]) for x in per_bit ]
   mapevec = [ float(x[2]) for x in per_bit ]
   summary.append([more, FLT % mean(rmsevec), FLT % mean(maevec),
                   FLT % mean(mapevec)])

print('Error per added bit')
print(tabulate(summary, headers=summary_headers,
               tablefmt='pretty', stralign='right'))

algo_summary = []
for algo in per_algo:
   algo_summary.append([algo,
                        FLT % mean(per_algo[algo][0]),
                        FLT % mean(per_algo[algo][1]),
                        FLT % mean(per_algo[algo][2])])
print('\nError per algorithm')
print(tabulate(algo_summary, headers=algo_summary_headers,
               tablefmt='pretty', stralign='right'))

]]></artwork></figure>

</section>
<section anchor="full-results" title="Full results">
<figure><artwork><![CDATA[
For 2-way ECMP with 0 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add | 653.0 | 653.0 | 65.3 |
|      mask | 374.0 | 374.0 | 37.4 |
|       xor | 653.0 | 653.0 | 65.3 |
| crc-ccitt | 653.0 | 653.0 | 65.3 |
|       md4 | 653.0 | 653.0 | 65.3 |
|       md5 | 371.0 | 371.0 | 37.1 |
|      sha1 | 374.0 | 374.0 | 37.4 |
|    sha256 | 374.0 | 374.0 | 37.4 |
+-----------+-------+-------+------+

For 4-way ECMP with 0 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add | 363.9 | 307.5 | 30.8 |
|      mask |  28.6 |  26.0 |  2.6 |
|       xor | 464.4 | 437.5 | 43.8 |
| crc-ccitt |  51.5 |  45.0 |  4.5 |
|       md4 | 979.4 | 933.5 | 93.3 |
|       md5 | 515.3 | 489.0 | 48.9 |
|      sha1 | 597.6 | 500.0 | 50.0 |
|    sha256 | 360.8 | 264.5 | 26.5 |
+-----------+-------+-------+------+

For 8-way ECMP with 0 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add | 164.7 | 145.8 | 14.6 |
|      mask |  23.0 |  16.8 |  1.7 |
|       xor | 220.3 | 206.0 | 20.6 |
| crc-ccitt | 445.4 | 445.2 | 44.5 |
|       md4 | 339.7 | 262.0 | 26.2 |
|       md5 | 300.8 | 259.5 | 25.9 |
|      sha1 | 301.6 | 264.5 | 26.5 |
|    sha256 | 457.0 | 392.0 | 39.2 |
+-----------+-------+-------+------+

For 16-way ECMP with 0 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  73.5 |  61.1 |  6.1 |
|      mask |  18.7 |  14.4 |  1.4 |
|       xor | 107.6 |  97.4 |  9.7 |
| crc-ccitt |  29.0 |  24.0 |  2.4 |
|       md4 | 428.1 | 322.1 | 32.2 |
|       md5 | 356.8 | 270.5 | 27.0 |
|      sha1 | 363.1 | 297.9 | 29.8 |
|    sha256 | 401.1 | 283.9 | 28.4 |
+-----------+-------+-------+------+

For 32-way ECMP with 0 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  56.0 |  43.9 |  4.4 |
|      mask |  28.6 |  23.0 |  2.3 |
|       xor |  66.7 |  58.4 |  5.8 |
| crc-ccitt |  27.2 |  21.0 |  2.1 |
|       md4 | 259.2 | 197.6 | 19.8 |
|       md5 | 246.0 | 202.8 | 20.3 |
|      sha1 | 271.2 | 226.1 | 22.6 |
|    sha256 | 266.6 | 225.1 | 22.5 |
+-----------+-------+-------+------+

For 64-way ECMP with 0 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  35.5 |  28.8 |  2.9 |
|      mask |  30.5 |  24.1 |  2.4 |
|       xor |  39.8 |  31.2 |  3.1 |
| crc-ccitt |  33.0 |  24.9 |  2.5 |
|       md4 | 202.6 | 166.2 | 16.6 |
|       md5 | 175.4 | 138.9 | 13.9 |
|      sha1 | 221.7 | 184.4 | 18.4 |
|    sha256 | 159.9 | 126.1 | 12.6 |
+-----------+-------+-------+------+

For 128-way ECMP with 0 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  32.7 |  25.0 |  2.5 |
|      mask |  31.2 |  24.6 |  2.5 |
|       xor |  31.1 |  25.4 |  2.5 |
| crc-ccitt |  30.3 |  24.3 |  2.4 |
|       md4 | 131.8 | 107.3 | 10.7 |
|       md5 | 128.5 | 103.8 | 10.4 |
|      sha1 | 132.9 | 105.4 | 10.5 |
|    sha256 | 127.8 |  99.8 | 10.0 |
+-----------+-------+-------+------+

For 256-way ECMP with 0 more bits of entropy:
+-----------+-------+------+------+
|      Hash |  RMSE |  MAE | MAPE |
+-----------+-------+------+------+
|       add |  29.7 | 23.7 |  2.4 |
|      mask |  32.3 | 26.1 |  2.6 |
|       xor |  32.1 | 25.4 |  2.5 |
| crc-ccitt |  30.5 | 24.3 |  2.4 |
|       md4 | 101.9 | 82.2 |  8.2 |
|       md5 |  97.3 | 78.8 |  7.9 |
|      sha1 | 100.2 | 79.9 |  8.0 |
|    sha256 | 101.7 | 80.7 |  8.1 |
+-----------+-------+------+------+

For 512-way ECMP with 0 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 30.9 | 24.6 |  2.5 |
|      mask | 31.4 | 24.8 |  2.5 |
|       xor | 30.0 | 24.1 |  2.4 |
| crc-ccitt | 32.4 | 26.1 |  2.6 |
|       md4 | 72.6 | 57.5 |  5.8 |
|       md5 | 73.8 | 57.9 |  5.8 |
|      sha1 | 77.1 | 61.6 |  6.2 |
|    sha256 | 72.9 | 56.9 |  5.7 |
+-----------+------+------+------+

For 1024-way ECMP with 0 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 32.2 | 25.7 |  2.6 |
|      mask | 31.4 | 25.2 |  2.5 |
|       xor | 32.0 | 25.2 |  2.5 |
| crc-ccitt | 31.3 | 24.9 |  2.5 |
|       md4 | 54.4 | 43.7 |  4.4 |
|       md5 | 54.9 | 43.2 |  4.3 |
|      sha1 | 57.1 | 44.8 |  4.5 |
|    sha256 | 56.5 | 45.5 |  4.5 |
+-----------+------+------+------+

For 2048-way ECMP with 0 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.1 | 24.9 |  2.5 |
|      mask | 31.1 | 24.6 |  2.5 |
|       xor | 31.7 | 25.4 |  2.5 |
| crc-ccitt | 31.7 | 25.3 |  2.5 |
|       md4 | 46.0 | 36.9 |  3.7 |
|       md5 | 45.8 | 36.9 |  3.7 |
|      sha1 | 46.3 | 37.2 |  3.7 |
|    sha256 | 45.8 | 36.4 |  3.6 |
+-----------+------+------+------+

For 4096-way ECMP with 0 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.5 | 25.1 |  2.5 |
|      mask | 31.9 | 25.6 |  2.6 |
|       xor | 31.7 | 25.4 |  2.5 |
| crc-ccitt | 31.1 | 24.8 |  2.5 |
|       md4 | 38.8 | 31.0 |  3.1 |
|       md5 | 40.2 | 31.8 |  3.2 |
|      sha1 | 39.0 | 31.1 |  3.1 |
|    sha256 | 39.1 | 31.2 |  3.1 |
+-----------+------+------+------+

For 2-way ECMP with 1 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add | 232.0 | 232.0 | 23.2 |
|      mask |   4.0 |   4.0 |  0.4 |
|       xor | 115.0 | 115.0 | 11.5 |
| crc-ccitt | 115.0 | 115.0 | 11.5 |
|       md4 | 727.0 | 727.0 | 72.7 |
|       md5 | 377.0 | 377.0 | 37.7 |
|      sha1 | 128.0 | 128.0 | 12.8 |
|    sha256 | 740.0 | 740.0 | 74.0 |
+-----------+-------+-------+------+

For 4-way ECMP with 1 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add | 142.9 | 117.0 | 11.7 |
|      mask |  40.2 |  36.0 |  3.6 |
|       xor | 164.3 | 163.5 | 16.3 |
| crc-ccitt |  28.4 |  24.5 |  2.5 |
|       md4 | 332.6 | 299.5 | 29.9 |
|       md5 | 537.7 | 425.5 | 42.5 |
|      sha1 | 217.0 | 183.5 | 18.4 |
|    sha256 | 348.2 | 312.5 | 31.2 |
+-----------+-------+-------+------+

For 8-way ECMP with 1 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  59.0 |  55.2 |  5.5 |
|      mask |  26.1 |  22.8 |  2.3 |
|       xor |  95.8 |  94.2 |  9.4 |
| crc-ccitt | 142.6 | 141.2 | 14.1 |
|       md4 | 444.7 | 397.5 | 39.8 |
|       md5 | 326.2 | 232.2 | 23.2 |
|      sha1 | 502.8 | 392.8 | 39.3 |
|    sha256 | 346.3 | 269.2 | 26.9 |
+-----------+-------+-------+------+

For 16-way ECMP with 1 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  39.2 |  33.6 |  3.4 |
|      mask |  30.2 |  25.2 |  2.5 |
|       xor |  39.2 |  32.6 |  3.3 |
| crc-ccitt |  27.9 |  22.8 |  2.3 |
|       md4 | 226.6 | 190.1 | 19.0 |
|       md5 | 255.0 | 194.4 | 19.4 |
|      sha1 | 194.6 | 164.1 | 16.4 |
|    sha256 | 252.1 | 226.4 | 22.6 |
+-----------+-------+-------+------+

For 32-way ECMP with 1 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  27.5 |  20.8 |  2.1 |
|      mask |  29.4 |  24.1 |  2.4 |
|       xor |  35.1 |  29.2 |  2.9 |
| crc-ccitt |  29.5 |  23.8 |  2.4 |
|       md4 | 196.1 | 169.6 | 17.0 |
|       md5 | 190.0 | 146.0 | 14.6 |
|      sha1 | 192.3 | 159.1 | 15.9 |
|    sha256 | 155.3 | 130.2 | 13.0 |
+-----------+-------+-------+------+

For 64-way ECMP with 1 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  29.9 |  23.5 |  2.3 |
|      mask |  31.1 |  26.5 |  2.6 |
|       xor |  31.4 |  26.4 |  2.6 |
| crc-ccitt |  31.9 |  25.4 |  2.5 |
|       md4 | 132.0 |  99.3 |  9.9 |
|       md5 | 122.4 | 101.4 | 10.1 |
|      sha1 | 150.1 | 124.7 | 12.5 |
|    sha256 | 145.6 | 105.8 | 10.6 |
+-----------+-------+-------+------+

For 128-way ECMP with 1 more bits of entropy:
+-----------+-------+------+------+
|      Hash |  RMSE |  MAE | MAPE |
+-----------+-------+------+------+
|       add |  32.8 | 26.9 |  2.7 |
|      mask |  35.3 | 28.3 |  2.8 |
|       xor |  31.8 | 25.6 |  2.6 |
| crc-ccitt |  28.8 | 22.6 |  2.3 |
|       md4 |  96.1 | 78.4 |  7.8 |
|       md5 | 103.7 | 82.2 |  8.2 |
|      sha1 | 101.1 | 80.6 |  8.1 |
|    sha256 |  94.5 | 71.8 |  7.2 |
+-----------+-------+------+------+

For 256-way ECMP with 1 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.2 | 24.8 |  2.5 |
|      mask | 32.1 | 25.8 |  2.6 |
|       xor | 32.6 | 25.7 |  2.6 |
| crc-ccitt | 33.9 | 26.5 |  2.6 |
|       md4 | 71.7 | 57.5 |  5.8 |
|       md5 | 69.4 | 56.7 |  5.7 |
|      sha1 | 74.7 | 59.8 |  6.0 |
|    sha256 | 70.3 | 55.6 |  5.6 |
+-----------+------+------+------+

For 512-way ECMP with 1 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 33.3 | 26.6 |  2.7 |
|      mask | 31.9 | 25.2 |  2.5 |
|       xor | 32.1 | 26.1 |  2.6 |
| crc-ccitt | 30.8 | 24.8 |  2.5 |
|       md4 | 52.7 | 41.5 |  4.2 |
|       md5 | 55.6 | 44.9 |  4.5 |
|      sha1 | 56.2 | 44.7 |  4.5 |
|    sha256 | 55.6 | 44.4 |  4.4 |
+-----------+------+------+------+

For 1024-way ECMP with 1 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 30.9 | 24.9 |  2.5 |
|      mask | 31.5 | 25.1 |  2.5 |
|       xor | 31.3 | 24.9 |  2.5 |
| crc-ccitt | 31.7 | 25.5 |  2.5 |
|       md4 | 46.6 | 37.4 |  3.7 |
|       md5 | 46.1 | 36.6 |  3.7 |
|      sha1 | 44.8 | 36.2 |  3.6 |
|    sha256 | 46.9 | 37.3 |  3.7 |
+-----------+------+------+------+

For 2048-way ECMP with 1 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 32.1 | 25.5 |  2.6 |
|      mask | 30.9 | 24.7 |  2.5 |
|       xor | 32.1 | 25.6 |  2.6 |
| crc-ccitt | 31.4 | 25.0 |  2.5 |
|       md4 | 40.0 | 31.7 |  3.2 |
|       md5 | 39.9 | 31.9 |  3.2 |
|      sha1 | 38.7 | 30.9 |  3.1 |
|    sha256 | 39.1 | 31.5 |  3.1 |
+-----------+------+------+------+

For 4096-way ECMP with 1 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.3 | 24.9 |  2.5 |
|      mask | 31.6 | 25.3 |  2.5 |
|       xor | 31.9 | 25.5 |  2.5 |
| crc-ccitt | 31.2 | 25.0 |  2.5 |
|       md4 | 35.6 | 28.5 |  2.8 |
|       md5 | 34.8 | 27.8 |  2.8 |
|      sha1 | 36.0 | 28.6 |  2.9 |
|    sha256 | 35.7 | 28.7 |  2.9 |
+-----------+------+------+------+

For 2-way ECMP with 2 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  19.0 |  19.0 |  1.9 |
|      mask |   1.0 |   1.0 |  0.1 |
|       xor |  65.0 |  65.0 |  6.5 |
| crc-ccitt |  65.0 |  65.0 |  6.5 |
|       md4 | 216.0 | 216.0 | 21.6 |
|       md5 | 103.0 | 103.0 | 10.3 |
|      sha1 | 244.0 | 244.0 | 24.4 |
|    sha256 |   8.0 |   8.0 |  0.8 |
+-----------+-------+-------+------+

For 4-way ECMP with 2 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  39.7 |  31.5 |  3.1 |
|      mask |  16.8 |  13.0 |  1.3 |
|       xor |  45.4 |  45.0 |  4.5 |
| crc-ccitt |  70.9 |  57.5 |  5.8 |
|       md4 | 139.6 | 114.0 | 11.4 |
|       md5 | 546.3 | 465.0 | 46.5 |
|      sha1 | 163.2 | 135.0 | 13.5 |
|    sha256 | 363.0 | 299.0 | 29.9 |
+-----------+-------+-------+------+

For 8-way ECMP with 2 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  14.9 |  11.2 |  1.1 |
|      mask |  35.3 |  31.2 |  3.1 |
|       xor |  25.2 |  24.0 |  2.4 |
| crc-ccitt |  21.6 |  17.8 |  1.8 |
|       md4 | 256.7 | 174.5 | 17.4 |
|       md5 | 201.8 | 171.5 | 17.1 |
|      sha1 | 329.0 | 290.8 | 29.1 |
|    sha256 | 249.7 | 202.8 | 20.3 |
+-----------+-------+-------+------+

For 16-way ECMP with 2 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  29.5 |  22.5 |  2.3 |
|      mask |  26.4 |  21.1 |  2.1 |
|       xor |  23.2 |  19.8 |  2.0 |
| crc-ccitt |  18.6 |  13.1 |  1.3 |
|       md4 | 197.0 | 158.1 | 15.8 |
|       md5 | 242.6 | 196.4 | 19.6 |
|      sha1 | 182.9 | 149.6 | 15.0 |
|    sha256 | 214.0 | 171.1 | 17.1 |
+-----------+-------+-------+------+

For 32-way ECMP with 2 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  36.7 |  32.0 |  3.2 |
|      mask |  30.3 |  24.0 |  2.4 |
|       xor |  29.1 |  23.5 |  2.4 |
| crc-ccitt |  39.8 |  30.8 |  3.1 |
|       md4 | 136.0 | 111.8 | 11.2 |
|       md5 | 140.7 | 115.0 | 11.5 |
|      sha1 | 127.3 | 105.9 | 10.6 |
|    sha256 | 119.3 |  99.4 |  9.9 |
+-----------+-------+-------+------+

For 64-way ECMP with 2 more bits of entropy:
+-----------+-------+------+------+
|      Hash |  RMSE |  MAE | MAPE |
+-----------+-------+------+------+
|       add |  31.6 | 25.7 |  2.6 |
|      mask |  32.1 | 26.3 |  2.6 |
|       xor |  30.0 | 24.3 |  2.4 |
| crc-ccitt |  35.9 | 29.8 |  3.0 |
|       md4 |  92.6 | 72.4 |  7.2 |
|       md5 | 107.4 | 82.1 |  8.2 |
|      sha1 | 107.2 | 87.8 |  8.8 |
|    sha256 | 108.7 | 85.5 |  8.5 |
+-----------+-------+------+------+

For 128-way ECMP with 2 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 35.2 | 28.5 |  2.8 |
|      mask | 31.7 | 25.4 |  2.5 |
|       xor | 32.1 | 26.2 |  2.6 |
| crc-ccitt | 31.1 | 24.8 |  2.5 |
|       md4 | 69.5 | 55.0 |  5.5 |
|       md5 | 76.5 | 61.0 |  6.1 |
|      sha1 | 73.3 | 59.1 |  5.9 |
|    sha256 | 70.9 | 58.5 |  5.8 |
+-----------+------+------+------+

For 256-way ECMP with 2 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 33.2 | 25.5 |  2.5 |
|      mask | 29.7 | 23.6 |  2.4 |
|       xor | 31.4 | 25.4 |  2.5 |
| crc-ccitt | 30.3 | 23.7 |  2.4 |
|       md4 | 56.3 | 44.5 |  4.4 |
|       md5 | 54.7 | 43.7 |  4.4 |
|      sha1 | 54.6 | 43.9 |  4.4 |
|    sha256 | 54.0 | 43.6 |  4.4 |
+-----------+------+------+------+

For 512-way ECMP with 2 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.5 | 25.4 |  2.5 |
|      mask | 30.5 | 24.1 |  2.4 |
|       xor | 30.5 | 24.6 |  2.5 |
| crc-ccitt | 31.8 | 24.9 |  2.5 |
|       md4 | 46.0 | 36.8 |  3.7 |
|       md5 | 43.9 | 34.8 |  3.5 |
|      sha1 | 44.3 | 35.3 |  3.5 |
|    sha256 | 48.2 | 38.7 |  3.9 |
+-----------+------+------+------+

For 1024-way ECMP with 2 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.0 | 24.8 |  2.5 |
|      mask | 33.0 | 26.5 |  2.6 |
|       xor | 31.6 | 25.0 |  2.5 |
| crc-ccitt | 32.2 | 25.4 |  2.5 |
|       md4 | 39.4 | 31.6 |  3.2 |
|       md5 | 38.2 | 30.3 |  3.0 |
|      sha1 | 38.8 | 31.0 |  3.1 |
|    sha256 | 39.2 | 31.2 |  3.1 |
+-----------+------+------+------+

For 2048-way ECMP with 2 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.2 | 25.1 |  2.5 |
|      mask | 32.9 | 26.3 |  2.6 |
|       xor | 31.9 | 25.6 |  2.6 |
| crc-ccitt | 31.8 | 25.5 |  2.6 |
|       md4 | 35.1 | 28.1 |  2.8 |
|       md5 | 35.8 | 28.5 |  2.8 |
|      sha1 | 37.1 | 29.8 |  3.0 |
|    sha256 | 35.6 | 28.4 |  2.8 |
+-----------+------+------+------+

For 4096-way ECMP with 2 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.5 | 25.1 |  2.5 |
|      mask | 31.7 | 25.1 |  2.5 |
|       xor | 31.7 | 25.2 |  2.5 |
| crc-ccitt | 31.8 | 25.5 |  2.6 |
|       md4 | 34.1 | 27.1 |  2.7 |
|       md5 | 34.0 | 27.0 |  2.7 |
|      sha1 | 33.3 | 26.4 |  2.6 |
|    sha256 | 33.9 | 26.9 |  2.7 |
+-----------+------+------+------+

For 2-way ECMP with 3 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  15.0 |  15.0 |  1.5 |
|      mask |  36.0 |  36.0 |  3.6 |
|       xor |  17.0 |  17.0 |  1.7 |
| crc-ccitt |  17.0 |  17.0 |  1.7 |
|       md4 |  58.0 |  58.0 |  5.8 |
|       md5 | 383.0 | 383.0 | 38.3 |
|      sha1 |  74.0 |  74.0 |  7.4 |
|    sha256 | 126.0 | 126.0 | 12.6 |
+-----------+-------+-------+------+

For 4-way ECMP with 3 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  25.7 |  22.5 |  2.2 |
|      mask |  28.8 |  24.5 |  2.5 |
|       xor |  23.1 |  22.5 |  2.2 |
| crc-ccitt |  16.4 |  13.0 |  1.3 |
|       md4 | 389.1 | 386.0 | 38.6 |
|       md5 | 196.3 | 168.5 | 16.8 |
|      sha1 | 125.8 | 101.5 | 10.2 |
|    sha256 | 185.9 | 168.5 | 16.8 |
+-----------+-------+-------+------+

For 8-way ECMP with 3 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  21.9 |  18.5 |  1.9 |
|      mask |  28.2 |  25.0 |  2.5 |
|       xor |  20.1 |  17.2 |  1.7 |
| crc-ccitt |  23.2 |  21.0 |  2.1 |
|       md4 | 146.5 | 123.0 | 12.3 |
|       md5 | 253.1 | 182.5 | 18.2 |
|      sha1 | 102.5 |  84.8 |  8.5 |
|    sha256 | 140.9 | 132.8 | 13.3 |
+-----------+-------+-------+------+

For 16-way ECMP with 3 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  29.9 |  23.8 |  2.4 |
|      mask |  33.4 |  26.1 |  2.6 |
|       xor |  27.2 |  24.2 |  2.4 |
| crc-ccitt |  25.7 |  20.6 |  2.1 |
|       md4 | 113.4 |  78.2 |  7.8 |
|       md5 | 161.0 | 134.8 | 13.5 |
|      sha1 | 140.6 | 113.8 | 11.4 |
|    sha256 | 153.3 | 130.2 | 13.0 |
+-----------+-------+-------+------+

For 32-way ECMP with 3 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  24.5 |  19.0 |  1.9 |
|      mask |  32.6 |  26.7 |  2.7 |
|       xor |  29.8 |  24.3 |  2.4 |
| crc-ccitt |  29.7 |  24.1 |  2.4 |
|       md4 |  87.3 |  72.6 |  7.3 |
|       md5 |  78.0 |  64.2 |  6.4 |
|      sha1 |  86.2 |  71.3 |  7.1 |
|    sha256 | 130.5 | 107.0 | 10.7 |
+-----------+-------+-------+------+

For 64-way ECMP with 3 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 32.6 | 26.4 |  2.6 |
|      mask | 34.9 | 29.4 |  2.9 |
|       xor | 32.2 | 26.2 |  2.6 |
| crc-ccitt | 29.6 | 24.2 |  2.4 |
|       md4 | 69.1 | 54.8 |  5.5 |
|       md5 | 74.7 | 60.7 |  6.1 |
|      sha1 | 73.8 | 60.2 |  6.0 |
|    sha256 | 73.8 | 57.7 |  5.8 |
+-----------+------+------+------+

For 128-way ECMP with 3 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 30.7 | 24.4 |  2.4 |
|      mask | 30.7 | 25.2 |  2.5 |
|       xor | 32.5 | 25.8 |  2.6 |
| crc-ccitt | 29.2 | 23.5 |  2.4 |
|       md4 | 56.4 | 44.4 |  4.4 |
|       md5 | 59.1 | 47.9 |  4.8 |
|      sha1 | 57.6 | 45.8 |  4.6 |
|    sha256 | 58.2 | 48.2 |  4.8 |
+-----------+------+------+------+

For 256-way ECMP with 3 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.2 | 25.4 |  2.5 |
|      mask | 32.1 | 25.3 |  2.5 |
|       xor | 32.5 | 26.1 |  2.6 |
| crc-ccitt | 30.8 | 25.3 |  2.5 |
|       md4 | 45.6 | 35.1 |  3.5 |
|       md5 | 48.9 | 40.5 |  4.1 |
|      sha1 | 45.2 | 35.4 |  3.5 |
|    sha256 | 43.7 | 34.2 |  3.4 |
+-----------+------+------+------+

For 512-way ECMP with 3 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 28.3 | 22.7 |  2.3 |
|      mask | 30.0 | 24.5 |  2.4 |
|       xor | 30.4 | 24.5 |  2.5 |
| crc-ccitt | 32.3 | 25.6 |  2.6 |
|       md4 | 37.3 | 30.3 |  3.0 |
|       md5 | 41.0 | 32.4 |  3.2 |
|      sha1 | 38.7 | 31.0 |  3.1 |
|    sha256 | 39.6 | 31.4 |  3.1 |
+-----------+------+------+------+

For 1024-way ECMP with 3 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 32.4 | 25.4 |  2.5 |
|      mask | 31.2 | 24.8 |  2.5 |
|       xor | 31.3 | 25.0 |  2.5 |
| crc-ccitt | 31.4 | 25.0 |  2.5 |
|       md4 | 37.0 | 29.3 |  2.9 |
|       md5 | 34.4 | 27.5 |  2.8 |
|      sha1 | 35.4 | 28.2 |  2.8 |
|    sha256 | 36.1 | 28.5 |  2.8 |
+-----------+------+------+------+

For 2048-way ECMP with 3 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.6 | 25.3 |  2.5 |
|      mask | 32.4 | 25.9 |  2.6 |
|       xor | 31.7 | 25.6 |  2.6 |
| crc-ccitt | 31.7 | 25.4 |  2.5 |
|       md4 | 32.7 | 26.1 |  2.6 |
|       md5 | 33.0 | 26.4 |  2.6 |
|      sha1 | 34.1 | 27.2 |  2.7 |
|    sha256 | 33.5 | 26.9 |  2.7 |
+-----------+------+------+------+

For 4096-way ECMP with 3 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.7 | 25.3 |  2.5 |
|      mask | 31.5 | 24.9 |  2.5 |
|       xor | 31.5 | 25.3 |  2.5 |
| crc-ccitt | 31.6 | 25.1 |  2.5 |
|       md4 | 32.9 | 26.2 |  2.6 |
|       md5 | 32.2 | 25.7 |  2.6 |
|      sha1 | 33.2 | 26.5 |  2.6 |
|    sha256 | 32.4 | 25.8 |  2.6 |
+-----------+------+------+------+

For 2-way ECMP with 4 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  19.0 |  19.0 |  1.9 |
|      mask |  46.0 |  46.0 |  4.6 |
|       xor |  10.0 |  10.0 |  1.0 |
| crc-ccitt |  10.0 |  10.0 |  1.0 |
|       md4 |  54.0 |  54.0 |  5.4 |
|       md5 | 237.0 | 237.0 | 23.7 |
|      sha1 |  74.0 |  74.0 |  7.4 |
|    sha256 | 284.0 | 284.0 | 28.4 |
+-----------+-------+-------+------+

For 4-way ECMP with 4 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  42.2 |  35.0 |  3.5 |
|      mask |  27.1 |  23.5 |  2.4 |
|       xor |  54.6 |  46.0 |  4.6 |
| crc-ccitt |  54.8 |  50.0 |  5.0 |
|       md4 | 199.2 | 180.0 | 18.0 |
|       md5 | 113.2 | 105.0 | 10.5 |
|      sha1 | 132.3 | 110.5 | 11.1 |
|    sha256 | 106.6 |  97.5 |  9.8 |
+-----------+-------+-------+------+

For 8-way ECMP with 4 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  23.0 |  19.2 |  1.9 |
|      mask |  29.4 |  23.5 |  2.4 |
|       xor |  16.0 |  13.5 |  1.4 |
| crc-ccitt |  25.4 |  20.2 |  2.0 |
|       md4 |  86.7 |  55.5 |  5.6 |
|       md5 | 144.4 | 127.5 | 12.8 |
|      sha1 | 141.1 | 110.0 | 11.0 |
|    sha256 |  90.5 |  82.8 |  8.3 |
+-----------+-------+-------+------+

For 16-way ECMP with 4 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  31.2 |  27.4 |  2.7 |
|      mask |  32.7 |  26.6 |  2.7 |
|       xor |  32.0 |  26.5 |  2.7 |
| crc-ccitt |  28.9 |  24.2 |  2.4 |
|       md4 | 132.7 | 106.1 | 10.6 |
|       md5 | 101.7 |  80.4 |  8.0 |
|      sha1 |  99.5 |  75.6 |  7.6 |
|    sha256 |  70.0 |  56.2 |  5.6 |
+-----------+-------+-------+------+

For 32-way ECMP with 4 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 28.7 | 22.5 |  2.3 |
|      mask | 32.7 | 28.6 |  2.9 |
|       xor | 26.9 | 21.3 |  2.1 |
| crc-ccitt | 25.4 | 20.9 |  2.1 |
|       md4 | 50.1 | 40.1 |  4.0 |
|       md5 | 79.1 | 61.1 |  6.1 |
|      sha1 | 75.3 | 65.1 |  6.5 |
|    sha256 | 92.5 | 76.0 |  7.6 |
+-----------+------+------+------+

For 64-way ECMP with 4 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 33.5 | 27.7 |  2.8 |
|      mask | 31.0 | 25.6 |  2.6 |
|       xor | 26.8 | 21.6 |  2.2 |
| crc-ccitt | 34.9 | 26.5 |  2.6 |
|       md4 | 60.3 | 46.9 |  4.7 |
|       md5 | 57.8 | 46.4 |  4.6 |
|      sha1 | 61.5 | 49.6 |  5.0 |
|    sha256 | 55.7 | 46.7 |  4.7 |
+-----------+------+------+------+

For 128-way ECMP with 4 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.9 | 25.5 |  2.6 |
|      mask | 33.0 | 26.2 |  2.6 |
|       xor | 32.8 | 25.7 |  2.6 |
| crc-ccitt | 31.3 | 24.8 |  2.5 |
|       md4 | 45.7 | 35.7 |  3.6 |
|       md5 | 44.8 | 36.0 |  3.6 |
|      sha1 | 44.7 | 37.1 |  3.7 |
|    sha256 | 44.4 | 36.0 |  3.6 |
+-----------+------+------+------+

For 256-way ECMP with 4 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 32.3 | 25.5 |  2.6 |
|      mask | 30.8 | 24.5 |  2.5 |
|       xor | 31.6 | 25.6 |  2.6 |
| crc-ccitt | 29.5 | 23.3 |  2.3 |
|       md4 | 38.0 | 30.3 |  3.0 |
|       md5 | 38.0 | 31.4 |  3.1 |
|      sha1 | 38.2 | 30.4 |  3.0 |
|    sha256 | 36.3 | 28.3 |  2.8 |
+-----------+------+------+------+

For 512-way ECMP with 4 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 30.2 | 24.3 |  2.4 |
|      mask | 31.7 | 25.6 |  2.6 |
|       xor | 29.5 | 23.5 |  2.3 |
| crc-ccitt | 29.9 | 24.0 |  2.4 |
|       md4 | 37.6 | 30.1 |  3.0 |
|       md5 | 35.4 | 27.9 |  2.8 |
|      sha1 | 36.2 | 29.1 |  2.9 |
|    sha256 | 35.4 | 27.8 |  2.8 |
+-----------+------+------+------+

For 1024-way ECMP with 4 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 32.1 | 25.7 |  2.6 |
|      mask | 31.5 | 25.3 |  2.5 |
|       xor | 33.0 | 26.5 |  2.6 |
| crc-ccitt | 31.8 | 25.1 |  2.5 |
|       md4 | 33.5 | 26.8 |  2.7 |
|       md5 | 33.6 | 26.7 |  2.7 |
|      sha1 | 33.2 | 26.5 |  2.6 |
|    sha256 | 33.5 | 26.5 |  2.6 |
+-----------+------+------+------+

For 2048-way ECMP with 4 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 32.2 | 25.9 |  2.6 |
|      mask | 32.5 | 25.7 |  2.6 |
|       xor | 32.3 | 25.9 |  2.6 |
| crc-ccitt | 31.4 | 25.1 |  2.5 |
|       md4 | 32.5 | 26.0 |  2.6 |
|       md5 | 32.5 | 25.9 |  2.6 |
|      sha1 | 33.1 | 26.5 |  2.6 |
|    sha256 | 32.3 | 25.7 |  2.6 |
+-----------+------+------+------+

For 4096-way ECMP with 4 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.4 | 25.1 |  2.5 |
|      mask | 31.6 | 25.2 |  2.5 |
|       xor | 31.4 | 24.9 |  2.5 |
| crc-ccitt | 32.0 | 25.6 |  2.6 |
|       md4 | 32.6 | 25.9 |  2.6 |
|       md5 | 32.5 | 26.0 |  2.6 |
|      sha1 | 31.8 | 25.3 |  2.5 |
|    sha256 | 32.3 | 25.8 |  2.6 |
+-----------+------+------+------+

For 2-way ECMP with 5 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  13.0 |  13.0 |  1.3 |
|      mask |  14.0 |  14.0 |  1.4 |
|       xor |  11.0 |  11.0 |  1.1 |
| crc-ccitt |  11.0 |  11.0 |  1.1 |
|       md4 | 374.0 | 374.0 | 37.4 |
|       md5 | 112.0 | 112.0 | 11.2 |
|      sha1 |  72.0 |  72.0 |  7.2 |
|    sha256 |   4.0 |   4.0 |  0.4 |
+-----------+-------+-------+------+

For 4-way ECMP with 5 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  12.4 |  10.5 |  1.1 |
|      mask |  40.2 |  38.0 |  3.8 |
|       xor |  24.1 |  23.5 |  2.4 |
| crc-ccitt |  15.3 |  12.5 |  1.2 |
|       md4 | 115.9 | 110.0 | 11.0 |
|       md5 | 123.6 | 109.0 | 10.9 |
|      sha1 | 119.1 | 116.0 | 11.6 |
|    sha256 | 203.2 | 161.5 | 16.2 |
+-----------+-------+-------+------+

For 8-way ECMP with 5 more bits of entropy:
+-----------+-------+-------+------+
|      Hash |  RMSE |   MAE | MAPE |
+-----------+-------+-------+------+
|       add |  20.0 |  16.5 |  1.7 |
|      mask |  35.3 |  30.0 |  3.0 |
|       xor |  22.5 |  20.2 |  2.0 |
| crc-ccitt |  30.9 |  25.8 |  2.6 |
|       md4 | 116.2 | 101.5 | 10.2 |
|       md5 |  47.7 |  39.8 |  4.0 |
|      sha1 |  70.3 |  61.8 |  6.2 |
|    sha256 | 112.3 | 103.0 | 10.3 |
+-----------+-------+-------+------+

For 16-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 27.3 | 21.4 |  2.1 |
|      mask | 25.4 | 22.9 |  2.3 |
|       xor | 28.6 | 23.4 |  2.3 |
| crc-ccitt | 25.4 | 22.0 |  2.2 |
|       md4 | 82.9 | 65.1 |  6.5 |
|       md5 | 82.1 | 67.8 |  6.8 |
|      sha1 | 76.0 | 64.5 |  6.5 |
|    sha256 | 68.9 | 57.4 |  5.7 |
+-----------+------+------+------+

For 32-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 28.5 | 23.8 |  2.4 |
|      mask | 39.0 | 29.8 |  3.0 |
|       xor | 30.2 | 23.9 |  2.4 |
| crc-ccitt | 30.5 | 25.8 |  2.6 |
|       md4 | 51.6 | 40.9 |  4.1 |
|       md5 | 46.1 | 35.8 |  3.6 |
|      sha1 | 64.7 | 51.9 |  5.2 |
|    sha256 | 49.5 | 41.7 |  4.2 |
+-----------+------+------+------+

For 64-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 36.1 | 26.4 |  2.6 |
|      mask | 36.7 | 29.4 |  2.9 |
|       xor | 37.6 | 28.0 |  2.8 |
| crc-ccitt | 34.1 | 27.9 |  2.8 |
|       md4 | 45.7 | 38.0 |  3.8 |
|       md5 | 48.8 | 41.0 |  4.1 |
|      sha1 | 44.7 | 35.4 |  3.5 |
|    sha256 | 39.0 | 32.6 |  3.3 |
+-----------+------+------+------+

For 128-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.0 | 25.0 |  2.5 |
|      mask | 30.7 | 24.7 |  2.5 |
|       xor | 29.9 | 25.0 |  2.5 |
| crc-ccitt | 31.7 | 26.5 |  2.6 |
|       md4 | 39.4 | 31.2 |  3.1 |
|       md5 | 35.3 | 28.7 |  2.9 |
|      sha1 | 39.2 | 31.6 |  3.2 |
|    sha256 | 35.8 | 28.2 |  2.8 |
+-----------+------+------+------+

For 256-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 30.2 | 24.3 |  2.4 |
|      mask | 32.2 | 26.2 |  2.6 |
|       xor | 29.8 | 24.0 |  2.4 |
| crc-ccitt | 31.3 | 25.4 |  2.5 |
|       md4 | 34.9 | 27.8 |  2.8 |
|       md5 | 32.2 | 25.6 |  2.6 |
|      sha1 | 34.7 | 27.7 |  2.8 |
|    sha256 | 34.4 | 27.6 |  2.8 |
+-----------+------+------+------+

For 512-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.0 | 24.7 |  2.5 |
|      mask | 31.8 | 25.2 |  2.5 |
|       xor | 31.9 | 25.0 |  2.5 |
| crc-ccitt | 32.1 | 25.1 |  2.5 |
|       md4 | 32.8 | 26.2 |  2.6 |
|       md5 | 32.6 | 26.1 |  2.6 |
|      sha1 | 32.7 | 26.1 |  2.6 |
|    sha256 | 33.4 | 26.2 |  2.6 |
+-----------+------+------+------+

For 1024-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 30.9 | 24.4 |  2.4 |
|      mask | 30.5 | 24.6 |  2.5 |
|       xor | 31.9 | 25.3 |  2.5 |
| crc-ccitt | 32.1 | 25.7 |  2.6 |
|       md4 | 32.6 | 26.1 |  2.6 |
|       md5 | 33.5 | 26.5 |  2.7 |
|      sha1 | 32.9 | 26.3 |  2.6 |
|    sha256 | 32.2 | 25.6 |  2.6 |
+-----------+------+------+------+

For 2048-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.4 | 25.1 |  2.5 |
|      mask | 32.0 | 25.2 |  2.5 |
|       xor | 31.7 | 25.4 |  2.5 |
| crc-ccitt | 31.5 | 25.3 |  2.5 |
|       md4 | 32.1 | 25.4 |  2.5 |
|       md5 | 31.8 | 25.4 |  2.5 |
|      sha1 | 31.7 | 25.2 |  2.5 |
|    sha256 | 32.5 | 25.9 |  2.6 |
+-----------+------+------+------+

For 4096-way ECMP with 5 more bits of entropy:
+-----------+------+------+------+
|      Hash | RMSE |  MAE | MAPE |
+-----------+------+------+------+
|       add | 31.9 | 25.7 |  2.6 |
|      mask | 32.0 | 25.7 |  2.6 |
|       xor | 32.2 | 25.7 |  2.6 |
| crc-ccitt | 32.2 | 25.5 |  2.6 |
|       md4 | 32.5 | 26.0 |  2.6 |
|       md5 | 32.2 | 25.5 |  2.6 |
|      sha1 | 31.9 | 25.5 |  2.5 |
|    sha256 | 32.2 | 25.7 |  2.6 |
+-----------+------+------+------+

Error per added bit
+------------+-------+-------+-------+
| Added bits | MRMSE |  MMAE | MMAPE |
+------------+-------+-------+-------+
|          0 | 168.3 | 148.1 |  14.8 |
|          1 | 113.9 |  98.4 |   9.8 |
|          2 |  75.7 |  62.9 |   6.3 |
|          3 |  60.3 |  51.2 |   5.1 |
|          4 |  51.5 |  43.6 |   4.4 |
|          5 |  45.4 |  38.7 |   3.9 |
+------------+-------+-------+-------+

Error per algorithm
+-----------+-------+-------+-------+
| Algorithm | MRMSE |  MMAE | MMAPE |
+-----------+-------+-------+-------+
|       add |  50.7 |  43.9 |   4.4 |
|      mask |  35.1 |  29.9 |   3.0 |
|       xor |  53.6 |  48.0 |   4.8 |
| crc-ccitt |  48.1 |  42.7 |   4.3 |
|       md4 | 137.9 | 119.9 |  12.0 |
|       md5 | 127.7 | 108.2 |  10.8 |
|      sha1 | 111.8 |  94.5 |   9.4 |
|    sha256 | 122.0 | 103.5 |  10.3 |
+-----------+-------+-------+-------+
]]></artwork></figure>

</section>


  </back>

<!-- ##markdown-source:
H4sIANjrcmIAA+19+3MbR5Lm7/1X1ITCJ9ImYfQTgOI0dzpZntGF5VFI2p2J
8OoUTaBJ9hpAw92AKI7H/ts3n9WvahCUtA7MnBXjaRKorkd+WVmZX2UVz8/P
vXmxyNdXj8xue3k+9bb5dpk9Ms/W27LY3Jp/T5e7rPLSi4sye9/7eFHM1+kK
ii/K9HJ7vszPV5tldZ5xqfPx2LuBil+8/O61+WtR/gjNmD+VxW7jzdNtdlWU
t49Mvr4svGp3scqrKi/W29sNVPf82ZtvvXxTPjLbcldtg/F4Ng48L91tr4vy
kWfMOfxH//J19ci8GZnvcv2EO/SmWN82PixK6Mf/3a3zTVaa77PtDfSm0i+z
VZovoSl4ZbTM/7c8Pe/8/NykF9W2TOdbz3v20y5dmqdFtTUvdsttfv4y3V6b
k2dPX7w8NZdFeZOWKEeTVyZdm6yqQAo5vHG5W8+3MDLoqrfIobb8YrfFglDv
5WU+N+m8LKrKbNIyXS6zJfywva5G5mU6/zHbVuYm317na5Oay2VxY1YgDu8i
Mz9mm60p8OMK6lpm9BYMwaTvi3xhyqwoF1kJX52Zm+scvl/kl5dZCX2ieioP
KzIX+Ll0KVvUPYEOUF3z6zx7n9mu5dVq5HkvQRPyYlctb88Y2usUhrxYlDjm
hYHewsvXAPMVdOg6M7sqM8UlCYX1wlumF9nyzGzK4n1OMtttsLlgbC5yGDEU
lpLwfro1c3gVegpNYPUFVspVmGoLQsKPcBRQ0S6vrrsjHZmff/7Dq2+fJpPZ
+JdfzF/zLXXLy9dbKAVCAOHSMEQtzBOCqzrDUiU0C/9BTzdFlS5JKl62usgW
1G/tJtQF0lpChWtQbOhWuZtvd1D7makKk29FKdINVlTmUAbm2SrD2ubQVA5Q
mWtENwWtJRlU18VuucBh71CooF+Nxqj/lztsAUf3v56ffzO6KOZzmX6rPF2c
p4v8vMx+2uVltoI3q19+kYLpGlqrqmIthdfp+eXNj7/84nnP1wwezOodvgOq
k5nsQ7rK1xkh+RPMeVJlQAi7C91nDBEcaAvHVSPHGoAKCg2hUIo5aMoWNB4+
2S1TrGlk3mCL8L91gUhsM+jdwoOKEXAQzmpTZtcZiAjUEHoO3dnKb9sygyqq
7MyA8poyRbRsa4Due+zrFbWCHb3Y5SBPaGGXy2xkTYK2KxjWiKf7Kl8s4G3v
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

-->

</rfc>

